본문 바로가기

시즌1/Java Tips

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

Code Coverage - Decision Coverage

 Decision Coverage는 Code Coverage 분석의 7가지 척도 중 하나로써, 각 조건문이 True 혹은 False가 되는 조건이 모두 테스트되는 정도를 측정하는 척도입니다.

참조 : Code Coverage, Statement Coverage

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

package codecoverage;

public class DecisionCoverageTest {

	public int method(int param){
		if(param > 0){
			System.out.println("param is greater than 0");
		}
		else{
			System.out.println("param is equal or less than 0");
		}
		
		return param;
	}
}

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

package codecoverage;

import junit.framework.TestCase;

public class DecisionCoverageTestCase extends TestCase {

	public void testMethod1(){
		DecisionCoverageTest decisionCoverageTest = new DecisionCoverageTest();
		
		assertEquals(decisionCoverageTest.method(5), 5);
	}

}

이 Test Case를 수행하는 경우, DecisionCoverageTest.method 내의 if 문 조건 중, True인 조건만을 만족하기 때문에, Decision Coverage 기준에 의한 Coverage가 100%를 만족하지 못합니다.

다음 결과를 보시면,



위와 같이, TestCase에서 method에 대한 Test Case 작성 시, 파라미터 값이 5에 대한 Test Case만을 작성하는 경우, if 내의 참인 조건 만 Test가 수행되게 됩니다. 그 결과로써, Decision Coverage는 다음과 같습니다.




이 분석 결과를 100%로 하기 위해서는 다음과 같이 Test Case를 추가할 수 있습니다.


package codecoverage;

import junit.framework.TestCase;

public class DecisionCoverageTestCase extends TestCase {

	public void testMethod1(){
		DecisionCoverageTest decisionCoverageTest = new DecisionCoverageTest();
		
		assertEquals(decisionCoverageTest.method(5), 5);
	}
	
	public void testMethod2(){
		DecisionCoverageTest decisionCoverageTest = new DecisionCoverageTest();
		
		assertEquals(decisionCoverageTest.method(0), 0);
	}
}


이 경우, 두 개의 Test Case에 의해, if 내의 조건의 True인 경우와 False인 경우가 모두 테스트되기 때문에, Decision Coverage를 100%를 달성할 수 있습니다. 결과를 보시면,





위와 같이 Decision Coverage에 따른 Code Coverage가 100%가 됨을 알 수 있습니다.

이와 같이, Decision Coverage의 경우, Statement Coverage 보다는 좀 더, 상세한 Test Case가 필요하며, 소프트웨어가 실행될 때의 각 상태에 따른 수행 경로를 좀 더 상세하게 테스트할 수 있습니다.

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