테스트 커버리지
테스트 커버리지 종류 요약
커버리지 강도 : 구문 < 결정 < 조건 < 조건/결정 < 변경 조건/결정(MC/DC)
| 커버리지 종류 | 핵심 키워드 |
|---|---|
| 구문(문장) 커버리지 | 모든 명령문, 한 번 이상 실행 |
| 결정(분기) 커버리지 | 각 결정문, 참/거짓, 한 번 이상 |
| 조건 커버리지 | 결정문 내 각 조건식, 참/거짓 |
| 조건/결정 커버리지 | 조건 + 결정 커버리지 모두 만족 |
| 변경 조건/결정 커버리지 | 개별 조건식, 독립적 영향 |
명령문, 결정문, 조건식
| 용어 | 정의 | 예시 |
|---|---|---|
| 명령문 | 실행 가능한 코드 한 줄 (실행문) | System.out.println("Hello");, x = 5 |
| 결정문 | 참/거짓을 판단하는 조건부 문장의 전체 조건 | if (x > 0 && y < 10), while (a < b)) |
| 조건식 | 결정문 내부의 개별 비교 연산 | 위 결정문 예시에서 x > 0, y < 10, a < b |
구문(문장) 커버리지 (Statement Coverage)
구문 커버리지는 소스 코드의 모든 실행 가능한 문장(명령문)이 적어도 한 번 이상 실행되었는지를 측정하는 커버리지 기준이다.
-
장점 : 이해하기 쉽고 테스트 케이스를 만들기 간편하다.
-
단점 : 코드의 논리적인 분기(branch)를 모두 테스트하지 못할 수 있다.
-
예시 코드 :
public void example(int x) {
if (x > 0) { // 결정문
System.out.println("Positive"); // 문장 1 (명령문1)
}
System.out.println("End"); // 문장 2 (명령문2)
}결정(분기) 커버리지 (Decision(Branch) Coverage)
결정 커버리지는 각 결정문의 결과가 참(True)과 거짓(False)을 각각 한 번 이상 갖도록 테스트하는 기준이다.
- 장점 : 구문 커버리지가 놓치는 분기 경로를 테스트할 수 있다.
- 예시 코드 :
조건 커버리지 (Condition Coverage)
조건 커버리지는 결정문 내에 있는 각각의 개별 조건식이 참(True)과 거짓(False)을 각각 한 번 이상 갖도록 테스트하는 기준이다.
- 조건 커버리지는 결정문 전체의 결과(참/거짓)는 고려하지 않는다. 이로 인해 결정 커버리지를 100% 만족시키지 못하는 경우가 발생할 수 있다.
조건/결정 커버리지 (Condition/Decision Coverage)
조건/결정 커버리지는 결정 커버리지와 조건 커버리지를 모두 100% 만족하는 테스트 기준이다.
각 결정문의 결과가 참/거짓을 각각 한 번 이상 가지면서, 동시에 모든 개별 조건식의 결과도 참/거짓을 각각 한 번 이상 갖도록 테스트 케이스를 설계해야 한다.
- 장점 : 결정과 조건 수준을 모두 만족시켜 테스트의 신뢰도를 높인다.
- 단점 : 조건식의 모든 조합을 테스트하지는 않으므로, MC/DC보다는 강도가 약하다.
변경 조건/결정 커버리지 (MC/DC, Modified Condition/Decision Coverage)
MC/DC는 조건 커버리지와 결정 커버리지를 모두 만족시키면서, 각 개별 조건식이 다른 조건식의 값과 관계 없이 전체 결정문의 결과에 독립적으로 영향을 미치는 경우를 테스트하는 강력한 기준이다.
주로 항공, 원자력, 의료 등 높은 신뢰성이 요구되는 시스템에 사용된다.
- 핵심 : 각 조건이 독립적으로 결과에 영향을 주는 것을 증명해야 한다.