KR101519450B1 - 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체 - Google Patents

멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체 Download PDF

Info

Publication number
KR101519450B1
KR101519450B1 KR1020130082302A KR20130082302A KR101519450B1 KR 101519450 B1 KR101519450 B1 KR 101519450B1 KR 1020130082302 A KR1020130082302 A KR 1020130082302A KR 20130082302 A KR20130082302 A KR 20130082302A KR 101519450 B1 KR101519450 B1 KR 101519450B1
Authority
KR
South Korea
Prior art keywords
test
coverage
condition
program
execution
Prior art date
Application number
KR1020130082302A
Other languages
English (en)
Other versions
KR20150007806A (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 KR1020130082302A priority Critical patent/KR101519450B1/ko
Publication of KR20150007806A publication Critical patent/KR20150007806A/ko
Application granted granted Critical
Publication of KR101519450B1 publication Critical patent/KR101519450B1/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/3664Environments for testing or debugging software
    • 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/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

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

Abstract

멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체가 개시된다. 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값을 수신받는 입력부 및 수신된 테스트 대상 멀티스레드 프로그램 및 수신된 테스트 입력값을 이용하여 커버리지 예측정보를 생성하고, 생성된 커버리지 예측정보를 이용하여 테스트 대상 멀티스레드 프로그램의 테스트를 수행하고, 수행된 테스트의 결과 정보를 산출하는 제어부를 포함할 수 있다.

Description

멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체{Auto-test generation device, method and recording medium using test coverage information for multi-thread program}
본 발명은 자동 테스트 생성 장치에 관한 것으로 상세하게는 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체에 관한 것이다.
프로그램 설계의 실수나 미처 생각하지 못한 변수 등에 의해서 프로그램은 작성자의 의도와 다르게 또는 비효율적으로 동작할 가능성이 있다. 프로그램이 원하지 않는 결과를 내는 것을 버그(Bug) 또는 프로그램 오류(Error)라고 부른다. 이런 버그 또는 프로그램 오류를 막기 위해 프로그램 개발을 할 때에 테스트 과정이 반드시 필요하기 때문에 프로그램을 자동으로 테스트하면 경제성, 효율성에서 유리하다.
이러한 의미에서 프로그램이 올바르게 작성되었는지 자동 검사를 하는 자동 테스트 생성 장치가 주목되고 있다. 자동 테스트 생성 장치는 테스트 대상 프로그램을 입력으로 받아 테스트 대상 프로그램의 실행을 생성한다. 자동 테스트 생성 장치는 주어진 시간 내에 테스트 대상 프로그램의 다양한 실행 생성을 목표로 한다. 자동 테스트 생성 장치는 입력 대상 프로그램의 종류에 따라, 순차적 프로그램용 자동 테스트 생성 장치와 멀티스레드 프로그램용 자동 테스트 생성 장치로 구분한다.
순차적 프로그램용 자동 테스트 생성 장치는 테스트 대상 프로그램의 테스팅을 위해 입력 값을 생성하지만, 동시 실행 스레드 간의 상호작용을 조절하지 않으므로, 멀티스레드 프로그램의 자동 테스트에 적합하지 않다.
멀티스레드 프로그램용 자동 테스트 생성 방법은 랜덤 스트레스 테스트 생성 방법, 소프트웨어 모델체킹 기반 테스트 생성 방법 및 오류패턴 기반 테스트 생성 방법이 종래에 사용되어 왔다. 또한 종래 기술들은 크기가 큰 멀티스레드 프로그램에서 정확한 오류 검출을 목표로 하는 테스트 생성에 한계를 가지고 있다. 각 종류에 따른 구체적인 제한점은 다음과 같다.
랜덤 스트레스 테스트 생성 방법은 멀티스레드 프로그램에 높은 워크로드를 부하하고, 장시간 검사하는 스트레스 테스팅 기술을 주로 적용하고 있다. 또한 불확정적인 스레드 스케줄링으로 인해 생성되는 수많은 동작 경우로 인해, 스트레스 테스팅을 통해 오류가 검출될 확률은 굉장히 낮기 때문에, 스트레스 테스팅은 오류 검출 효과 및 효율이 낮다.
소프트웨어 모델체킹 기반 테스트 생성 방법은 멀티스레드 프로그램의 스레드 스케줄링을 명령어 단위로 세밀하게 조작함으로써 가능한 모든 동작을 검사하는 기술이다. 상기 기술은 프로그램 크기 증가에 따라 모델체킹에 소요되는 시간 및 메모리 사용량이 폭발적으로 증가하므로, 산업체에서 개발하는 실제적인 멀티스레드 프로그램에는 현실적으로 적용이 어렵다.
오류패턴 기반 테스트 생성 방법은 빈번히 발생하는 오류에 관련된 코드 패턴을 정의하고, 멀티스레드 프로그램의 테스트 생성시 기존에 정의된 오류 패턴에 해당하는 실행 경우를 선별적으로 검사하는 기술이다. 복잡한 동시성 오류를 단순한 오류 패턴에 해당하는 실행 경우를 선별적으로 검사하는 기술이다. 복잡한 동시성 오류를 단순한 오류 패턴을 통해 검출하기 때문에, 패턴으로 발견되지 않는 오류의 경우, 테스트로 검출이 불가능하다. 멀티스레드 프로그램이 복잡해짐에 따라 다양한 동시성 오류가 발생하는 만큼, 소수의 특정 오류 패턴에 특화된 테스트 생성 기술은 프로그램 신뢰성의 실제적인 향상에는 효과가 제한적이다.
따라서, 자동 테스트 생성 방법의 오류 검출 능력의 제한성, 오류 검출의 비효율성 및 제한된 확장성을 개선하기 위해 많은 연구가 되고 있는 실정이다.
본 발명이 이루고자 하는 기술적인 과제는 특정 패턴에 해당하는 오류 검출에 국한되지 않고, 일반적인 오류의 전반적 검출을 할 수 있는 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체를 제공하는데 있다.
본 발명이 이루고자 하는 다른 기술적인 과제는 테스트 커버리지 정보를 통해 테스트 대상 멀티스레드 프로그램의 동일한 실행 요소를 중복적으로 검사하는 경우를 피함으로써 시간 효율이 높은 테스트를 수행할 수 있는 자동 테스트 생성 장치, 방법 및 기록매체를 제공하는데 있다.
본 발명이 이루고자 하는 또 다른 기술적인 과제는 프로그램의 규모에 상관없이 오류 검사를 수행할 수 있는 자동 테스트 생성 장치, 방법 및 기록매체를 제공하는데 있다.
본 발명이 이루고자 하는 또 다른 기술적인 과제는 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행하는 자동 테스트 생성 장치, 방법 및 기록매체를 제공하는데 있다.
자동 테스트 생성 장치는 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값을 수신받는 입력부 및 상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 커버리지 예측정보를 생성하고, 상기 생성된 커버리지 예측정보를 이용하여 상기 테스트 대상 멀티스레드 프로그램의 테스트를 수행하고, 상기 수행된 테스트의 결과 정보를 산출하는 제어부를 포함할 수 있다.
상기 테스트 대상 멀티스레드 프로그램, 상기 커버리지 예측정보 및 상기 테스트의 결과 정보 중 적어도 하나가 저장되는 저장부를 더 포함할 수 있다.
상기 제어부는, 상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 스레드 스케줄링을 조건으로 표현한 테스트 커버리지를 추정하고, 상기 추정된 테스트 커버리지를 이용하여 커버리지 예측정보를 생성하는 커버리지 예측부 및 상기 생성된 커버리지 예측정보, 상기 테스트 대상 멀티스레드 프로그램 및 상기 테스트 입력값을 이용하여 테스트를 실행하고, 상기 실행된 테스트의 결과 정보를 산출하는 테스트 생성부를 포함할 수 있다.
상기 커버리지 예측부는, 상기 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드 및 동기화 코드 전에 자동으로 탐침을 삽입할 수 있다.
상기 커버리지 예측부는, 상기 삽입된 탐침이 추출하는 프로그램의 동적 정보를 이용하여 실행 모델 데이터(execution model data)를 생성할 수 있다.
상기 커버리지 예측부는, 상기 생성된 실행 모델 데이터를 분석하여 상기 스레드 스케줄링으로 달성 가능한 테스트 커버리지를 추정할 수 있다.
상기 테스트 생성부는, 상기 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드 및 동기화 명령 코드의 전후에 각 차례에 실행될 스레드 순서를 결정하는 코드 및 현재 실행에서 달성한 테스트 커버리지를 측정하고 기록하는 코드를 삽입할 수 있다.
상기 테스트 생성부는, 상기 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행하여 상기 스레드 스케줄링을 생성할 수 있다.
자동 테스트 생성 방법은 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값을 수신받는 단계, 상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 커버리지 예측정보를 생성하는 단계 및 상기 생성된 커버리지 예측정보 및 상기 테스트 입력값을 이용하여 상기 테스트 대상 멀티스레드 프로그램의 테스트를 수행하고, 상기 수행된 결과 정보를 산출하는 단계를 포함할 수 있다.
본 발명에 따른 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체에 의하면, 특정 패턴에 해당하는 오류 검출에 국한되지 않고, 일반적인 오류의 전반적 검출을 제공할 수 있다.
또한 테스트 커버리지 정보를 통해 테스트 대상 멀티스레드 프로그램의 동일한 실행을 중복적으로 검사하는 경우를 피함으로써 시간 효율이 높은 테스트를 제공함으로써 업무 능력을 향상할 수 있다.
또한 프로그램의 규모에 상관없이 오류 검사를 제공할 수 있다.
또한 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행하여 테스트 단계에 활용함으로써 소프트웨어의 품질 향상을 기대할 수 있다.
도 1은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 구성요소를 도시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 커버리지 예측부의 구성요소를 도시한 블록도이다.
도 3는 본 발명의 일 실시예에 따른 테스트 생성부의 구성요소를 도시한 블록도이다.
도 4는 본 발명의 일 실시예에 따른 프로그램 실행부의 실행 모델 데이터 생성 과정을 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 테스트 실행부의 실행 과정에 대한 알고리즘을 도시한 예시도이다
도 6은 본 발명의 일 실시예에 따른 자동 테스트 생성 방법의 수행과정을 도시한 순서도이다.
도 7은 본 발명의 일 실시예에 따른 커버리지 예측정보 생성 방법의 수행과정을 도시한 순서도이다.
도 8은 본 발명의 일 실시예에 따른 멀티스레드 프로그램 테스트 방법의 수행과정을 도시한 순서도이다.
도 9는 본 발명의 일 실시예에 따른 코드 삽입된 멀티스레드 프로그램 테스팅의 수행과정을 도시한 순서도이다.
도 10은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 효과성을 설명하기 위한 그래프를 도시한 도면이다.
도 11은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 효율성을 설명하기 위한 그래프를 도시한 도면이다.
이하 본 발명의 실시예를 첨부된 도면들을 참조하여 상세히 설명할 수 있다. 우선 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 할 수 있다. 또한 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 당업자에게 자명하거나 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략할 수 있다.
도 1은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 구성요소를 도시한 블록도이다.
도 1을 참조하면, 자동 테스트 생성 장치(1)는 효과적인 멀티스레드 프로그램 테스트를 위하여 스레드 스케줄링을 자동으로 생성할 수 있다. 자동 테스트 생성 장치(1)는 한 멀티스레드 프로그램에 대하여 여러 개의 서로 다른 스레드 스케줄링이 가능할 수 있다.
멀티스레드 프로그램은 동시에 실행되는 여러 개의 스레드 실행으로 이루어진 프로그램을 뜻한다. 일반적으로 순차적 프로그램의 실행은 하나의 스레드 실행으로 이루어지므로, 특정 입력값에 대해 하나의 출력값을 가진다. 하지만 멀티스레드 프로그램은 동시에 실행되는 스레드 간에 여러 상호작용이 허용되므로, 특정 입력값에 대해서도 여러 개의 출력값을 가질 수 있다.
스레드 스케줄링은 여러 개의 동시 실행 스레드를 가지는 멀티스레드 프로그램에서 각 스레드의 명령 사이의 실행 순서일 수 있다.
자동 테스트 생성 장치(1)는 테스트 대상 멀티스레드 프로그램의 실행 중에 동적 정보를 이용하여 상기 스레드 스케줄링을 생성할 수 있다. 또한 자동 테스트 생성 장치(1)는 보다 다양하고 유용한 스레드 스케줄링을 생성하기 위해 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행할 수 있다.
자동 테스트 생성 장치(1)는 입력부(110), 제어부(120), 디스플레이부(130) 및 저장부(140)를 포함할 수 있다.
입력부(110)는 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값과 테스트 최대 실행 횟수를 수신할 수 있다.
제어부(120)는 입력부(110)에서 수신된 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 커버리지 예측정보를 생성할 수 있다. 제어부(120)는 저장부(140)에 저장된 멀티스레드 프로그램을 이용하여 커버리지 예측정보를 생성할 수 있다. 제어부(120)는 생성된 커버리지 예측정보, 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 테스트 대상 멀티스레드 프로그램의 실제 테스트 실행하고, 테스트의 결과 정보를 생성할 수 있다. 상기 테스트의 결과 정보는 프로그램의 오류 검출 여부일 수 있다. 제어부(120)는 커버리지 예측부(122) 및 테스트 생성부(126)을 포함할 수 있다.
커버리지 예측부(122)는 입력부(110)에서 수신된 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 커버리지 예측정보를 생성할 수 있다. 커버리지 예측부(122)는 테스트 대상 멀티스레드 프로그램의 다양한 스레드 스케줄링을 조건으로 표현한 테스트 커버리지를 추정하여 커버리지 예측정보를 생성할 수 있다.
상기 테스트 커버리지는 프로그램 구조로부터 추출한 프로그램 실행에 대한 조건 집합으로, 테스트의 진행 정도를 정량적으로 측정하기 위해서 개발된 기법이다. 테스트 커버리지 장치는 프로그램의 코드정보를 기초로 테스트 커버리지 조건 집합을 자동으로 생성할 수 있다. 특정 테스트 커버리지 조건은 프로그램의 실행이 특정한 경로나 상태를 만족하게 될 때, “달성”되게 된다고 정의할 수 있다.
상기 커버리지 예측정보는 테스트를 무한정으로 수행하게 될 때, 최종적으로 달성 가능할 것으로 예측되는 커버리지 조건의 집합일 수 있다.
테스트 생성부(126)는 생성된 커버리지 예측정보, 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 테스트 대상 멀티스레드 프로그램의 실제 테스트를 실행할 수 있다. 또한 테스트 생성부(126)는 실행된 테스트를 이용하여 테스트 결과를 생성할 수 있다.
디스플레이부(130)는 제어부(120)에서 생성된 테스트 결과를 사용자에게 디스플레이 할 수 있다. 디스플레이부(130)는 액정, 프로젝트, 모니터, TV 및 헤드업 디스플레이(hand-up display) 중 적어도 하나를 이용하여 테스트 결과를 디스플레이 할 수 있다.
저장부(140)는 테스트 대상 멀티스레드 프로그램이 저장될 수 있다. 저장부(140)는 제어부(120)에서 사용하는 프로그램이나 알고리즘이 저장될 수 있다. 또한 저장부(140)는 제어부(120)에서 생성된 커버리지 예측정보 및 테스트의 결과 정보가 저장될 수 있다.
도 2는 본 발명의 일 실시예에 따른 커버리지 예측부의 구성요소를 도시한 블록도이다.
도 2를 참조하면, 커버리지 예측부(122)는 테스트 대상 멀티스레드 프로그램 및 테스트 입력값을 수신받을 수 있다. 커버리지 예측부(122)는 테스트 커버리지를 추정하여 커버리지 예측정보를 생성할 수 있다. 커버리지 예측부(122)는 탐침 삽입부(210), 프로그램 실행부(220), 커버리지 모델 분석부(230) 및 커버리지 예측정보 생성부(240)를 포함할 수 있다.
탐침 삽입부(210)는 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드(data access statement)와 동기화 코드(synchronization statement) 전에 자동으로 탐침(probe)를 삽입할 수 있다. 탐침 삽입부(210)는 삽입된 탐침을 이용하여 제1 계측 프로그램(instrumented program)을 생성할 수 있다. 상기 제1 계측 프로그램은 탐침이 삽입된 테스트 대상 멀티스레드 프로그램일 수 있다.
상기 탐침은 프로그램 실행 중간에 해당 코드가 실행할 경우, 어떠한 스레드에서 어떠한 순서로 어떠한 메모리를 참조하는지에 대한 동적 정보를 추출하는 역할을 하는 프로그램 코드일 수 있다.
프로그램 실행부(220)는 생성된 제1 계측 프로그램을 테스트 입력값에 대하여 실행할 수 있다. 프로그램 실행부(220)는 실행 중 제1 계측 프로그램에 삽입된 탐침이 추출하는 프로그램의 동적 정보를 이용하여 실행 모델 데이터(execution model data)를 생성할 수 있다. 상기 수집된 동적 정보 및 실행 모델 데이터는 저장부(140)에 저장될 수 있다. 상기 실행 모델 데이터는 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행이 몇 개의 스레드로 구성되고, 상기 스레드는 명령(operation)의 순열로 지시될 수 있다. 각 명령은 실행 코드 정보, 실행한 명령의 종류 및 참조한 메모리 주소에 대한 기록을 지시할 수 있다.
프로그램 실행부(220)는 동시성 프로그램을 위한 실행 모델 데이터를 유한한 스레드의 집합으로 정의할 수 있다. 상기 스레드는 유한한 원자성을 지닌 액션들로 구성될 수 있다.
임의의 액션(action) p는 다음과 같은 속성을 지닐 수 있다. 스레드(p)는 액션 p를 실행하는 스레드일 수 있다. 연산자(p)는 액션 p의 연산자일 수 있다. 상기 연산자는 싱크(Sync)그룹, 스레드(thread)그룹, 데이터(Data)그룹 타입을 가질 수 있다. 연산자(p) ∈ {싱크 그룹 ∪ 스레드 그룹 ∪ 데이터 그룹}를 만족할 수 있다.
싱크 그룹은 락(lock) 및 언락(unlock)을 포함할 수 있다. 스레드 그룹은 스레드 생성(thread-creation) 및 스레드 조인(thread-join)을 포함할 수 있다. 데이터 그룹은 읽기(read), 쓰기(write)를 포함할 수 있다.
피연산자(p)는 액션 p의 피연산자이다. 연산자(p) ∈ 싱크 그룹을 만족하면, 피연산자(p)는 락에 대응될 수 있다. 연산자(p) ∈ 스레드 그룹을 만족하면, 피연산자(p)는 스레드에 일치될 수 있다. 연산자(p) ∈ 데이터 그룹을 만족하면, 피연산자(p)는 읽기 및 쓰기를 위한 변수 및 메모리의 주소일 수 있다.
loc(p)는 액션 p의 대응되는 소스 코드의 주소일 수 있다. lockset(p)는 액션 p가 실행될 경우의 스레드(p)에 의해 유지되는 락의 집합일 수 있다.
스레드가 같은 두 연산 p와 q에 대해 lockset(p, q)는 액션 p가 실행되는 시점으로부터 액션 q가 실행되는 시점까지 유지되는 락의 집합일 수 있다.
액션 p의 prev(p)는 스레드(p)에 존재하는 액션 중 p의 실행 직전에 실행되는 액션에 대응할 수 있다. 또한 액션 p의 next(p)는 스레드(p)에 존재하는 액션 중 p의 실행 직후에 실행되는 액션에 대응할 수 있다.
동시성 대상 프로그램의 인터리브(interleaved) 실행(σ)은 모든 스레드의 연속으로 정의될 수 있다. σ[i]는 인터리브 σ의 i번째 액션일 수 있다. enabled(s)는 상태 s에 실행 가능한 액션들의 집합일 수 있다.
액션 p와 액션 q에 대해 order(p, q) 관계를 통하여, 실행 모델에 해당하는 모든 인터리브드 실행에서 항상 p의 실행이 q의 실행을 우선되도록 강제하는 경우로 정의할 수 있다.
프로그램 실행부(220)는 동기식 커버리지(syncronization coverage)에서 커버리지 조건은 코드 라인의 숫자 조합으로 표현될 수 있다. 이것을 동기식 페어(Syncronization Pair, SP)라고 정의할 수 있다. 프로그램 실행부(220)는 커버리지 조건을 SP로 구현할 수 있다. 프로그램 실행부(220)는 blocking, blocked, follows, PSet, all-use, LR-DEF, access-pair, statement-pair 등의 방법으로 커버리지 조건을 표현할 수 있다.
프로그램 실행부(220)는 SP의 커버리지 조건을 하기 조건에 만족시킬 수 있다.
SP의 커버리지 만족 범주 조건은 첫째는 loc(σ[i]) = l1 및 loc(σ[j]) = l2 이고, 둘째는 연산자(σ[i]) = 연산자(σ[j]) = 락 이며, 셋째는 l1, l2의 피연산자가 동일하고, 넷째는 i 및 j사이에 동일한 연산자 및 동일한 피연산자를 사용하는 경우가 없는 경우일 수 있다. 상기 동일한 연산자 및 동일한 피연산자는 i 또는 j일 수 있다.
프로그램 실행부(220)는 실행 모델 데이터를 생성할 수 있고, 상기 실행 모델 데이터의 스레드를 순차적으로 실행할 수 있다. 상기 스레드는 동기식 블록인 락(lock), 언락(unlock)을 포함할 수 있다.
커버리지 모델 분석부(230)는 프로그램 실행부(220)에서 생성된 실행 모델 데이터를 분석할 수 있다. 커버리지 모델 분석부(230)는 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행에서 스레드 스케줄링 조작으로 달성 가능한 테스트 커버리지를 추정할 수 있다. 커버리지 모델 분석부(230)는 blocking, blocked, follows, PSet, all-use, LR-DEF, access-pair 및 statement-pair 중 적어도 하나의 테스트 커버리지를 사용자의 선택에 따라 이용할 수 있다.
SP 커버리지 조건 <l1, 12>가 달성 가능할 것으로 예측되는 경우는 하기 조건이 만족될 경우일 수 있다.
실행 모델 데이터가 loc(p) = l1 및 loc(q) = l2이고, 둘째 연산자(p) = 연산자(q) = 락이며, 셋째 피연산자(p) = 피연산자(q)인 p와 q가 존재하는 경우, 스레드(p) 및 스레드(q)가 같은 때, q = nest(p)인 경우 및 스레드(p)가 다를 때, 첫째 lockset(p, next(p)) ∩ lockset(q)가 공집합이고, 둘째 lockset(p) ∩ lockset(prev(q), q)가 공집합이며, 셋째 order(p, q)가 만족하지 않을 경우 중 적어도 하나의 경우일 수 있다.
커버리지 예측정보 생성부(240)는 커버리지 모델 분석부(230)에서 최종적으로 추정된 달성 가능한 테스트 커버리지에 관한 정보인 커버리지 예측정보를 생성할 수 있다.
도 3는 본 발명의 일 실시예에 따른 테스트 생성부의 구성요소를 도시한 블록도이다.
도 3을 참조하면, 테스트 생성부(126)는 테스트 대상 멀티스레드 프로그램, 테스트 입력값 및 커버리지 예측정보를 수신 받을 수 있다. 테스트 생성부(126)는 테스트 대상 멀티스레드 프로그램의 실제 테스트를 실행할 수 있다. 테스트 생성부(126)는 테스트 결과를 생성할 수 있다. 테스트 생성부(126)는 코드 삽입부(310), 테스트 실행부(320), 테스트 프로그램 실행횟수 조절부(330), 런타임 스레드 스케줄링부(runtime thread scheduler)(340) 및 커버리지 측정부(coverage measurement)(350)를 포함한다.
코드 삽입부(310)는 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드와 동기화 명령 코드의 전후에, 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행하는 코드를 삽입할 수 있다. 코드 삽입부(310)는 삽입된 코드를 이용하여 제2 계측 프로그램을 생성할 수 있다. 상기 제2 계측 프로그램은 테스트 대상 멀티스레드 프로그램을 실제 테스트 실행을 위한 프로그램일 수 있다.
테스트 실행부(320)는 제2 계측 프로그램, 테스트 입력값 및 커버리지 예측정보를 수신할 수 있다. 테스트 실행부(320)는 제2 계측 프로그램을 테스트 입력값에 대해서 실행할 수 있다. 테스트 실행부(320)는 실행 과정 중 제2 계측 프로그램에 삽입된 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행시키는 코드를 함께 실행하여 스레드 스케줄링이 생성할 수 있다. 테스트 실행부(320)는 상기 코드를 실행하는 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행하여 상기 스레드 스케줄링을 생성할 수 있다.
런타임 스레드 스케줄링부(340)는 프로그램의 실행상태 정보와 입력받는 커버리지 예측정보 및 커버리지 달성정보(achieved coverage information)를 기초로 각 차례에 실행될 스레드 순서를 결정할 수 있다. 여기서, 상기 결정은 현재까지 달성되지 않은 테스트 커버리지를 최대한 달성하도록 고안된 휴리스틱 알고리즘을 따를 수 있다.
커버리지 측정부(350)는 현재 실행에서 달성한 테스트 커버리지를 측정하고, 이를 커버리지 달성정보에 실시간으로 기록할 수 있다.
테스트 실행부(320)는 제2 계측 프로그램의 실행이 종료되면 함께 종료할 수 있다. 또한 이 때까지 생성된 커버리지 달성정보는 저장부(140)에 저장되어 향후 테스트 실행부(320)에 이어서 이용될 수 있다.
도 4는 본 발명의 일 실시예에 따른 프로그램 실행부의 실행 모델 데이터 생성 과정을 설명하기 위한 도면이다.
도 4를 참조하면, 도 4(a)는 실행 모델 데이터의 생성 과정을 자바 프로그램 코드로 도시한 것이고, 도 4(b)는 실행 모델 데이터의 생성 과정을 블록도로 도시한 것이다.
도 4(a)는 프로그램 실행부(220)가 2개의 스레드를 포함하고 있는 것을 나타내고 있다. 상기 스레드는 스레드 1 및 스레드 2를 구분할 수 있다. 스레드 1 및 스레드 2는 2개의 동기식 블럭인 락(m)을 포함할 수 있다. 동기식 블록은 락 및 언락 상태를 나타낼 수 있다. 상기 락 상태는 2a, 4a, 2b 및 4b 이고, 상기 언락 상태는 3a, 5a, 3b 및 5b이다.
도 4(b)는 프로그램 실행부(220)가 2개의 스레드를 포함하고 있는 것을 나타내고 있다. 도 4(b)는 도 4(a)와 대응될 수 있다. 따라서 도 4(a)의 락 상태인 2a는 도 4(b)의 락 상태인 2α와 대응될 수 있다.
프로그램 실행부(220)는 순차적으로 프로그램을 실행하기 때문에 역순에 해당되는 락의 실행은 불가능할 수 있다. 즉, 프로그램 실행부(220)는 4a를 실행 후, 2a를 실행할 수 없고, 4b를 실행 후, 2b를 실행할 수 없다. 프로그램 실행부(220)가 가능한 SP를 나열하면 하기와 같다.
Figure 112013063013023-pat00001

도 5는 본 발명의 일 실시예에 따른 테스트 실행부의 실행 과정에 대한 알고리즘을 도시한 예시도이다
도 5를 참조하면, 테스트 실행부(320)는 최대 달성을 목표로 하는 휴리스틱 알고리즘을 포함할 수 있다.
라인 1의 curr는 현재 실행에서 커버리지가 달성된 정보들의 집합일 수 있다.
라인 2의 paused는 런타임 스레드 스케줄링부(340)가 스레드 간의 실행 순서를 통제하기 위해 멈춘 스레드의 명령의 집합일 수 있다.
라인 3의 s는 상태를 나타내는데 수신한 테스트 입력값을 통해 s를 결정할 수 있다.
라인 4의 enabled(s)는 상태 s에 실행 가능한 명령들의 집합일 수 있다. 상기 명령은 액션과 동일한 의미일 수 있다.
라인 10 내지 라인 16은 휴리스틱 알고리즘일 수 있다. 상기 휴리스틱 알고리즘은 3가지의 경우가 있을 수 있다. 일단 paused = enabled(s)는 런타임 스레드 스케줄링부(340)가 스레드 선택하기에 용이한 상태를 나타낼 수 있다. 이는 실행할 수 있는 스레드 및 런타임 스레드 스케줄링부(340)가 멈춘 스레드의 명령이 동일하기 때문이다.
라인 10 내지 라인 11은 스레드 스케줄링부(340)가 스레드 스케줄링 시점을 기준으로 이전에 달성하지 못한 테스트 커버리지를 달성하게 하는 명령의 스레드를 우선적으로 선택할 수 있다.
라인 12 내지 라인 13은 상기 명령이 없는 경우, 다음 스레드 스케줄링 시점에서 이전에 달성하지 못한 테스트 커버리지를 달성하도록 하는 동작을 포함하는 명령의 스레드를 선택할 수 있다.
라인 14 내지 라인 16은 상기 2가지 경우를 만족하는 스레드가 없는 경우, num_cov_req 함수를 통해 현재까지 달성되지 않았지만 향후 달성될 것으로 추정되는 테스트 커버리지 조건들(paused\covered)에 대한 가장 연관이 적은 명령의 스레드를 선택할 수 있다. 테스트 커버리지의 추가 달성과 연관될 가능성이 높은 명령이 향후 추가적인 스레드 스케줄링의 선택 기회를 더 가지도록, 연관성이 낮은 명령을 우선적으로 실행할 수 있다.
테스트 실행부(320)는 휴리스틱 알고리즘을 이용하여 테스트 커버리지를 효과적이고 효율적으로 달성하는 스레드 스케줄링을 생성할 수 있다.
도 6은 본 발명의 일 실시예에 따른 자동 테스트 생성 방법의 수행과정을 도시한 순서도이다.
도 6을 참조하면, 자동 테스트 생성 장치(1)는 효과적인 멀티스레드 프로그램 테스트를 위하여 스레드 스케줄링을 자동으로 생성할 수 있다. 자동 테스트 생성 장치(1)는 한 멀티스레드 프로그램에 대하여 여러 개의 서로 다른 스레드 스케줄링이 가능할 수 있다. 자동 테스트 생성 장치(1)는 보다 다양하고 유용한 스레드 스케줄링을 생성하기 위해 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행할 수 있다.
자동 테스트 생성 장치(1)는 멀티스레드 프로그램 코드 및 사용자 데이터를 기초로 커버리지 예측정보를 생성한다(S100). 자동 테스트 생성 장치(1)는 수신된 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 커버리지 예측정보를 생성할 수 있다. 자동테스트 생성 장치(1)는 테스트 대상 멀티스레드 프로그램의 다양한 스레드 스케줄링을 조건으로 표현한 테스트 커버리지를 추정할 수 있다.
자동 테스트 생성 장치(1)는 생성된 커버리지 예측정보 및 사용자 데이터를 이용하여 멀티스레드 프로그램을 테스트한다(S110). 자동 테스트 생성 장치(1)는 생성된 커버리지 예측정보, 테스트 대상 멀티스레드 프로그램 및 사용자 테스트 입력값을 이용하여 테스트 대상 멀티스레드 프로그램의 실제 테스트를 실행할 수 있다. 자동 테스트 생성 장치(1)는 실행된 테스트를 이용하여 테스트 결과를 생성할 수 있다.
도 7은 본 발명의 일 실시예에 따른 커버리지 예측정보 생성 방법의 수행과정을 도시한 순서도이다.
도 7을 참조하면, 커버리지 예측부(122)는 테스트 대상 멀티스레드 프로그램 및 테스트 입력값을 수신받을 수 있다.
커버리지 예측부(122)는 멀티스레드 프로그램 코드에 탐침을 삽입한다(S200). 커버리지 예측부(122)는 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드와 동기화 코드 전에 자동으로 탐침을 삽입할 수 있다. 상기 탐침은 동적 정보를 추출하는 역할을 하는 프로그램 코드일 수 있다.
커버리지 예측부(122)는 탐침이 삽입된 멀티스레드 프로그램을 실행한다(S210). 커버리지 예측부(122)는 탐침이 삽입된 멀티스레드 프로그램을 실행하여 탐침이 추출하는 프로그램의 동적 정보를 수집할 수 있다. 상기 수집된 동적 정보는 저장부(140)에 저장될 수 있다.
커버리지 예측부(122)는 실행 모델 데이터를 생성한다(S220). 커버리지 예측부(122)는 추출된 동적 정보를 이용하여 실행 모델 데이터를 생성할 수 있다. 상기 실행 모델 데이터는 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행이 몇 개의 스레드로 구성되고, 상기 스레드는 명령의 순열로 지시될 수 있다.
커버리지 예측부(122)는 테스트 커버리지를 추정한다(S230). 커버리지 예측부(122)는 생성된 실행 모델 데이터를 분석할 수 있다. 커버리지 예측부(122)는 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행에서 스레드 스케줄링 조작으로 달성 가능한 테스트 커버리지를 추정할 수 있다.
커버리지 예측부(122)는 커버리지 예측정보를 생성한다(S240). 커버리지 예측부(122)는 최종적으로 추정된 달성 가능한 테스트 커버리지에 관한 정보인 커버리지 예측정보를 생성할 수 있다.
도 8은 본 발명의 일 실시예에 따른 멀티스레드 프로그램 테스트 방법의 수행과정을 도시한 순서도이다.
도 8을 참조하면, 테스트 생성부(126)는 테스트 대상 멀티스레드 프로그램, 테스트 입력값 및 커버리지 예측정보를 수신 받을 수 있다. 테스트 생성부(126)는 테스트 대상 멀티스레드 프로그램의 실제 테스트를 실행할 수 있다. 테스트 생성부(126)는 테스트 결과를 생성할 수 있다.
테스트 생성부(126)는 멀티스레드 프로그램에 코드를 삽입한다(S300). 테스트 생성부(126)는 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드와 동기화 명령 코드의 전후에, 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행시키는 코드를 삽입할 수 있다.
테스트 생성부(126)는 코드가 삽입된 멀티스레드 프로그램을 테스팅한다(S310). 테스트 생성부(126)는 테스트 대상 프로그램에 대한 하나의 실행을 할 수 있다.
테스트 생성부(126)는 현재 실행 횟수와 최대 실행 횟수를 비교한다(S320). 테스트 생성부(126)는 실행 횟수가 수신한 최대 실행 횟수의 최대값(bound)이 만족될 때까지 반복해서 프로그램을 테스팅할 수 있다.
도 9는 본 발명의 일 실시예에 따른 코드 삽입된 멀티스레드 프로그램 테스팅의 수행과정을 도시한 순서도이다.
도 9를 참조하면, 테스트 실행부(320)는 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행시키는 코드가 삽입된 멀티스레드 프로그램을 테스팅할 수 있다.
테스트 실행부(320)는 코드 삽입된 멀티스레드 프로그램을 실행한다(S400). 테스트 실행부(320)는 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행시키는 코드가 삽입된 멀티스레드 프로그램을 실행할 수 있다.
테스트 실행부(320)는 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행한다(S410). 테스트 실행부(320)는 상기 멀티스레드 프로그램을 실행함으로써 런타임 스레드 스케줄링부(340) 및 커버리지 측정부(350)를 실행할 수 있다.
테스트 실행부(320)는 실행될 스레드 순서를 결정한다(S420). 테스트 실행부(320)는 런타임 스레드 스케줄링부(340)를 실행시킴으로써 실행될 스레드 순서를 결정할 수 있다. 런타임 스레드 스케줄링부(340)는 프로그램의 실행상태 정보, 입력받는 커버리지 예측정보 및 커버리지 달성정보를 기초로 각 차례에 실행될 스레드 순서를 결정할 수 있다. 런타임 스레드 스케줄링 부(340)의 동작은 도 7에 개시된 휴리스틱 알고리즘에 상응할 수 있다.
테스트 실행부(320)는 스레드를 실행한다(S430). 테스트 실행부(320)는 결정된 스레드 순서에 따라 스레드를 실행할 수 있다.
테스트 실행부(320)는 달성한 테스트 커버리지를 측정한다(S440). 테스트 실행부(320)는 커버리지 측정부(350)를 실행시킴으로써 현재 실행에서 달성한 테스트 커버리지를 측정할 수 있다.
테스트 실행부(320)는 측정된 테스트 커버리지를 기록한다(S450). 테스트 실행부(320)는 측정된 테스트 커버리지를 커버리지 달성정보에 실시간으로 기록할 수 있다. 상기 커버리지 달성정보는 저장부(140)에 저장될 수 있다. 커버리지 측정부(350)는 현재 실행에서 달성한 테스트 커버리지를 측정하고, 이를 커버리지 달성정보에 실시간으로 기록할 수 있다.
테스트 실행부(320)는 실행 완료를 판단한다(S460). 테스트 실행부(320)는 상기 코드 삽입된 멀티스레드 프로그램이 종료되면 함께 종료할 수 있다.
도 10은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 효과성을 설명하기 위한 그래프를 도시한 도면이다.
도 10을 참조하면, 자동 테스트 생성 장치(1)는 랜덤 테스트 기법들보다 높은 효과성을 보여준다. 도 10은 프로그램을 500번 실행시켜서 산출한 결과값이다. [표 1]는 도 10을 수치화하여 값으로 도시한 표이다.
Figure 112013063013023-pat00002
[표 1]는 멀티스레드 입력프로그램에 따른 평균값, 최소값 및 최대값을 도시한다. 또한 [표 1]는 랜덤 테스트 기법과 자동 테스트 생성 장치(1)에 포함된 TSA를 비교한다. [표 1]를 보면, TSA는 랜덤 테스트 기법인 RND-y, RND-s10 및 RND-s100 보다 높은 효과성을 보여준다.
그래프(1010)는 Array List1에 대한 그래프이다. 그래프(1010)는 가로축이 테스트 실행 횟수를 의미하고 세로축이 커버리지를 의미한다. 그래프(1010)는 선의 종류에 따라 TSA, RND-y 평균, RND-s10 평균 및 RND-s100 평균으로 분리하여 각 테스트 기법을 비교한다. 따라서, 그래프(1010)는 TSA가 다른 랜덤 테스트 기법들보다 뛰어난 효과성이 있다는 것을 보여준다.
그래프(1010)와 동일하게, Array List2에 대한 그래프(1020), Hash Set1에 대한 그래프(1030), Hash Set2에 대한 그래프(1040), Hash Table1에 대한 그래프(1050), Hash Table2에 대한 그래프(1060), Cache4J에 대한 그래프(1070), Pool에 대한 그래프(1080) 및 VFS2에 대한 그래프(1090)는 TSA가 다른 랜덤 테스트 기법보다 뛰어난 효과성이 있다는 것을 보여준다.
도 11은 본 발명의 일 실시예에 따른 자동 테스트 생성 장치의 효율성을 설명하기 위한 그래프를 도시한 도면이다.
도 11을 참조하면, 자동 테스트 생성 장치(1)는 랜덤 테스트 기법들보다 높은 효율성을 보여준다. 도 11은 프로그램을 30분동안 실행시켜서 산출한 결과값이다. [표 2]는 도 11을 수치화하여 값으로 도시한 표이다.
Figure 112013063013023-pat00003
[표 2]는 멀티스레드 입력프로그램에 따른 커버리지 및 포화지점에 도달하는 실행시간을 도시한다. 또한 [표 2]는 랜덤 테스트 기법과 자동 테스트 생성 장치(1)에 포함된 TSA를 비교한다. [표 2]를 보면, TSA는 랜덤 테스트 기법인 RND-y, RND-s10 및 RND-s100 보다 높은 효율성을 보여준다.
그래프(1110)는 Array List1에 대한 그래프이다. 그래프(1110)는 가로축이 포화지점에 도달하는 실행시간을 의미하고 세로축이 커버리지를 의미한다. 그래프(1110)는 선의 종류에 따라 TSA, RND-y 평균, RND-s10 평균 및 RND-s100 평균으로 분리하여 각 테스트 기법을 비교한다. 따라서, 그래프(1110)는 TSA가 다른 랜덤 테스트 기법들보다 뛰어난 효율성이 있다는 것을 보여준다.
그래프(1110)와 동일하게, Array List2에 대한 그래프(1120), Hash Set1에 대한 그래프(1130), Hash Set2에 대한 그래프(1140), Hash Table1에 대한 그래프(1150), Hash Table2에 대한 그래프(1160), Cache4J에 대한 그래프(1170), Pool에 대한 그래프(1180) 및 VFS2에 대한 그래프(1190)는 TSA가 다른 랜덤 테스트 기법보다 뛰어난 효율성이 있다는 것을 보여준다.
본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 장치에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 장치에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
이상에서 본 발명의 바람직한 실시예에 대해 도시하고 설명하였으나, 본 발명은 상술한 특정의 바람직한 실시예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진 자라면 누구든지 다양한 변형 실시가 가능한 것은 물론이고, 그와 같은 변경은 청구범위 기재의 범위 내에 있게 된다.
1: 자동 테스트 생성 장치 110: 입력부
120: 제어부 122: 커버리지 예측부
126: 테스트 생성부 130: 디스플레이부
140: 저장부 210: 탐침 삽입부
220: 프로그램 실행부 230: 커버리지 모델 분석부
240: 커버리지 예측정보 생성부 310: 코드 삽입부
320: 테스트 실행부 330: 테스트 프로그램 실행횟수 조절부
340: 런타임 스레드 스케줄링부 350: 커버리즈 측정부

Claims (10)

  1. 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값을 수신받는 입력부;
    상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 커버리지 예측정보를 생성하고, 상기 생성된 커버리지 예측정보를 이용하여 상기 테스트 대상 멀티스레드 프로그램의 테스트를 수행하고, 상기 수행된 테스트의 결과 정보를 산출하는 제어부; 및
    상기 테스트 대상 멀티스레드 프로그램, 상기 커버리지 예측정보 및 상기 테스트의 결과 정보 중 적어도 하나가 저장되는 저장부;를 포함하고,
    상기 제어부는,
    상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 스레드 스케줄링을 조건으로 표현한 테스트 커버리지를 추정하고, 상기 추정된 테스트 커버리지를 이용하여 커버리지 예측정보를 생성하는 커버리지 예측부; 및
    상기 생성된 커버리지 예측정보, 상기 테스트 대상 멀티스레드 프로그램 및 상기 테스트 입력값을 이용하여 테스트를 실행하고, 상기 실행된 테스트의 결과 정보를 산출하는 테스트 생성부를 포함하며,
    상기 커버리지 예측부는,
    상기 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드 및 동기화 코드 전에 자동으로 탐침을 삽입하고, 상기 삽입된 탐침이 추출하는 프로그램의 동적 정보를 이용하여 실행 모델 데이터(execution model data)를 생성하고,
    상기 생성된 실행 모델 데이터를 분석하여 상기 스레드 스케줄링으로 달성 가능한 테스트 커버리지 조건의 집합을 추정하며,
    상기 실행 모델 데이터는,
    실행 코드 정보, 실행한 명령(operation)의 종류 및 참조한 메모리 주소에 대한 기록을 지시하는 명령의 순열로 지시되며, 상기 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행을 구성하는 복수의 스레드로 구성되고,
    상기 달성 가능한 테스트 커버리지의 추정은,
    코드 라인의 숫자 조합으로 표현되는 테스트 커버리지 조건을 추정조건에 따라 추정하며,
    상기 추정조건은,
    상기 생성된 실행 모델 데이터가 상기 테스트 커버리지 조건에 따라 소스코드 주소 집합과 동일한 액션의 집합을 포함하는 것을 만족시키는 제1 조건;
    상기 제1 조건을 만족하는 각각의 상기 액션이 상기 테스트 커버리지 조건에 따라 순서대로 연산자 조건을 만족시키는 제2 조건;
    각각의 상기 액션이 상기 테스트 커버리지 조건에 기술된 피연산자 조건을 만족시키는 제3 조건; 및
    상기 액션 사이의 동기화 명령에 따른 실행 순서 조건을 검사한 결과, 상기 액션이 인접하여 실행 가능한 것으로 추정되어 상기 실행 순서 조건에 기술된 순서대로 실행이 가능한 것을 만족시키는 제4 조건을 포함하는 것을 특징으로 하는 자동 테스트 생성 장치.
  2. 제 1항에 있어서,
    상기 테스트 생성부는,
    상기 테스트 대상 멀티스레드 프로그램의 실행상태 정보, 상기 커버리지 예측정보 및 기 설정된 커버리지 달성정보(achieved coverage information)를 기초로 각 차례에 실행될 스레드 순서를 결정하는 것을 특징으로 하는 자동 테스트 생성 장치.
  3. 제 2항에 있어서,
    상기 테스트 생성부는,
    상기 스레드 스케줄링 시점을 기준으로 이전에 달성하지 못한 테스트 커버리지 조건을 달성하게 하는 제1 명령의 스레드를 선택하는 것을 특징으로 하는 자동 테스트 생성 장치.
  4. 제 3항에 있어서,
    상기 테스트 생성부는,
    상기 제1 명령의 스레드가 없는 경우, 다음 스레드 스케줄링 시점에서 이전에 달성하지 못한 테스트 커버리지를 달성하도록 하는 동작을 포함하는 제2 명령의 스레드를 선택하는 것을 특징으로 하는 자동 테스트 생성 장치.
  5. 제 4항에 있어서,
    상기 테스트 생성부는,
    상기 제1 및 제2 명령의 스레드를 만족하는 스레드가 없는 경우, 현재까지 달성되지 않았지만 향후 달성될 것으로 추정되는 테스트 커버러지 조건들과 가장 연관이 적은 제3 명령의 스레드를 실행하는 것을 특징으로 하는 자동 테스트 생성 장치.
  6. 삭제
  7. 제 1항에 있어서,
    상기 테스트 생성부는,
    상기 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드, 동기화 명령 코드의 전후에 각 차례에 실행될 스레드 순서를 결정하는 코드 및 현재 실행에서 달성한 테스트 커버리지 조건을 측정하고 기록하는 코드를 삽입하는 것을 특징으로 하는 자동 테스트 생성 장치.
  8. 제 1항에 있어서,
    상기 테스트 생성부는,
    상기 테스트 대상 멀티스레드 프로그램의 실행 중간에 스레드 스케줄링을 통제하는 작업을 동적으로 수행하여 상기 스레드 스케줄링을 생성하는 것을 특징으로 하는 자동 테스트 생성 장치.
  9. 컴퓨터 프로세서가 테스트 대상 멀티스레드 프로그램 및 사용자가 테스트를 위해 제공하는 테스트 입력값을 수신받는 단계;
    상기 컴퓨터 프로세서가 상기 수신된 테스트 대상 멀티스레드 프로그램 및 상기 수신된 테스트 입력값을 이용하여 커버리지 예측정보를 생성하는 단계; 및
    상기 컴퓨터 프로세서가 상기 생성된 커버리지 예측정보 및 상기 테스트 입력값을 이용하여 상기 테스트 대상 멀티스레드 프로그램의 테스트를 수행하고, 상기 수행된 테스트의 결과 정보를 산출하는 단계를 포함하고,
    상기 커버리지 예측정보를 생성하는 단계는,
    상기 테스트 대상 멀티스레드 프로그램의 데이터 조작 코드 및 동기화 코드 전에 자동으로 탐침을 삽입하고, 상기 삽입된 탐침이 추출하는 프로그램의 동적 정보를 이용하여 실행 모델 데이터(execution model data)를 생성하고,
    상기 생성된 실행 모델 데이터를 분석하여 상기 스레드 스케줄링으로 달성 가능한 테스트 커버리지 조건의 집합을 추정하며,
    상기 실행 모델 데이터는,
    실행 코드 정보, 실행한 명령(operation)의 종류 및 참조한 메모리 주소에 대한 기록을 지시하는 명령의 순열로 지시되며, 상기 테스트 대상 멀티스레드 프로그램의 테스트 입력값에 대한 실행을 구성하는 복수의 스레드로 구성되고,
    상기 달성 가능한 테스트 커버리지의 추정은,
    코드 라인의 숫자 조합으로 표현되는 테스트 커버리지 조건을 추정조건에 따라 추정하며,
    상기 추정조건은,
    상기 생성된 실행 모델 데이터가 상기 테스트 커버리지 조건에 따라 소스코드 주소 집합과 동일한 액션의 집합을 포함하는 것을 만족시키는 제1 조건;
    상기 제1 조건을 만족하는 각각의 상기 액션이 상기 테스트 커버리지 조건에 따라 순서대로 연산자 조건을 만족시키는 제2 조건;
    각각의 상기 액션이 상기 테스트 커버리지 조건에 기술된 피연산자 조건을 만족시키는 제3 조건; 및
    상기 액션 사이의 동기화 명령에 따른 실행 순서 조건을 검사한 결과, 상기 액션이 인접하여 실행 가능한 것으로 추정되어 상기 실행 순서 조건에 기술된 순서대로 실행이 가능한 것을 만족시키는 제4 조건을 포함하는 것을 특징으로 하는 자동 테스트 생성 방법.
  10. 제 9항에 기재된 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020130082302A 2013-07-12 2013-07-12 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체 KR101519450B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130082302A KR101519450B1 (ko) 2013-07-12 2013-07-12 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130082302A KR101519450B1 (ko) 2013-07-12 2013-07-12 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체

Publications (2)

Publication Number Publication Date
KR20150007806A KR20150007806A (ko) 2015-01-21
KR101519450B1 true KR101519450B1 (ko) 2015-05-12

Family

ID=52570631

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130082302A KR101519450B1 (ko) 2013-07-12 2013-07-12 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체

Country Status (1)

Country Link
KR (1) KR101519450B1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101685299B1 (ko) * 2015-07-30 2016-12-09 한국과학기술원 비결정적인 이벤트 처리가 가능한 프로그램의 자동 테스트 방법 및 자동 테스트 장치
EP3497574A4 (en) 2016-08-09 2020-05-13 Sealights Technologies Ltd. SYSTEM AND METHOD FOR THE CONTINUOUS EXAMINATION AND PROVISION OF SOFTWARE
US11086759B2 (en) 2018-09-27 2021-08-10 SeaLights Technologies LTD System and method for probe injection for code coverage
US11573885B1 (en) 2019-09-26 2023-02-07 SeaLights Technologies LTD System and method for test selection according to test impact analytics
CN110781088A (zh) * 2019-10-30 2020-02-11 口碑(上海)信息技术有限公司 软件系统测试方法及装置
CN113742158B (zh) * 2020-06-15 2024-10-18 北京沃东天骏信息技术有限公司 系统容量规划的方法和装置
KR102603330B1 (ko) * 2021-10-22 2023-11-17 슈어소프트테크주식회사 테스트 커버리지 표시 장치 및 표시 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002099584A (ja) 2000-09-25 2002-04-05 Toshiba Corp 設計検証システム、設計検証方法および設計検証プログラムを格納したコンピュータ読取り可能な記録媒体

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002099584A (ja) 2000-09-25 2002-04-05 Toshiba Corp 設計検証システム、設計検証方法および設計検証プログラムを格納したコンピュータ読取り可能な記録媒体

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
홍신 외 4인, "높은 커버리지를 달성하는 테스트 쓰레드 스케쥴링 생성", http://rosaec.snu.ac.kr/meet/file/20120118a.pdf

Also Published As

Publication number Publication date
KR20150007806A (ko) 2015-01-21

Similar Documents

Publication Publication Date Title
KR101519450B1 (ko) 멀티스레드 프로그램에 대한 테스트 커버리지 정보를 이용한 자동 테스트 생성 장치, 방법 및 기록매체
Yu et al. Maple: A coverage-driven testing tool for multithreaded programs
US8719789B2 (en) Measuring coupling between coverage tasks and use thereof
US8225291B2 (en) Automated detection of application performance bottlenecks
Dwyer et al. Parallel randomized state-space search
US20100058295A1 (en) Dynamic Test Coverage
US8719799B2 (en) Measuring coupling between coverage tasks and use thereof
US20140033174A1 (en) Software bug predicting
US8978009B2 (en) Discovering whether new code is covered by tests
US20100131931A1 (en) Sampling techniques for dynamic data-race detection
US20170220455A1 (en) Test case generation using a constraint graph solver
US10169002B2 (en) Automated and heuristically managed solution to quantify CPU and path length cost of instructions added, changed or removed by a service team
US8448147B2 (en) Heterogenic Coverage Analysis
Goulão et al. Software evolution prediction using seasonal time analysis: a comparative study
US20160188441A1 (en) Testing multi-threaded applications
US10922779B2 (en) Techniques for multi-mode graphics processing unit profiling
Arora et al. A systematic review of approaches for testing concurrent programs
Feldman et al. Extending LDMS to enable performance monitoring in multi-core applications
Feldt Do system test cases grow old?
US20130318499A1 (en) Test script generation
US9189372B2 (en) Trace coverage analysis
Fedorova et al. Performance comprehension at WiredTiger
US8903700B2 (en) Concretization of abstracted traces
JPWO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
US20110239197A1 (en) Instance-based field affinity optimization

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
FPAY Annual fee payment

Payment date: 20180425

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191125

Year of fee payment: 5

R401 Registration of restoration