테스트 커버리지

테스트 커버리지 종류 요약

커버리지 강도 : 구문 < 결정 < 조건 < 조건/결정 < 변경 조건/결정(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는 조건 커버리지와 결정 커버리지를 모두 만족시키면서, 각 개별 조건식이 다른 조건식의 값과 관계 없이 전체 결정문의 결과에 독립적으로 영향을 미치는 경우를 테스트하는 강력한 기준이다.

주로 항공, 원자력, 의료 등 높은 신뢰성이 요구되는 시스템에 사용된다.

  • 핵심 : 각 조건이 독립적으로 결과에 영향을 주는 것을 증명해야 한다.