구문커버리지

개념
- 구문커버리지(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);  구문이 테스트되지 못하기 때문에, 다음과 같은 분석 결과 획득

 

테스트 결과

테스트 코드

http://cfile3.uf.tistory.com/image/146C2A284A84D27BD1BF41

그림과 같이, Test Case 수행 시, 수행되지 않은 코드는 빨갛게 표현된 부분이며, 이에 따른 Statement Coverage는 다음과 같이 0%가 됨

http://cfile25.uf.tistory.com/image/156C2A284A84D27BD2BE27

   

 

추가 테스트 코드

결과

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가 테스트될 수 있습니다.
 

http://cfile3.uf.tistory.com/image/146853134A84D3B915DA13

 

위과 같이, For loop 내의 Statement가 녹색으로 테스트 되었음을 확인할 수 있으며, Statement Coverage 결과는 다음과 같음

.http://cfile23.uf.tistory.com/image/156853134A84D3B916E35E

- 이 분석 결과를 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 분석의 핵심

댓글