KR102114549B1 - 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치 - Google Patents

설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치 Download PDF

Info

Publication number
KR102114549B1
KR102114549B1 KR1020180053145A KR20180053145A KR102114549B1 KR 102114549 B1 KR102114549 B1 KR 102114549B1 KR 1020180053145 A KR1020180053145 A KR 1020180053145A KR 20180053145 A KR20180053145 A KR 20180053145A KR 102114549 B1 KR102114549 B1 KR 102114549B1
Authority
KR
South Korea
Prior art keywords
mutation
program
target
operator
compilation
Prior art date
Application number
KR1020180053145A
Other languages
English (en)
Other versions
KR20190128869A (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 KR1020180053145A priority Critical patent/KR102114549B1/ko
Publication of KR20190128869A publication Critical patent/KR20190128869A/ko
Application granted granted Critical
Publication of KR102114549B1 publication Critical patent/KR102114549B1/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/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • 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

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)
  • Stored Programmes (AREA)

Abstract

일 실시예에 따른 변이 프로그램을 생성하는 방법 및 장치는 대상 프로그램의 변이 대상과 관련된 사용자의 선택을 입력받고, 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하며, 실행 가능 여부에 따라 상기 변이 대상을 변이함으로써 변이 프로그램을 생성한다.

Description

설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치{GENERATIG METHOD AND APPARATUS OF MUTANT PROGRAMS, WHICH IS FLEXIBLE AND HIGHLY SCALABLE}
아래의 실시예들은 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치에 관한 것이다.
소프트웨어 테스트는 소프트웨어의 품질을 평가하고 개선하기 위한 사실상의 표준 방법이다. 소프트웨어 테스트 기술은 수십 년에 걸쳐 상당히 발전했지만 대부분 대상 프로그램 자체를 테스트할 뿐, 대상 프로그램을 변이(mutate)하여 테스트를 수행하는 것은 매우 드물었다.
특히, 대상 프로그램의 변이 시에 주로 일부 함수 단위의 변이가 수행될 뿐, 대상 프로그램의 전체 소스 파일 또는 전체 기능을 변경하는 변이는 수행되지 않았으며, 이를 위한 변이의 정밀한 제어 또한 용이하지 않다. 이 밖에도, 소프트웨어 테스트를 위해 대상 프로그램을 변이하는 경우, 다양한 테스트 목적에 맞는 새로운 변이 연산자를 구현하는 것은 용이하지 않다.
일 실시예에 따르면, 대상 프로그램에 대하여 다양한 목적의 테스트를 위한 변이를 적용하기 위한 풍부한 API(Application Programming Interface)를 제공함으로써 새로운 변이 연산자를 용이하게 구현할 수 있다.
일 실시예에 따르면, 대상 프로그램의 소스 코드(source code)에서 변이 대상의 피연산자와 변이 연산자를 세부 수준에서 지정함으로써 변이 대상을 정밀하게 제어한 변이 프로그램을 생성할 수 있다.
일 실시예에 따르면, 대상 프로그램의 변이 대상을 특정 라인 또는 특정 변수뿐만 아니라, 대상 프로그램의 소스 코드 전체 또는 전체 기능까지 설정할 수 있다.
일 실시예에 따르면, 컴파일 데이터베이스(compilation database)를 이용하여 변이 프로그램의 실행 가능성을 체크함으로써 실제 실행이 불가능한 변이 프로그램의 생성을 미리 배제할 수 있다.
일 측에 따르면, 변이 프로그램을 생성하는 방법은 대상 프로그램(target program)의 변이 대상과 관련된 사용자의 선택을 입력받는 단계; 상기 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하는 단계; 및 상기 실행 가능 여부에 따라 상기 변이 대상을 변이함으로써 변이 프로그램을 생성하는 단계를 포함한다.
상기 변이 대상은 상기 대상 프로그램에 포함된 변이 연산자, 및 상기 연산자에 대응하는 적어도 하나의 피연산자 중 적어도 하나를 포함할 수 있다.
상기 사용자의 선택을 입력받는 단계는 상기 사용자에게 상기 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스(class)를 제공하는 단계; 및 상기 클래스에 대한 상기 사용자의 선택을 입력받는 단계를 포함할 수 있다.
상기 변이 연산자의 클래스는 상기 변이 대상이 되는 대상 변이 연산자, 상기 대상 변이 연산자의 정의역(domain), 상기 대상 변이 연산자의 치역(range), 상기 대상 변이 연산자에 대응하는 치역의 시작 위치, 및 종료 위치, 상기 대상 프로그램에서의 변이 위치, 및 상기 대상 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수 중 적어도 하나를 포함할 수 있다.
상기 대상 변이 연산자는 변이 연산자, 문자열 리터럴 변이 연산자, 함수 호출 변이 연산자 중 적어도 하나를 포함할 수 있다.
상기 변이 프로그램을 생성하는 방법은 상기 실행 가능 여부를 결정하는 단계는 상기 사용자의 선택에 따라 상기 대상 프로그램의 변이 대상을 변이하여 변이 프로그램 후보를 생성하는 단계; 및 상기 변이 대상에 대응하는 타입 정보를 기초로 상기 변이 프로그램 후보의 실행 가능 여부를 결정하는 단계를 포함하고, 상기 변이 프로그램을 생성하는 단계는 상기 실행 가능 여부의 결정에 기초하여 상기 변이 프로그램 후보를 상기 변이 프로그램으로 설정하는 단계를 포함할 수 있다.
상기 변이 프로그램의 실행 가능 여부를 결정하는 단계는 상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스(compilation database)를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하는 단계를 포함할 수 있다.
상기 변이 프로그램의 실행 가능 여부를 결정하는 단계는 상기 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이 대상을 포함하는 변이 프로그램의 컴파일 성공 여부를 체크하는 단계를 포함할 수 있다.
상기 컴파일 데이터베이스는 컴파일의 대상 프로그램, 상기 컴파일의 대상 프로그램에서 사용된 컴파일 명령, 및 상기 컴파일 명령이 실행된 디렉토리 중 적어도 하나를 포함할 수 있다.
일 측에 따르면, 변이 프로그램을 생성하는 방법은 대상 프로그램에서 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 기초로, 상기 변이 대상의 후보를 결정하는 단계; 상기 변이 대상의 후보에 대한 사용자의 선택을 입력받는 단계; 및 상기 변이 대상의 후보에 대한 사용자의 선택을 기초로, 상기 대상 프로그램의 변이 대상을 변이하여 변이 프로그램을 생성하는 단계를 포함한다.
상기 변이 대상의 후보를 결정하는 단계는 상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이된 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하는 단계; 및 상기 변이 프로그램의 실행 가능 여부에 따라 상기 변이 대상의 후보를 결정하는 단계를 포함할 수 있다.
상기 변이 프로그램의 실행 가능 여부를 결정하는 단계는 상기 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이프로그램의 컴파일 성공 여부를 체크하는 단계를 포함할 수 있다.
상기 사용자의 선택을 입력받는 단계는 상기 사용자에게 상기 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스를 제공하는 단계; 및 상기 클래스에 대한 상기 사용자의 선택을 입력받는 단계를 포함할 수 있다.
상기 변이 연산자의 클래스는 상기 변이 대상이 되는 대상 변이 연산자, 상기 대상 변이 연산자의 정의역, 상기 대상 변이 연산자의 치역, 상기 대상 변이 연산자의 치역의 시작 위치, 및 종료 위치, 상기 대상 프로그램에서의 변이 위치, 및 상기 대상 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수 중 적어도 하나를 포함할 수 있다.
일 측에 따르면, 변이 프로그램을 생성하는 장치는 대상 프로그램의 변이 대상과 관련된 사용자의 선택을 입력받는 입력 인터페이스; 및 상기 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하고, 상기 실행 가능 여부에 따라 상기 변이 대상을 변이함으로써 변이 프로그램을 생성하는 프로세서를 포함한다.
상기 입력 인터페이스는 상기 사용자에게 상기 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스를 제공하고, 상기 클래스에 대한 상기 사용자의 선택을 입력받을 수 있다.
상기 변이 프로그램을 생성하는 장치는 상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스가 저장된 메모리를 더 포함하고, 상기 프로세서는 상기 컴파일 데이터베이스에서 상기 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이 대상을 포함하는 대상 프로그램의 컴파일 성공 여부를 체크함으로써 상기 대상 프로그램의 실행 가능 여부를 결정할 수 있다.
일 측에 따르면, 변이 프로그램을 생성하는 장치는 변이 대상의 후보에 대한 사용자의 선택을 입력받는 입력 인터페이스; 및 대상 프로그램에서 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 기초로, 상기 변이 대상의 후보를 결정하고, 상기 변이 대상의 후보에 대한 사용자의 선택을 기초로 상기 대상 프로그램의 변이 대상을 변이하여 변이 프로그램을 생성하는 프로세서를 포함한다.
상기 변이 프로그램을 생성하는 장치는 상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스가 저장된 메모리를 더 포함하고, 상기 프로세서는 상기 컴파일 데이터베이스를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이된 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하고, 상기 변이 프로그램의 실행 가능 여부에 따라 상기 변이 대상의 후보를 결정할 수 있다.
일 측에 따르면, 대상 프로그램에 대하여 다양한 목적의 테스트를 위한 변이를 적용하기 위한 풍부한 API를 제공함으로써 새로운 변이 연산자를 용이하게 구현할 수 있다.
일 측에 따르면, 대상 프로그램의 소스 코드에서 변이 대상의 피연산자와 변이 연산자를 세부 수준에서 지정함으로써 변이 대상을 정밀하게 제어한 변이 프로그램을 생성할 수 있다.
일 측에 따르면, 대상 프로그램의 변이 대상을 특정 라인 또는 특정 변수뿐만 아니라, 대상 프로그램의 소스 코드 전체 또는 전체 기능까지 설정할 수 있다.
일 측에 따르면, 컴파일 데이터베이스를 이용하여 변이 프로그램의 실행 가능성을 체크함으로써 실제 실행이 불가능한 변이 프로그램의 생성을 미리 배제할 수 있다.
도 1은 일 실시예에 따라 변이 프로그램을 생성하는 장치의 개략적인 구성을 설명하기 위한 도면.
도 2는 일 실시예에 따라 변이 프로그램을 생성하는 방법을 나타낸 흐름도.
도 3은 일 실시예에 따른 생성 장치의 컴포넌트 아키텍쳐(component architecture)를 도시한 도면.
도 4는 일 실시예에 따른 적절한 컴파일 정보가 없는 경우에 소스 코드를 실행한 결과를 설명하기 위한 도면.
도 5는 일 실시예에 따른 변이 대상과 관련된 설정 옵션에 따라 변이되는 변이 프로그램들을 설명하기 위한 도면.
도 6은 일 실시예에 따라 실행 가능한 변이 프로그램을 생성하는 방법을 설명하기 위한 도면.
도 7 및 도 8은 실시예들에 따른 변이 연산자 SANL을 위해 구현되는 함수의 소스 코드를 도시한 도면.
도 9는 일 실시예에 따라 변이 프로그램의 실행 가능 여부를 결정하는 방법을 설명하기 위한 소스 코드를 도시한 도면.
도 10은 다른 실시예에 따라 변이 프로그램을 생성하는 방법을 나타낸 흐름도.
도 11은 일 실시예에 따른 변이 프로그램을 생성하는 장치의 블록도.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
아래 설명하는 실시예들에는 다양한 변경이 가해질 수 있다. 아래 설명하는 실시예들은 실시 형태에 대해 한정하려는 것이 아니며, 이들에 대한 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
실시예에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 실시예를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 생성 요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 생성 요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 생성 요소는 동일한 참조 부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
도 1은 일 실시예에 따라 변이 프로그램을 생성하는 장치의 개략적인 구성을 설명하기 위한 도면이다. 도 1을 참조하면, 일 실시예에 따른 생성 장치(130)는 예를 들어, 대상 프로그램의 소스 코드(source code)(111)와 함께 빌드 스크립트(build script)(113) 및 구성(configuration) 정보(115)를 입력(110)받을 수 있다.
대상 프로그램의 소스 코드(111)는 예를 들어, C 또는 C++ 프로그램 언어로 작성될 수 있다.
빌드 스크립트(113)는 구성하고자 하는 소프트웨어에 해당하는 프로젝트(project) 및 태스크(task)로 구성될 수 있다. 프로젝트에는 예를 들어, JAR Library, Web application 등이 해당될 수 있다. 태스크는 프로젝트를 구성하는 것들로서, 빌드가 수행하는 작업의 일부에 해당한다. 태스크에는 예를 들어, 몇가지 클래스를 컴파일하거나, JAR 파일을 생성하거나, 또는 다른 압축 파일을 생성하는 것 등이 해당될 수 있다.
생성 장치(130)는 빌드 스크립트(113)를 사용하여 다수개의 소스 코드 파일들로부터 복잡한 C 프로젝트의 변이 프로그램들을 자동으로 생성할 수 있다. 사용자는 빌드 스크립트(113)를 이용함으로써 편리하게 대량의 복합적인 C 프로젝트를 생성 장치(130)에 적용할 수 있다.
사용자는 구성 정보(115)를 이용하여 변이가 적용될 변이 연산자(들)의 타입, 변이 연산자의 정의역 및 변이 연산자의 치역 등을 특정하고, 변이될 소스 코드의 범위를 지정할 수 있다. 구성 정보(115)의 일 예시는 도 3에 도시된 Configuration(340)과 같다.
생성 장치(130)는 대상 프로그램의 소스 코드(111)을 파싱하는 파서(parser)(131), 구성(configuration) 정보(115)를 파싱하는 구성 파서(Conf. parser)(133) 및 변이 연산자(들)(Mutation Operators)(135)을 포함할 수 있다.
변이 연산자(들)(135)에는 예를 들어, OAAN, OLLN, ORRN 등이 포함될 수 있다. 변이 연산자(들)(135)의 일 예시는 아래의 [표 1]과 같다.
Figure 112018045544230-pat00001
사용자는 예를 들어, 사용자 인터페이스를 통해 변이 연산자(135)의 타입(type), 변이 연산자(135)의 정의역(domains) 및 치역(ranges) 등을 특정(또는 선택)할 수 있다. 생성 장치(130)는 대상 프로그램의 대상 코드 범위(code ranges) 또한 변이할 수 있다. 변이 연산자(135)는 ~50 LoC로 구현될 수 있다.
생성 장치(130)는 새로운 변이 연산자들을 보다 쉽게 생성하기 위해 변이 연산자 템프릿(template)(예를 들어, 도 3에 도시된 "MutationOperatorTemplate(330)")을 제공할 수 있다.
생성 장치(130)는 입력된 정보를 처리하여 대상 프로그램에 대응하는 변이 프로그램(들)(Mutant(s))(151) 및 변이 데이터베이스(Mutant DB)(153)를 출력(150)할 수 있다.
변이 데이터베이스(153)는 변이 프로그램들에 대응하는 변이 ID 및 변이 정보의 페어들의 집합에 해당할 수 있다. 보다 구체적으로, 변이 데이터베이스(153)는 변이 ID(Mutation ID), 변이 포인트(Mutation point), 변이 연산자(Mutation operator), 대상 토큰들(Target tokens), 새 토큰들(New tokens) 등을 포함할 수 있다.
일 실시예에 따른 생성 장치(130)는 사용자로부터 입력된 정보를 기초로, 높은 구성 가능성 및 확장성을 갖는 변이 프로그램들을 생성할 수 있다. 또한, 생성 장치(130)는 새로운 변이 연산자를 쉽게 구현할 수 있는 API(Application Programming Interface)와, 소스 코드의 범위뿐만 아니라 변이 연산자의 정의역(domain)과 치역(range)을 설정하는 다양한 옵션들 또한 제공할 수 있다. 여기서, 정의역과 치역은 다음과 같이 정의될 수 있다. 예를 들어, f: X-> Y 일 때, X는 정의역이 되고, Y는 공역이 되며, {f(x) | x ∈ X}는 치역이 된다. 보다 구체적으로, f(x) = x2일 때, 정의역은 {x | x는 모든 실수}가 되고, 치역은 {y | y ≥0인 실수}가 될 수 있다.
또한, 일 실시예에 따른 생성 장치(130)는 변이 대상의 타입(type) 정보를 체크함으로써 실제로 실행 불가능한 무산된(stillborn) 변이 프로그램의 생성을 방지할 수 있다.
도 2는 일 실시예에 따라 변이 프로그램을 생성하는 방법을 나타낸 흐름도이다. 도 2를 참조하면, 일 실시예에 따른 변이 프로그램을 생성하는 장치(이하, '생성 장치')는 대상 프로그램(target program)의 변이 대상과 관련된 사용자의 선택을 입력받는다(210). 변이 대상은 예를 들어, 대상 프로그램에 포함된 변이 연산자, 및 연산자에 대응하는 적어도 하나의 피연산자 등을 포함할 수 있다.
단계(210)에서 생성 장치는 사용자에게 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스(class)를 제공하고, 변이 연산자의 클래스에 대한 사용자의 선택을 입력받을 수 있다. 여기서, 변이 연산자의 클래스는 변이 대상이 되는 대상 변이 연산자, 대상 변이 연산자의 정의역(domain), 대상 변이 연산자의 치역(range), 대상 변이 연산자에 대응하는 치역의 시작 위치 및 종료 위치, 대상 프로그램에서의 변이 위치, 및 대상 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수 등을 포함할 수 있다. 또한, 대상 변이 연산자는 예를 들어, 변이 연산자, 문자열 리터럴 변이 연산자, 함수 호출 변이 연산자 등을 포함할 수 있다.
생성 장치는 단계(210)에서 입력받은 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정한다(220).
단계(220)에서 생성 장치는 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스(compilation database)를 이용하여 변이 대상을 변이한 경우에 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정할 수 있다. 이때, 생성 장치는 대상 프로그램에 대응하는 컴파일 정보를 이용하여 변이 대상을 포함하는 변이 프로그램의 컴파일 성공 여부를 체크함으로써 변이 프로그램의 실행 가능 여부를 결정할 수 있다. 컴파일 데이터베이스는 예를 들어, 컴파일의 대상 프로그램, 컴파일의 대상 프로그램에서 사용된 컴파일 명령, 및 컴파일 명령이 실행된 디렉토리 등에 대한 정보를 포함할 수 있다.
또는 실시예에 따라서, 단계(220)에서 생성 장치는 예를 들어, 사용자의 선택에 따라 대상 프로그램의 변이 대상을 변이하여 변이 프로그램 후보를 생성할 수 있다. 생성 장치는 변이 대상에 대응하는 타입 정보를 기초로 변이 프로그램 후보의 실행 가능 여부를 결정할 수 있다. 생성 장치는 단계(220)에서 결정된 실행 가능 여부의 결정에 기초하여 이후 단계(230)에서 변이 프로그램 후보를 변이 프로그램으로 설정함으로써 변이 프로그램을 생성할 수 있다.
생성 장치는 단계(220)에서 결정된 실행 가능 여부에 따라 변이 대상을 변이함으로써 변이 프로그램을 생성한다(230).
도 3은 일 실시예에 따른 생성 장치의 컴포넌트 아키텍쳐(component architecture)를 도시한 도면이다. 도 3을 참조하면, 일 실시예에 따른 생성 장치의 컴포넌트 아키텍쳐(300)는 178개의 헤더 및 소스 파일과 88개의 클래스로 구성된 9,000 라인의 C++ 코드로 작성될 수 있다.
컴포넌트 아키텍쳐(300)에 포함된 변이 연산자들 각각은 StmtMutantOperator(310) 및/또는 ExprMutantOperator(320)으로부터 승계된(inherited) 클래스에 의해 구현될 수 있다.
도 4는 일 실시예에 따른 적절한 컴파일 정보가 없는 경우에 소스 코드를 실행한 결과를 설명하기 위한 도면이다.
일 실시예에 따른 생성 장치는 많은 디렉토리와 특정 컴파일 명령을 가진 파일로 구성된 대규모의 프로젝트를 위한 변이 프로그램을 생성하는 데에 컴파일 데이터베이스를 이용할 수 있다. 이는 변이 프로그램의 생성이 많은 경우 특정 컴파일 명령에 의존하기 때문이다.
예를 들어, 도 4의 좌측에 도시된 util.c (410)는 변이 프로그램의 생성이 특정 컴파일 명령에 의존하는 경우를 나타낸다.
생성 장치는 util.c (410)를 컴파일링(compiling)하는 데에 필요한 컴파일 정보가 없다면, UTIL 플래그가 정의되어 있지 않는 것으로 간주하고, 도 4의 우측에 도시된 것과 같이 코드의 AST(430)를 생성할 수 있다. 이로 인해 사용자가 UTIL 플래그를 참으로 설정한 채 util.c를 컴파일한다 하더라도, 생성 장치는 util.c (410)의 라인 4에 대한 변이 프로그램을 생성할 수 없게 된다.
이러한 경우, 생성 장치는 주어진 컴파일 데이터베이스에 저장된 컴파일 정보를 활용함으로써 크고 복잡한 프로젝트에 적용 가능하게 할 수 있다. 예를 들어, 생성 장치는 CMake에 -DCMAKE_EXPORT_COMPILE_COMMANDS 플래그를 줘서 실행하는 것으로 프로젝트의 컴파일 데이터베이스를 쉽게 생성할 수 있다. Gyp/Ninja 혹은 BEAR 또한 이러한 목적을 위해 사용될 수 있다.
컴파일 데이터베이스는 파일의 집합에 대한 컴파일 명령어의 모음이다. 생성 장치는 예를 들어, JSON(JavaScript Object Notation) 형식으로 컴파일 데이터베이스를 입력 받을 수 있다. 여기서, JSON 은 속성-값 쌍(attribute-value pairs), 어레이 데이터 타입들(array data types), 및/또는 직렬화 가능 값(serializable value)으로 이루어진 데이터 오브젝트를 전달하기 위한 개방형 표준 포맷이다.
컴파일 데이터베이스의 각 항목은 예를 들어, 컴파일 대상 파일, 사용된 컴파일 명령, 및 명령이 실행된 디렉토리와 같은 세 개의 필드들을 포함할 수 있다.
도 5는 일 실시예에 따른 변이 대상과 관련된 설정 옵션에 따라 변이되는 변이 프로그램들을 설명하기 위한 도면이다. 도 5를 참조하면, 사용자가 설정 옵션을 변경함으로써 대상 프로그램(510)으로부터 변이 연산자 OAAM에 의해 정의역(domain)과 치역(range)이 변경된 변이 프로그램들(530, 550)이 도시된다.
일 실시예에 따른 생성 장치는 다수의 C 소스 코드 파일들에 대하여 선택적으로 변이 프로그램을 생성하기 위해 크게 다음과 같은 네 가지 설정 옵션들을 제공할 수 있다.
1) 설정 옵션 -m mut _op[:A[:B]]는 적용할 변이 연산자(예를 들어, OAAN)를 선택한다. 사용자는 설정 옵션 -m mut _op[:A[:B]]에 의해 필요한 경우에 대체할 대상 토큰의 집합(예를 들어, A = {+,*})과 사용할 새로운 토큰의 집합(예를 들어, B = {-,/})을 선택한다. 여기서, mut _op는 다음과 같은 73개의 미리 정의된 변이 연산자 중 하나가 될 수 있다.
미리 정의된 변이 연산자는 예를 들어, 미리 정의된 63개의 변이 연산자들, SRWS(String Remove White Space), SANL(String Add New Line), 및 SCSR(String Constant for String constant Replacement)의 3개의 새로운 문자열 리터럴(string literal) 변이 연산자들, 및 FGSR (Function call returning scalar for Global Scalar variable Replacement), FLSR (Function call returning scalar for Local Scalar variable Replacement), FGTR (Function call returning structure for Global Structure variable Replacement), FLTR (Function call returning structure for Local Structure variable Replacement), FGPR (Function call returning pointer for Global Pointer variable Replacement), FLPR (Function call returning pointer for Local Pointer variable Replacement), 및 FTWD (Function Call Twiddle Mutations)의 7개의 새로운 함수 호출(function call) 변이 연산자들을 포함할 수 있다.
예를 들어, 변이 연산자 OAAN은 산술 연산자 (+, -, *, /, %)를 다른 산술 연산자로 변이할 수 있다. 사용자는 도 5에 도시된 것과 같이 변이 연산자 OAAN의 대상 정의역을 {+}로, 대상 치역을 {*, /}로 특정(또는 설정)할 수 있다. 이때, -m에 주어지는 대상 정의역과 대상 치역은 반드시 변이 연산자와 타입이 일치해야 한다. 예를 들어, 변이 연산자 OAAN의 경우, 대상 정의역과 치역은 < 또는 >>를 가질 수 없다.
생성 장치는 사용자가 대상 정의역과 대상 치역을 편리하게 설정할 수 있도록 미리 설정된 값을 제공할 수 있다. 예를 들어, -m CCCR:{1,2}:{MEDIAN,MAX}에서 MEDIAN은 대상 프로그램의 상수 중에서 중앙값을 의미하고, MAX는 중앙값들 중에서 최대값을 의미한다.
2) 설정 옵션 -rs mut _range_start는 대상 치역의 시작 위치(예를 들어, 대상 파일 이름, 라인 위치, 열 위치 등)를 지정할 수 있다.
3) 설정 옵션 -re mut_range_end는 대상 치역의 끝 위치를 지정할 수 있다.
4) 설정 옵션 -l max_ num는 각각의 변이 위치와 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수를 제한할 수 있다.
일부 변이 연산자는 많은 수의 변이 프로그램을 생성할 수 있다. 예를 들어, 변이 연산자 CCCR은 대상 프로그램의 상수 리터럴(literal)을 다른 상수 리터럴로 변이 하는데, 이를 통해 많은 변이 프로그램들이 생성될 수 있다. 만약 -l 10이 주어진다면, 생성 장치는 변이 연산자 CCCR의 각 변이 위치에 대해, 최대 10개의 CCCR 변이 프로그램들을 생성할 수 있다.
도 6은 일 실시예에 따라 실행 가능한 변이 프로그램을 생성하는 방법을 설명하기 위한 도면이다.
예를 들어, 생성 장치가 변이 연산자 OAAN에 의해 대상 프로그램(610)에 대한 변이 프로그램들을 생성한다고 하자. 이 경우, 대상 프로그램(610)에서 라인 4에 기재된 "q = p+1"에서 p 및 q 각각의 타입 (정보)은 라인 3에 정의된 것과 같이 정수(int) 포인터 타입일 수 있다. 따라서, 정수 포인터 타입에 대하여는 연산 {*, /, %}가 실행될 수 없고, 연산{-}만이 실행될 수 있다.
생성 장치가 p 및 q 에 대한 타입 (정보)을 체크하지 않고 변이 연산자 OAAN을 실행하는 경우, 630과 같이 실제 실행이 불가능한 연산자들로 변이된 무산된 변이 프로그램들이 생성할 수 있다. 이러한 무산된 변이 프로그램들의 생성에 의해 많은 컴퓨팅 자원이 낭비될 수 있다.
반면, 생성 장치는 p 및 q 에 대한 타입 정보를 체크하고 OAAN을 실행하는 경우, 650과 같이 실제 실행 가능한 연산자에 의해 변이된 실행 가능한 변이 프로그램을 생성할 수 있다.
일 실시예에 따른 생성 장치는 변이 대상의 타입 정보를 기초로, 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정함으로써 컴퓨팅 자원의 낭비를 줄일 수 있다.
일 실시예에 따른 생성 장치는 사용자가 분석에 효과적인 변이 프로그램을 선택하도록 하기 위해, 변이 연산자의 정의역과 치역을 선택하도록 할 수 있다.
도 7은 일 실시예에 따른 변이 연산자 SANL을 위해 구현되는 함수의 소스 코드를 도시한 도면이다. 도 7을 참조하면, 변이 연산자 SANL을 위해 구현되는 함수 IsMutationTarget()의 소스 코드(700)가 도시된다.
일 실시예에 따른 생성 장치는 사용자가 그들 자신의 새로운 변이 연산자를 편리하게 만들 수 있도록 도움을 줄 수 있다.
생성 장치의 변이 연산자는 대상 프로그램의 소스 코드를 변경시키는 규칙으로 정의될 수 있다. 이러한 규칙은 변이 연산자의 대상 정의역과 대상 치역을 토큰의 집합으로 지정하고, 이로부터 변이 연산자가 대상 정의역에 속하는 토큰을 치역에 속하는 토큰으로 대체할 수 있다.
생성 장치의 변이 연산자는 예를 들어, 도 3에 도시된 것과 같이 C 표현식을 변이하는 클래스 ExprMutantOperator(320) 또는 C 구문을 변이하는 클래스 StmtMutantOperator(310)를 승계할 수 있다.
이 두 클래스는 추상 클래스인 MutantOperatorTemplate(330)을 승계할 수 있다. 클래스 MutantOperatorTemplate(330)는 예를 들어, 변이 연산자의 이름, 정의역과 치역, 그리고 네 개의 유틸리티 함수들을 포함할 수 있다. 네 개의 유틸리티 함수들은 예를 들어, 정의역과 치역의 유효성을 검사하는 두 개의 함수들과 정의역과 치역을 설정하는 두 개의 함수들을 포함할 수 있다. 또한, 각 변이 연산자는 두 개의 핵심 함수들(IsMutationTarget(), Mutate())을 구현할 수 있다.
함수 IsMutationTarget()는 현재 구문 및/또는 표현식이 변이되어야 하는지를 확인할 수 있다. 또한, 함수 Mutate()는 실제 변이를 적용할 수 있다.
예를 들어, 개행 문자를 추가하는 새로운 문자열 변이 연산자인 SANL를 생성한다고 가정하자. 변이 연산자 SANL는 대상 문자열의 끝에 개행 문자 '\n'을 추가하는 것으로 대상 StringLiteral의 표현식(e)을 변이할 수 있다. 변이 연산자 SANL의 정의역은 대상 소스 파일 내에 존재하고 변이 하려는 문자열의 집합이다. 도 7의 소스 코드(700)는 SANL::IsMutationTarget 함수가 어떻게 정의되었는지를 보여준다.
도 8은 다른 실시예에 따른 변이 연산자 SANL을 위해 구현되는 함수의 소스 코드를 도시한 도면이다. 도 8을 참조하면, 변이 연산자 SANL을 위해 구현되는 함수(Mutate())의 소스 코드(800)가 도시된다.
함수 Mutate()는 새로운 변이 인트리(MutantEntry)를 변이 데이터베이스(MutantDatabase)에 추가하기 위한 것이다.
변이 엔트리(MutantEntry)는 예를 들어, 변이 연산자의 이름, 대상 구문 및/또는 표현식의 시작과 끝 위치, 변이 하려는 대상 토큰, 및 대상 토큰을 대체할 새 토큰 등을 포함할 수 있다. 도 8의 소스 코드(800)는 SANL::Mutate 함수가 어떻게 구현될 수 있는지를 보여준다.
또한, 일 실시예에 따른 생성 장치는 사용자가 쉽게 고유의 변이 연산자를 생성할 수 있도록 몇 가지 유틸리티 클래스들을 제공할 수 있다.
예를 들어, 사용자가 대상 프로그램의 문자열을 다른 문자열로 바꾸는 새로운 변이 연산자 SCSR을 만들고자 한다고 가정하자. 생성 장치는 전체 대상 프로그램의 소스 코드의 구문 및/또는 표현식을 분류한 리스트를 포함하는 SymbolTable 클래스를 제공할 수 있다. 변이 연산자 SCSR의 생성을 위해, 사용자는 대상 소스 코드 파일의 StringLiteral 구문식 리스트인 SymbolTable::stringliteral_list_를 사용할 수 있다. 사용자는 예를 들어, stringliteral_list_의 각 원소에 대해 ConvertToString을 호출하는 것으로 대상 문자열을 대체할 문자열을 얻을 수 있다.
도 9는 일 실시예에 따라 변이 프로그램의 실행 가능 여부를 결정하는 방법을 설명하기 위한 소스 코드(900)를 도시한 도면이다. 도 9를 참조하면, 일 실시예에 따른 생성 장치가 무산된 변이 프로그램의 생성을 배제하고, 실행 가능한 변이 프로그램을 생성하는 방법이 도시된다.
생성 장치는 다양한 타입 정보들을 활용하여 무산된 변이 프로그램의 생성을 배제할 수 있다.
예를 들어, 생성 장치는 대상 C 연산자의 피연산자 타입 정보를 활용함으로써 무산된 변이 프로그램의 생성을 배제할 수 있다. 도 9의 소스 코드(900)는 생성 장치가 무산된 변이 프로그램의 생성을 어떻게 배제하는지를 보여준다. 소스 코드(900)의 라인 5에 대해 +를 %로 변이하는 OAAN을 적용하는 것은 무산된 변이 프로그램을 생성하게 된다. 이는 %가 피연산자로 오직 정수만을 받을 수 있으나 이 경우에는 %의 두 번째 피연산자인 f가 부동 소수점형 숫자(float)를 받게 되기 때문이다. 생성 장치는 라인 5에 기재된 대상 표현식("arr[1] + f")에 속하는 피연산자의 타입을 분석함으로써 이러한 실행 불가능한 무산된 변이 프로그램이 생성되는 것을 배제할 수 있다.
또는, 생성 장치는 대상 변수의 타입 정보를 활용함으로써 무산된 변이 프로그램의 생성을 방지할 수 있다. 이때, 대상 변수의 타입 정보는 StmtContext 클래스에 저장되어 있는 대상 변수의 문맥을 포함할 수 있다. 예를 들어, 대상 변수 a의 증가(a++), 감소(a--), 주소 참조(&a), 역참조(*a)를 포함하는 표현식을 파싱할 때, 생성 장치는 대상 변수 a를 상수로 변이하지 않는다.
또다른 예시로서, 만약 변이 연산자 VSRR(Scalar Variable Replacement)이 소스 코드(900)의 라인 4에 기재된 정수(int)형 변수 a(이때, a는 배열(arr[])의 인덱스로 사용됨)를 부동 소수점형 변수 f로 변이한다면, 배열의 인덱스가 정수형 타입을 가져야 하기 때문에 생성된 변이 프로그램은 문법적으로 잘못된 변이 프로그램이 된다. 이러한 경우, 생성 장치는 변수 a를 부동 소수점형 변수 f로 변이 하지 않는다.
이 밖에도, 생성 장치는 C 언어로 작성된 대상 프로그램의 소스 코드에서 문법을 위반하는 무산된 변이 프로그램의 생성을 막기 위해 goto 구문과 switch 구문의 정보를 활용할 수 있다. 예를 들어, 소스 코드(900)에서 라인 8을 제거하는 것은 라인 13에 있는 goto 구문의 레이블 구문('done')을 지워 컴파일 에러를 발생시킬 수 있다. 때문에 변이 연산자 SSDL(Statement Deletion)는 소스 코드(900)의 라인 7에 있는 if 구문에 적용되어서는 안된다. 또한, switch 구문의 경우, 생성 장치는 중복된 케이스(case) 레이블 에러로 인한 무산된 변이 프로그램의 생성을 방지하기 위해 모든 케이스 레이블들의 값을 확인할 수 있다.
전술한 바와 같이, 일 실시예에 따른 생성 장치는 변이 연산자의 변이에 의해 타입 정보의 위반 여부 및/또는 문법의 위반 여부를 미리 체크함으로써 무산된 변이 프로그램의 생성을 미리 배제하여 실제 실행 가능한 변이 프로그램만이 생성되도록 할 수 있다.
도 10은 다른 실시예에 따라 변이 프로그램을 생성하는 방법을 나타낸 흐름도이다. 도 10을 참조하면, 일 실시예에 따른 생성 장치는 대상 프로그램에서 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 기초로, 변이 대상의 후보를 결정한다(1010). 단계(1010)에서 생성 장치는 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스를 이용하여 변이 대상을 변이한 경우에 변이된 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정할 수 있다. 이때, 생성 장치는 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이 프로그램의 컴파일 성공 여부를 체크함으로써 변이 프로그램의 실행 가능 여부를 결정할 수 있다. 생성 장치는 변이 프로그램의 실행 가능 여부에 따라 변이 대상의 후보를 결정할 수 있다.
생성 장치는 변이 대상의 후보에 대한 사용자의 선택을 입력받는다(1020). 생성 장치는 사용자에게 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스를 제공할 수 있다. 생성 장치는 클래스에 대한 사용자의 선택을 입력받을 수 있다. 변이 연산자의 클래스는 예를 들어, 변이 대상이 되는 대상 변이 연산자, 대상 변이 연산자의 정의역, 대상 변이 연산자의 치역, 대상 변이 연산자에 대응하는 치역의 시작 위치 및 종료 위치, 대상 프로그램에서의 변이 위치, 및 대상 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수 등을 포함할 수 있다.
생성 장치는 변이 대상의 후보에 대한 사용자의 선택을 기초로, 대상 프로그램의 변이 대상을 변이하여 변이 프로그램을 생성한다(1030).
도 11은 일 실시예에 따른 변이 프로그램을 생성하는 장치의 블록도이다. 도 11을 참조하면, 일 실시예에 따른 생성 장치(1100)는 입력 인터페이스(1110), 및 프로세서(1130)를 포함한다. 테스트 장치(1100)는 메모리(1150)를 더 포함할 수 있다. 입력 인터페이스(1110), 프로세서(1130), 및 메모리(1150)는 통신 버스(1105)를 통해 서로 통신할 수 있다.
입력 인터페이스(1110)는 대상 프로그램의 변이 대상과 관련된 사용자의 선택을 입력받는다. 입력 인터페이스(1110)는 사용자에게 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스를 제공하고, 변이 연산자의 클래스에 대한 사용자의 선택을 입력받을 수 있다.
프로세서(1130)는 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정한다. 프로세서(1130)는 실행 가능 여부에 따라 변이 대상을 변이함으로써 변이 프로그램을 생성한다.
메모리(1150)는 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스를 저장할 수 있다.
프로세서(1130)는 메모리(1150)에 저장된 컴파일 데이터베이스에서 대상 프로그램에 대응하는 컴파일 정보를 이용하여 변이 대상을 변이한 경우에 변이 대상을 포함하는 대상 프로그램의 컴파일 성공 여부를 체크함으로써 대상 프로그램의 실행 가능 여부를 결정할 수 있다.
또한, 프로세서(1130)는 변이 프로그램을 생성하는 프로그램을 실행하고, 생성 장치(1100)를 제어할 수 있다. 프로세서(1130)에 의하여 실행되는 프로그램 코드는 메모리(1150)에 저장될 수 있다.
메모리(1150)는 대상 프로그램의 소스 코드 및 미리 설정된 테스트 입력 세트 등을 포함하는 정보를 저장할 수 있다. 또한, 메모리(1150)는 프로세서(1130)에서 생성된 변이 프로그램을 저장할 수 있다.
메모리(1150)는 휘발성 메모리 또는 비 휘발성 메모리일 수 있다. 메모리(1150)는 예를 들어, 프로세서(1130)에 의해 실행될 때, 프로세서(1130)가 도 1 내지 도 10과 관련하여 설명하는 과정들 중 어느 하나 또는 이들의 조합을 실행하도록 하는 명령어들을 저장할 수 있다.
또는 실시예에 따라서, 입력 인터페이스(1110), 및 프로세서(1130)는 다음과 같이 동작할 수도 있다.
입력 인터페이스(1110)는 변이 대상의 후보에 대한 사용자의 선택을 입력받는다.
프로세서(1130)는 대상 프로그램에서 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 기초로, 변이 대상의 후보를 결정한다. 프로세서(1130)는 변이 대상의 후보에 대한 사용자의 선택을 기초로 대상 프로그램의 변이 대상을 변이하여 변이 프로그램을 생성한다. 프로세서(1130)는 컴파일 데이터베이스를 이용하여 변이 대상을 변이한 경우에 변이된 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정할 수 있다. 프로세서(1130)는 변이 프로그램의 실행 가능 여부에 따라 변이 대상의 후보를 결정할 수 있다.
이 밖에도, 프로세서(1130)는 도 1 내지 도 10에서 생성 장치와 관련하여 기술된 동작들 중 어느 하나 또는 이들의 조합을 실행할 수 있다.
본 발명의 일 실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 실행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 생성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 실행하도록 특별히 생성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 실행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 생성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변이가이 가능하다. 그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
1100: 생성 장치
1105: 통신 버스
1110: 입력 인터페이스
1130: 프로세서
1150: 메모리

