본문 바로가기

시즌1/Java Tips

소프트웨어 테스팅 : Code Coverage - Statement Coverage

Statement Coverage

Statement Coverage는 Code Coverage 분석의 7 가지 분석 척도 중 하나로써, 각 Statement 가 테스트되는 수준을 정의하는 척도입니다. 이 Statement Coverage 분석을 통해, 개발된 소프트웨어가 어느 정도 테스트가 수행되었는지를 파악할 수 있습니다.

참조 : Code Coverage

예를 들어 다음과 같은 소스 코드가 있을 경우,

package codecoverage;

public class StatementCoverageTest {

	public void method1(int param){
		for(int i = 0 ; i < param ; i++){
			System.out.println(i);
		}
	}
}

이 소스 코드를 테스트 하기 위한 Test Case를 다음과 같이 작성하였을 경우,

package codecoverage;

import junit.framework.TestCase;

public class StatementCoverageTestCase extends TestCase {

	public void testMethod1(){
		StatementCoverageTest statementCoverageTest = new StatementCoverageTest();
		statementCoverageTest.method1(0);
	}
}

이 Test Case 를 수행할 경우, method1 내의 for loop 내로 진입을 하지 못하여, System.out.println(i);  구문이 테스트되지 못하기 때문에, 다음과 같은 분석 결과를 얻을 수 있습니다.



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



이 분석 결과를 100%에 맞추기 위하여, 다음과 같이 Test Case를 추가합니다.

package codecoverage;

import junit.framework.TestCase;

public class StatementCoverageTestCase extends TestCase {

	public void testMethod1(){
		StatementCoverageTest statementCoverageTest = new StatementCoverageTest();
		statementCoverageTest.method1(0);
	}
	

	public void testMethod2(){
		StatementCoverageTest statementCoverageTest = new StatementCoverageTest();
		statementCoverageTest.method1(10);
	}
	
}

위와 같이 Test Case를 추가할 경우, testMethod2 Test Case에 의해, For loop 구문 내로 진입할 수 있으며, For loop 내의 Statement가 테스트될 수 있습니다. 그 결과는 다음과 같습니다.



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




이와 같이, 테스트 대상이 되는 소스 코드가 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 분석입니다.

[ 참고 ]
1. Coverage 분석 Tool : Code Cover for Eclipse ( http://codecover.org )