KR20190078179A - 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체 - Google Patents

정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체 Download PDF

Info

Publication number
KR20190078179A
KR20190078179A KR1020170179950A KR20170179950A KR20190078179A KR 20190078179 A KR20190078179 A KR 20190078179A KR 1020170179950 A KR1020170179950 A KR 1020170179950A KR 20170179950 A KR20170179950 A KR 20170179950A KR 20190078179 A KR20190078179 A KR 20190078179A
Authority
KR
South Korea
Prior art keywords
function
code index
funpa
unit
funce
Prior art date
Application number
KR1020170179950A
Other languages
English (en)
Other versions
KR102092250B1 (ko
Inventor
배현섭
김준
오승욱
권민혁
Original Assignee
슈어소프트테크주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 슈어소프트테크주식회사 filed Critical 슈어소프트테크주식회사
Priority to KR1020170179950A priority Critical patent/KR102092250B1/ko
Priority to US15/901,786 priority patent/US10621073B2/en
Publication of KR20190078179A publication Critical patent/KR20190078179A/ko
Application granted granted Critical
Publication of KR102092250B1 publication Critical patent/KR102092250B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체에 관한 것으로, 보다 구체적으로는 정적 분석 결과를 이용하여 소프트웨어 테스트를 신속하게 수행할 수 있고, 원하는 품질 목표에 신속히 도달할 수 있는 소프트웨어 테스트 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체에 관한 것이다.
실시 형태에 따른 소프트웨어 테스트 방법은, 소프트웨어의 소스 코드를 정적 분석하여 소스 코드 정보들을 추출하는, 정적 분석 단계; 추출된 상기 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는, 추출 단계; 및 추출된 상기 유닛별 코드 지표를 기초로 하여, 각 유닛의 테스팅 노력(testing effort)을 평가하는, 평가 단계;를 포함한다.

Description

정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체{METHOD AND APPARATUS FOR TESTING SOFTWARE USING REPORT OF STATIC ANALYSIS AND COMPUTER READABLE RECORDING MEDIUM HAVING PROGRAM PERFORMING THE SAME}
본 발명은 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체에 관한 것으로, 보다 구체적으로는 정적 분석 결과를 이용하여 소프트웨어 테스트를 신속하게 수행할 수 있고, 원하는 품질 목표에 신속히 도달할 수 있는 소프트웨어 테스트 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체에 관한 것이다.
컴퓨터나 온라인 상에서만 접하던 소프트웨어(SW)가 최근에는 다양한 기기에 탑재되어 일상 생활과 산업 현장에 편리함을 더해주고 있다. 그에 따라 시장에 배포되기 전에 SW를 충분히 시험(test)해서 오류를 잡아야 할 필요성은 점차 증가하고 있다. 특히, 자동차나 철도, 항공기의 경우 운행 중에 장애가 발생할 경우 인명피해를 입을 수도 있다.
SW를 테스트하는 다양한 소프트웨어 분석 도구들이 존재한다. 예를 들어, SW 소스코드를 그대로 분석하여 SW 소스코드에 잠재되어 있는 오류를 찾아내는 정적 분석(또는 정적 프로그램 분석) 도구, 개발된 SW를 실제로 동작시키면서 발생하는 오류를 찾아내는 동적 분석(또는 동적 프로그램 분석) 도구가 대표적이다. 또한, 코드 커버리지를 측정할 수 있는 코드 커버리지 측정 도구도 존재한다.
소프트웨어를 테스트하는 방법들 중 유닛 테스트가 있다. 유닛 테스트는 소프트웨어의 각각의 구성 요소를 유닛으로 보고, 상기 유닛의 동작 특성을 테스트하는 것이다. 여기서, 유닛의 정의는 소프트웨어 규모에 따라 모호하기 때문에 일반적으로 함수나 프로시져를 유닛으로 하거나 파일 하나를 유닛으로 하기도 한다.
함수를 유닛으로 정의하고 테스트 수행을 돕는 기존의 소프트웨어 테스트 도구들은 수 많은 유닛들 중에 어떤 유닛을 먼저 테스트해야 더 좋은 품질의 테스트를 진행할 수 있을지 여러가지 고민을 하게 된다. 가장 일반적인 방법은 특별한 추천 없이 사용자에게 소정의 지표들만 제공하고 사용자가 스스로 선택하게 하는 것이다. 그러나 이러한 일반적인 방법은 유닛이 많고 서로 연관관계가 복잡한 경우에 효율적이지 못하다.
본 발명은 전술한 문제점을 해결하기 위해 도출된 것으로, 유닛 테스트를 수행해야 하는 여러 유닛들 중에서 어떤 유닛을 우선적으로 유닛 테스트를 해야 하는지를 객관적이고 합리적으로 결정할 수 있는, 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체를 제공한다.
또한, 테스터가 원하는 소프트웨어 품질 목표(software quality objective)에 신속하게 도달할 수 있는, 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체를 제공한다.
실시 형태에 따른 소프트웨어 테스트 방법은, 소프트웨어의 소스 코드를 정적 분석하여 소스 코드 정보들을 추출하는, 정적 분석 단계; 추출된 상기 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는, 추출 단계; 및 추출된 상기 유닛별 코드 지표를 기초로 하여, 각 유닛의 테스팅 노력(testing effort)을 평가하는, 평가 단계;를 포함한다.
다른 실시 형태에 따른 컴퓨터 판독 가능한 기록 매체는 전술한 방법을 실행하기 위한 컴퓨터 프로그램을 기록할 수 있다.
또 다른 실시 형태에 따른 소프트웨어 테스트 장치는, 소프트웨어의 소스 코드를 정적 분석하여 소스 코드 정보들을 추출하는, 정적 분석 모듈; 상기 정적 분석 모듈에서 추출된 상기 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는, 코드 지표 추출 모듈; 및 상기 코드 지표 추출 모듈에서 추출된 상기 유닛별 코드 지표를 기초로 하여, 각 유닛의 테스팅 노력(testing effort)을 점수화하는, 점수화 모듈;을 포함한다.
본 발명에 따르면, 함수 단위 유닛 테스트 시에 테스트해야 하는 유닛을 합리적으로 선택할 수 있고, 원하는 소프트웨어 품질 목표에 신속하게 도달할 수 있는 이점이 있다.
또한, 유닛 간의 테스트 우선순위를 객관적으로 매겨 유닛 테스트의 기능 향상을 도울 수 있는 이점이 있다.
또한, 소프트웨어 테스트 생산성을 향상시킬 수 있는 이점이 있다.
도 1인 본 발명의 실시 형태에 따른 정적 분석 결과를 이용한 소프트웨어 테스트 방법을 설명하기 위한 순서도이다.
도 2는 함수별 테스팅 노력을 설명하기 위한 예제들(testme1, testme2)이다.
도 3은 함수별 테스팅 노력을 설명하기 위한 예제(testme3)이다.
도 4는 본 발명의 실시 형태에 따른 소프트웨어 테스트 장치를 설명하기 위한 블록도이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시 형태를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시 형태는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시 형태는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시 형태에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시 형태로 구현될 수 있다. 또한, 각각의 개시된 실시 형태 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 첨부되는 도면을 참조하여 본 발명의 실시 형태에 따른 정적 분석 결과를 이용한 소프트웨어 테스트 방법에 대해 기술하고자 한다.
도 1인 본 발명의 실시 형태에 따른 정적 분석 결과를 이용한 소프트웨어 테스트 방법을 설명하기 위한 순서도이다.
도 1을 참조하면, 본 발명의 실시 형태에 따른 정적 분석 결과를 이용한 소프트웨어 테스트 방법은, 테스트 대상인 소프트웨어의 소스 코드를 정적 분석하는 단계(110), 유닛별 코드 지표를 추출하는 단계(130), 유닛별 테스팅 노력(testing effort)을 평가하는 단계(150)를 포함할 수 있다.
소프트웨어의 소스 코드를 정적 분석하는 단계(110)는, 테스트 대상인 소프트웨어의 소스 코드를 정적 분석하는 단계이다. 정적 분석은 소프트웨어를 실제로 실행가능한 형태로 만들지 않고, 소스 코드를 훑는 방식으로서, 소스 코드로부터 소정의 소스 코드 정보들을 추출한다.
유닛별 코드 지표를 추출하는 단계(130)는, 110 단계에서 추출된 소정의 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는 단계이다. 추출되는 유닛별 코드 지표는 코드 지표를 측정하는 다양한 정적 분석 도구들에서 계산하는 방법을 따를 수 있다.
유닛은 소프트웨어 규모에 따라 함수, 프로시져 및 파일 중 어느 하나일 수 있다. 이하에서는 설명의 편의 상 함수가 유닛을 구성하는 것으로 예정하여 설명한다.
예를 들어, 추출되는 함수별 코드 지표를 ()를 사용하여 축약형을 부여하면 아래의 <표 1>과 같을 수 있다.
코드 지표 설명
(FUMNC) 함수 내의 제어문의 최대 중첩 개수 (Maximum Nesting Depth of Control Structure)
(FUNPA) 함수의 형식 인자 개수 (Number of Parameters)
(FUNCE) 함수가 호출하는 함수 개수 (Number of Callees)
(FUNST) 함수 내의 문장 개수(Number of Statements) - block, empty statement, declaration, label을 제외한 모든 statement의 수
(FUCYC) 함수 복잡도 (Cyclomatic Complexity)
(FUMCYC) 수정된 함수 복잡도 (Modified Cyclomatic Complexity)
(FUNCR) 함수를 호출하는 외부 함수 개수 (Number of Callers)
유닛별 테스팅 노력(testing effort)을 평가하는 단계(150)는, 130 단계에서 유닛별 코드 지표가 추출되면, 각 유닛의 테스팅 노력을 평가한다. 여기서, 유닛별 테스팅 노력(testing effort)은 추출된 유닛별 코드 지표를 미리 설정된 소정의 테스팅 노력식에 대입하여 얻은 점수(또는 값)로 평가될 수 있다. 아래의 예는 함수가 유닛을 구성하는 예이다.
예를 들어, 소정의 테스팅 노력식은 아래의 <수학식 1>일 수 있다.
Figure pat00001
상기 <수학식 1>에서, (∑FUNPA)는 전체 함수들의 (FUNPA)의 합이다.
상기 <수학식 1>에서, "((FUNPA) * (FUNCE) * (FUMNC))"은 함수의 형식 인자 개수가 많고, 함수 내부에서 호출하는 함수가 많으면서, 함수 내부의 조립구조가 복잡한 경우를 고려한 것으로서, 테스터는 형식 인자들에 적절한 값을 찾는 것과 의존 함수들에 스텁화도 고려해야 하므로, "((FUNPA) * (FUNCE) * (FUMNC))" 값(또는 점수)이 클수록 테스팅 노력이 많이 드는 것으로 평가될 수 있다.
예를 들어, 도 2에 도시된 2개의 예제(testme1은 testme2)에서, testme1의 (FUNPA)는 2, (FUNCE)는 2, (FUMNC)는 3이다. 한편, testme2의 (FUNPA)는 2, (FUNCE)는 1, (FUMNC)는 2이다. testme1의 ((FUNPA) * (FUNCE) * (FUMNC))은 12이고, testme2의 ((FUNPA) * (FUNCE) * (FUMNC))은 4이므로, testme1은 testme2 보다 테스팅 노력이 많이 든다.
상기 <수학식 1>에서, "(FUNPA + 1)"은 (FUNPA)가 0인 경우를 고려한 것이다. 즉, "(FUNPA + 1)" 은 (FUNPA)가 0일 때의 곱하기에 대한 가드 역할을 한다.
예를 들어, 도 3에 도시된 예제에서, (FUNPA)는 0이다. (FUNPA)가 0이면, 다른 값이 크더라도, <수학식 1>의 테스팅 노력식의 점수가 현저하게 작아진다. 따라서, <수학식 1>의 테스팅 노력식의 점수를 어느정도 수준으로 값을 올려주기 위해서, (FUNPA)에 '1'과 같은 소정의 값을 더해주는 것이다. 여기서, 1인 아닌 다른 값을 (FUNPA)에 더할 수도 있다.
상기 <수학식 1>에서, "((FUNPA + 1) * ∑FUNPA) + FUNCE"은 (FUNPA)와 (FUNCE) 사이에서는 (FUNPA)가 (FUNCE)보다 더 큰 것이 더 많은 테스팅 노력을 요구한다.
상기 <수학식 1>에서, (∑FUNPA)은 가중치로서 이용되며, 이 값은 다양한 소스 코드를 대상으로 실험을 통해 찾아낸 것이거나 미리 설정된 값일 수 있다.
상기 <수학식 1> 이외에 함수가 요구하는 테스팅 노력식은 아래의 <수학식 2> 내지 <수학식 4>로 대체될 수도 있다.
Figure pat00002
Figure pat00003
상기 <수학식 3>은 함수의 테스팅 유연성을 판단하는데 이용될 수 있다. 함수의 테스팅 유연성은 입력 인자로 사용할 수 있는 변수나 함수 등이 많은 경우 유리하다.
Figure pat00004
상기 <수학식 4>에서, w1, w2, w3는 미리 설정된 가중치 값으로서, 모두 같은 값을 가질 수도 있고, 서로 다른 값을 가질 수도 있다.
상기 <수학식 1> 내지 <수학식 4>를 통해 얻은 함수별 테스팅 노력의 점수(또는 값)를 정적(Static) 메트릭과 조합하거나, 정렬하는 방법으로 사용자는 자신의 원하는 목적에 맞는 함수별 테스트 순위를 평가할 수 있다.
또한, 상기 <수학식 1> 내지 <수학식 4>를 통해 얻은 함수별 테스팅 노력의 점수(또는 값)를 이용하여 다음의 예들과 같은 목표 함수를 찾는데 도움이 될 수 있다. 테스트 노력이 적게드는 함수, 테스트가 잘 되면 다른 테스트 시에 드는 노력이 최소화 되는 함수, 자주 사용되는 함수, 테스트를 수행할 필요가 없는 함수, 유닛 테스트 관점에서 다루기 쉬운 함수, 복합적으로 자주 사용되는 함수 중 테스트 노력이 적게 드는 함수, 유닛 테스트 관점에서 다루기 쉬운 함수 중 테스트 수행시 커버리지가 가장 높은 함수를 예로 들 수 있다.
이상의 설명은 함수가 유닛을 구성하는 것을 예정하였으나, 프로시져 또는 파일이 유닛을 구성할 수 있다.
본 발명의 실시 형태에 따른 소프트웨어 테스트 방법은, 정적 분석 결과를 이용하여 유닛 테스트에서 우선적으로 테스트를 해야 하는 유닛을 사용자의 주관적인 기준이 아니라, 수치화된 객관적인 기준으로 합리적으로 선택 또는 결정할 수 있다. 이와 같이, 유닛 테스트 시에 우선적으로 테스트해야 하는 유닛을 객관적이고 합리적으로 선택하면, 빠르게 소프트웨어 품질 목표(software quality objective)에 도달할 수 있다.
또한, 본 발명의 실시 형태에 따른 소프트웨어 테스트 방법은 어떤 소스 코드 지표를 이용해야 유닛 간의 순위를 매길수 있는지를 보여줌으로서 유닛 테스트를 돕는 소프트웨어의 기능 향상을 도울 수 있으며, 일반 사용자의 테스트 생산성에 도움이 될 수 있다.
이상에서 설명된 실시 형태에 따른 소프트웨어 테스트 방법은 다양한 컴퓨터 구성요소를 통하여 실행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터로 판독가능한 기록매체에 기록될 수 있다. 상기 컴퓨터로 판독가능한 기록매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
상기 컴퓨터로 판독가능한 기록매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터로 판독가능한 기록매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 실행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 실행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
도 4는 본 발명의 실시 형태에 따른 소프트웨어 테스트 장치의 블록도이다.
도 4를 참조하면, 본 발명의 실시 형태에 따른 소프트웨어 테스트 장치(400)는, 정적 분석 모듈(410), 코드 지표 추출 모듈(430) 및 점수화 모듈(450)을 포함할 수 있다.
정적 분석 모듈(410)은 테스트 대상인 소프트웨어의 소스 코드(50)를 입력받는다. 정적 분석 모듈(410)은 입력된 소스 코드(50)를 정적 분석한다. 정적 분석 모듈(410)은 소스 코드(50)를 정적 분석하여 소정의 소스 코드 정보들을 추출한다.
코드 지표 추출 모듈(430)은 정적 분석 모듈(410)에서 분석된 소스 코드 정보들 중에서 유닛별 코드 지표를 추출한다. 함수가 유닛을 구성할 경우에 추출되는 함수별 코드 지표는 위 <표 1>에 기재된 것일 수 있다.
점수화 모듈(450)는 코드 지표 추출 모듈(430)에서 추출된 유닛별 코드 지표로부터 각 유닛의 테스팅 노력(testing effort)을 점수화한다. 각 유닛의 테스팅 노력 점수는 코드 지표 추출 모듈(430)에서 추출된 유닛별 코드 지표를 소정의 테스팅 노력식에 대입하여 얻을 수 있다. 여기서, 소정의 테스팅 노력식은, 앞서 설명한 <수학식 1> 내지 <수학식 4> 중 어느 하나일 수 있다.
도 4에 도시된 본 발명의 실시 형태에 따른 소프트웨어 테스트 장치(400)는, 정적 분석 모듈에서 분석된 정보들을 이용하여 유닛 테스트에서 우선적으로 테스트를 해야 하는 유닛을 사용자의 주관적인 기준이 아니라, 수치화된 객관적인 기준으로 합리적으로 선택 또는 결정할 수 있다. 이와 같이, 유닛 테스트 시에 우선적으로 테스트해야 하는 유닛을 객관적이고 합리적으로 선택하면, 빠르게 소프트웨어 품질 목표(software quality objective)에 도달할 수 있다.
또한, 본 발명의 실시 형태에 따른 소프트웨어 테스트 장치는 어떤 소스 코드 지표를 이용해야 유닛 간의 순위를 매길수 있는지를 보여줌으로서 유닛 테스트를 돕는 소프트웨어의 기능 향상을 도울 수 있으며, 일반 사용자의 테스트 생산성에 도움이 될 수 있다.
본 발명의 실시 형태들은 전체적으로 하드웨어, 전체적으로 소프트웨어 (펌웨어, 상주 소프트웨어, 마이크로 코드 등을 포함 함) 또는 컴퓨터 판독 가능 프로그램 코드가 구현된 하나 이상의 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
이상에서 실시 형태를 중심으로 설명하였으나 이는 단지 예시일 뿐 본 발명을 한정하는 것이 아니며, 본 발명이 속하는 분야의 통상의 지식을 가진 자라면 본 실시 형태의 본질적인 특성을 벗어나지 않는 범위에서 이상에 예시되지 않은 여러 가지의 변형과 응용이 가능함을 알 수 있을 것이다. 예를 들어, 실시 형태에 구체적으로 나타난 각 구성 요소는 변형하여 실시할 수 있는 것이다. 그리고 이러한 변형과 응용에 관계된 차이점들은 첨부된 청구 범위에서 규정하는 본 발명의 범위에 포함되는 것으로 해석되어야 할 것이다.
400: 소프트웨어 테스트 장치
410: 정적 분석 모듈
430: 코드 지표 추출 모듈
450: 점수화 모듈

Claims (13)

  1. 소프트웨어의 소스 코드를 정적 분석하여 소스 코드 정보들을 추출하는, 정적 분석 단계;
    추출된 상기 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는, 추출 단계; 및
    추출된 상기 유닛별 코드 지표를 기초로 하여, 각 유닛의 테스팅 노력(testing effort)을 평가하는, 평가 단계;
    을 포함하는, 소프트웨어 테스트 방법.
  2. 제 1 항에 있어서,
    상기 추출 단계에서 추출되는 상기 유닛별 코드 지표는, 함수별 코드 지표이고,
    상기 함수별 코드 지표는, 함수 내의 제어문의 최대 중첩 개수(FUMNC), 함수의 형식 인자 개수(FUNPA), 함수가 호출하는 함수 개수(FUNCE), 함수 내의 문장 개수(FUNST), 함수 복잡도(FUCYC), 수정된 함수 복잡도(FUMCYC), 함수를 호출하는 외부 함수 개수(FUNCR) 중 하나 이상을 포함하는, 소프트웨어 테스트 방법.
  3. 제 2 항에 있어서,
    상기 평가 단계는, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 방법.
    <수학식>
    ((FUNPA) * (FUNCE) * (FUMNC)) + (((FUNPA + 1) * ∑FUNPA) + FUNCE)
  4. 제 2 항에 있어서,
    상기 평가 단계는, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 방법.
    <수학식>
    ((FUNPA+1) * (FUNCE+1) * (FUMNC+1))
  5. 제 2 항에 있어서,
    상기 평가 단계는, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 방법.
    <수학식>
    ((FUNPA+1) * (FUNCE+1))
  6. 제 2 항에 있어서,
    상기 평가 단계는, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 방법.
    <수학식>
    ((FUNPA+1)*w1 + (FUNCE+1)*w2 + (FUMNC+1)*w3), 단 w1, w2, w3는 미리 설정된 가중치 값임.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 따른 소프트웨어 테스트 방법을 실행하기 위한 컴퓨터 프로그램을 기록하기 위한 컴퓨터 판독 가능한 기록 매체.
  8. 소프트웨어의 소스 코드를 정적 분석하여 소스 코드 정보들을 추출하는, 정적 분석 모듈;
    상기 정적 분석 모듈에서 추출된 상기 소스 코드 정보들 중에서 유닛별 코드 지표를 추출하는, 코드 지표 추출 모듈; 및
    상기 코드 지표 추출 모듈에서 추출된 상기 유닛별 코드 지표를 기초로 하여, 각 유닛의 테스팅 노력(testing effort)을 점수화하는, 점수화 모듈;
    을 포함하는, 소프트웨어 테스트 장치.
  9. 제 8 항에 있어서,
    상기 유닛별 코드 지표는, 함수별 코드 지표이고,
    상기 함수별 코드 지표는, 함수 내의 제어문의 최대 중첩 개수(FUMNC), 함수의 형식 인자 개수(FUNPA), 함수가 호출하는 함수 개수(FUNCE), 함수 내의 문장 개수(FUNST), 함수 복잡도(FUCYC), 수정된 함수 복잡도(FUMCYC), 함수를 호출하는 외부 함수 개수(FUNCR) 중 하나 이상을 포함하는, 소프트웨어 테스트 장치.
  10. 제 9 항에 있어서,
    상기 점수화 모듈은, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 장치.
    <수학식>
    ((FUNPA) * (FUNCE) * (FUMNC)) + (((FUNPA + 1) * ∑FUNPA) + FUNCE)
  11. 제 9 항에 있어서,
    상기 점수화 모듈은, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 장치.
    <수학식>
    ((FUNPA+1) * (FUNCE+1) * (FUMNC+1))
  12. 제 9 항에 있어서,
    상기 점수화 모듈은, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 장치.
    <수학식>
    ((FUNPA+1) * (FUNCE+1))
  13. 제 9 항에 있어서,
    상기 점수화 모듈은, 상기 함수별 코드 지표를 하기 <수학식>에 대입하여 상기 테스팅 노력의 점수를 연산하는, 소프트웨어 테스트 장치.
    <수학식>
    ((FUNPA+1)*w1 + (FUNCE+1)*w2 + (FUMNC+1)*w3), 단 w1, w2, w3는 미리 설정된 가중치 값임.
KR1020170179950A 2017-12-26 2017-12-26 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체 KR102092250B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170179950A KR102092250B1 (ko) 2017-12-26 2017-12-26 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체
US15/901,786 US10621073B2 (en) 2017-12-26 2018-02-21 Method and apparatus for testing software by using static analysis results and computer readable recording medium having program for performing the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170179950A KR102092250B1 (ko) 2017-12-26 2017-12-26 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체

Publications (2)

Publication Number Publication Date
KR20190078179A true KR20190078179A (ko) 2019-07-04
KR102092250B1 KR102092250B1 (ko) 2020-03-24

Family

ID=66951194

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170179950A KR102092250B1 (ko) 2017-12-26 2017-12-26 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체

Country Status (2)

Country Link
US (1) US10621073B2 (ko)
KR (1) KR102092250B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021230394A1 (ko) 2020-05-13 2021-11-18 한국시험인증원 주식회사 소프트웨어 개발 및 테스트 자동화 프레임워크

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080115114A1 (en) * 2006-11-10 2008-05-15 Sashank Palaparthi Automated software unit testing
KR20080068385A (ko) * 2007-01-19 2008-07-23 슈어소프트테크주식회사 소프트웨어 테스트 시스템, 방법 및 그 방법을 실행하기위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
US20110258602A1 (en) * 2010-04-20 2011-10-20 Guy Collins Ndem Method for estimating testing efforts for software unit testing

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6895577B1 (en) * 1999-05-13 2005-05-17 Compuware Corporation Risk metric for testing software
US9612943B2 (en) * 2013-06-28 2017-04-04 Synopsys, Inc. Prioritization of tests of computer program code
US9880924B2 (en) * 2015-02-24 2018-01-30 Red Hat, Inc. Source code unit testing using an indexing tool
US9569341B1 (en) * 2016-05-25 2017-02-14 Semmle Limited Function execution prioritization

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080115114A1 (en) * 2006-11-10 2008-05-15 Sashank Palaparthi Automated software unit testing
KR20080068385A (ko) * 2007-01-19 2008-07-23 슈어소프트테크주식회사 소프트웨어 테스트 시스템, 방법 및 그 방법을 실행하기위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
US20110258602A1 (en) * 2010-04-20 2011-10-20 Guy Collins Ndem Method for estimating testing efforts for software unit testing

Also Published As

Publication number Publication date
KR102092250B1 (ko) 2020-03-24
US10621073B2 (en) 2020-04-14
US20190196942A1 (en) 2019-06-27

Similar Documents

Publication Publication Date Title
US10586053B2 (en) Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
Matsunaga How to Factor-Analyze Your Data Right: Do's, Don'ts, and How-To's.
US10552302B2 (en) System and method for analyzing risks present in a software program code
US8397104B2 (en) Creation of test plans
Zhang et al. Non-parametric statistical fault localization
US20070067261A1 (en) System and a method for identifying a selection of index candidates for a database
US8930293B2 (en) Prediction apparatus, prediction method, and recording medium
US20050081104A1 (en) Test diversity software testing method and apparatus
Falessi et al. Towards an open-source tool for measuring and visualizing the interest of technical debt
CN110515826A (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
Meananeatra et al. Using software metrics to select refactoring for long method bad smell
Sae-Lim et al. An investigative study on how developers filter and prioritize code smells
Berry et al. Panel: context-dependent evaluation of tools for NL RE tasks: recall vs. precision, and beyond
KR20190078179A (ko) 정적 분석 결과를 이용한 소프트웨어 테스트 방법과 장치 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체
JP6416588B2 (ja) ソースコード検証システム
Velasco-Elizondo et al. Towards detecting MVC architectural smells
Magalhães et al. Evaluating an automatic text-based test case selection using a non-instrumented code coverage analysis
KR102461180B1 (ko) 소프트웨어 안전성 분석 방법 및 장치
Gradišnik et al. Adapting God Class thresholds for software defect prediction: A case study
KR102007719B1 (ko) 소프트웨어 통합 품질 평가 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체
Chamoli et al. Analysing software metrics for accurate dynamic defect prediction models
Tagharobi et al. Introducing a Framework for Code based Fairness Audits of Learning Analytics Systems on the Example of Moodle Learning Analytics.
Yan et al. Revisiting the correlation between alerts and software defects: A case study on myfaces, camel, and cxf
CN110309054B (zh) 代码有效性测试方法、计算设备及存储介质
Fucci et al. Conformance factor in test-driven development: initial results from an enhanced replication

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant