코드 커버리지(Code Coverage)
소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표 중 하나다. 말 그대로 코드가 얼마나 커버되었는가이다. 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었냐는 것이다.
코드 커버리지는 소스 코드를 기반으로 수행하는 화이트 박스 테스트를 통해 측정한다.
블랙박스 테스트(Black box test)
- 테스트 시 객체 내부에 무엇이 들어 있는지 알 수 없거나 알지 않아도 된다는 것을 가정하여 테스팅하는 방법.
- 객체 내부가 어떻게 변하던 상관없이 입력을 주었을 때 원하는 결괏값이 나오면 테스트는 통과하게 된다.
화이트박스 테스트(White box test)
- 객체 내부를 확인하고 검증하는 테스트이다.
- 쓰이지 않은 변수는 없는지..? 특정 범위만 받는 함수가 있는지..? 이런 부분을 확인하는 과정이다.
- 코드 커버리지(Code Coverage)는 화이트박스 테스트의 일부이다.
코드 커버리지 측정기준 예제
구문 커버리지(Statement Coverage), 라인 커버리지(Line Coverage)
- 코드 한 줄이 한번 이상 실행된다면 충족된다.
void foo (int x) {
system.out("start line"); // 1번
if (x > 0) { // 2번
system.out("middle line"); // 3번
}
system.out("last line"); // 4번
}
위의 코드를 테스트한다고 가정해보자. x = -1을 테스트 데이터로 사용할 경우, if 문의 조건을 통과하지 못하기 때문에 3번 코드는 실행되지 못한다. 총 4개의 라인에서 1, 2, 4번의 라인만 실행되므로 구문 커버리지는 3 / 4 * 100 = 75(%)가 된다.
결정 커버리지(Decision Coverage), (Branch Coverage)
- 전체적인 결과가 참/거짓이면 충족된다.
void foo (int x, int y) {
system.out("start line"); // 1번
if (x > 0 && y < 0) { // 2번
system.out("middle line"); // 3번
}
system.out("last line"); // 4번
}
위의 코드를 테스트한다고 가정해보면. if 문의 조건에 대해 true/false 모두 가질 수 있는 테스트 케이스로는 x = 1, y = -1, x = -1, y = 1이 있다. 첫 번째 테스트 데이터는 x > 0과 y < 0 모두 true이기 때문에 if 문의 조건에 대해 true를 반환한다. 두 번째 테스트 데이터는 x < 0에서 이미 false이기 때문에 if 문의 조건에 대해 false를 반환한다. 모든 조건식에 대해 true와 false를 반환하므로 결정 커버리지를 충족한다.
조건 커버리지(Condition Coverage)
- 각 내부 조건이 참/거짓을 가지게 되면 충족된다.
void foo (int x, int y) {
system.out("start line"); // 1번
if (x > 0 && y < 0) { // 2번
system.out("middle line"); // 3번
}
system.out("last line"); // 4번
}
위의 코드를 테스트한다고 가정해보면. 조건 커버리지를 만족하는 테스트 케이스로는 x = 1, y = 1, x = -1, y = -1이 있다. 이는 x > 0 내부 조건에 대해 true/false를 만족하고, y < 0 내부 조건에 대해 false/true를 만족한다.