Claims (20)

  1. 대상 프로그램(target program)의 변이 대상과 관련된 사용자의 선택을 입력받는 단계;
    상기 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하는 단계; 및
    상기 실행 가능 여부에 따라 상기 변이 대상을 변이함으로써 변이 프로그램을 생성하는 단계
    를 포함하고,
    상기 사용자의 선택을 입력받는 단계는
    상기 사용자로부터 컴포넌트 아키텍쳐의 구성 정보를 이용하여 특정된 변이가 적용될 변이 연산자의 타입, 변이 연산자의 정의역 및 변이 연산자의 치역 및 변이될 소스 코드의 범위를 지정받는 단계
    를 포함하는, 변이 프로그램을 생성하는 방법.
  2. 제1항에 있어서,
    상기 변이 대상은
    상기 대상 프로그램에 포함된 변이 연산자, 및 상기 연산자에 대응하는 적어도 하나의 피연산자 중 적어도 하나를 포함하는, 변이 프로그램을 생성하는 방법.
  3. 제1항에 있어서,
    상기 사용자의 선택을 입력받는 단계는
    상기 사용자에게 상기 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스(class)를 제공하는 단계; 및
    상기 클래스에 대한 상기 사용자의 선택을 입력받는 단계
    를 포함하는, 변이 프로그램을 생성하는 방법.
  4. 제3항에 있어서,
    상기 변이 연산자의 클래스는
    상기 변이 대상이 되는 대상 변이 연산자, 상기 대상 변이 연산자의 정의역(domain), 상기 대상 변이 연산자의 치역(range), 상기 대상 변이 연산자에 대응하는 치역의 시작 위치, 및 종료 위치, 상기 대상 프로그램에서의 변이 위치, 및 상기 대상 변이 연산자에 의해 생성되는 변이 프로그램의 최대 개수 중 적어도 하나를 포함하는, 변이 프로그램을 생성하는 방법.
  5. 제4항에 있어서,
    상기 대상 변이 연산자는
    변이 연산자, 문자열 리터럴 변이 연산자, 함수 호출 변이 연산자 중 적어도 하나를 포함하는, 변이 프로그램을 생성하는 방법.
  6. 제1항에 있어서,
    상기 실행 가능 여부를 결정하는 단계는 상기 사용자의 선택에 따라 상기 대상 프로그램의 변이 대상을 변이하여 변이 프로그램 후보를 생성하는 단계; 및
    상기 변이 대상에 대응하는 타입 정보를 기초로 상기 변이 프로그램 후보의 실행 가능 여부를 결정하는 단계
    를 포함하고,
    상기 변이 프로그램을 생성하는 단계는
    상기 실행 가능 여부의 결정에 기초하여 상기 변이 프로그램 후보를 상기 변이 프로그램으로 설정하는 단계
    를 포함하는, 변이 프로그램을 생성하는 방법.
  7. 제1항에 있어서,
    상기 변이 프로그램의 실행 가능 여부를 결정하는 단계는
    상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스(compilation database)를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하는 단계
    를 포함하는, 변이 프로그램을 생성하는 방법.
  8. 제7항에 있어서,
    상기 변이 프로그램의 실행 가능 여부를 결정하는 단계는
    상기 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이 대상을 포함하는 변이 프로그램의 컴파일 성공 여부를 체크하는 단계
    를 포함하는, 변이 프로그램을 생성하는 방법.
  9. 제7항에 있어서,
    상기 컴파일 데이터베이스는
    컴파일의 대상 프로그램, 상기 컴파일의 대상 프로그램에서 사용된 컴파일 명령, 및 상기 컴파일 명령이 실행된 디렉토리 중 적어도 하나를 포함하는, 변이 프로그램을 생성하는 방법.
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 하드웨어와 결합되어 제1항 내지 제9항 중 어느 하나의 항의 방법을 실행시키기 위하여 컴퓨터 판독 가능한 기록 매체에 저장된 컴퓨터 프로그램.
  16. 대상 프로그램의 변이 대상과 관련된 사용자의 선택을 입력받는 입력 인터페이스; 및
    상기 사용자의 선택에 대응하는 변이 대상의 타입 정보를 기초로, 상기 변이 대상을 포함하는 변이 프로그램의 실행 가능 여부를 결정하고, 상기 실행 가능 여부에 따라 상기 변이 대상을 변이함으로써 변이 프로그램을 생성하는 프로세서
    를 포함하고,
    상기 입력 인터페이스는
    상기 사용자로부터 컴포넌트 아키텍쳐의 구성 정보를 이용하여 특정된 변이가 적용될 변이 연산자의 타입, 변이 연산자의 정의역 및 변이 연산자의 치역 및 변이될 소스 코드의 범위를 지정받는, 변이 프로그램을 생성하는 장치.
  17. 제16항에 있어서,
    상기 입력 인터페이스는
    상기 사용자에게 상기 대상 프로그램의 소스 파일을 변경시키는 규칙으로 정의된 변이 연산자의 클래스를 제공하고, 상기 클래스에 대한 상기 사용자의 선택을 입력받는, 변이 프로그램을 생성하는 장치.
  18. 제16항에 있어서,
    상기 대상 프로그램에 대응하는 컴파일 명령어들을 포함하는 컴파일 정보를 저장하는 컴파일 데이터베이스가 저장된 메모리
    를 더 포함하고,
    상기 프로세서는
    상기 컴파일 데이터베이스에서 상기 대상 프로그램에 대응하는 컴파일 정보를 이용하여 상기 변이 대상을 변이한 경우에 상기 변이 대상을 포함하는 대상 프로그램의 컴파일 성공 여부를 체크함으로써 상기 대상 프로그램의 실행 가능 여부를 결정하는, 변이 프로그램을 생성하는 장치.
  19. 삭제
  20. 삭제
