424. 조건 커버리지 (Condition Coverage)
핵심 인사이트 (3줄 요약)
- 본질: 조건 커버리지(Condition Coverage)란 화이트박스 테스트에서 분기문 내의 각 개별 조건식(Subcondition)이 독립적으로 참(True)/거짓(False)을 한 번씩 갖도록 테스트 케이스를 설계하는 지표이다.
- 가치: 결정 커버리지가 분기문의 전체 결과만 검증하는 반면, 조건 커버리지는 복합 조건 내의 각 개별 조건이 전체 결과에 미치는 영향을 검증함으로써, 단일 조건 오류를 발견할 수 있다.
- 융합: 조건 커버리지는 DO-178C, ISO 26262 등 안전 중요 시스템 표준에서 MC/DC와 함께 활용되며, 특히 항공기, 자동차 등 임계 시스템 소프트웨어 검증에 필수적이다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: 조건 커버리지는 분기문의 복합 조건을 구성하는 각 개별 조건식이 독립적으로 참(True)/거짓(False) 값을 갖는지를 측정하는 지표이다. 예를 들어 "if (A > 0 and B > 0)"이라는 복합 조건에서 A > 0과 B > 0이 각각 독립적으로 참/거짓을 한 번씩 가져야 한다.
-
필요성: 결정 커버리지는 복합 조건 전체의 결과(참/거짓)만 검증하지만, 개별 조건의独立적인 영향은 검증하지 않는다. 예를 들어 A > 0 and B > 0에서 A만 false이고 B는 true인 경우, 전체 조건은 false가 되지만, A > 0 조건 자체가 false일 때의 동작은 이미 검증된 것이다. 조건 커버리지를 통해 각 개별 조건의 참/거짓을 모두 테스트할 수 있다.
-
조건(Condition)과 결정(Decision)의 구분:
- 조건(Condition): 더 이상 분할할 수 없는 단일 부울 식 (예: A > 0, B == 0)
- 결정(Decision): 하나 이상의 조건을 논리 연산자로 결합한 것 (예: A > 0 and B == 0)
-
비유: 조건 커버리지는 **'화합물 각 성분 검증'**과 같다. 화합물이 성분 A, B, C로 구성되어 있을 때, 전체 화합물의 특성(결정)을 보는 것(결정 커버리지)뿐만 아니라 각 성분 A, B, C가 단독으로 어떠한 특성을 갖는지(조건 커버리지)도 검증해야 한다.
-
등장 배경 및 발전 과정:
- 1980년대: 소프트웨어 테스트 학계에서 조건 커버리지 개념 체계화
- 1990년대: DO-178B에서 항공기 소프트웨어 커버리지 수준 정의
- 현재: 자동차(ISO 26262), 의료기기(IEC 62304) 등 안전 표준에서 활용
-
섹션 요약 비유: 조건 커버리지는 **'레시피 각 재료별 특성 확인'**과 같다. 요리에서 "양파 + 당근 + 감자"를 넣는 레시피가 있을 때, 전체 맛(결정)만 확인하는 것이 아니라 양파만의 맛, 당근만의 맛, 감자만의 맛(각 조건)을 각각 확인하는 것이다. 이것이 조건 커버리지이다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
조건 커버리지 계산
[조건 커버리지 계산]
코드:
if (A > 0 and B > 0):
result = 1
else:
result = 0
※ A > 0: 조건 1 (Condition 1)
※ B > 0: 조건 2 (Condition 2)
※ A > 0 and B > 0: 결정 (Decision)
TC-01: A = 5, B = 5 → A > 0 = true, B > 0 = true → result = 1
TC-02: A = -1, B = -1 → A > 0 = false, B > 0 = false → result = 0
┌─────────────────────────────────────────────────────────────────┐
│ 조건 커버리지 분석 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 조건 1 (A > 0): │
│ ✓ 참 (TC-01) → Covered │
│ ✓ 거짓 (TC-02) → Covered │
│ │
│ 조건 2 (B > 0): │
│ ✓ 참 (TC-01) → Covered │
│ ✓ 거짓 (TC-02) → Covered │
│ │
│ 조건 커버리지 = 4 / 4 × 100 = 100% │
│ ※ 모든 개별 조건이 T/F를 모두取得 │
│ │
└─────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 조건 커버리지에서는 복합 조건 내의 각 개별 조건이 독립적으로 참/거짓을 가져야 한다. TC-01에서 A > 0 = true, B > 0 = true이고, TC-02에서 A > 0 = false, B > 0 = false이다. 따라서 모든 개별 조건이 참/거짓을 모두取得하여 조건 커버리지 100%를 달성한다.
조건 커버리지 vs 결정 커버리지
[조건 커버리지 vs 결정 커버리지 비교]
코드:
if (A > 0 and B > 0):
result = 1
TC-01: A = -1, B = 5 → (A > 0 = false, B > 0 = true) → result = 1
TC-02: A = 5, B = -1 → (A > 0 = true, B > 0 = false) → result = 1
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 비교 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TC-01, TC-02 결과: │
│ - 결정: TC-01은 false, TC-02는 false │
│ - 따라서 결정 커버리지: false만 Covered, true 미Covered → 50% │
│ │
│ - 조건 1: TC-01은 false, TC-02는 true → Covered → 100% │
│ - 조건 2: TC-01은 true, TC-02는 false → Covered → 100% │
│ - 조건 커버리지: 100% │
│ │
│ ※ 이 예에서 조건 커버리지는 100%이지만 결정 커버리지는 50% │
│ ※ 즉, 조건 커버리지 100%도 전체 결정의 모든 결과를 Covered하지 않음 │
│ │
└─────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 이 예시에서 TC-01과 TC-02는 A > 0와 B > 0의 각 조건에 대해 참/거짓을 모두取得하지만, 복합 조건 "A > 0 and B > 0"의 전체 결과는 항상 false이다. 따라서 조건 커버리지는 100%이지만 결정 커버리지는 50%이다.
Short-Circuit 평가와 조건 커버리지
[Short-Circuit 평가에서 조건 커버리지]
대부분의 프로그래밍 언어에서:
- A and B: A가 false이면 B는 평가되지 않음
- A or B: A가 true이면 B는 평가되지 않음
코드:
if (A > 0 and B > 0):
result = 1
TC-01: A = -1, B = 5
→ A > 0 = false (Short-Circuit로 B > 0 미평가)
→ result = 0
TC-02: A = 5, B = -1
→ A > 0 = true, B > 0 = false
→ result = 0
TC-03: A = 5, B = 5
→ A > 0 = true, B > 0 = true
→ result = 1
※ TC-01에서 B > 0가 실제로 평가되지 않으므로 주의 필요
※ Short-Circuit 환경에서도 조건 커버리지를 달성하려면 B > 0를 평가하는
테스트 케이스 필요
Ⅲ. 구현 및 실무 응용 (Implementation & Practice)
조건 커버리지 달성 테스트 케이스
[테스트 케이스 설계]
코드:
if ((C1) or (C2)):
action1()
else:
action2()
조건 커버리지 100% 위한 테스트:
TC-01: C1 = true, C2 = ? (don't care) → action1()
TC-02: C1 = false, C2 = true → action1()
TC-03: C1 = false, C2 = false → action2()
※ TC-01과 TC-02에서 C1이 각각 true/false Covered
※ TC-02와 TC-03에서 C2가 각각 true/false Covered
다중 조건 커버리지와의 비교
[다중 조건 커버리지와의 비교]
코드:
if (A and B):
result = 1
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 수준별 비교 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 수준 │ 필요한 테스트 수 │ 설명 │
│ ──────────────────────────────────────────────────────────── │
│ 결정 커버리지 │ 2 │ A and B 전체의 T/F │
│ 조건 커버리지 │ 2 │ A의 T/F, B의 T/F │
│ 다중 조건 커버리지 │ 4 │ 모든 조합 (TT, TF, FT, FF)│
│ MC/DC │ 3 │ 각 조건 독립적 영향 증명 │
│ │
│ ※ 위 예에서 결정 커버리지 100%: TC(TT), TC(FF) │
│ ※ 조건 커버리지 100%: TC(TF), TC(FT) or TC(TT), TC(TF) 등 │
│ ※ 다중 조건 커버리지 100%: TC(TT), TC(TF), TC(FT), TC(FF) │
│ │
└─────────────────────────────────────────────────────────────────┘
자동차ecu 테스트 적용
[자동차 ECU 조건 커버리지 적용]
예시: 자동 긴급 브레이크 시스템 (AEB)
조건:
- C1: 전방 충돌 감지 (선박 도달 거리 < 안전 거리)
- C2: 운전자의 브레이크 조작 감지
- C3: 차량 속도 > 임계값
if (C1 and (not C2) and C3):
emergencyBrake()
※ AEB는 C1=true, C2=false, C3=true일 때 작동해야 함
※ 모든 조건 조합을 테스트하면 2^3 = 8개 조합 필요
※ 안전을 위해 MC/DC 적용 권장
Ⅳ. 품질 관리 및 테스트 (Quality & Testing)
조건 커버리지 장단점
[조건 커버리지 장단점]
장점:
├─ 개별 조건의 참/거짓을 모두 테스트하여 단일 조건 오류 발견
├─ 복합 조건에서 각 조건의 영향력 검증 가능
├─ 결정 커버리지보다 더 엄격한 테스트 수준
└─ 안전 중요 시스템에서 필수적인 검증 수단
단점:
├─ 조건 커버리지 100%도 모든 조합을 검증하지 못함
├─ Short-Circuit 평가 환경에서 주의 필요
├─ 테스트 케이스 수가 결정 커버리지보다 많을 수 있음
└─ 더 엄격한 시스템에서는 MC/DC 필요
커버리지 수준별 관계
[커버리지 수준 포함 관계]
구문 ⊂ 결정 ⊂ 조건 ⊂ MC/DC ⊂ 경로
※ 상위 수준은 하위 수준의 모든 요구사항을 포함
※ 즉, MC/DC 커버리지를 달성하면 조건, 결정, 구문 커버리지도 자동 달성
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 수준 포함 관계 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 구문 커버리지: 모든 문장 실행 │
│ │ │
│ └── 결정 커버리지: 모든 분기 실행 │
│ │ │
│ └── 조건 커버리지: 모든 개별 조건의 T/F 실행 │
│ │ │
│ └── MC/DC: 각 조건의 독립적 영향 증명 │
│ │ │
│ └── 경로 커버리지: 모든 경로 실행 │
│ │
└─────────────────────────────────────────────────────────────────┘
- 섹션 요약 비유: 조건 커버리지는 **'축구팀 各 선수별 역할 확인'**과 같다. 축구에서 수비수가 공을拦截(조건1), 미드필더가パスを提供的(조건2), 스트라이커가 슈팅하는(조건3)情况进行 모두 테스트한다. 전체 팀 전략(결정)을 테스트하는 것에 더하여 각 선수(조각)의 역할(각 조건)이 정확히 작동하는지도 확인해야 한다.
Ⅴ. 최신 트렌드 및 결론 (Trends & Conclusion)
최신 동향
- AI 기반 테스트 케이스 생성: AI가 코드의 조건문을 분석하여 자동으로 조건 커버리지를 달성하는 테스트 케이스를 생성하는 도구 등장
- 자동차 안전 표준의 강화: ISO 26262에서 ASIL(Automotive Safety Integrity Level)에 따라 조건 커버리지 또는 MC/DC 요구
- 실시간 커버리지 모니터링: CI/CD 파이프라인에서 조건 커버리지를 실시간으로 모니터링하고, 미달 시 경고 또는 빌드 실패
한계점 및 보완
- 조건 커버리지 100%의盲点: 조건 커버리지를 달성해도 두 조건 간의 특정 조합에서 발생하는 결함은 발견되지 않을 수 있다.
- ** Short-Circuit 미평가**: 일부 언어에서 Short-Circuit 평가를 하면 실제로 미평가되는 조건이 있을 수 있다.
- 보다 엄격한 검증 필요: 안전 중요 시스템에서는 조건 커버리지보다 더 엄격한 MC/DC가 요구되는 경우가 많다.
조건 커버리지는 개별 조건의 참/거짓을 모두 테스트하여 단일 조건 오류를 발견하는 데 효과적인 기법이다. 그러나 조건 커버리지 100%도 모든 조합을 검증하지 못하며, 안전 중요 시스템에서는 MC/DC와 같은 더 엄격한 커버리지 수준이 요구될 수 있다. 기술사는 프로젝트의 안전 요구 수준에 따라 적절한 커버리지 수준을 설정하고 적용해야 한다.
- 섹션 요약 비유: 조건 커버리지는 **'自動문 각 센서 검증'**과 같다. 자동문에서 적외선 센서(조건1)가 사람을 감지하고, 압력 센서(조건2)가무를 감지하며, 속도 센서(조건3)가 움직임 속도를 감지하는 상황을 생각해보자. 전체 문 동작(결정)뿐만 아니라 각 센서(조각)가 정확히 작동하는지도测试해야 자동문의 安全을 보장할 수 있다.
참고
- 모든 약어는 반드시 전체 명칭과 함께 표기:
API (Application Programming Interface) - 일어/중국어 절대 사용 금지 (한국어만 사용)
- 각 섹션 끝에 📢 요약 비유 반드시 추가
- ASCII 다이어그램의 세로선 │와 가로선 ─ 정렬 완벽하게
- 한 파일당 최소 800자 이상의实质 내용