구문커버리지
태그 :
- 개념
- - 구문커버리지(Statement Coverage, 문장적합성기준)은 프로그램을 구성하는 모든 문장들이 최소한 한번은 실행될 수 있는 입력 데이터를 테스트 데이터로 선정하는 기준임. - 코드의 모든 구문을 실행할 수 있는 입력값이나 이벤트 등의 테스트 데이터를 제공해 주면 달성됨. - 테스트 케이스 스위트(suite, 묶음)에 의해 실행된 구문이 몇 퍼센트인 지 측정
I. 구문 커버리지의 개요
가. 구문 커버리지의 정의
- 구문커버리지(Statement Coverage, 문장적합성기준)은 프로그램을 구성하는 모든 문장들이 최소한 한번은 실행될 수 있는 입력 데이터를 테스트 데이터로 선정하는 기준임.
- 코드의 모든 구문을 실행할 수 있는 입력값이나 이벤트 등의 테스트 데이터를 제공해 주면 달성됨.
- 테스트 케이스 스위트(suite, 묶음)에 의해 실행된 구문이 몇 퍼센트인 지 측정
나. 구문 테스팅의 정의
- 구문 커버리지를 늘리기 위해 특정 구문을 테스트하는 테스트 케이스 도출하는 과정
다. 구문 커버리지의 특징
구분 |
내용 |
비고 |
보장성 |
적은 개수의 테스트 데이터로 쉽게 달성할 수 있지만, 코드 상에 존재하는 가능한 경 우 중 많은 부분을 검증하지 못하는 보장성 낮은 커버리지 |
보장성 낮음 |
측정강도 |
타 커버리지에 비해 가장 약함. |
최저 |
목표달성 |
코드의 모든 구문을 실행할 수 있는 입력 값이나 이벤트 등의 테스트 데이터를 제공 해 주면 달성 |
100% |
포함관계 |
분기 커버리지, 다중 조건 커버리지, 경로 커버리지 등 포함관계가 더 큰 커버리지를 달성하면 저절로 달성 |
최하위 |
II. Test Case 도출 사례
가. 프로그램과 도출사례
나. 제어흐름 테스트기반 TC도출
- 모든 흐름을 한번씩 지나가는 테스트
1)TC1 : (1,2,8,3,5,7)
2)TC2 : (1,3,6,8,4,7)
III. Test 커버리지의 사용 예시
Statement Coverage는 Code Coverage 분석의 7 가지 분석 척도 중 하나로써, 각 Statement가 테스트되는 수준을 정의하는 척도입니다. 이 Statement Coverage 분석을 통해 개발된 소프트웨어의 테스트 정도 파악
소스 코드 |
테스트 코드 |
01.package codecoverage; 02. 03.public class StatementCoverageTest { 04. 05. public void method1(int param){ 06. for(int i = 0 ; i < param ; i++){ 07. System.out.println(i); 08. } 09. } 10.} |
01.package codecoverage; 02. 03.import junit.framework.TestCase; 04. 05.public class StatementCoverageTestCase extends TestCase { 06. 07. public void testMethod1(){ 08. StatementCoverageTest statementCoverageTest = new StatementCoverageTest(); 09. statementCoverageTest.method1(0); 10. } 11.}
|
- 이 Test Case 를 수행할 경우, method1 내의 for loop 내로 진입을 하지 못하여, System.out.println(i); 구문이 테스트되지 못하기 때문에, 다음과 같은 분석 결과 획득
테스트 결과 |
테스트 코드 |
|
|
그림과 같이, Test Case 수행 시, 수행되지 않은 코드는 빨갛게 표현된 부분이며, 이에 따른 Statement Coverage는 다음과 같이 0%가 됨 |
|
추가 테스트 코드 |
결과 |
|
01.package codecoverage; 02. 03.import junit.framework.TestCase; 04. 05.public class StatementCoverageTestCase extends TestCase { 06. 07. public void testMethod1(){ 08. StatementCoverageTest statementCoverageTest = new StatementCoverageTest(); 09. statementCoverageTest.method1(0); 10. } 11. public void testMethod2(){ 12. StatementCoverageTest statementCoverageTest = new StatementCoverageTest(); 13. statementCoverageTest.method1(10); 14. } |
위와 같이 Test Case를 추가할 경우, testMethod2 Test Case에 의해, For loop 구문 내로 진입할 수 있으며, For loop 내의 Statement가 테스트될 수 있습니다.
|
|
위과 같이, For loop 내의 Statement가 녹색으로 테스트 되었음을 확인할 수 있으며, Statement Coverage 결과는 다음과 같음 . |
- 이 분석 결과를 100%에 맞추기 위하여, 다음과 같이 Test Case를 추가
- 이와 같이, 테스트 대상이 되는 소스 코드가 Statement 단위로 100% 수행되도록 Test Case를 작성하여, 테스트 결과를 분석하는 기준이 Code Coverage 중, Statement Coverage에 해당합니다.
이 분석의 목적은, 소스 코드를 100% 테스트하기 위함이며, 어떠한 Test Case를 작성하더라도 수행될 수 없는 Dead Code를 찾아내는 것이 그 목적입니다.( Dead Code : 개발된 소프트웨어 내에서 단 한번도 수행되지 않는 Code를 의미함)
물론, TDD(Test Driven Development) 기반으로 프로젝트를 진행하지 않더라도, Test Case를 작성하여, 분석을 수행하고, 그 정도가 100%에 가깝도록 Test Case를 작성하여, 소프트웨어가 오작동(BUG)을 일으킬 가능성을 낮출 수 있도록 하는 것이 Code Coverage 분석의 핵심