KR1020180053145A 2018-05-09 2018-05-09 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치 KR102114549B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180053145A KR102114549B1 (ko) 2018-05-09 2018-05-09 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180053145A KR102114549B1 (ko) 2018-05-09 2018-05-09 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20190128869A KR20190128869A (ko) 2019-11-19
KR102114549B1 true KR102114549B1 (ko) 2020-05-25

Family

ID=68771223

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180053145A KR102114549B1 (ko) 2018-05-09 2018-05-09 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102114549B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100857862B1 (ko) * 2007-06-05 2008-09-10 한국전자통신연구원 파일 영역 정보와 변이 규칙을 이용한 파일 변이 방법 및그 시스템
KR100949800B1 (ko) * 2007-12-18 2010-03-30 한국전자통신연구원 단위 테스트 코드를 이용하는 단위 코드의 테스트 방법 및테스트 장치

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100041447A (ko) * 2008-10-14 2010-04-22 삼성전자주식회사 테스트 자동화 장치 및 테스트 자동화 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100857862B1 (ko) * 2007-06-05 2008-09-10 한국전자통신연구원 파일 영역 정보와 변이 규칙을 이용한 파일 변이 방법 및그 시스템
KR100949800B1 (ko) * 2007-12-18 2010-03-30 한국전자통신연구원 단위 테스트 코드를 이용하는 단위 코드의 테스트 방법 및테스트 장치

