KR102271857B1 - 테스트 자동화 시스템 - Google Patents

테스트 자동화 시스템 Download PDF

Info

Publication number
KR102271857B1
KR102271857B1 KR1020190074046A KR20190074046A KR102271857B1 KR 102271857 B1 KR102271857 B1 KR 102271857B1 KR 1020190074046 A KR1020190074046 A KR 1020190074046A KR 20190074046 A KR20190074046 A KR 20190074046A KR 102271857 B1 KR102271857 B1 KR 102271857B1
Authority
KR
South Korea
Prior art keywords
test
branch
paths
candidates
case
Prior art date
Application number
KR1020190074046A
Other languages
English (en)
Other versions
KR20200145269A (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 KR1020190074046A priority Critical patent/KR102271857B1/ko
Publication of KR20200145269A publication Critical patent/KR20200145269A/ko
Application granted granted Critical
Publication of KR102271857B1 publication Critical patent/KR102271857B1/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/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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/3692Test management for test results analysis

Abstract

테스트 자동화 시스템이 개시된다. 일 실시예에 따른 테스트 자동화 방법은 테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하고, 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하고, 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하고, 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하고, 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하는 단계들을 포함한다.

Description

테스트 자동화 시스템{TEST AUTOMATION SYSTEM}
아래 실시예들은 테스트 자동화 시스템에 관한 것이다.
소프트웨어 프로그램의 신규 개발이나 업데이트 작업을 위해 개발 코드가 생성 또는 수정되면, 프로그램의 배포 전에 해당 코드를 통해 프로그램이 정상적으로 동작하는지 테스트하고 오류를 디버깅하는 작업이 필요하다. 종래에는 소프트웨어의 개발과 테스트가 별도로 진행되거나, 개발과 테스트가 통합된 통합 개발 플랫폼이 제공되는 경우에도 개발된 소프트웨어의 오류 여부를 검증하기 위한 테스트를 위한 테스트 케이스의 생성, 테스트 실행 및 관리, 테스트 결과 관리, 테스트 커버리지 측정 및 관리 과정에 있어서 개발자의 수작업이 상당히 소요되어 소프트웨어 프로그램의 검증에 많은 시간과 노력이 소요되었다.
일 실시예에 따르면, 테스트 장치에 의해 수행되는 테스트 자동화 방법은 테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하는 단계; 상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하는 단계; 상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하는 단계; 상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하는 단계; 및 상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하는 단계를 포함한다.
상기 테스트 케이스를 생성하는 단계는 사용자에게 상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들을 제시하는 단계; 및 상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들에 기초한 사용자 입력에 따라 상기 테스트 케이스를 생성하는 단계를 포함한다.
상기 테스트 자동화 방법은 상기 테스트 케이스가 생성되면, 상기 테스트 케이스를 통해 상기 소스 코드의 적어도 일부를 실행하여 사용자에게 실행 결과를 제시하는 단계; 및 상기 실행 결과에 기초한 사용자 입력에 따라 상기 테스트 케이스에 대응하는 예상 결과를 설정하는 단계를 더 포함할 수 있다.
상기 감축된 테스트 경로들을 결정하는 단계는 상기 테스트 경로 최소화 기법에 따라 상기 초기 테스트 경로들 중 적어도 일부를 병합하여 상기 감축된 테스트 경로들을 결정하는 단계를 포함할 수 있다.
상기 초기 테스트 경로들을 결정하는 단계는 상기 분기 포인트들에 대응하는 분기문들 중 부모(parent) 분기문이 없는 루트 분기문들을 기준으로 분류된 분기문 그룹들 각각에 관해 상기 초기 테스트 경로들을 결정하는 단계; 및 각 초기 테스트 경로에 식별 시퀀스를 부여하는 단계를 포함할 수 있고, 상기 감축된 테스트 경로들을 결정하는 단계는 서로 다른 분기문 그룹에 속하는 초기 테스트 경로들 중 서로 동일한 식별 시퀀스를 갖는 초기 테스트 경로들을 병합하여 상기 감축된 테스트 경로들을 결정하는 단계를 포함할 수 있다.
상기 초기 테스트 경로들을 결정하는 단계는 상기 분기 포인트들에 대응하는 분기문들 중 부모(parent) 분기문이 없는 1세대 분기문의 각 분기 중 상기 1세대 분기문의 자식 분기문에 해당하는 2세대 분기문에 이르지 않는 종결 분기가 존재하는 경우, 상기 1세대 분기문의 상기 종결 분기에 관한 초기 테스트 경로를 도출하는 단계; 상기 1세대 분기문의 각 분기 중 상기 2세대 분기문에 이르는 진행 분기가 존재하는 경우, 상기 1세대 분기문의 상기 진행 분기 및 상기 2세대 분기문의 각 분기에 관해 초기 테스트 경로를 도출하는 단계; n세대 분기문의 각 분기 중 상기 n세대 분기문의 자식 분기문에 해당하는 n+1세대 분기문에 이르는 진행 분기가 존재하는 경우, 상기 n세대 분기문의 상기 진행 분기 및 상기 n+1세대 분기문의 각 분기에 관해 초기 테스트 경로를 도출하는 단계; 및 n 세대 분기문이 복수인 경우, 각 n 세대 분기문의 각 분기 중 동일한 속성의 분기를 그룹화하여 n-1 세대 분기문의 진행분기에 연결하여 테스트 경로를 도출하는 단계를 포함할 수 있고, 상기 n은 2 이상의 자연수일 수 있다.
상기 감축된 테스트 경로들을 결정하는 단계는 상기 도출된 초기 테스트 경로들 중에 동일한 선행 분기를 가지고 상기 동일한 선행 분기의 후행 분기가 서로의 흐름에 영향을 주지 않는 적어도 일부의 테스트 경로들을 병합하는 단계를 더 포함할 수 있다.
상기 테스트 데이터 후보들을 결정하는 단계는 상기 테스트 케이스 후보들을 실현하기 위한 각 분기문의 분기 조건에 매칭되는 범위의 경계 값을 산출하는 단계; 및 상기 산출된 경계 값에 기초하여 상기 테스트 데이터 후보들을 결정하는 단계를 더 포함할 수 있다.
상기 테스트 케이스 후보들 중 복수의 조건식을 가진 분기 포인트를 보유하는 테스트 케이스 후보가 존재하는 경우, 상기 테스트 데이터 후보들을 결정하는 단계는, 단락 회로 평가(Short-circuit Evaluation)가 적용될 수 있는 테스트 데이터를 상기 테스트 데이터 후보에서 배제하고 상기 복수의 조건식이 모두 고려되는 테스트 데이터를 상기 테스트 데이터 후보로 결정하는 단계를 더 포함할 수 있다.
상기 테스트 자동화 방법은 상기 테스트 케이스가 생성된 이후, 상기 생성된 테스트 케이스에 기초한 테스트를 수행하는 단계를 더 포함할 수 있다.
상기 테스트 자동화 방법은 상기 테스트가 수행된 이후, 상기 소스 코드 대비 각 테스트 케이스의 코드 커버리지를 표시하는 단계를 더 포함할 수 있다.
상기 코드 커버리지는 라인 커버리지 및 분기 커버리지 중 적어도 하나를 포함할 수 있다.
테스트 자동화 방법은 상기 테스트가 수행된 이후, 테스트 통과 여부 및 코드 커버리지를 포함하는 테스트 결과 문서 리포트를 자동으로 생성하는 단계를 더 포함할 수 있다.
일 실시예에 따르면, 테스트 장치에 의해 수행되는 테스트 자동화 방법은 복수의 테스트 대상 파일이 존재하는 경우, 각 테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하는 단계, 상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하는 단계, 상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하는 단계, 상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하는 단계, 및 상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하는 단계를 포함하는 테스트 케이스 생성 단계를 통해 생성된 테스트 케이스를 포함하는 상 기 복수의 테스트 대상 파일의 각각에 관한 테스트 파일들을 SVN(Subversion) 서버를 통해 동기화하는 단계; 상기 테스트 파일들에 기초하여 상기 각 테스트 대상 파일에 대한 테스트를 스케줄링하여 테스트 수행 목록을 생성하는 단계; 및 상기 테스트 수행 목록에 기초하여 사용자 입력에 따라 테스트 대상 시스템에 대한 테스트를 자동적으로 반복 수행하는 단계를 포함한다.
일 실시예에 따르면, 테스트 장치는 프로세서, 및 상기 프로세서에서 읽을 수 있는 명령어들을 포함하는 메모리를 포함하고, 상기 명령어들이 상기 프로세서에서 실행되면, 상기 프로세서는 테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 상기 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하고, 상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하고, 상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하고, 상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하고, 상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성한다.
도 1은 일 실시예에 따른 테스트 자동화 시스템을 나타낸 블록도.
도 2는 일 실시예에 따른 테스트 장치에 의해 수행되는 테스트 자동화 방법을 나타낸 플로우 차트.
도 3은 일 실시예에 따른 분기 포인트를 나타낸 도면.
도 4는 일 실시예에 따른 분기 흐름을 나타낸 도면.
도 5는 일 실시예에 따른 테스트 경로를 나타낸 도면.
도 6은 일 실시예에 따른 테스트 케이스 후보를 나타낸 도면.
도 7은 일 실시예에 따른 테스트 데이터 후보를 나타낸 도면.
도 8 및 도 9는 일 실시예에 따른 테스트 경로 최소화 기법 적용에 의한 테스트 경로 감축 과정을 나타낸 도면.
도 10은 일 실시예에 따라 도출된 테스트 경로에 따라 생성된 테스트 케이스 후보를 나타낸 도면.
도 11은 일 실시예에 따른 경계 값 분석을 나타낸 도면.
도 12는 일 실시예에 따른 단락 회로 평가 회피를 나타낸 도면.
도 13은 일 실시예에 따른 테스트 케이스 생성을 위한 사용자 인터페이스를 나타낸 도면.
도 14는 일 실시예에 따른 테스트 케이스에 기초한 테스트 방법을 나타낸 플로우 차트.
도 15는 일 실시예에 따른 테스트 대상을 선택하고 테스트 결과를 열람하기 위한 사용자 인터페이스를 나타낸 도면.
도 16은 일 실시예에 따른 테스트 히스토리를 나타내는 사용자 인터페이스를 나타낸 도면.
도 17은 일 실시예에 따른 통합 테스트를 수행하는 테스트 장치를 나타낸 도면.
본 명세서에 개시되어 있는 본 발명의 개념에 따른 실시예들에 대해서 특정한 구조적 또는 기능적 설명들은 단지 본 발명의 개념에 따른 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 본 발명의 개념에 따른 실시예들은 다양한 형태로 실시될 수 있으며 본 명세서에 설명된 실시예들에 한정되지 않는다.
본 발명의 개념에 따른 실시예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시예들을 도면에 예시하고 본 명세서에 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시예들을 특정한 개시형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만, 예를 들어 본 발명의 개념에 따른 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 “연결되어” 있다거나 “접속되어” 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 “직접 연결되어” 있다거나 “직접 접속되어” 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 표현들, 예를 들어 “~사이에”와 “바로~사이에” 또는 “~에 직접 이웃하는” 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시예들을 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, “포함하다” 또는 “가지다” 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 그러나, 특허출원의 범위가 이러한 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 일 실시예에 따른 테스트 자동화 시스템을 나타낸 블록도이다. 도 1을 참조하면, 테스트 자동화 시스템은 테스트 장치(110) 및 테스트 대상 시스템(120)을 포함한다.
테스트 장치(110)는 아래에서 설명될 테스트 자동화에 관한 동작들을 통해 테스트 대상 프로그램 파일의 소스 코드를 테스트 대상 시스템(120)에 대하여 테스트할 수 있다. 아래에서 설명될 테스트 자동화에 관한 동작들은 테스트 장치(110)에 의해 수행되는 것으로 이해될 수 있다. 테스트 장치(110)는 소스 코드의 테스트 과정을 최대한 자동화하여 테스트를 위한 사용자(개발자)의 관여 및 수고를 최소화할 수 있다. 테스트는 미리 정해진 단위, 예를 들어 소스 코드의 메소드 단위로 수행될 수 있다. 아래에서는 테스트 단위가 메소드인 것을 가정하여 설명하겠으나, 실시예에 따라 테스트는 다른 다양한 단위에 관해서도 진행될 수 있다.
도 1의 테스트 장치(110)는 테스트 케이스 생성부(111), 테스트 수행부(120), 통합 테스트 처리부(113), 테스트 결과 관리부(114) 및 커버리지 분석부(115)를 포함한다.
테스트 케이스 생성부(111)는 소스 코드에 관한 테스트 케이스 후보 및 테스트 데이터 후보를 자동으로 생성하여 사용자에게 제시하고, 테스트 케이스 후보 및 테스트 데이터 후보를 참조한 사용자의 사용자 입력에 기초하여 테스트 데이터를 결정하고 테스트 케이스를 생성할 수 있다. 이 때, 사용자 입력은 테스트 케이스 후보 중 적어도 일부를 선택하는 것, 테스트 데이터 후보를 편집하는 것을 포함할 수 있다.
테스트 케이스 및 테스트 데이터가 정해지면, 테스트 케이스 생성부(111)는 이들을 이용하여 소스 코드(예: 메소드)를 실행하여 실행 결과를 사용자에게 제시할 수 있다. 테스트 케이스 생성부(111)는 테스트 대상 시스템(120)의 메소드 런처(121)를 통해 메소드를 실행할 수 있다. 메소드 런처(121)는 테스트 대상 시스템(120)에 구성되어 있는 메소드를 실행할 수 있다. 테스트 케이스 생성부(111)는 실행 결과를 참조한 사용자의 사용자 입력에 따라 예상 결과를 결정할 수 있다. 예를 들어, 사용자 입력은 실행 결과를 참조하여 예상 결과를 편집하는 것을 포함할 수 있다. 예상 결과는 테스트 케이스에 매핑되어 저장될 수 있다.
테스트 수행부(112)는 테스트 케이스 및 테스트 데이터에 기초하여 테스트를 수행할 수 있다. 테스트 수행부(112)는 테스트 대상 시스템(120)의 테스트 러너(122)를 통해 테스트를 수행할 수 있다. 테스트가 완료되면 테스트 수행부(112)는 예상 결과와 실제 테스트 결과를 비교하여 테스트 통과 여부를 제공할 수 있다. 또한, 테스트 수행부(112)는 각 테스트 케이스에 따른 소스 코드 내 커버리지를 제공할 수 있다. 테스트 수행부(112)는 각 테스트 케이스에 관한 테스트 통과 여부 및 커버리지 등을 포함하는 테스트 결과를 작성하여 보고할 수 있다.
테스트 케이스들이 생성되면, 테스트 케이스들은 일정 저장 공간 (예컨대, SVN 서버, 등)에 관리될 수 있고, 통합 테스트 처리부(113)는 이러한 테스트 케이스들을 수집 및 통합하여 통합 테스트를 수행할 수 있다. 통합 테스트 처리부(113)는 테스트 대상 시스템(120)의 테스트 러너(122)를 통해 테스트를 수행할 수 있다. 테스트 결과 관리부(114)는 테스트 결과를 저장 및 관리할 수 있다. 예를 들어, 테스트 결과 관리부(114)는 각 테스트 대상 파일 별 테스트 케이스 및 테스트 결과를 저장 및 관리하고, 통합 테스트 결과를 저장 및 관리할 수 있다. 테스트 결과는 테스트 통과 또는 실패 여부, 코드 커버리지 등을 포함할 수 있다.
커버리지 분석부(115)는 각 테스트 케이스에 의해 실행된 소스 코드 내 커버리지를 분석하고, 소스 커버리지 분석 결과를 제공할 수 있다. 소스 커버리지는 간단히 커버리지로 지칭될 수도 있다. 커버리지 분석부(115)는 테스트 대상 시스템(120)의 에이전트(123)에 덤프를 요청하여 덤프를 저장하고, 저장된 덤프를 로딩하여 커버리지 분석을 수행할 수 있다. 커버리지는 라인 커버리지 및 분기 커버리지 중 적어도 하나를 포함할 수 있다. 테스트 수행부(112) 및 통합 테스트 처리부(113)는 커버리지 분석부(115)를 이용하여 커버리지를 측정할 수 있다.
테스트 장치(110) 및 테스트 대상 시스템(120)의 각 구성과 같은 본 명세서에서의 모듈은 본 명세서에서 설명되는 각 명칭에 따른 기능과 동작을 수행할 수 있는 하드웨어를 의미할 수도 있고, 특정 기능과 동작을 수행할 수 있는 컴퓨터 프로그램 코드 또는 모듈을 의미할 수도 있고, 또는 특정 기능과 동작을 수행시킬 수 있는 컴퓨터 프로그램 코드가 탑재된 전자적 기록 매체, 예를 들어 프로세서 또는 마이크로 프로세서를 의미할 수 있다. 다시 말해, 모듈이란 본 발명의 기술적 사상을 수행하기 위한 하드웨어 및/또는 상기 하드웨어를 구동하기 위한 소프트웨어의 기능적 및/또는 구조적 결합을 의미할 수 있다.
일 실시예에 따르면, 테스트 장치(110)는 프로세서 및 프로세서에서 읽을 수 있는 명령어들을 포함하는 메모리를 포함할 수 있고, 프로세서 및 메모리를 통해 본 명세서에서 기술되는 테스트 자동화에 관한 동작을 수행할 수 있다. 예를 들어, 메모리에 저장된 명령어들이 프로세서에서 실행되면, 프로세서는 본 명세서를 통해 기술되는 테스트 장치(110), 테스트 케이스 생성부(111), 테스트 수행부(120), 통합 테스트 처리부(113), 테스트 결과 관리부(114), 및 커버리지 분석부(115)의 테스트 자동화에 관한 동작을 수행할 수 있다.
도 2는 일 실시예에 따른 테스트 장치에 의해 수행되는 테스트 자동화 방법을 나타낸 플로우 차트이다.
도 2를 참조하면, 단계(210)에서 테스트하고자 하는 테스트 대상 프로그램 파일의 소스 코드의 분기문 구조가 분석되고 분기 포인트들이 식별되며, 분기문 구조 분석 및 분기 포인트 식별을 통해 발생가능한 모든 초기 테스트 경로들이 결정된다. 예를 들어, 분기 포인트는 분기문에 대응할 수 있다. 분기 포인트가 식별되면, 식별된 각 분기 포인트(또는 각 분기문)에 식별자가 부여될 수 있다. 예를 들어, 도 3은 일 실시예에 따른 분기 포인트를 나타낸 도면이며, 각 분기문 'if ( a> 0 && b > 5)', 'if ( c> 10)', 'if ( d > 20)'에 관해 분기 포인트가 식별되었고, '1', '2', '3'의 식별자가 부여된다.
초기 테스트 경로들은 분기 흐름에 따라 분기 포인트들 중 적어도 일부를 경유할 수 있다. 분기 흐름은 분기문 구조에 따라 도출될 수 있다. 소스 코드 상 다양한 분기 흐름이 가능한 경우, 각각 분기 흐름에 따라 분기 포인트들 중 적어도 일부를 경유하는 테스트 경로들이 도출될 수 있다.
각 분기문에 따라 적어도 하나의 분기가 발생할 수 있다. 예를 들어, 무조건 분기문에 따라 소스 코드 내 어느 한 포인트에 대한 분기가 발생할 수 있고, 조건 분기문에 따라 논리적 참(true)에 해당하는 분기, 및 논리적 거짓(false)에 해당하는 분기가 발생할 수 있다. 분기 흐름은 이러한 분기들이 복수로 진행되는 흐름을 나타내며, 각 분기문의 분기 방향(참 또는 거짓)이나 각 분기문 간의 부모(parent)-자식(child) 관계에 따라 다양한 분기 흐름이 존재할 수 있다. 분기문 간의 부모-자식 관계의 구조화 및 각 분기 별 인입 경로 도출에 기초하여, 분기 흐름이 분석될 수 있다.
도 4는 일 실시예에 따른 분기 흐름을 나타낸 도면이며, '1', '2', '3'의 분기 포인트들을 경유하는 다양한 분기 흐름이 존재한다. 하나의 분기 흐름은 하나의 테스트 경로를 구성할 수 있다. 도 5는 일 실시예에 따른 테스트 경로를 나타낸 도면이며, 도 4의 분기 흐름들에 따라 '1T-2T-3T' 내지 '1F-3F'의 테스트 경로들이 도출될 수 있다. 각 테스트 경로는 각 분기문의 분기가 참(T) 방향으로 수행되는지, 거짓(F) 방향으로 수행되는지에 따라 다양한 조합으로 구성될 수 있다. 'xT'는 분기 포인트(또는 분기문) 'x'에서 참(T) 방향으로 분기하는 경로를 나타내고, 'xF'는 분기 포인트(또는 분기문) 'x'에서 거짓(F) 방향으로 분기하는 경로를 나타낸다.
단계(220)에서 감축된 테스트 경로들이 결정된다. 감축된 테스트 경로들은 초기 테스트 경로들에 대한 테스트 경로 최소화 기법의 적용에 따라 결정될 수 있으며, 감축된 테스트 경로들의 수는 초기 테스트 경로들의 수에 비해 적을 수 있다. 예를 들어, 테스트 경로 최소화 기법에 따라 초기 테스트 경로들 중 적어도 일부를 병합함으로써, 감축된 테스트 경로들이 결정될 수 있다. 도 5에는 6개의 테스트 경로가 3개로 감축된 예시가 도시되어 있다.
단계(230)에서 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들이 생성된다. 테스트 케이스 후보들은 감축된 테스트 경로들에 대응하는 논리 값들을 포함할 수 있다. 논리 값들로 특정되는 테스트 케이스 후보는 논리 테스트 케이스로 지칭될 수도 있다. 예를 들어, 도 6은 일 실시예에 따른 테스트 케이스 후보를 나타낸 도면이다. 도 6을 참조하면, 'TC1', 'TC2', 'TC3'의 테스트 케이스 후보들에 각 테스트 경로에 대응하는 참(true) 값 및 거짓(false) 값이 할당되어 있다. 각 테스트 케이스 후보는 할당된 논리 값에 기초하여 자신의 테스트 경로를 실행할 수 있다.
단계(240)에서 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들이 생성된다. 테스트 데이터는 각 테스트 케이스 후보의 테스트 경로를 실현하기 위해 각 테스트 케이스 후보에 실제로 입력되는 값 또는 각 테스트 케이스 후보의 분기 조건에 관한 조건 값을 의미한다.
수치들의 범위에 관한 조건이나 특정 문자, 문자열에 관한 조건과 같이, 분기문의 조건으로 수치, 문자, 문자열 등이 지정되어 있고, 특정 값을 통해 테스트 경로의 실현이 가능한 경우, 테스트 데이터는 해당 수치, 문자, 문자열 등과 같은 특정 값이 될 수 있다. 예를 들어, 'if (grade >= 99)'와 같은 분기문을 위한 테스트 데이터로 '95'와 같은 특정 값이 이용될 수 있다.
다른 함수나 메소드가 호출되거나, 복잡한 수식이 존재하는 경우와 같이, 분기문의 조건으로 값이 특정되기 어려운 경우, 테스트 데이터는 해당 분기문의 결과적인 분기 방향을 설정하는 조건 값이 될 수 있다. 예를 들어, 'if (s1.isEmpty() || s2.isEmpty())'와 같은 분기문의 조건의 분기 흐름을 실현하기 위해 변수의 값을 특정할 수 없으므로, 해당 분기문의 조건이 만족된 것(참), 또는 만족되지 않은 것(거짓)을 가정할 수 있는 조건 값이 이용될 수 있다.
단계(230)에서 테스트 케이스 후보들을 위한 논리 값이 설정되는 것과 구분하여, 단계(240)에서 설정되는 테스트 데이터 후보는 물리 값으로 지칭될 수 있고, 단계(240)을 통해 생성된 테스트 케이스는 물리적 테스트 케이스로 지칭될 수 있다. 다시 말해, 단계(230)를 통해 논리 값을 통한 논리 테스트 케이스가 생성되고, 단계(240)에서 물리 값(테스트 데이터)을 통한 물리 테스트 케이스가 생성되는 것으로 이해될 수 있다.
도 7은 일 실시예에 따른 테스트 데이터 후보를 나타낸 도면이다. 도 7을 참조하면, 각 변수 'a' 내지 'd'에 관한 'TC1' 내지 'TC3'의 각 테스트 케이스를 위한 테스트 데이터 후보가 도시되어 있다. 도 7은 테스트 데이터로 특정 값이 이용되는 실시예를 나타낸다.
단계(250)에서, 테스트 케이스 후보 및 테스트 데이터 후보가 제시된다. 단계들(210 내지 240)을 통해 테스트 대상 소스 코드에 관해 다양한 테스트 케이스 후보 및 테스트 데이터 후보가 생성될 수 있다. 단계들(210 내지 240)은 대상 소스 코드의 선택에 따라 자동으로 수행될 수 있다. 다시 말해, 대상 소스 코드(예: 특정 메소드)가 결정되면, 대상 소스 코드에 관해 단계들(210 내지 240)이 자동적으로 수행되어 대상 소스 코드에 관한 다양한 테스트 케이스 후보 및 테스트 데이터 후보가 생성될 수 있다. 이후에, 단계(250)에서 테스트 케이스 후보 및 테스트 데이터 후보가 사용자에게 제시될 수 있다.
단계(260)에서 테스트 케이스 및 테스트 데이터가 설정되고, 단계(270)에서 테스트 케이스가 생성된다. 테스트 장치에 미리설정된 기준에 따라 대상 소스 코드에 관해 단계260 내지 270이 자동적으로 수행되어 테스트 케이스가 자동 생성될 수 있다. 또한, 테스트 케이스를 생성하기 위해, 사용자가 제시된 테스트 케이스 후보 중 적어도 일부를 선택하거나 편집/수정하고, 선택 또는 편집/수정된 각 테스트 케이스 후보에 관해 테스트 데이터를 설정하여 테스트 케이스를 생성할 수 있다. 테스트 케이스 후보가 선택되면, 테스트 케이스 후보에 관한 테스트 데이터 후보가 제시될 수 있고, 사용자는 제시된 테스트 데이터 후보를 참조하여 테스트 데이터를 설정할 수 있다.
테스트 케이스가 생성되면, 단계(280)에서 테스트 케이스를 통해 소스 코드의 적어도 일부가 실행되어 사용자에게 실행 결과가 제시될 수 있으며, 단계(290)에서 실행 결과에 기초하거나 또는 사용자 입력에 따라 테스트 케이스에 대응하는 예상 결과가 설정될 수 있다. 실행 결과는 테스트 케이스를 통해 소스 코드를 실행하여 얻은 데이터를 의미하고, 예상 결과는 추후 테스트 수행시에 테스트 결과의 적합성 등의 검토를 위한 비교대상으로 활용하기 위해 테스트 장치에 미리설정된 기준에 의해 또는 사용자에 의해 설정된 테스트 결과 기준 데이터를 의미한다. 사용자는 실행 결과를 수용하거나, 혹은 실행 결과의 적어도 일부를 편집하여 예상 결과를 설정할 수 있다. 예상 결과는 추후 테스트 수행 시 테스트 통과 또는 실패 여부를 판단하는데 이용될 수 있다.
도 8 및 도 9는 일 실시예에 따른 테스트 경로 최소화 기법 적용에 의한 테스트 경로 감축 과정을 나타낸 도면이다. 테스트 경로 최소화 기법은 소스 코드에서 식별된 분기문 그룹 분석으로부터 결정된 초기 테스트 경로들을 해당 초기 테스트 경로들이 지나는 모든 분기문 집합과 실질적으로 코드 커버리지가 동일한 경로로 병합 및/또는 감축하는 기법이다. 테스트 경로 최소화 기법은 테스트 대상 파일의 소스 코드의 분기 구조가 복잡해질수록 초기 테스트 경로의 경우의 수가 기하급수적으로 증가하여 이를 근거로 생성되는 테스트 케이스 후보를 테스트 장치가 처리하는 경우 테스트 케이스의 생성 및 처리 시간과 부하가 급격히 증가하고 최적의 테스트 케이스를 생성하기 어려워 진다는 문제점을 해결하기 위한 것이다.
소스코드 분석을 통해 도출된 초기 테스트 경로에 대하여 테스트 경로 최소화 기법을 적용하여 테스트 경로를 감축함으로서, 테스트 장치가 가능한 넓은 커버리지를 가능한 적은 수의 테스트 케이스로 커버하고 대상 파일의 소스 코드의 구조가 복잡해져도 테스트 케이스 후보의 자동 생성을 보다 짧은 시간에 적은 자원으로 가능하게 하며 테스트 수행시 처리 시간과 부하를 줄일 수 있도록 한다. 테스트 경로 최소화 기법은 대상 파일의 대하여 적용전과 동일한 테스트 커버리지를 유지하면서 테스트 경로의 수가 최소화될 수 있다.
도 8을 참조하면, 각 분기 포인트(또는 분기문)에 관해 '1' 내지 '6'의 식별자가 부여된다. 분기문 '1' 및 분기문 '2'는 부모 분기문이 없는 루트 분기문에 해당하며, 분기문 '1' 내지 분기문 '6'은 루트 분기문을 기준으로 그룹 A 및 그룹 B로 분류될 수 있다. 즉, 분기문 '1' 및 분기문 '2'는 그룹 A에 속하고, 분기문 '3' 내지 분기문 '6'은 그룹 B에 속한다. 분기문 '2'는 분기문 '1'의 자식 분기문에 해당하고, 분기문 '4' 및 분기문 '6'은 분기문 '3'의 자식 분기문에 해당하고, 분기문 '5'는 분기문 '4'의 자식 분기문에 해당한다. 분기문 '1' 및 분기문 '3'은 1세대 분기문으로 지칭 수도 있고, 분기문 '2', 분기문 '4' 및 분기문 '6'은 2 세대 분기문으로 지칭될 수 있고, 분기문 '5'는 3세대 분기문으로 지칭될 수 있다. 도 9를 참조하면, 분기 흐름에 따라 분기 포인트들 중 적어도 일부를 경유하는 테스트 경로들이 도시되어 있다.
테스트 경로의 수는 다양한 방법을 통해 감축될 수 있다. 예를 들어, 각각 분기 흐름에 따라 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들이 결정될 수 있고, 초기 테스트 경로들 중 적어도 일부가 병합되어 수적으로 감축된 테스트 경로들이 결정될 수 있다.
일 실시예에 따르면, 루트 분기문들을 기준으로 분류된 분기문 그룹들 각각에 관해 초기 테스트 경로들이 결정될 수 있고, 각 초기 테스트 경로에 식별 시퀀스가 부여될 수 있다. 도 8 및 도 9의 예시에서 각 분기문 그룹에 관한 초기 테스트 경로 및 식별 시퀀스는 아래 표 1과 같이 나타낼 수 있다.
[그룹 A]
(1) 1F-2T
(2) 1F-2F
(3) 1T
[그룹 B]
(1) 3T-4F-5T
(2) 3T-4F-5F
(3) 3T-4T
(4) 3T-6T
(5) 3T-6F
(6) 3F
그룹 A 및 그룹 B를 조합할 경우, 3*6=18개의 초기 테스트 경로가 결정될 수 있다.이 때, 서로 다른 분기문 그룹에 속하는 초기 테스트 경로들 중 적어도 일부가 병합되어, 테스트 경로들의 수가 감축될 수 있다. 예를 들어, 서로 다른 분기문 그룹에 속하는 초기 테스트 경로들 중 서로 동일한 식별 시퀀스를 갖는 초기 테스트 경로들이 병합될 수 있고, 이는 아래 표 2와 같이 나타낼 수 있다.
(1) 1F-2T-3T-4F-5T
(2) 1F-2F-3T-4F-5F
(3) 1T-3T-4T
(4) 3T-6T
(5) 3T-6F
(6) 3F
이에 따라 테스트 경로가 6개로 감축될 수 있다. 즉, 감축된 테스트 경로들의 수는 초기 테스트 경로들의 수보다 적을 수 있다.다른 일 실시예에 따르면, 테스트 경로들의 감축을 위해 그룹 내 하위 그룹의 분기 흐름이 고려될 수 있다. 이는 아래 표 3의 원칙들에 따라 감축이 구현될 수 있다.
1) 1세대 분기문(루트 분기문)의 각 분기(예: 참 방향 분기 및 거짓 방향 분기)를 결정
2) 1세대 분기문의 각 분기 중 2세대 분기문(1세대 분기문의 자식 분기문에 해당)에 이르지 않는 분기(이하, 종결 분기로 지칭될 수 있음)가 존재하는 경우, 1세대 분기문의 종결 분기에 관해 테스트 경로를 도출
3) 1세대 분기문의 각 분기 중 2세대 분기문에 이르는 분기(이하, 진행 분기로 지칭될 수 있음)가 존재하는 경우, 1세대 분기문의 진행 분기 및 2세대 분기문의 각 분기에 관해 테스트 경로를 도출.
3-1) n세대 분기문의 각 분기 중 n+1세대 분기문(n세대 분기문의 자식 분기문에 해당)에 이르는 진행 분기가 존재하는 경우, n세대 분기문의 진행 분기 및 n+1세대 분기문의 각 분기에 관해 테스트 경로를 도출. (n은 2 이상의 자연수)
3-2) n세대 분기문이 복수인 경우, 각 n세대 분기문의 각 분기 중 동일한 속성의 분기(예: 참 방향 분기 또는 거짓 방향 분기)를 그룹화하여 n-1세대 분기문의 진행 분기에 연결하여 테스트 경로를 도출.
4) n세대 분기문의 각 분기 중 종결 분기에서 테스트 경로 연결을 종료.
5) 도출된 테스트 경로 중 도출된 테스트 경로들 중에 동일한 선행 분기를 가지고 동일한 선행 분기의 후행 분기가 서로의 흐름에 영향을 주지 않는 적어도 일부의 테스트 경로들을 병합. (예: 서로 다른 하위 그룹에 속한 경우)
예를 들어, 표 3의 원칙들에 기초하여 그룹 A의 테스트 경로는 아래와 같이 도출될 수 있다.- 원칙 1)에 따라 1세대 분기문의 각 분기를 '1T', '1F'와 같이 도출.
- '1T'는 1세대 분기문의 분기이자 종결 분기에 해당하므로, 원칙 2)에 따라 '1T'를 하나의 테스트 경로로 도출.
- '1F'는 1세대 분기문의 진행 분기이므로, 원칙 3)에 따라 1세대 분기문의 진행 분기인 '1F' 및 2세대 분기문의 각 분기에 해당하는 '2T', '2F'를 연결하여 '1F-2T', '1F-2F'의 테스트 경로를 도출.
- '2T' 및 '2F'는 종결 분기에 해당하므로 원칙 4)에 따라 테스트 경로 연결을 종료.
이에 따라 도출된 그룹 A의 테스트 경로는 아래 표 4와 같다.
(1) 1F-2T
(2) 1F-2F
(3) 1T
또한, 그룹 B의 테스트 경로는 아래와 같이 도출될 수 있다.- 원칙 1)에 따라 1세대 분기문의 각 분기를 '3T', '3F'와 같이 도출.
- '3F'는 1세대 분기문의 분기이자 종결 분기에 해당하므로, 원칙 2)에 따라 '3F'를 하나의 테스트 경로로 도출.
- '3T'는 1세대 분기문의 진행 분기이고, 2세대 분기문이 복수('4', '6')이므로, 원칙 3) 및 원칙 4)에 따라 1세대 분기문의 진행 분기인 '3T' 및 각 2세대 분기문의 각 분기 중 동일한 속성의 분기에 해당하는 '4T', '6T'를 연결하여 '3T-4T-6T'의 테스트 경로를 도출하고, 마찬가지로 각 2세대 분기문의 각 분기 중 동일한 속성의 분기에 해당하는 '4F', '6F'를 연결하여 '3T-4F-6F'의 테스트 경로를 도출.
- '4F'는 2세대 분기문의 진행 분기이므로, 원칙 3-2)에 따라 2세대 분기문의 진행 분기인 '4F' 및 3세대 분기문의 각 분기에 해당하는 '5T', '5F'를 연결하여 '4F-5T', '4F-5F'의 테스트 경로를 도출.
- '4T', '5T', '5F', '6T', '6F'는 종결 분기에 해당하므로 원칙 4)에 따라 테스트 경로 연결을 종료.
이에 따라 도출된 그룹 B의 테스트 경로는 아래 표 5와 같다.
(1) 3T-4T-6T
(2) 3T-4F-6F
(3) 3F
(4) 4F-5T
(5) 4F-5F
또한, 도출된 경로 중 '3T-4F-6F'와 '4F-5F'(또는 '4F-5T')는 동일한 선행 분기('4F')를 가지고 후행 분기('6F', '5F'(또는 '5T'))가 서로의 흐름에 영향을 주지 않으므로, '3T-4F-6F'와 '4F-5F'(또는 '4F-5T')는 '3T-4F-5F-6F'(또는 '3T-4F-5T-6F')와 같이 병합될 수 있다. 예를 들어, 원칙 3)과 같이 동일한 속성의 분기를 그룹화하기 위해 '4F-5F'와 '4F-5T' 중에 '4F-5F'가 선택될 수 있다. 따라서, 최종적으로 그룹 B의 감축된 테스트 경로는 아래 표 6와 같이 도출될 수 있다.
(1) 3T-4T-6T
(2) 3T-4F-5F-6F
(3) 3F
(4) 4F-5T
본 실시예는 상술된 대응 식별 시퀀스를 갖는 테스트 경로를 병합하는 실시예와 결합될 수도 있다. 이에 따르면, 그룹 A 및 그룹 B를 위한 추가로 감축된 테스트 경로는 아래 표 7과 같이 도출될 수 있다.
[그룹 A]
(1) 1F-2T
(2) 1F-2F
(3) 1T
[그룹 B]
(1) 3T-4T-6T
(2) 3T-4F-5F-6F
(3) 3F
(4) 4F-5T
[전체]
(1) 1F-2T-3T-4T-6T
(2) 1F-2F-3T-4F-5F-6F
(3) 1T-3F
(4) 4F-5T
따라서, 본 예시에 따르면 최초의 가능한 3x6 = 18개의 초기 테스트 경로가 4개의 테스트 경로로 감축될 수 있다.
도 10은 일 실시예에 따라 결정된 테스트 경로에 따라 생성된 테스트 케이스 후보를 나타낸 도면이다. 도 10을 참조하면 테스트 경로들(1010)에 따라 테스트 케이스 후보들(1020)이 생성되어 제시될 수 있다. 사용자는 제시된 테스트 케이스 후보들(1020)을 보고 각 테스트 케이스 후보의 테스트 경로를 인지하고, 테스트 케이스 후보들(1020)에서 적어도 일부를 선택하여 테스트 케이스를 생성할 수 있다.
테스트 케이스 후보들(1020)은 논리 값에 따른 테스트 경로들(1010)을 갖는 논리 테스트 케이스에 대응하며, 이러한 논리 테스트 케이스들을 개발한 소스 코드에 적용할 수 있는 테스트 케이스로 실현하기 위해서는 테스트 데이터 후보 결정 과정(또는 물리 테스트 케이스 생성 과정)이 필요하다. 사용자는 제시된 테스트 데이터 후보에 기초하여 테스트 데이터를 결정하거나 테스트 데이터를 편집 또는 추가할 수 있다. 일 실시예에 따르면, 테스트 데이터 후보는 아래에서 설명되는 경계 값 분석(Boundary Value Analysis)이나 단락 회로 평가(Short-circuit Evaluation) 회피를 통해 테스트 커버리지가 보다 최적화된 후보가 제시될 수 있다. 테스트 대상 시스템의 분기문 조건이 숫자(Number)나 숫자로 전환가능한 타입의 비교값 등인 경우에는 경계값 분석을 적용하여 비교 경계값의 인근 값 (예컨대, +1 또는 -1) 값을 커버리지가 최적화된 테스트 데이터 후보로 결정할 수 있다. 또한, 테스트 대상 시스템의 분기문이 명확한 숫자 비교값으로 도출하기 어려운 수식 등인 경우 논리 연산을 사용하여 단락 회로 평가를 최대한 회피할 수 있도록 하는 방식으로 커버리지가 최적화된 테스트 데이터 후보를 결정할 수 있다.
도 11은 일 실시예에 따른 경계값 분석을 나타낸 도면이다. 일반적으로 대상 파일 소스코드의 분기문(제어문) 조건의 경계 부분에 해당되는 입력값에서 프로그램 결함이 발견될 확률이 높기 때문에, 경계값 분석 기법은 적은 테스트 케이스를 사용하면서 결함을 탐지해낼 가능성을 높이기 위해 경계값을 포함하여 테스트하는 방법이다. 경계값 분석은 모든 테스트 레벨, 모든 테스트 유형, 모든 테스트 분류에 적용될 수 있으며 결함 발견율이 높고 적용하기 쉬운 장점이 있다. 도 11을 참조하면, 각 분기문의 조건에 관한 경계 값 분석에 따라 테스트 데이터 후보가 결정될 수 있다. 예를 들어, 각 테스트 케이스 후보의 분기 방향(조건)에 부합하는 값들 중에 경계에 가장 가까운 값이 테스트 데이터 후보로 결정될 수 있다. 여기서 가장 가까운 값은 데이터 타입에 따라 다르게 판단될 수 있는데, 아래에서는 정수 타입이 사용되는 것을 가정한다. 다만, 이는 설명의 편의를 위한 것으로, 정수 타입 이외에 실수 등의 다양한 타입이 사용될 수 있으며, 실수 등 다른 타입이 사용되는 경우에도 해당 타입에 맞추어 경계에 가장 가까운 값이 테스트 데이터 후보로 결정될 수 있다.
경계 값 분석에 따라 테스트 케이스 후보들을 실현하기 위한 각 분기문의 분기 조건에 매칭되는 범위의 경계 값이 산출되고, 산출된 경계 값에 기초하여 테스트 데이터 후보들이 결정될 수 있다. 도 11에서 'TC1'의 실현을 위해서는 'if (grade >= 99)'가 참이 되어야 하므로, 해당 조건의 경계 값인 '99'가 변수 'grade'를 위한 테스트 데이터 후보로 결정될 수 있다. 또한, 'TC2'의 실현을 위해서는 'if (grade >= 99)'가 거짓이 되고, 'if (grade >= 90)이 참이 되어야 한다. 이 경우 'grade'는 '98' 이하, '90' 이상의 값을 가지면 되고, 해당 조건의 경계 값인 '98' 또는 '90'가 변수 'grade'를 위한 테스트 데이터 후보로 결정될 수 있다. 이와 같이 경계가 복수로 존재하는 경우 어느 경계(예: 큰 값의 경계 또는 작은 값의 경계)를 기준으로 테스트 데이터 후보를 결정할지는 실시예에 따라 달라질 수 있다. 마찬가지로, 'TC3' 내지 'TC5'에 관한 테스트 데이터 후보들도 경계 값 분석에 따라 결정될 수 있다.
도 12는 일 실시예에 따른 단락 회로 평가 회피를 나타낸 도면이다. 단락 회로 평가(short circuit evaluation)란 논리식의 논리연산 과정에서 연산 중간에 연산 결과가 확정되면 뒤의 개별 조건식을 확인하지 않은 연산법으로서, 신속한 연산 결과 도출을 위해 전체 연산 결과에 실질적으로 영향을 주지 않는 부분의 연산을 생략하는 방식이다. 컴파일러의 특성 상 테스트 시 단락 회로 평가 방식으로 테스트 케이스가 채택되어 특정 조건의 전체가 고려되지 않고 조건의 일부만으로 조건에 따른 결과가 도출될 가능성이 있다. 그러한 경우 조건이 임의로 해석됨에 따라 원하는 커버리지의 테스트 결과가 도출되지 않고 테스트되지 않은 조건 부분의 오류를 파악하지 못하는 결과를 초래할 수 있다. 따라서, 본 발명의 실시예에 따르면, 테스트 케이스 후보들 중 복수의 조건식을 가진 분기 포인트 내지 단락 회로 평가에 따른 영향을 받을 수 있는 분기 포인트를 보유하는 테스트 케이스 후보가 존재하는 경우, 단락 회로 평가에 따른 영향을 회피할 수 있는 값이 테스트 케이스 후보에 관한 테스트 데이터 후보로 결정될 수 있다. 예를 들어, 테스트 데이터 후보의 결정시, 단락 회로 평가가 적용될 수 있는 테스트 데이터가 테스트 데이터 후보에서 배제되고, 복수의 조건식이 모두 고려되도록 하는 테스트 데이터가 테스트 데이터 후보로 결정될 수 있다.
예를 들어, 도 12의 'TC1'은 분기문 'if (s1.isEmpty() || s2.isEmpty())'가 참인 것을 요구한다. 이 경우 단락 회로 평가를 적용하여 'if (s1.isEmpty() || s2.isEmpty())'에서 조건 's1.isEmpty()'가 참(true)을 만족시키는 테스트데이터 후보를 도출하게 되면 조건 's2.isEmpty()' 값이 고려되지 않고도 'if (s1.isEmpty() || s2.isEmpty())'가 참인 것으로 판단될 수 있다. 그러한 경우 조건 's2.isEmpty()'는 한번도 테스트되지 못하는 경우가 발생할 수 있다. 이를 방지하고자, 실시예에 따르면 단락 회로 평가가 적용되지 않는 논리 테스트 케이스를 도출하여 변수 's1.isEmpty()'와 변수 's2.isEmpty()'가 모두 고려될 수 있도록, 조건 's1.isEmpty()'를 거짓으로 조건 's2.isEmpty()'를 참으로 만족시키는 테스트 데이터 후보를 제시할 수 있다.
도 13은 일 실시예에 따른 테스트 케이스 생성을 위한 사용자 인터페이스를 나타낸 도면이다. 도 13을 참조하면, 테스트 케이스 생성에 관한 사용자 인터페이스(1310) 및 테스트 케이스 후보 및 테스트 데이터 후보에 관한 사용자 인터페이스(1320)가 도시되어 있다. 이하 일 실시예에 따른 사용자 인터페이스(1310, 1320)를 이용한 테스트 케이스 생성 절차를 시간의 순서에 따라 설명한다.
사용자는 사용자 인터페이스(1310)를 통해 테스트 케이스를 생성하고자 하는 대상 소스 코드에 해당하는 클래스 및 메소드를 선택할 수 있다. 본 실시예에 따르면 메소드 단위로 테스트 케이스가 생성되는 것이 설명되지만, 실시예가 반드시 여기에 제한되는 것은 아니며, 다른 소스 코드 단위에 관해 테스트 케이스가 생성되는 것도 가능하다.
이후, 선택된 클래스 내 메소드에 관한 테스트 케이스 후보들이 자동 생성되어 사용자 인터페이스(1320) 내 '테스트 케이스 후보' 화면을 통해 사용자에게 제시될 수 있다. '테스트 케이스 후보' 화면에는 각 테스트 케이스 후보가 대응하는 각 논리 값에 따른 테스트 경로 및 테스트 데이터 후보가 특정되어 제시될 수 있다. 도 13의 예시에는 'TC1' 내지 'TC4'의 테스트 케이스 후보들이 각 분기 포인트에 관한 논리 값이 나타난 테스트 경로로 특정되어 있다.
추가로, 각 테스트 케이스 후보에 관한 테스트 데이터 후보가 자동 생성되어 사용자 인터페이스(1320) 내 '테스트 데이터 후보' 화면을 통해 사용자에게 제시될 수 있다. '테스트 데이터 후보' 화면에는 각 항목(변수 또는 수식)을 위한 테스트 데이터 후보(특정 값 또는 조건 값)가 제시될 수 있다. 예를 들어, 변수 'score'를 위한 테스트 데이터 후보가 특정 값에 해당하는 '99'로 결정되어 제시되었다. 이는 상술된 경계 값 분석에 따른 테스트 데이터 후보로 설정된 결과이다. 항목이 수식에 해당하는 경우 테스트 데이터 후보로 조건 또는 해당 조건에 대한 논리 값이 제시될 수 있다.
이후, 사용자는 테스트 케이스 후보 중 적어도 일부를 선택하여 테스트 케이스를 생성할 수 있고, 테스트 데이터 후보를 참조하여 테스트 데이터를 설정할 수 있다. 테스트 케이스가 생성되면 사용자 인터페이스(1310)의 '테스트 케이스' 화면에 추가될 수 있고, 생성된 테스트 케이스에는 식별자가 부여되고, 테스트 케이스명이나 설명과 같은 부가 정보가 기입될 수 있다.
사용자는 사용자 인터페이스(1310)의 '입력' 탭 내 '입력 파라미터' 화면을 통해 각 테스트 케이스에 관한 입력 파라미터를 설정할 수 있다. 이 때, 사용자는 '테스트 데이터 후보' 화면에 제시된 테스트 데이터 후보를 참조하여 입력 파라미터를 설정할 수 있다. 예를 들어, 도 13의 '입력 파라미터' 화면 내 '입력 값'으로 '테스트 데이터 후보' 화면에 제시된 '99'가 디폴트 값으로 표시될 수 있고, 사용자는 이를 수용하거나 다른 값으로 편집하여 '입력 값'을 설정할 수 있다. 여기서 '입력 값'은 테스트 데이터를 의미한다.
테스트 케이스 및 테스트 데이터가 확정되면, 해당 테스트 케이스 및 테스트 데이터에 기초하여 메소드에 대한 테스트가 실행될 수 있고, 사용자 인터페이스(1310)의 '결과' 탭을 통해 실행 결과가 제시될 수 있다. 사용자는 실행 결과를 참조하여 예상 결과를 설정할 수 있다. 예를 들어, 사용자는 실행 결과를 수용하거나 이를 다른 값으로 편집하여 예상 결과를 설정할 수 있다. 예상 결과는 추후 테스트 수행 시 테스트의 통과 또는 실패 여부를 판단하는데 이용될 수 있다. 예상 결과가 설정되면 예상 결과는 대응 테스트 케이스에 매핑되어 저장될 수 있다.
도 14는 일 실시예에 따른 테스트 케이스에 기초한 테스트 방법을 나타낸 플로우 차트이다.
도 14를 참조하면, 단계(1410)에서 테스트 대상 소스 코드가 선택된다. 예를 들어, 테스트 케이스 생성 과정을 통해 생성된 테스트 케이스는 클래스 및/또는 메소드 별로 그룹화되어 테스트 파일로 저장될 수 있다. 사용자는 테스트 대상 파일, 테스트 대상 클래스, 및 테스트 대상 메소드를 선택할 수 있다.
단계(1420)에서 기 생성된 테스트 케이스에 기초한 테스트가 수행된다. 단계(1410)을 통해 대상 소스 코드(예: 대상 메소드)가 선택되면, 해당 메소드에 관해 기 생성된 테스트 케이스들이 표시될 수 있다. 사용자는 기 생성된 테스트 케이스들 중 적어도 하나를 선택하여 테스트를 수행할 수 있다. 예를 들어, 테스트 대상 시스템 내 테스트 러너는 사용자의 테스트 요청에 따라 테스트를 수행할 수 있다.
단계(1430)에서 테스트 결과가 생성된다. 테스트 결과는 각 테스트 케이스의 테스트 통과 또는 실패 여부, 코드 커버리지, 기타 부가 정보 등에 관한 테스트 결과 문서 리포트를 포함할 수 있다. 예를 들어, 단계(1430)에서 테스트 통과 여부 및 코드 커버리지를 포함하는 테스트 결과 문서 리포트가 자동으로 생성될 수 있다. 각 테스트 결과는 사용자 인터페이스에 표현되어 사용자에게 제시될 수 있다.
소스 커버리지는 소스 코드 대비 각 테스트 케이스의 커버리지를 의미하며, 라인 커버리지 및 분기 커버리지 중 적어도 하나를 포함할 수 있다. 라인 커버리지는 대상 소스 코드의 라인들의 수 대비 각 테스트 케이스에 의해 실행된 라인들의 수의 비율을 나타낼 수 있고, 분기 커버리지는 대상 소스 코드의 분기문(또는 분기 포인트)들의 수 대비 각 테스트 케이스에 의해 실행된 분기문(또는 분기 포인트)들의 수를 나타낼 수 있다. 이러한 커버리지는 대상 소스 코드 상에 시각적으로 표시될 수 있다. 예를 들어, 결과 화면으로서 대상 소스 코드가 표시될 수 있고, 각 테스트 케이스에 따른 커버리지가 대상 소스 코드 상에 음영 처리와 같은 시각적 효과를 통해 강조되어 표현될 수 있다.
도 15는 일 실시예에 따른 테스트 대상을 선택하고 테스트 결과를 열람하기 위한 사용자 인터페이스를 나타낸 도면이다.
도 15를 참조하면, 테스트 대상을 선택하기 위한 사용자 인터페이스(1510)는 테스트 대상 클래스 및 메소드를 선택할 수 있는 '테스트 대상' 화면을 포함할 수 있다. '테스트 대상' 화면에는 각 대상 클래스 및 메소드에 관해 기 생성된 테스트 케이스의 수가 표시될 수 있다. '테스트 대상' 화면에서 메소드가 선택되면, 선택된 메소드의 식별자, 테스트 케이스 명칭, 및 예상 결과가 기 생성되어 있는지 여부가 표시될 수 있다. 사용자는 사용자 인터페이스(1510)에서 메소드를 선택하여 테스트를 수행할 수 있다.
테스트가 수행되면, 테스트 결과를 열람하기 위한 사용자 인터페이스(1520)의 '테스트 결과' 화면에 테스트 결과가 표시될 수 있다. 테스트 결과는 테스트가 수행된 메소드 별 라인 커버리지, 분기 커버리지, 테스트 통과 또는 실패 여부, 비고 등을 포함하여 표시될 수 있다. 사용자는 코드 커버리지에 관한 화면을 선택하여 코드 커버리지에 관한 리포트를 제공받을 수 있다. 예를 들어, 코드 커버리지에 관한 리포트는 상술된 소스 코드 대비 커버리지에 관한 시각적 표현을 포함할 수 있다.
도 16은 일 실시예에 따른 테스트 히스토리를 나타내는 사용자 인터페이스를 나타낸 도면이다.
도 16을 참조하면, '테스트 케이스 정보' 및 '테스트 입력 데이터'를 나타내는 사용자 인터페이스(1610) 및 '테스트 결과'를 나타내는 사용자 인터페이스(1620)가 도시되어 있다. 사용자는 사용자 인터페이스(1610) 내 '테스트 케이스 정보' 화면에서 테스트가 완료된 메소드에 관한 테스트 케이스를 선택하여 각 테스트 결과를 확인할 수 있다. 테스트 결과는 테스트 수행 일시에 따라 리스트 형태로 제공될 수 있다. '테스트 입력 데이터' 화면에는 각 테스트 케이스에서 사용된 테스트 데이터 등이 표시될 수 있다.
'테스트 결과' 화면에는 각 테스트 케이스에 관한 테스트 결과, 예상 결과와 실제 실행 결과가 어떠한지 나타나 있으며, 예상 결과와 실제 실행 결과의 비교에 따른 P/F(pass/fail) 정보가 '테스트 케이스 정보' 화면에 표시되어 있다. 도 16에는 예상 결과가 '1등급'으로 설정되었으나, 실제 실행 결과가 '2등급'으로 나와서 테스트 결과가 'FAIL'로 표시되어 있다. 사용자는 사용자 인터페이스(1610, 1620)를 통해 각 테스트 케이스에 따른 테스트 결과를 확인하고, 필요에 따라 테스트 케이스 생성 화면으로 돌아가서 테스트 케이스를 수정하여, 테스트를 다시 수행할 수 있다.
테스트 케이스가 최종적으로 확정되면, 확정된 테스트 케이스는 svn(subversion) 서버와 같은 데이터베이스에 저장되어 관리될 수 있고, svn 서버에 저장된 개발 프로그램 전반에 관한 테스트 케이스들을 통해 개발 프로그램에 관한 통합 테스트가 수행될 수 있다.
도 17은 일 실시예에 따른 통합 테스트를 수행하는 테스트 장치를 나타낸 도면이다.
도 17을 참조하면, 테스트 장치(1730)는 개발 프로그램 내 각 소스 코드(예: 클래스 및 메소드 단위)에 관한 테스트 케이스에 기초하여 통합 테스트를 수행할 수 있다. 일 실시예에 따르면, 통합 테스트 과정은 도 1의 통합 테스트 처리부(113)에 의해 수행될 수 있다.
테스트 케이스 생성 및 이에 따른 테스트 수행이 완료되면, 확정된 테스트 파일(1710)은 svn 서버(1720)에 저장 및 관리될 수 있다. 테스트 파일(1710)은 테스트 케이스를 클래스 및 메소드 단위로 저장할 수 있다. 테스트 케이스는 상술된 테스트 케이스 생성 프로세스를 통해 생성된 것일 수 있다. 테스트 장치(1730)는 svn 서버(1720)를 통해 각 테스트 대상 프로그램 파일에 관한 테스트 파일(1710)을 동기화하고, 테스트 파일(1710)에서 테스트 케이스를 추출하여, 통합 테스트를 수행할 수 있다.
예를 들어, 테스트 장치(1730)는 테스트 파일에서 테스트 케이스를 추출하고 테스트 대상 파일에 대한 테스트를 스케줄링하여 수행 목록을 작성하고, 추출된 테스트 케이스를 수행 후 테스트 결과를 생성할 수 있다. 테스트 수행 목록에 기초하여 사용자 입력에 따라 테스트 대상 시스템에 대한 테스트가 자동적으로 반복 수행될 수 있다. 이 때, 테스트 결과는, 상술된 개별 테스트 케이스에 관한 테스트 결과와 같이 테스트 통과 또는 실패 여부, 코드 커버리지 등을 포함할 수 있다. 테스트 장치(1730)는 테스트를 수행하고 그 결과를 도출하기 위해 테스트 대상 시스템(1740)의 테스트 러너를 이용할 수 있다. 통합 테스트를 통해 개별 클래스 및 메소드가 개발 프로그램의 적어도 일부에 관해 빌드된 버전에 관한 테스트 결과가 도출될 수 있다.
이상에서 설명된 장치 및/또는 시스템은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(Arithmetic Logic Unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(Field Programmable Gate Array), PLU(Programmable Logic Unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (22)

  1. 테스트 장치에 의해 수행되는 테스트 자동화 방법에 있어서,
    테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하는 단계;
    상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하는 단계;
    상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하는 단계;
    상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하는 단계; 및
    상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하는 단계
    를 포함하고,
    상기 감축된 테스트 경로들을 결정하는 단계는
    상기 테스트 경로 최소화 기법에 따라 상기 초기 테스트 경로들 중 적어도 일부를 병합하여 상기 감축된 테스트 경로들을 결정하는 단계를 포함하는,
    테스트 자동화 방법.
  2. 제1항에 있어서,
    상기 테스트 케이스를 생성하는 단계는
    사용자에게 상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들을 제시하는 단계; 및
    상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들에 기초한 사용자 입력에 따라 상기 테스트 케이스를 생성하는 단계
    를 더 포함하는 테스트 자동화 방법
  3. 제1항에 있어서,
    상기 테스트 케이스가 생성되면, 상기 테스트 케이스를 통해 상기 소스 코드의 적어도 일부를 실행하여 사용자에게 실행 결과를 제시하는 단계; 및
    상기 실행 결과에 기초한 사용자 입력에 따라 상기 테스트 케이스에 대응하는 예상 결과를 설정하는 단계
    를 더 포함하는, 테스트 자동화 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 초기 테스트 경로들을 결정하는 단계는
    상기 분기 포인트들에 대응하는 분기문들 중 부모(parent) 분기문이 없는 루트 분기문들을 기준으로 분류된 분기문 그룹들 각각에 관해 상기 초기 테스트 경로들을 결정하는 단계; 및
    각 초기 테스트 경로에 식별 시퀀스를 부여하는 단계
    를 포함하고,
    상기 감축된 테스트 경로들을 결정하는 단계는
    서로 다른 분기문 그룹에 속하는 초기 테스트 경로들 중 서로 동일한 식별 시퀀스를 갖는 초기 테스트 경로들을 병합하여 상기 감축된 테스트 경로들을 결정하는 단계를 포함하는,
    테스트 자동화 방법.
  6. 제1항에 있어서,
    상기 초기 테스트 경로들을 결정하는 단계는
    상기 분기 포인트들에 대응하는 분기문들 중 부모(parent) 분기문이 없는 1세대 분기문의 각 분기 중 상기 1세대 분기문의 자식 분기문에 해당하는 2세대 분기문에 이르지 않는 종결 분기가 존재하는 경우, 상기 1세대 분기문의 상기 종결 분기에 관한 테스트 경로를 도출하는 단계;
    상기 1세대 분기문의 각 분기 중 상기 2세대 분기문에 이르는 진행 분기가 존재하는 경우, 상기 1세대 분기문의 상기 진행 분기 및 상기 2세대 분기문의 각 분기에 관해 테스트 경로를 도출하는 단계;
    n세대 분기문의 각 분기 중 상기 n세대 분기문의 자식 분기문에 해당하는 n+1세대 분기문에 이르는 진행 분기가 존재하는 경우, 상기 n세대 분기문의 상기 진행 분기 및 상기 n+1세대 분기문의 각 분기에 관해 테스트 경로를 도출하는 단계; 및
    n 세대 분기문이 복수인 경우, 각 n 세대 분기문의 각 분기 중 동일한 속성의 분기를 그룹화하여 n-1 세대 분기문의 진행분기에 연결하여 테스트 경로를 도출하는 단계
    를 포함하고,
    상기 n은 2 이상의 자연수인,
    테스트 자동화 방법.
  7. 제6항에 있어서,
    상기 감축된 테스트 경로들을 결정하는 단계는
    상기 도출된 테스트 경로들 중에 동일한 선행 분기를 가지고 상기 동일한 선행 분기의 후행 분기가 서로의 흐름에 영향을 주지 않는 적어도 일부의 테스트 경로들을 병합하는 단계
    를 더 포함하는, 테스트 자동화 방법.
  8. 제1항에 있어서,
    상기 테스트 데이터 후보들을 결정하는 단계는
    상기 테스트 케이스 후보들을 실현하기 위한 각 분기문의 분기 조건에 매칭되는 범위의 경계 값을 산출하는 단계; 및
    상기 산출된 경계 값에 기초하여 상기 테스트 데이터 후보들을 결정하는 단계
    를 포함하는, 테스트 자동화 방법.
  9. 제1항에 있어서,
    상기 테스트 케이스 후보들 중 복수의 조건식을 가진 분기 포인트를 보유하는 테스트 케이스 후보가 존재하는 경우,
    상기 테스트 데이터 후보들을 결정하는 단계는,
    단락 회로 평가(Short-circuit Evaluation)가 적용될 수 있는 테스트 데이터를 상기 테스트 데이터 후보에서 배제하고 상기 복수의 조건식이 모두 반영되는 테스트 데이터를 상기 테스트 데이터 후보로 결정하는 단계를 더 포함하는,
    테스트 자동화 방법.
  10. 제1항에 있어서,
    상기 테스트 케이스가 생성된 이후, 상기 생성된 테스트 케이스에 기초한 테스트를 수행하는 단계를 더 포함하는,
    테스트 자동화 방법.
  11. 제10항에 있어서,
    상기 테스트가 수행된 이후, 상기 소스 코드 대비 각 테스트 케이스의 코드 커버리지를 표시하는 단계를 더 포함하는,
    테스트 자동화 방법.
  12. 제11항에 있어서,
    상기 코드 커버리지는
    라인 커버리지 및 분기 커버리지 중 적어도 하나를 포함하는,
    테스트 자동화 방법.
  13. 제10항에 있어서,
    상기 테스트가 수행된 이후, 테스트 통과 여부 및 코드 커버리지를 포함하는 테스트 결과 문서 리포트를 자동으로 생성하는 단계를 더 포함하는,
    테스트 자동화 방법.
  14. 테스트 장치에 의해 수행되는 테스트 자동화 방법에 있어서,
    복수의 테스트 대상 파일이 존재하는 경우,
    각 테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하는 단계,
    상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하는 단계,
    상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하는 단계,
    상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하는 단계, 및
    상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하는 단계를 포함하는 테스트 케이스 생성 단계
    를 통해 생성된 테스트 케이스를 포함하는 상기 복수의 테스트 대상 파일의 각각에 관한 테스트 파일들을 SVN(Subversion) 서버를 통해 동기화하는 단계;
    상기 테스트 파일들에 기초하여 상기 복수의 테스트 대상 파일 각각에 대한 테스트를 스케줄링하여 테스트 수행 목록을 생성하는 단계; 및
    상기 테스트 수행 목록에 기초하여 사용자 입력에 따라 테스트 대상 시스템에 대한 테스트를 자동적으로 반복 수행하는 단계
    를 포함하는 테스트 자동화 방법.
  15. 제1항 내지 제3항 및 제5항 내지 제14항 중 어느 한 항의 방법을 수행하기 위한 명령어들을 포함하는 하나 이상의 프로그램을 저장한 컴퓨터 판독 가능 저장매체.
  16. 테스트 장치에 있어서,
    프로세서; 및
    상기 프로세서에서 읽을 수 있는 명령어들을 포함하는 메모리
    를 포함하고,
    상기 명령어들이 상기 프로세서에서 실행되면, 상기 프로세서는
    테스트 대상 파일의 소스 코드에 대한 분기문 구조 분석 및 분기 포인트 식별을 통해 분기 포인트들 중 적어도 일부를 경유하는 초기 테스트 경로들을 결정하고,
    상기 초기 테스트 경로들에 대하여 테스트 경로 최소화 기법을 적용하여 상기 초기 테스트 경로들에 비해 수적으로 적은 감축된 테스트 경로들을 결정하고,
    상기 감축된 테스트 경로들에 대응하는 테스트 케이스 후보들을 생성하고,
    상기 테스트 케이스 후보들을 실현하기 위한 테스트 데이터 후보들을 결정하고,
    상기 테스트 데이터 후보들에 기초하여 테스트 케이스를 생성하고,
    상기 프로세서는
    상기 테스트 경로 최소화 기법에 따라 상기 초기 테스트 경로들 중 적어도 일부를 병합하여 상기 감축된 테스트 경로들을 결정하는,
    테스트 장치.
  17. 제16항에 있어서,
    상기 프로세서는
    사용자에게 상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들을 제시하고, 상기 테스트 케이스 후보들 및 상기 테스트 데이터 후보들에 기초한 사용자 입력에 따라 상기 테스트 케이스를 생성하는,
    테스트 장치.
  18. 제16항에 있어서,
    상기 프로세서는
    상기 테스트 케이스가 생성되면, 상기 테스트 케이스를 통해 상기 소스 코드의 적어도 일부를 실행하여 사용자에게 실행 결과를 제시하고, 상기 실행 결과에 기초한 사용자 입력에 따라 상기 테스트 케이스에 대응하는 예상 결과를 설정하는,
    테스트 장치.
  19. 삭제
  20. 제16항에 있어서,
    상기 프로세서는
    상기 케이스 후보들을 실현하기 위한 각 분기문의 분기 조건에 매칭되는 범위의 경계 값을 산출하고, 상기 산출된 경계 값에 기초하여 상기 테스트 데이터 후보들을 결정하는,
    테스트 장치.
  21. 제16항에 있어서,
    상기 테스트 케이스 후보들 중 단락 복수의 조건식을 가진 분기 포인트를 보유하는 테스트 케이스 후보가 존재하는 경우, 상기 프로세서는 상기 테스트 데이터 후보의 결정시, 단락 회로 평가(Short-circuit Evaluation)가 적용될 수 있는 테스트 데이터를 상기 테스트 데이터 후보에서 배제하고 상기 복수의 조건식이 모두 고려되는 테스트 데이터를 상기 테스트 데이터 후보로 결정하는,
    테스트 장치.
  22. 제16항에 있어서,
    상기 프로세서는
    상기 테스트 케이스가 생성된 이후, 상기 생성된 테스트 케이스에 기초한 테스트를 수행하는,
    테스트 장치.
KR1020190074046A 2019-06-21 2019-06-21 테스트 자동화 시스템 KR102271857B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190074046A KR102271857B1 (ko) 2019-06-21 2019-06-21 테스트 자동화 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190074046A KR102271857B1 (ko) 2019-06-21 2019-06-21 테스트 자동화 시스템

Publications (2)

Publication Number Publication Date
KR20200145269A KR20200145269A (ko) 2020-12-30
KR102271857B1 true KR102271857B1 (ko) 2021-07-01

Family

ID=74087883

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190074046A KR102271857B1 (ko) 2019-06-21 2019-06-21 테스트 자동화 시스템

Country Status (1)

Country Link
KR (1) KR102271857B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113946511B (zh) * 2021-10-15 2022-06-17 杭州研极微电子有限公司 一种全功能测试用例集合获取方法和系统
KR102618417B1 (ko) * 2023-05-10 2023-12-28 쿠팡 주식회사 정보를 제공하는 전자 장치의 동작 방법 및 이를 지원하는 전자 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101132560B1 (ko) 2010-06-09 2012-04-03 강원대학교산학협력단 로봇 소프트웨어 컴포넌트를 위한 시뮬레이션 기반 인터페이스 테스팅 자동화 시스템 및 그 방법
JP2012185642A (ja) 2011-03-04 2012-09-27 Internatl Business Mach Corp <Ibm> テスト・ケース生成方法、プログラム及びシステム
US20130311976A1 (en) * 2012-05-17 2013-11-21 Cognizant Technology Solutions India Pvt. Ltd. Method and system for generating and processing black box test cases

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5542043A (en) * 1994-10-11 1996-07-30 Bell Communications Research, Inc. Method and system for automatically generating efficient test cases for systems having interacting elements
KR101989802B1 (ko) * 2017-02-28 2019-06-18 주식회사 스패로우 테스트 케이스를 이용하여 테스트를 수행하는 방법 및 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101132560B1 (ko) 2010-06-09 2012-04-03 강원대학교산학협력단 로봇 소프트웨어 컴포넌트를 위한 시뮬레이션 기반 인터페이스 테스팅 자동화 시스템 및 그 방법
JP2012185642A (ja) 2011-03-04 2012-09-27 Internatl Business Mach Corp <Ibm> テスト・ケース生成方法、プログラム及びシステム
US20130311976A1 (en) * 2012-05-17 2013-11-21 Cognizant Technology Solutions India Pvt. Ltd. Method and system for generating and processing black box test cases

Also Published As

Publication number Publication date
KR20200145269A (ko) 2020-12-30

Similar Documents

Publication Publication Date Title
US11126543B2 (en) Software test automation system and method
US9846638B2 (en) Exposing method related data calls during testing in an event driven, multichannel architecture
US8892953B2 (en) Method and system for test suite control
US8196113B2 (en) Realtime creation of datasets in model based testing
US8225288B2 (en) Model-based testing using branches, decisions, and options
US7581138B2 (en) Method, system and computer program for managing test processes based on customized UML diagrams
CN111694741B (zh) 一种基于路径深度覆盖的测试用例设计方法
US20100218168A1 (en) System and Method for Generating a Test Environment Script File
US20080148235A1 (en) Runtime inspection of user interfaces
US20120116561A1 (en) Program testing apparatus, method of testing a program, and program testing program
US9934132B2 (en) Determining code coverage of an application by test(S)
KR102271857B1 (ko) 테스트 자동화 시스템
US10496379B2 (en) Facilitated production of code for software testing
US10146530B1 (en) Simulating and evaluating code branch merge
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
Teixeira et al. EasyTest: An approach for automatic test cases generation from UML Activity Diagrams
US5956511A (en) Program development support apparatus, program development support method, and storage medium therefor
US10733345B1 (en) Method and system for generating a validation test
US8141039B2 (en) Method and system for consolidating machine readable code
CN109800155B (zh) 一种基于Probe的QTE联锁应用软件测试方法及装置
Abdalla et al. Test case prioritization for mobile apps
US11520691B2 (en) Test procedure systems and methods
CN111913888A (zh) 函数生成方法、自动测试方法、电子设备及存储介质
JPH09319613A (ja) プログラム開発支援装置及びプログラム開発支援方法

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right