KR20190128457A - 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치 - Google Patents

대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치 Download PDF

Info

Publication number
KR20190128457A
KR20190128457A KR1020180052680A KR20180052680A KR20190128457A KR 20190128457 A KR20190128457 A KR 20190128457A KR 1020180052680 A KR1020180052680 A KR 1020180052680A KR 20180052680 A KR20180052680 A KR 20180052680A KR 20190128457 A KR20190128457 A KR 20190128457A
Authority
KR
South Korea
Prior art keywords
function
target
target function
test
call
Prior art date
Application number
KR1020180052680A
Other languages
English (en)
Other versions
KR102114547B1 (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 KR1020180052680A priority Critical patent/KR102114547B1/ko
Publication of KR20190128457A publication Critical patent/KR20190128457A/ko
Application granted granted Critical
Publication of KR102114547B1 publication Critical patent/KR102114547B1/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/3604Software analysis for verifying properties of programs

Landscapes

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

Abstract

일 실시예에 따른 대상 함수를 테스트하는 방법 및 장치는 대상 프로그램에 대한 프로그램 정보에 기초하여 함수 호출 프로파일들을 획득하고, 함수 호출 프로파일들에 기초한 함수 관련성에 따라 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정하고, 관련 함수들 중 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정하고, 관련 함수들 중 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 입력 인자들을 필터링하며, 필터링된 입력 인자들에 기초하여 대상 함수를 테스트한다.

Description

대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치{TESTING METHOD AND APPARATUS OF TARGET FUNCTION INCLUEDE IN TARGET PROGRAM}
아래의 실시예들은 대상 프로그램에 포함된 대상 함수를 런타임 시에 자동으로 테스트하는 방법 및 장치에 관한 것이다.
현대 사회에서 다양한 분야에서 소프트웨어가 사용됨에 따라 소프트웨어의 오류(즉, 버그(bugs))를 검출하는 비용 문제 및 소프트웨어 테스트의 중요성이 증가하고 있다. 소프트웨어의 오류를 검출하는 데에는 예를 들어, 대상 프로그램에서 실행되는 다양한 함수들에 대한 테스트를 유닛(unit) 별로 수행하는 유닛 테스트가 효과적일 수 있다. 다만, 유닛 테스트를 실행하는 경우 현장 엔지니어는 수동으로 테스트 드라이버(test driver) 및/또는 스텁(stubs)을 생성하여 각 유닛에 대한 입력을 직접 테스트해야 하는 부담이 존재한다. 현장 엔지니어의 부담을 해소하기 위해 자동화된 유닛 테스트가 개발되고 있다. 하지만, 자동화된 유닛 테스트 시에는 시스템 레벨에서 실행 불가능한 유닛에 의해 야기되는 많은 거짓 경고들(false alarms)이 발생할 수 있다. 거짓 경고들은 실제 자동화된 유닛 테스트의 수행 시에 심각한 장애로 작용할 수 있다.
일 실시예에 따르면, 자동화된 유닛 테스트를 통해 대상 함수의 유닛 테스트 입력이 자동으로 진행되도록 할 수 있다.
일 실시예에 따르면, 자동 생성된 유닛 테스트 드라이버(unit test driver) 및/또는 스텁(stubs)에서 거짓 경고(false alarms)의 발생 가능성을 낮출 수 있다.
일 실시예에 따르면, 대상 함수의 심볼 유닛의 실행에 대응하는 실행 가능성을 체크함으로써 거짓 경고를 필터링할 수 있다.
일 실시예에 따르면, 대상 함수에 대한 현실적인 문맥(예를 들어, 대상 함수와 밀접한 관련이 있는 관련 함수)를 사용하여 대상 함수에 대한 컨커릭 테스트(concolic test)를 실행함으로써 대상 함수의 다양하고 사실적인 실행을 가능하게 하는 한편, 대상 함수의 심볼릭 호출 문맥(symbolic calling context)을 사용하여 거짓 경고를 정확하게 필터링할 수 있다.
일 실시예에 따르면, 대상 프로그램에 포함된 대상 함수의 버그를 정확하고, 효율적으로 검출할 수 있다.
일 실시예에 따르면, 함수 종속 메트릭(function dependency metric)에 의해 측정된 함수의 관련성에 기초하여 명시적으로 대상 함수의 문맥을 구축하고 활용할 수 있다.
일 실시예에 따르면, 함수 종속 메트릭에 의해 측정된 함수의 관련성 및 심볼릭 호출 문맥을 생성하고, 유닛 별 위반 실행의 실행 가능성을 검사하는 새로운 경고 필터링 전략에 기초하여 높은 버그 탐지 능력 및 높은 정밀도를 달성할 수 있다.
일 측에 따르면, 대상 함수를 테스트하는 방법은 대상 프로그램(target program)에 대한 프로그램 정보에 기초하여 함수 호출 프로파일들(function call profiles)을 획득하는 단계; 상기 함수 호출 프로파일들에 기초한 함수 관련성(function relevance)에 따라 상기 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정하는 단계; 상기 관련 함수들 중 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 상기 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정하는 단계; 상기 관련 함수들 중 상기 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 상기 입력 인자들(arguments)을 필터링하는 단계; 및 상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 단계를 포함한다.
상기 프로그램 정보는 상기 대상 프로그램의 소스 코드(source code), 상기 대상 프로그램에서 테스트할 대상 함수들의 리스트(list), 및 상기 대상 프로그램의 시스템 테스트 케이스들 중 적어도 하나를 포함할 수 있다.
상기 함수 호출 프로파일들을 획득하는 단계는 상기 시스템 테스트 케이스들에 따라 상기 대상 프로그램을 실행함에 따라 상기 함수 호출 프로파일들을 획득하는 단계를 포함할 수 있다.
상기 관련 함수들을 결정하는 단계는 상기 함수 호출 프로파일들에 기초한 조건부 확률(conditional probability)을 이용하여 상기 대상 프로그램에 포함된 적어도 하나의 다른 함수에 대한 상기 대상 함수의 함수 관련성을 산출하는 단계를 포함할 수 있다.
상기 함수 관련성을 산출하는 단계는 상기 조건부 확률과 미리 설정된 임계치를 비교하는 단계; 및 상기 임계치와의 비교 결과에 기초하여, 상기 함수 관련성을 산출하는 단계를 포함할 수 있다.
상기 관련 함수들은 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수; 및 상기 대상 함수를 호출하는 적어도 하나의 관련 함수 중 적어도 하나를 포함할 수 있다.
상기 관련 함수들을 결정하는 단계는 상기 함수 관련성을 포함하는 정적 함수 호출 그래프(static function call graph)에서, 상기 대상 함수 및 상기 관련 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛(extended unit)를 생성하는 단계를 포함할 수 있다.
상기 관련 함수들을 결정하는 단계는 상기 확장된 유닛을 기초로, 상기 대상 함수에 대응하는 최대 호출 경로들을 포함하는 호출 문맥(calling context)를 생성하는 단계를 포함할 수 있다.
상기 호출 문맥을 생성하는 단계는 상기 정적 함수 호출 그래프에서, 상기 대상 함수로부터 임계치보다 낮은 함수 관련성을 가지는 노드까지의 역방향 탐색을 통해 상기 호출 문맥을 식별하는 단계를 포함할 수 있다.
상기 입력 인자들을 결정하는 단계는 상기 확장된 유닛에 대하여 컨커릭 테스트(concolic test)를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로(symbolic execution path)를 설정하는 단계를 포함할 수 있다.
상기 심볼릭 경로를 설정하는 단계는 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수, 및 심볼릭 스텁(symbolic stubs) 함수 각각에 대응하는 유닛 테스트 드라이버(unit test driver)를 이용하여 상기 컨커릭(concolic) 테스트를 실행하는 단계를 포함할 수 있다.
상기 유닛 테스트 드라이버는 해당 함수의 적어도 하나의 전역 변수 및 적어도 하나의 매개 변수에 대응하는 심볼릭 입력들을 생성하고, 상기 심볼릭 입력들을 적용하여 상기 해당 함수를 실행할 수 있다.
상기 심볼릭 경로를 설정하는 단계는 상기 대상 함수의 심볼릭 호출 문맥 공식을 생성하는 단계; 상기 심볼릭 호출 문맥 수식과 결합된 상기 심볼릭 경로 수식의 적합성을 검사하는 단계; 및 상기 적합성의 검사 결과에 기초하여, 상기 심볼릭 경로를 설정하는 단계를 포함할 수 있다.
상기 필터링하는 단계는 상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성(feasibility)을 기초로, 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고(false alarm)를 필터링하는 단계를 포함할 수 있다.
상기 대상 함수를 테스트하는 방법은 상기 프로그램 정보를 수신하는 단계를 더 포함할 수 있다.
일 측에 따르면, 대상 함수를 테스트하는 방법은 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 상기 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정하는 단계; 상기 함수 관련성에 기초하여, 상기 대상 함수 및 상기 대상 함수에 관련된 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛을 생성하는 단계; 상기 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 상기 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별하는 단계; 상기 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정하는 단계; 상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링하는 단계; 및 상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 단계를 포함할 수 있다.
일 측에 따르면, 대상 함수를 테스트하는 장치는 대상 프로그램에 대한 프로그램 정보를 수신하는 통신 인터페이스; 상기 프로그램 정보에 기초하여 함수 호출 프로파일들을 획득하고, 상기 함수 호출 프로파일들에 기초한 함수 관련성에 따라 상기 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정하고, 상기 관련 함수들 중 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 상기 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정하고, 상기 관련 함수들 중 상기 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 상기 입력 인자들을 필터링하며, 상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 프로세서; 및 상기 테스트 결과를 출력하는 디스플레이를 포함한다.
일 측에 따르면, 대상 함수를 테스트하는 장치는 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 상기 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정하고, 상기 함수 관련성에 기초하여, 상기 대상 함수 및 상기 대상 함수에 관련된 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛을 생성하고, 상기 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 상기 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별하고, 상기 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정하고, 상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링하며, 상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 프로세서; 및 상기 함수 호출 프로파일들을 저장하는 메모리를 포함한다.
일 측에 따르면, 자동화된 유닛 테스트를 통해 대상 함수의 유닛 테스트 입력이 자동으로 진행되도록 할 수 있다.
일 측에 따르면, 자동 생성된 유닛 테스트 드라이버(unit test driver) 및/또는 스텁(stubs)에서 거짓 경고(false alarms)의 발생 가능성을 낮출 수 있다.
일 측에 따르면, 대상 함수의 심볼 유닛의 실행에 대응하는 실행 가능성을 체크함으로써 거짓 경고를 필터링할 수 있다.
일 측에 따르면, 대상 함수에 대한 현실적인 문맥(예를 들어, 대상 함수와 밀접한 관련이 있는 관련 함수)를 사용하여 대상 함수에 대한 컨커릭 테스트(concolic test)를 실행함으로써 대상 함수의 다양하고 사실적인 실행을 가능하게 하는 한편, 대상 함수의 심볼릭 호출 문맥(symbolic calling context)을 사용하여 거짓 경고를 정확하게 필터링할 수 있다.
일 측에 따르면, 대상 프로그램에 포함된 대상 함수의 버그를 정확하고, 효율적으로 검출할 수 있다.
일 측에 따르면, 함수 종속 메트릭(function dependency metric)에 의해 측정된 함수의 관련성에 기초하여 명시적으로 대상 함수의 문맥을 구축하고 활용할 수 있다.
일 측에 따르면, 함수 종속 메트릭에 의해 측정된 함수의 관련성 및 심볼릭 호출 문맥을 생성하고, 유닛 별 위반 실행의 실행 가능성을 검사하는 새로운 경고 필터링 전략에 기초하여 높은 버그 탐지 능력 및 높은 정밀도를 달성할 수 있다.
도 1은 일 실시예에 따라 대상 함수를 테스트하는 방법을 나타낸 흐름도.
도 2는 일 실시예에 따라 대상 함수를 테스트하는 방법을 설명하기 위한 개략도.
도 3은 일 실시예에 따른 함수 호출 프로파일들을 획득하는 방법을 설명하기 위한 도면.
도 4는 일 실시예에 따른 함수 관련성 및 함수 관련성에 기초한 정적 함수 호출 그래프(static function call graph)를 설명하기 위한 도면.
도 5 내지 도 6은 실시예들에 따라 대상 함수에 대한 확장된 유닛(extended unit) 및 대상 함수에 대한 호출 문맥(calling context)를 생성하는 방법을 설명하기 위한 도면.
도 7은 일 실시예에 따라 컨커릭 테스트(concolic test)를 실행하는 방법을 설명하기 위한 도면.
도 8은 일 실시예에 따라 거짓 경고를 필터링하는 방법을 설명하기 위한 도면.
도 9는 다른 실시예에 따라 대상 함수를 테스트하는 방법을 나타낸 흐름도.
도 10은 일 실시예에 따른 대상 함수를 테스트하는 장치의 블록도.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
아래 설명하는 실시예들에는 다양한 변경이 가해질 수 있다. 아래 설명하는 실시예들은 실시 형태에 대해 한정하려는 것이 아니며, 이들에 대한 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
실시예에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 실시예를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 생성 요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 생성 요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 생성 요소는 동일한 참조 부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
도 1은 일 실시예에 따라 대상 함수를 테스트하는 방법을 나타낸 흐름도이다. 도 1을 참조하면, 일 실시예에 따른 대상 함수를 테스트하는 장치(이하, '테스트 장치')는 대상 프로그램(target program)에 대한 프로그램 정보에 기초하여 함수 호출 프로파일들(function call profiles)을 획득한다(110). 프로그램 정보는 예를 들어, 대상 프로그램의 소스 코드(source code), 대상 프로그램에서 테스트할 대상 함수들의 리스트(list), 및 대상 프로그램의 시스템 테스트 케이스들(system test cases) 등을 포함할 수 있다. 프로그램 정보는 테스트 장치의 외부로부터 수신된 것일 수도 있고, 테스트 장치의 메모리에 저장된 것일 수 있다. 테스트 장치는 예를 들어, 시스템 테스트 케이스들에 따라 대상 프로그램을 실행함에 따라 함수 호출 프로파일들을 획득할 수 있다. 테스트 장치가 함수 호출 프로파일들을 획득하는 방법은 아래의 도 3을 참조하여 보다 구체적으로 설명한다.
테스트 장치는 함수 호출 프로파일들에 기초한 함수 관련성(function relevance)에 따라 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정한다(120). 테스트 장치는 예를 들어, 함수 호출 프로파일들에 기초한 조건부 확률(conditional probability)을 이용하여 대상 프로그램에 포함된 적어도 하나의 다른 함수에 대한 대상 함수의 함수 관련성을 산출할 수 있다. '함수 관련성'은 대상 함수가 다른 함수에 얼마나 의존 또는 종속되어 있는지 여부를 나타내는 지표(index)에 해당할 수 있다. 테스트 장치는 다른 함수 g에 대한 대상 함수 f의 함수 관련성을 산출할 수 있다. 함수 관련성은 예를 들어, 대상 함수 f를 실행하는 경우에 다른 함수 g가 함께 호출되는 경우, 대상 함수 f의 호출이 다른 함수
Figure pat00001
의 호출을 통해 실행되는 경우, 및/또는 다른 함수 g에서 변경된 변수(들)(variable(s)) 및/또는 매개 변수(들)(parameter(s)) 등이 대상 함수 f의 전역 변수, 지역 변수, 또는 매개 변수 등에 영향을 주는 경우 등과 같은 포괄적인 의존성 또는 의존 확률로 이해될 수 있다. 예를 들어, 대상 함수의 동작 시에 다른 함수를 호출하는 확률이 일정 비율(예를 들어, 임계치)보다 높거나 같은 경우, 테스트 장치는 다른 함수에 대한 대상 함수의 함수 관련성을 높은 것으로 판단할 수 있다. 또는 대상 함수의 동작 시에 다른 함수를 호출하는 확률이 일정 비율보다 낮은 경우, 테스트 장치는 다른 함수에 대한 대상 함수의 함수 관련성을 높은 것으로 판단할 수 있다. 함수 관련성은 '함수 의존성(dependency)'이라고도 부를 수도 있다. 이하에서 함수 관련성은 의존성 또는 함수 의존성과 동일한 의미로 이해될 수 있다.
테스트 장치는 조건부 확률과 미리 설정된 임계치를 비교하고, 임계치와의 비교 결과에 기초하여 함수 관련성을 산출할 수 있다. 테스트 장치는 예를 들어, 조건부 확률이 미리 설정된 임계치 보다 크거나 같은 경우, 다른 함수에 대한 대상 함수의 의존성을 '높음'으로 결정할 수 있다.
관련 함수들은 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수, 및 대상 함수를 호출하는 적어도 하나의 관련 함수 중 적어도 하나를 포함할 수 있다. 대상 함수를 호출하는 적어도 하나의 관련 함수는 '제1 관련 함수' 또는 '선행 함수(predecessor function)'라고도 불릴 수 있다. 또한, 대상 함수에 의해 호출되는 적어도 하나의 관련 함수, 즉 대상 함수가 호출하는 적어도 하나의 관련 함수는 '제2 관련 함수' 또는 '후행 함수(successor function)'라고도 불릴 수 있다. 테스트 장치가 대상 함수의 함수 관련성을 산출하는 방법은 아래의 도 4를 참조하여 보다 구체적으로 설명한다.
단계(120)에서, 테스트 장치는 함수 관련성을 포함하는 정적 함수 호출 그래프(static function call graph)를 기초로, 대상 함수 및 관련 함수들을 포함하는 대상 함수에 대한 확장된 유닛(extended unit)를 생성할 수 있다. 또한, 테스트 장치는 대상 함수가 모든 인수 값들(arguments values)에서 높은 의존성을 가지도록, 확장된 유닛을 기초로 대상 함수에 대응하는 최대 호출 경로들을 포함하는 호출 문맥(calling context)를 식별할 수 있다. 테스트 장치는 정적 함수 호출 그래프에서, 대상 함수로부터 임계치보다 낮은 함수 관련성을 가지는 노드까지의 역방향 이동(예를 들어, bottom-> up 이동)을 통해 호출 문맥을 식별 및 생성할 수 있다. 테스트 장치가 대상 함수에 대한 확장된 유닛 및 호출 문맥을 생성하는 방법은 아래의 도 6을 참조하여 보다 구체적으로 설명한다.
테스트 장치는 관련 함수들 중 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정한다(130). 테스트 장치는 확장된 유닛에 대하여 컨커릭 테스트(concolic test)를 실행하여 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로(symbolic execution path)를 설정할 수 있다.
컨커릭 테스트는 '동적 심볼릭 실행(dynamic symbolic execution)'이라고도 부를 수 있다. 컨커릭 테스트는 테스트 케이스를 생성하는 문제를 제약(또는 조건) 만족 문제의 형태로 표현하고 풀어낸다. 컨커릭 테스트는 먼저 테스트할 대상 프로그램을 실행하고, 심볼릭 수행을 통해 현재 실행한 경로의 경로 제약 조건을 생성할 수 있다. 테스트 장치는 현재까지 실행한 경로 제약 조건을 기반으로 아직까지 실행하지 않은 새로운 경로를 표현하는 경로 제약 조건을 만들로 풀어냄으로써 새로운 실행 경로를 수행하는 테스트 케이스를 생성할 수 있다.
테스트 장치는 예를 들어, 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수, 및 심볼릭 스텁(symbolic stubs) 함수 각각에 대응하는 유닛 테스트 드라이버(unit test driver)를 이용하여 컨커릭(concolic) 테스트를 실행할 수 있다. 여기서, 유닛 테스트 드라이버는 해당 함수의 적어도 하나의 전역 변수 및 적어도 하나의 매개 변수에 대응하는 심볼릭 입력들을 생성하고, 해당 함수를 호출하여 심볼릭 입력들을 적용할 수 있다. 테스트 장치가 컨커릭 테스트를 실행하는 방법은 아래의 도 7을 참조하여 구체적으로 설명한다.
단계(130)에서, 테스트 장치는 대상 함수의 심볼릭 호출 문맥 수식을 생성하고, 심볼릭 호출 문맥 수식과 결합된 심볼릭 경로 수식의 적합성을 검사할 수 있다. 테스트 장치는 적합성의 검사 결과에 기초하여, 심볼릭 경로를 설정할 수 있다.
테스트 장치는 관련 함수들 중 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 입력 인자들(arguments)을 필터링한다(140). 테스트 장치는 예를 들어, 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성(feasibility)을 기초로, 대상 함수의 입력 인자들에서 발생하는 거짓 경고(false alarm)를 필터링할 수 있다. 테스트 장치가 거짓 경고를 필터링하는 방법은 아래의 도 8을 참조하여 구체적으로 설명한다.
테스트 장치는 필터링된 입력 인자들에 기초하여, 대상 함수를 테스트한다(150).
도 2는 일 실시예에 따라 대상 함수를 테스트하는 방법을 설명하기 위한 개략도이다. 도 2를 참조하면, 대상 함수를 테스트하기 위해 실행되는 개략적인 단계들(phases)(201, 203, 205)이 도시된다.
제1 단계(201)는 대상 함수의 의존성을 분석(Dependency analysis)하는 단계로서, 예를 들어, 과정(210) 및 과정(220)을 통해 실행될 수 있다.
과정(210)에서, 테스트 장치는 대상 프로그램의 대상 함수들이 시스템 테스트 케이스들을 거치도록 하여 대상 프로그램에 대응하는 함수 호출 프로파일들을 획득할 수 있다. 과정(210)에 대하여는 아래의 도 3을 참조하여 구체적으로 설명한다. 또한, 과정(220)에서 테스트 장치는 다른 함수
Figure pat00002
g에 대한 대상 함수
Figure pat00003
f의 함수 관련성을 산출할 수 있다. 테스트 장치는 함수 호출 프로파일을 기반으로 하여 대상 함수 f와 다른 함수 g의 함수 관련성을 조건부 확률
Figure pat00004
에 의해 산출할 수 있다.
이때, 조건부 확률
Figure pat00005
는 아래의 수학식 1과 같이 정의될 수 있다.
Figure pat00006
테스트 장치는 예를 들어, 조건부 확률
Figure pat00007
이 주어진 임계치(또는 의존성 기준값) τ에 대하여
Figure pat00008
를 만족하면, 대상 함수 f가 다른 함수 g에 높은 의존성(또는 함수 관련성)을 갖는다고 결정할 수 있다. 과정(220)에 대하여는 아래의 도 4를 참조하여 구체적으로 설명한다.
제2 단계(203)는 확장된 유닛에 의해 컨커릭 유닛 테스트를 실행(Concolic unit testing with an extended unit)하는 단계로서, 예를 들어, 과정(230) 및 과정(240)에 의해 실행될 수 있다.
과정(230)에서 테스트 장치는 대상 함수에 대한 확장된 유닛 및 대상 함수에 대한 호출 컨텍스트를 생성할 수 있다. 테스트 장치는, 대상 함수 f의 다른 함수 g에 대한 함수 관련성을 기초로, 대상 함수 f의 확장된 유닛을 생성할 수 있다. 확장된 유닛은 대상 함수 f, 정적 함수 호출 그래프에서 대상 함수 f가 높은 함수 관련성을 갖는 f의 후행(successor) 함수, 및 심볼릭 스텁(symbolic stubs) 함수로 구성될 수 있다. 여기서, 심볼릭 스텁 함수는 '더미 함수(dummy function)'라고도 부를 수도 있다.
또한, 테스트 장치는 대상 함수 f의 다른 함수 g에 대한 함수 관련성을 기초로, 대상 함수 f의 호출 문맥을 식별 및 생성할 수 있다. 대상 함수 f의 호출 문맥은 예를 들어, 도 5 또는 도 6과 같은 정적 함수 호출 그래프에서 대상 함수 f가 높은 함수 관련성을 갖는 모든 노드
Figure pat00009
에 대한 최대의 호출 경로로써, 예를 들어,
Figure pat00010
와 같이 나타낼 수 있다. 이하에서, 대상 함수 f의
Figure pat00011
번째 호출 문맥은 ctx(f,k) 라고 표기하기로 한다. 과정(230)에 대하여는 아래의 도 5 내지 도 6을 참조하여 구체적으로 설명한다.
과정(240)에서 테스트 장치는 주어진 조건(assertion)을 위반(violate)하는 심볼릭 경로 수식을 생성하기 위해 컨커릭 테스트를 실행할 수 있다. 여기서, '심볼릭 경로 수식'은 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 (수행) 경로에 대응하는 수식으로 이해될 수 있다.
테스트 장치는 다양하고 사실적인 타겟 유닛 테스트의 실행을 위해 대상 함수 f의 확장된 유닛에 컨커릭 테스트를 적용할 수 있다. 컨커릭 테스트를 실행하는 도중, 테스트 장치는 심볼릭 경로 수식
Figure pat00012
를 생성할 수 있다. 심볼릭 경로 수식
Figure pat00013
는 대상 함수 f 에 주어진 조건
Figure pat00014
을 위반하는 실행을 표현한다. 과정(240)에 대하여는 아래의 도 7을 참조하여 구체적으로 설명한다.
제3 단계(205)는 대상 함수 f의 심볼릭 호출 문맥
Figure pat00015
을 사용하여 해당 심볼릭 경로 수식
Figure pat00016
의 적합성을 검사함으로써 주어진 조건
Figure pat00017
에서 발생한 경고를 필터링(filtering)하는 단계로서, 예를 들어, 과정(250)에 의해 실행될 수 있다.
과정(250)에서, 테스트 장치는 대상 함수 f의 호출 문맥에서 심볼릭 경로 수식
Figure pat00018
이 실행 가능한지(적합성)를 확인함으로써 주어진 조건
Figure pat00019
에서 발생한 경고를 걸러낼 수 있다. 이를 위해, 테스트 장치는 대상 함수 f의 심볼릭 호출 문맥 수식
Figure pat00020
를 생성하고, SMT solver를 이용해 심볼릭 경로 수식
Figure pat00021
와 심볼릭 호출 문맥 수식
Figure pat00022
를 결합한 수식이 실행 가능한지를 검사(확인)할 수 있다.
만약 모든 심볼릭 호출 문맥에 대한 검사 결과가 UNSAT(실행 부가능 또는 부적합)이라면(즉, 수식
Figure pat00023
를 실행 가능하게 만드는 어떠한 대상 함수 f의 호출 문맥도 존재하지 않는다면), 테스트 장치는 해당 경고를 거짓으로 간주되고 무시할 수 있다. 이와 반대라면(즉, 최소 하나의 심볼릭 호출 문맥에 대해 검사 결과가 SAT(실행 가능 또는 적합)이라면), 테스트 장치는 해당 경고를, 대상 함수 f에 대한 주어진 조건
Figure pat00024
가 위반된 것에 대한 경고로 보고(report)할 수 있다. 과정(250)에 대하여는 아래의 도 8을 참조하여 구체적으로 설명한다.
도 3은 일 실시예에 따른 함수 호출 프로파일들을 획득하는 방법을 설명하기 위한 도면이다. 도 3을 참조하면, 대상 프로그램(310) 및 대상 프로그램(310)에 대응하여 획득된 함수 호출 프로파일(330)이 도시된다.
테스트 장치는 주어진 시스템 테스트 케이스(들)에 대하여 대상 프로그램(310)을 실행하여 함수 호출 프로파일(들)(330)을 획득할 수 있다. 이때, 대상 프로그램(310)의 일 예가 아래의 [표 1]에 기재되어 있다.
Figure pat00025
[표 1]에 기재된 대상 프로그램에서 대상 함수 main(x, y)에 대한 3개의 시스템 테스트 케이스들 (-1, 1), (1, 1), (5, 1)이 있다고 가정하자.
테스트 장치는 각 시스템 테스트 케이스의 실행에 대하여 함수 호출이 실행될 때, 호출자-피호출자 페어(caller-callee pairs)를 캡쳐할 수 있다.
테스트 장치는 시스템 테스트 케이스(TC1)(-1, 1)에 따라 대상 함수 main(x, y)를 실행하여 함수 호출 프로파일 {main→a2, a2→b, b→f, f→g}을 획득할 수 있다. 테스트 장치는 시스템 테스트 케이스(TC2)(1, 1)에 따라 대상 함수 main(x, y)를 실행하여 함수 호출 프로파일 {main→a1, a1→b, b→f, f→g}을 획득할 수 있다. 또한, 테스트 장치는 시스템 테스트 케이스(TC3)(5,1)에 따라 대상 함수 main(x, y)를 실행하여 함수 호출 프로파일 {main→a1, a1→b, b→f, f→g, f→h}을 획득할 수 있다.
도 4는 일 실시예에 따른 함수 관련성 및 함수 관련성에 기초한 정적 함수 호출 그래프(static function call graph)를 설명하기 위한 도면이다. 도 4를 참조하면, 대상 함수의 다른 함수에 대한 함수 관련성(을 산출한 결과)(410) 및 함수 관련성(410)에 기초한 정적 함수 호출 그래프(430)가 도시된다.
예를 들어, 대상 프로그램에 대상 함수 f와 다른 함수 g가 있고, 대상 함수 f를 호출하는 시스템 테스트 케이스들이
Figure pat00026
개 있다고 가정하자.
테스트 장치는 함수 호출 프로파일(330)에 기초하여 대상 함수 f의 다른 함수 g에 대한 함수 관련성(410)을
Figure pat00027
와 같이 계산할 수 있다. 한다. 정적 호출 그래프
Figure pat00028
(430)와 시스템 테스트 케이스들이 주어지면, 테스트 장치는 함수 관련성(410)을 다음과 같이 산출할 수 있다.
예를 들어, 정적 호출 그래프
Figure pat00029
에서 다른 함수 g가 대상 함수 f의 선행 함수인 경우, 테스트 장치는 함수 관련성
Figure pat00030
Figure pat00031
로 계산할 수 있다. 여기서
Figure pat00032
은 다른 함수 g가 대상 함수 f를 직접적 또는 간접적으로 호출한 시스템 실행의 수이다.
또한, 정적 호출 그래프
Figure pat00033
에서 다른 함수 g가 대상 함수 f의 후행 함수인 경우, 테스트 장치는 함수 관련성
Figure pat00034
Figure pat00035
로 계산할 수 있다. 여기서
Figure pat00036
는 대상 함수 f가 다른 함수 g를 직접적 또는 간접적으로 호출한 시스템 실행의 수이다.
예를 들어, 정적 호출 그래프
Figure pat00037
에서 다른 함수 g가 대상 함수 f의 선행 함수이자 후행 함수인 경우(즉, 대상 함수 f와 다른 함수 g사이에 재귀적인 호출이 존재하는 경우), 테스트 장치는 함수 관련성
Figure pat00038
Figure pat00039
로 계산할 수 있다. 여기서
Figure pat00040
는 대상 함수 f가 다른 함수 g를, 혹은 다른 함수 g가 대상 함수 f를 직접적 또는 간접적으로 호출한 시스템 실행의 수이다.
예를 들어, [표 1]에 기재된 대상 프로그램에 대한 세 개의 테스트 케이스(-1, 1), (1, 1), (5, 1) 각각에 해당하는 함수 호출 프로파일(330)로부터 산출한 대상 함수 f의 함수 관련성(410)은 다음과 같다.
Figure pat00041
,
Figure pat00042
,
Figure pat00043
,
Figure pat00044
Figure pat00045
,
Figure pat00046
여기서, p(a1│f)에 의해 함수 관련성을 계산하는 일 예시를 살펴보면 다음과 같다.
Figure pat00047
테스트 장치는 전술한 함수 관련성(410)을 기초로, 대상 프로그램에 포함된 각 함수마다 함수 관련성을 레이블링하여 정적 호출 그래프(430)을 구성할 수 있다. 이때, 대상 프로그램에 포함된 각 함수들은 정적 호출 그래프(430)에서 각 노드(node)로 표현될 수 있다. 정적 호출 그래프(430)에 대하여는 아래의 도 5에서 보다 구체적으로 설명한다.
도 5은 일 실시예에 따라 대상 함수에 대한 확장된 유닛(extended unit) 및 대상 함수에 대한 호출 문맥(calling context)를 생성하는 방법을 설명하기 위한 도면이다. 도 5를 참조하면, 정적 호출 그래프(430), 정적 호출 그래프(430)에서 대상 함수(505)에 대한 확장된 유닛(510), 대상 함수(505)에 대한 호출 문맥(530), 및 유닛 테스트 드라이버(unit test driver)(550)가 도시된다.
정적 호출 그래프(430)는 대상 프로그램에 대응하는 방향성 그래프로서, 예를 들어,
Figure pat00048
와 같이 표현할 수 있다. 여기서, V는 대상 프로그램에 포함된 함수(들)를 표현하는 노드(들)(node)(또는 정점(들)(vertex))의 집합이며, E는 관계
Figure pat00049
에 해당한다. 이하에서 노드는 정점과 동일한 의미로 이해될 수 있다.
정적 호출 그래프(430)에서 각각의 간선
Figure pat00050
는 a가 직접적으로 b를 호출함을 나타낸다. 만약 노드
Figure pat00051
p에서 대상 함수 f로의 경로가 존재하면, p를 f의 선행 함수라 하고, 대상 함수 f 에서 노드 s로의 경로가 존재하면 노드 s를 f의 후행 함수라 할 수 있다.
대상 함수
Figure pat00052
의 다른 함수 g에 대한 함수 관련성(
Figure pat00053
), 및 임계치
Figure pat00054
가 주어지면, 테스트 장치는 대상 함수 f, 대상 함수 f와 연관성이 높은 후행 함수, 그리고 f의 호출 문맥으로 이루어진 확장된 유닛을 생성할 수 있다.
도 5는 테스트 장치가 전술한 [표 1]에 기재된 대상 프로그램에 대하여 대상 함수 f의 확장된 유닛과 대상 함수 f의 호출 문맥을 생성하는 일 예시를 도시한다.
각각의 노드에 대상 함수 f와의 함수 관련성에 대한 정보를 포함하는 정적 호출 그래프(430)가 주어졌다고 하자. 또한, 임계치
Figure pat00055
일 때,
Figure pat00056
이나
Figure pat00057
라고 하자.
테스트 장치는 정적 호출 그래프(430)에서 대상 함수 f, 대상 함수 f와 높은 함수 관련성을 갖는 다른 함수 g를 포함하지만, 다른 함수 h를 포함하지 않는 대상 함수 f의 확장된 유닛(510)을 생성할 수 있다.
이때, 유닛 테스트 드라이버(unit test driver)(550) sym_driver_f는 대상 함수 f의 확장된 유닛(510)을 심볼릭 입력과 함께 호출할 수 있다. 이때, 테스트 장치는 거짓 경고를 발생시키지 않는다. 이는 확장된 유닛이 대상 함수 f와 함수 관련성이 높은 다른 함수 g를 이용해 대상 함수 f 에 사실적인 환경을 제공해주기 때문이다.
또한, 정적 호출 그래프(430)에서 대상 함수 f는 선행 함수 b에 대해 가장 높은 함수 관련성(예를 들어, 1.00)을 갖고, 선행 함수 a1나 선행 함수 a2에 대해서는 각각 이보다 낮은 함수 관련성들(0.66, 0.33)을 가진다(즉,
Figure pat00058
이지만
Figure pat00059
,
Figure pat00060
이다). 따라서, 테스트 장치는 대상 함수 f의 호출 문맥을 b → f와 같이 생성할 수 있다.
도 6은 일 실시예에 따른 대상 함수에 대한 확장된 유닛 및 대상 함수에 대한 호출 문맥을 생성하는 방법을 보다 구체적으로 설명하기 위한 도면이다. 도 6을 참조하면, 각각의 노드가 대상 함수 f와의 함수 관련성을를 포함하는 정적 호출 그래프(600), 대상 함수(601)에 대한 확장된 유닛(610), 및 대상 함수(601)에 대한 호출 문맥들(ctx(f,1)(630) 및 ctx(f,2)(650))이 도시된다.
확장된 유닛(610)의 생성
대상 함수 f에 대해, 테스트 장치는 대상 함수 f와 대상 함수 f의 후행 함수 g로 이루어진 확장된 유닛을 생성할 수 있다. 여기서 후행 함수 g는 대상 함수 f에서 후행 함수 g로 이어지는 호출 경로 상의 모든 함수들이 대상 함수 f와 높은 함수 관련성을 갖는 함수(들)로 이루어진다는 조건을 만족하는 함수이다(즉, 대상 함수 f와 후행 함수
Figure pat00061
g 사이 모든 노드
Figure pat00062
에 대해
Figure pat00063
를 만족한다).
유닛 테스트 드라이버는 대상 함수 f의 확장된 유닛에서 접근하는 모든 전역 변수(global variable) 및 함수 인자(function variable)를 심볼릭(symbolic)으로 설정한 뒤 대상 함수 f를 실행할 수 있다.
예를 들어, 임계치
Figure pat00064
라고 하면, 정적 호출 그래프(600)에서 대상 함수 f (601)의 아래쪽에 점선으로 표시되 확장된 유닛(610)은 대상 함수 f(601)와 임계치(0.7) 이상의 높은 함수 관련성을 갖는 노드들(n2, n13, n14)로 구성될 수 있다. 이때,
Figure pat00065
를 만족한다.
이때, 거짓 경고를 감소시키기 위해, 일 실시예에 따른 테스트 장치는 대상 함수 f의 확장된 유닛의 시작 지점에 예를 들어, SYM_assume(
Figure pat00066
Figure pat00067
) (if(!expr) exit(0); 의 매크로)를 추가할 수 있다. 여기서
Figure pat00068
Figure pat00069
는 심볼릭 입력 변수의 가능한 값의 범위를 나타내며, 해당 범위는 대상 프로그램의 전체 프로그램 코드에 대한 정적 값(static value) 범위 분석을 통해 파악할 수 있다. 만약, 입력된 값이 추정된 범위 내에 속하지 않는다면, 현재 테스트 실행에 대한 경고는 보고되지 않은 채 즉시 종료되고, 테스트 장치는 다음 테스트를 실행할 수 있다.
또다른 실시예에 따르면, 테스트 장치는 동적 할당된 메모리에 대한 포인터 변수(pointer variable)와 그 크기 변수 간의 관계를 유지하도록 확장된 유닛을 생성할 수 있다. 이 관계를 알아내기 위해서는 입력 변수의 이름이 이용될 수 있다.
호출 문맥들(630, 650)의 생성
대상 함수 f의 함수 관련성이가 포함된 정적 호출 그래프(600)에서, 대상 함수 f의 호출 문맥(들)은 대상 함수에 선행 함수에 해당하는 노드(들)로부터 대상 함수 f 까지의 최대 호출 경로로 정의할 수 있다.
다시 말해,
Figure pat00070
Figure pat00071
번째 호출 문맥(이하,
Figure pat00072
로 표기한다)은 정적 호출 그래프 상에서 다음 조건을 만족하는 최대 호출 경로
Figure pat00073
Figure pat00074
이다: 여기서,
Figure pat00075
는 대상 함수 f의 선행 함수(노드)를 나타내고, 호출 문맥
Figure pat00076
의 모든 선행 함수
Figure pat00077
Figure pat00078
를 만족한다. 또한, 호출 문맥
Figure pat00079
를 포함하는 대상 함수의 또다른 호출 문맥은 존재하지 않는다(즉,
Figure pat00080
가 최대이다).
테스트 장치는 정적 호출 그래프(600)에서 대상 함수 f (601)로부터 대상 함수 f (601)보다 낮은 함수 관련성을 가지는 노드(들)를 만날 때까지 역방향 탐색을 실행하고, 역방향 탐색을 통해 대상 함수 f (601)의 호출 문맥을 식별 및 생성할 수 있다.
예를 들어, 도 6에 도시된 두 가지 호출 문맥들(
Figure pat00081
(630)과
Figure pat00082
(650)) 중
Figure pat00083
(630)은 노드
Figure pat00084
로부터 대상 함수 f까지의 호출 경로에 해당한다. 여기서
Figure pat00085
이고,
Figure pat00086
,
Figure pat00087
이다. 따라서, 테스트 장치는 호출 문맥
Figure pat00088
를 생성할 수 있다. 또한, 테스트 장치는
Figure pat00089
(650)에 대하여도 전술한 것과 마찬가지의 과정을 거쳐 호출 문맥
Figure pat00090
를 생성할 수 있다.
도 7은 일 실시예에 따라 컨커릭 테스트(concolic test)를 실행하는 방법을 설명하기 위한 도면이다. 도 7을 참조하면, 일 실시예에 따른 유닛 테스트 드라이버(unit test driver)(550) 및 유닛 테스트 드라이버(550)를 이용하여 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로들(710, 720)를 설정하기 위한 컨커릭 테스팅 과정이 도시된다.
테스트 장치는 대상 함수 f의 확장된 유닛을 이용하여 대상 함수 f의 유닛 테스트 드라이버(550)에 대한 컨커릭 테스팅을 수행할 수 있다. 테스트 장치는 거짓 경보를 필터링하기 위한 심볼릭 수행 경로들(710, 720)에 대응하는 수식을 저장할 수 있다. 주어진 조건을 위반하는 실행이 발생하면, 테스트 장치는 실행 가능성을 확인하기 위해 해당 심볼릭 경로 수식
Figure pat00091
을 캡쳐할 수 있다.
보다 구체적으로, 테스트 장치는 대상 함수 f의 사실적이고 다양한 실행을 탐구하기 위해 확장된 유닛에 컨커릭 테스트를 적용할 수 있다. 컨커릭 테스트의 실행 중에, 테스트 장치는 심볼릭 경로(710)에 대응하는 수식의 집합
Figure pat00092
를 획득하고, 대상 함수 f의 주어진 조건(assertion)
Figure pat00093
를 위반하는 심볼릭 경로(710)에 대응하는 수식
Figure pat00094
를 기록할 수 있다. 이때, j 는 주어진 조건
Figure pat00095
를 위반하는 심볼릭 경로들에 대응하는 수식들을 서로 구분하기 위한 인덱스(index)에 해당할 수 있다.
예를 들어,
Figure pat00096
Figure pat00097
라고 하자.
대상 함수 f 에 집중하기 위해, 테스트 장치는 DFS(Depth First Search) 검색 전략을 변형하여 대상 함수 f의 분기 조건에 대해서는 우선 순위 큐를, f의 확장된 유닛에 속하는 다른 함수(예를 들어, 도 5의 510에 포함된 함수 g)의 분기 조건에 대해서는 일반 큐를 사용할 수 있다. DFS(Depth First Search) 검색은 수행 경로 트리의 가장 깊은 부분까지 먼저 수행하며 진행하는 검색 방법이다.
테스트 장치는 우선 순위 큐에 있는 분기 조건을 먼저 부정(negate)함으로써 대상 함수 f의 다양한 행동을 탐구할 수 있다. 이때, 일반 큐에 있는 분기 조건은 우선 순위 큐가 비었을 때 부정될 수 있다.
도 8은 일 실시예에 따라 거짓 경고를 필터링하는 방법을 설명하기 위한 도면이다. 도 8을 참조하면, 심볼릭 경로 수식을 설정하기 위해 컨커릭 테스트를 수행하는 과정을 나타낸 도면(800)이 도시된다.
예를 들어, 도 6에 도시된 대상 함수 f의 호출 문맥 (즉,
Figure pat00098
)에 속하는 각각의 함수
Figure pat00099
에 대해, 테스트 장치는 함수
Figure pat00100
의 심볼릭 경로 수식의 집합인
Figure pat00101
를 얻을 수 있다. 이때,
Figure pat00102
는 도 7을 통해 전술한 것과 마찬가지의 동작을 통해 얻을 수 있다. 만약,
Figure pat00103
가 이미 대상 함수로써 테스트 되었고,
Figure pat00104
가 전술한 컨커릭 테스트 과정에서 생성되었다면, 테스트 장치는
Figure pat00105
를 재사용하여 경고를 필터링할 수 있다.
테스트 장치는
Figure pat00106
에 대한
Figure pat00107
의 조각(
Figure pat00108
이라 하자)을 아래의 수학식 2와 같은 정의를 통해 획득할 수 있다.
Figure pat00109
예를 들어, 도 8은, 도 6에 도시된
Figure pat00110
(630)에 대하여,
Figure pat00111
Figure pat00112
을 호출하는 두 개의 심볼릭 경로들에 대응하는 수식인
Figure pat00113
Figure pat00114
을 갖는다는 것을 보여준다. 여기서
Figure pat00115
는 함수
Figure pat00116
를 호출하자마자 종료하는 함수
Figure pat00117
x의 z번째 심볼릭 경로에 대응하는 수식을 나타낸다.
Figure pat00118
역시 대상 함수 f 를 호출하는 두 개의 심볼릭 경로 수식
Figure pat00119
Figure pat00120
를 가질 수 있다.
테스트 장치는 호출 문맥
Figure pat00121
에 대한 대상 함수 f의 심볼릭 호출 문맥 수식(즉,
Figure pat00122
)을 구할 수 있다. 이를 위해, 테스트 장치는 호출 문맥
Figure pat00123
에 속하는
Figure pat00124
Figure pat00125
의 조각난 심볼릭 경로 수식 (즉,
Figure pat00126
)을, 대상 함수 f를 만날 때까지 모두 구해 이를 논리합으로 더할 수 있다.
따라서, 호출 문맥
Figure pat00127
에 대응하는 수식
Figure pat00128
는 아래의 수학식 3과 같이 정의될 수 있다.
Figure pat00129
예를 들어, 도 8은 도 6의 호출 문맥
Figure pat00130
(
Figure pat00131
)에 대응하는 수식
Figure pat00132
를 나타낸다. 수식
Figure pat00133
은 아래의 수학식 4와 같이 정리할 수 있다.
Figure pat00134
마지막으로, 테스트 장치는 모든 대상 함수 f의 심볼릭 호출 문맥 수식
Figure pat00135
에 SMT solver를 적용할 수 있다.
만약 SMT solver를 적용한 결과가 모든 호출 문맥에 대해 UNSAT이라면(즉,
Figure pat00136
를 실행 가능하게 만드는 어떠한 f의 호출 문맥도 존재하지 않는다면), 테스트 장치는 해당 경고를 거짓으로 간주하여 무시할 수 있다. 이와 달리, SMT solver를 적용한 결과가 최소 하나의 호출 문맥에 대해 SAT이라면, 테스트 장치는 대상 함수 f의 주어진 조건
Figure pat00137
가 위반된 것으로 보아 해당 경로를 보고할 수 있다.
도 9는 다른 실시예에 따라 대상 함수를 테스트하는 방법을 나타낸 흐름도이다. 도 9를 참조하면, 일 실시예에 따른 테스트 장치는 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정한다(910).
테스트 장치는 함수 관련성에 기초하여, 대상 함수 및 대상 함수에 관련된 함수들을 포함하는 대상 함수에 대한 확장된 유닛을 생성한다(920).
테스트 장치는 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별한다(930).
테스트 장치는 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정한다(940).
테스트 장치는 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링한다(950).
테스트 장치는 필터링된 입력 인자들에 기초하여, 대상 함수를 테스트한다(960).
도 10은 일 실시예에 따른 대상 함수를 테스트하는 장치의 블록도이다. 도 10을 참조하면, 일 실시예에 따른 대상 함수를 테스트하는 장치('테스트 장치')(1000)는 통신 인터페이스(1010), 프로세서(1020) 및 디스플레이(1040)를 포함한다. 테스트 장치(1000)는 메모리(1030)를 더 포함할 수 있다. 통신 인터페이스(1010), 프로세서(1020), 디스플레이(1040) 및 메모리(1030)는 통신 버스(1005)를 통해 서로 통신할 수 있다.
통신 인터페이스(1010)는 대상 프로그램에 대한 프로그램 정보를 수신한다.
프로세서(1020)는 프로그램 정보에 기초하여 함수 호출 프로파일들을 획득한다. 프로세서(1020)는 함수 호출 프로파일들에 기초한 함수 관련성에 따라 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정한다. 프로세서(1020)는 관련 함수들 중 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정한다. 프로세서(1020)는 관련 함수들 중 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 입력 인자들을 필터링한다. 프로세서(1020)는 필터링된 입력 인자들에 기초하여, 대상 함수를 테스트한다.
디스플레이(1040)는 프로세서(1020)에서 실행된 대상 함수의 테스트 결과를 출력한다.
또한, 프로세서(1020)는 대상 함수를 테스트하는 프로그램을 실행하고, 테스트 장치(1000)를 제어할 수 있다. 프로세서(1020)에 의하여 실행되는 프로그램 코드는 메모리(1030)에 저장될 수 있다.
메모리(1030)는 대상 프로그램에 대한 프로그램 정보 및/또는 함수 호출 프로파일들을 저장할 수 있다. 또한, 메모리(1030)는 프로세서(1020)에서 실행된 대상 함수(들)의 테스트한 결과(들)을 저장할 수 있다.
메모리(1030)는 휘발성 메모리 또는 비 휘발성 메모리일 수 있다. 메모리(1030)는 예를 들어, 프로세서(1020)에 의해 실행될 때, 프로세서(1020)가 도 1 내지 도 9와 관련하여 설명하는 과정들 중 어느 하나 또는 이들의 조합을 실행하도록 하는 명령어들을 저장할 수 있다.
이 밖에도, 프로세서(1020)는 도 1 내지 도 9에서 테스트 장치와 관련하여 기술된 동작들 중 어느 하나 또는 이들의 조합을 실행할 수 있다.
실시예에 따라서, 프로세서(1020)는 다음과 같이 동작할 수도 있다.
프로세서(1020)는 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정한다. 프로세서(1020)는 함수 관련성에 기초하여, 대상 함수 및 대상 함수에 관련된 함수들을 포함하는 대상 함수에 대한 확장된 유닛을 생성한다. 프로세서(1020)는 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별한다. 프로세서(1020)는 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정한다. 프로세서(1020)는 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링한다. 프로세서(1020)는 필터링된 입력 인자들에 기초하여, 대상 함수를 테스트한다. 이때, 메모리(1030)는 함수 호출 프로파일들을 저장한다.
본 발명의 일 실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 실행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 생성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 실행하도록 특별히 생성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 실행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 생성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
1000: 테스트 장치
1005: 통신 버스
1010: 통신 인터페이스
1020: 프로세서
1030: 메모리
1040: 디스플레이

Claims (19)

  1. 대상 프로그램(target program)에 대한 프로그램 정보에 기초하여 함수 호출 프로파일들(function call profiles)을 획득하는 단계;
    상기 함수 호출 프로파일들에 기초한 함수 관련성(function relevance)에 따라 상기 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정하는 단계;
    상기 관련 함수들 중 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 상기 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정하는 단계;
    상기 관련 함수들 중 상기 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 상기 입력 인자들(arguments)을 필터링하는 단계; 및
    상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  2. 제1항에 있어서,
    상기 프로그램 정보는
    상기 대상 프로그램의 소스 코드(source code), 상기 대상 프로그램에서 테스트할 대상 함수들의 리스트(list), 및 상기 대상 프로그램의 시스템 테스트 케이스들 중 적어도 하나를 포함하는, 대상 함수를 테스트하는 방법.
  3. 제2항에 있어서,
    상기 함수 호출 프로파일들을 획득하는 단계는
    상기 시스템 테스트 케이스들에 따라 상기 대상 프로그램을 실행함에 따라 상기 함수 호출 프로파일들을 획득하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  4. 제1항에 있어서,
    상기 관련 함수들을 결정하는 단계는
    상기 함수 호출 프로파일들에 기초한 조건부 확률(conditional probability)을 이용하여 상기 대상 프로그램에 포함된 적어도 하나의 다른 함수에 대한 상기 대상 함수의 함수 관련성을 산출하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  5. 제4항에 있어서,
    상기 함수 관련성을 산출하는 단계는
    상기 조건부 확률과 미리 설정된 임계치를 비교하는 단계; 및
    상기 임계치와의 비교 결과에 기초하여, 상기 함수 관련성을 산출하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  6. 제1항에 있어서,
    상기 관련 함수들은
    상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수; 및
    상기 대상 함수를 호출하는 적어도 하나의 관련 함수
    중 적어도 하나를 포함하는, 대상 함수를 테스트하는 방법.
  7. 제1항에 있어서,
    상기 관련 함수들을 결정하는 단계는
    상기 함수 관련성을 포함하는 정적 함수 호출 그래프(static function call graph)에서, 상기 대상 함수 및 상기 관련 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛(extended unit)를 생성하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  8. 제7항에 있어서,
    상기 관련 함수들을 결정하는 단계는
    상기 확장된 유닛을 기초로, 상기 대상 함수에 대응하는 최대 호출 경로들을 포함하는 호출 문맥(calling context)를 생성하는 단계;
    를 포함하는, 대상 함수를 테스트하는 방법.
  9. 제8항에 있어서,
    상기 호출 문맥을 생성하는 단계는
    상기 정적 함수 호출 그래프에서, 상기 대상 함수로부터 임계치보다 낮은 함수 관련성을 가지는 노드까지의 역방향 탐색을 통해 상기 호출 문맥을 식별하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  10. 제7항에 있어서,
    상기 입력 인자들을 결정하는 단계는
    상기 확장된 유닛에 대하여 컨커릭 테스트(concolic test)를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로(symbolic execution path)를 설정하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  11. 제10항에 있어서,
    상기 심볼릭 경로를 설정하는 단계는
    상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수, 및 심볼릭 스텁(symbolic stubs) 함수 각각에 대응하는 유닛 테스트 드라이버(unit test driver)를 이용하여 상기 컨커릭 테스트를 실행하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  12. 제11항에 있어서,
    상기 유닛 테스트 드라이버는
    해당 함수의 적어도 하나의 전역 변수 및 적어도 하나의 매개 변수에 대응하는 심볼릭 입력들을 생성하고, 상기 심볼릭 입력들을 적용하여 상기 해당 함수를 실행하는, 대상 함수를 테스트하는 방법.
  13. 제10항에 있어서,
    상기 심볼릭 경로를 설정하는 단계는
    상기 대상 함수의 심볼릭 호출 문맥 공식을 생성하는 단계;
    상기 심볼릭 호출 문맥 수식과 결합된 상기 심볼릭 경로 수식의 적합성을 검사하는 단계; 및
    상기 적합성의 검사 결과에 기초하여, 상기 심볼릭 경로를 설정하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  14. 제10항에 있어서,
    상기 필터링하는 단계는
    상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성(feasibility)을 기초로, 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고(false alarm)를 필터링하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  15. 제1항에 있어서,
    상기 프로그램 정보를 수신하는 단계
    를 더 포함하는, 대상 함수를 테스트하는 방법.
  16. 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 상기 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정하는 단계;
    상기 함수 관련성에 기초하여, 상기 대상 함수 및 상기 대상 함수에 관련된 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛을 생성하는 단계;
    상기 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 상기 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별하는 단계;
    상기 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정하는 단계;
    상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링하는 단계; 및
    상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 단계
    를 포함하는, 대상 함수를 테스트하는 방법.
  17. 하드웨어와 결합되어 제1항 내지 제16항 중 어느 하나의 항의 방법을 실행시키기 위하여 매체에 저장된 컴퓨터 프로그램.
  18. 대상 프로그램에 대한 프로그램 정보를 수신하는 통신 인터페이스;
    상기 프로그램 정보에 기초하여 함수 호출 프로파일들을 획득하고, 상기 함수 호출 프로파일들에 기초한 함수 관련성에 따라 상기 대상 프로그램에서 테스트할 대상 함수에 관련된 관련 함수들을 결정하고, 상기 관련 함수들 중 상기 대상 함수에 의하여 호출되는 적어도 하나의 관련 함수에 기초하여, 상기 대상 함수에서의 주어진 조건을 위반하는 입력 인자들을 결정하고, 상기 관련 함수들 중 상기 대상 함수를 호출하는 적어도 하나의 관련 함수에 기초하여 상기 입력 인자들을 필터링하며, 상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는 프로세서; 및
    상기 테스트 결과를 출력하는 디스플레이
    를 포함하는, 대상 함수를 테스트하는 장치.
  19. 대상 프로그램에 대응하는 함수 호출 프로파일들에 기초하여 상기 대상 프로그램에서 테스트할 대상 함수의 함수 관련성을 결정하고,
    상기 함수 관련성에 기초하여, 상기 대상 함수 및 상기 대상 함수에 관련된 함수들을 포함하는 상기 대상 함수에 대한 확장된 유닛을 생성하고,
    상기 함수 관련성이 레이블링된 정적 함수 호출 그래프를 이용하여 상기 대상 함수의 인자들의 최대 호출 경로들에 대응하는 호출 문맥을 식별하고,
    상기 확장된 유닛에 대하여 컨커릭 테스트를 실행하여 상기 대상 함수에 주어진 조건을 위반하는 실행을 나타내는 심볼릭 경로를 설정하고,
    상기 호출 문맥에 대응하는 심볼릭 경로의 실현 가능성을 검사함으로써 상기 대상 함수의 입력 인자들에서 발생하는 거짓 경고를 필터링하며,
    상기 필터링된 입력 인자들에 기초하여, 상기 대상 함수를 테스트하는,
    프로세서; 및
    상기 함수 호출 프로파일들을 저장하는 메모리
    를 포함하는, 대상 함수를 테스트하는 장치.
KR1020180052680A 2018-05-08 2018-05-08 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치 KR102114547B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180052680A KR102114547B1 (ko) 2018-05-08 2018-05-08 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180052680A KR102114547B1 (ko) 2018-05-08 2018-05-08 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20190128457A true KR20190128457A (ko) 2019-11-18
KR102114547B1 KR102114547B1 (ko) 2020-05-25

Family

ID=68727711

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180052680A KR102114547B1 (ko) 2018-05-08 2018-05-08 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102114547B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230090767A (ko) * 2021-12-15 2023-06-22 경북대학교 산학협력단 소프트웨어 프로그램을 검증하는 방법 및 장치
KR102610914B1 (ko) * 2023-02-20 2023-12-07 델타인덱스주식회사 히스테리시스 곡선으로부터 테스트 시나리오 자동 생성 방법

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102491925B1 (ko) * 2021-02-26 2023-01-26 고려대학교 산학협력단 프로그램 분석 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015197869A (ja) * 2014-04-02 2015-11-09 トヨタ自動車株式会社 コンピュータ・プログラムの検査装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015197869A (ja) * 2014-04-02 2015-11-09 トヨタ自動車株式会社 コンピュータ・プログラムの検査装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Bo Chen, et.al., CRETE: A Versatile Binary-Level Concolic Testing Framework, FASE 2018, pp.281-298 (2018.04.04)* *
J. Burnim, et.al., Heuristics for Scalable Dynamic Test Generation, Proceeding ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering, pp.443-446 (2008.09.19)* *
김윤호, 실제적인 유닛 컨텍스트 합성으로 거짓 경보를 줄인 자동화된 유닛 테스트 생성, 한국과학기술원 (2017.02)* *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230090767A (ko) * 2021-12-15 2023-06-22 경북대학교 산학협력단 소프트웨어 프로그램을 검증하는 방법 및 장치
KR102610914B1 (ko) * 2023-02-20 2023-12-07 델타인덱스주식회사 히스테리시스 곡선으로부터 테스트 시나리오 자동 생성 방법

Also Published As

Publication number Publication date
KR102114547B1 (ko) 2020-05-25

Similar Documents

Publication Publication Date Title
CN105701008B (zh) 用于测试用例生成的系统和方法
US10586053B2 (en) Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US9639450B2 (en) Scalable methods for analyzing formalized requirements and localizing errors
US8312440B2 (en) Method, computer program product, and hardware product for providing program individuality analysis for source code programs
US11835987B2 (en) Methods and apparatus for finding long methods in code
US8140911B2 (en) Dynamic software tracing
US8959486B2 (en) Automatic regression testing based on cyclomatic complexity
US20120233596A1 (en) Measuring coupling between coverage tasks and use thereof
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
JP6469730B2 (ja) ソフトウェア検査装置
US20140372083A1 (en) Derived restrictions in a combinatorial model
CN104899147A (zh) 一种面向安全检查的代码静态分析方法
CN104536883A (zh) 一种静态缺陷检测方法及其系统
US9389984B2 (en) Directing verification towards bug-prone portions
CN108984416B (zh) 一种评估Maven环境中依赖冲突危险级别的方法
KR102114547B1 (ko) 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치
US20170147475A1 (en) Finding uninitialized variables outside the local scope
CN109446066B (zh) C/c++程序中不可达代码的静态检测方法及系统
JP6245006B2 (ja) テストケース生成装置、方法、及びプログラム
US20210405980A1 (en) Long method autofix engine
US8291383B1 (en) Code analysis via dual branch exploration
JP2012181666A (ja) 情報処理装置、情報処理方法及び情報処理プログラム
CN116107625A (zh) 流程设计方法、装置、设备、存储介质及程序产品
CN112699376A (zh) 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质
JP6723483B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム

Legal Events

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