Also Published As

Publication number Publication date
KR20190128869A (ko) 2019-11-19

Similar Documents

Publication Publication Date Title
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
Groce et al. An extensible, regular-expression-based tool for multi-language mutant generation
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
US8364696B2 (en) Efficient incremental parsing of context sensitive programming languages
US20110145799A1 (en) Path-sensitive dataflow analysis including path refinement
JP6904043B2 (ja) 未知のプログラムバイナリのための入力発見
CN110058861B (zh) 源码处理方法及装置、存储介质、电子设备
CN105389262A (zh) 一种针对界面测试生成测试建议的方法和装置
KR20190015285A (ko) Cpu 이용 및 코드 리팩토링을 위한 쿼리 최적화기
CN103136100B (zh) 一种Android测试的方法和系统
US10146530B1 (en) Simulating and evaluating code branch merge
Hills et al. Static, lightweight includes resolution for PHP
Khatchadourian et al. [Engineering Paper] A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
CN111190643A (zh) 程序代码注释的生成方法、系统、电子设备及存储介质
CN111914527A (zh) 自动聊天机器人语言表达生成
Yang et al. Memoise: a tool for memoized symbolic execution
Nguyen et al. Varis: IDE support for embedded client code in PHP web applications
KR102114549B1 (ko) 설정 변경이 자유롭고 확장성이 좋게 변이 프로그램을 생성하는 방법 및 장치
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
CN109032946B (zh) 一种测试方法和装置、计算机可读存储介质
Oliveira pytest Quick Start Guide: Write better Python code with simple and maintainable tests
Agarwal et al. Copilot Evaluation Harness: Evaluating LLM-Guided Software Programming
US9117023B2 (en) Dynamic generation of test segments

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