425. 조건/결정 커버리지 (Condition/Decision Coverage)
핵심 인사이트 (3줄 요약)
- 본질: 조건/결정 커버리지(Condition/Decision Coverage)란 화이트박스 테스트에서 개별 조건(Condition)의 참/거짓과 전체 결정(Decision)의 참/거짓을 모두 테스트하는 커버리지 지표이다. 조건 커버리지와 결정 커버리지의 요구사항을 모두 충족한다.
- 가치: 조건 커버리지와 결정 커버리지를 개별적으로 모두 달성함으로써, 단순히 분기문 전체만 테스트하거나 조건만 테스트하는 것보다 더 엄격하고漏らなきテスト를 수행할 수 있다.
- 융합: DO-178B/C에서 Level C와 같은 중간 수준의 안전 요구사항에 적용되며, 산업용 제어 시스템, 의료기기 소프트웨어 등의 검증에 활용된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: 조건/결정 커버리지는 두 가지 요구사항을 모두 충족해야 달성할 수 있다. 첫째, 각 개별 조건이 독립적으로 참/거짓을 한 번씩 가져야 한다(조건 커버리지). 둘째, 전체 결정이 참/거짓을 한 번씩 가져야 한다(결정 커버리지). 두 가지 조건을 모두 충족해야 100% 조건/결정 커버리지를 달성한다.
-
필요성: 조건 커버리지만으로는 전체 결정의 모든 결과를 Covered하지 못할 수 있고, 결정 커버리지만으로는 개별 조건의 모든 값을 Covered하지 못할 수 있다. 조건/결정 커버리지는 이 두 가지 한계를 모두 보완하여, 보다 충분한 테스트를 보장한다.
-
조건(Condition)과 결정(Decision)의 관계:
- 조건(Condition): 더 이상 분할할 수 없는 단일 부울 식
- 결정(Decision): 조건들을 논리 연산자(and, or, not 등)로 결합한 것
- 조건/결정 커버리지: 조건과 결정의 커버리지를 모두 달성
-
비유: 조건/결정 커버리지는 **'학창시절 필기확인'**과 같다. 시험에서 전체 문제를 다 풀었는지(결정 커버리지)뿐만 아니라, 각 문항의 세세한 부분(조건 커버리지)도 채점해야 전반적인 실력을 정확히 평가할 수 있다.
-
등장 배경 및 발전 과정:
- 1990년대: DO-178B 표준에서 조건/결정 커버리지를 공식 커버리지 수준으로 정의
- 2000년대: ISO/IEC 26262(자동차), IEC 62304(의료기기) 등에서 산업 표준으로 활용
- 현재: 안전 중요 시스템 개발에서 필수적인 커버리지 검증 수준
-
섹션 요약 비유: 조건/결정 커버리지는 **'음식 레시피 전체 점검'**과 같다. 요리에서 재료 각각의 맛(조건)과 전체 음식의 맛(결정)을 모두 확인해야 맛있는 요리인지 정확히 판단할 수 있듯이, 테스트도 개별 조건과 전체 결정을 모두 검증해야 충분하다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
조건/결정 커버리지 계산
[조건/결정 커버리지 계산]
코드:
if (A > 0 and B > 0):
result = 1
else:
result = 0
조건/결정 커버리지 요구사항:
1. 개별 조건 (A > 0, B > 0)이 각각 참/거짓取值
2. 전체 결정 (A > 0 and B > 0)이 각각 참/거짓取值
TC-01: A = 5, B = 5 → A>0=true, B>0=true, A>0 and B>0 = true
TC-02: A = -1, B = -1 → A>0=false, B>0=false, A>0 and B>0 = false
┌─────────────────────────────────────────────────────────────────┐
│ 조건/결정 커버리지 분석 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 조건 커버리지: │
│ - A > 0: TC-01(true), TC-02(false) → Covered ✓ │
│ - B > 0: TC-01(true), TC-02(false) → Covered ✓ │
│ │
│ 결정 커버리지: │
│ - A > 0 and B > 0: TC-01(true), TC-02(false) → Covered ✓ │
│ │
│ 조건/결정 커버리지 = 100% │
│ │
└─────────────────────────────────────────────────────────────────┘
[다이어그램 해설] TC-01과 TC-02를 사용하면 개별 조건 A>0와 B>0가 모두 참/거짓取值하고, 전체 결정 A>0 and B>0도 참/거짓取值한다. 따라서 조건 커버리지와 결정 커버리지를 모두 충족하여 조건/결정 커버리지 100%를 달성한다.
조건/결정 커버리지 vs 단순 커버리지
[단순 커버리지와의 비교]
코드:
if (A > 0 and B > 0):
result = 1
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 수준 비교 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TC 선택 │ 조건 │ 결정 │ 조건/결정 │
│ │ 커버리지 │ 커버리지 │ 커버리지 │
│ ──────────────────────────────────────────────────────────── │
│ TC-01: A=5, B=5 │ 50% │ 50% │ ✗ │
│ TC-02: A=-1, B=-1 │ 50% │ 50% │ ✗ │
│ TC-01 + TC-02 │ 100% │ 100% │ ✓ │
│ │
│ ※ TC-01만으로는 A>0=false, B>0=false 미Covered │
│ ※ TC-02만으로는 A>0=true, B>0=true 미Covered │
│ ※ TC-01 + TC-02로야 조건/결정 커버리지 100% 달성 │
│ │
└─────────────────────────────────────────────────────────────────┘
[다이어그램 해설] TC-01(A=5, B=5)만으로는 A>0와 B>0가 모두 참만取得하고 거짓은取得하지 않으므로 조건 커버리지는 50%이다. TC-02(A=-1, B=-1)만으로도 마찬가지이다. TC-01과 TC-02를 함께 사용하여야 조건 커버리지 100%와 결정 커버리지 100%를 모두 달성하여 조건/결정 커버리지 100%를 달성한다.
OR 조건에서의 조건/결정 커버리지
[OR 조건에서 조건/결정 커버리지]
코드:
if (A > 0 or B > 0):
result = 1
else:
result = 0
TC-01: A = 5, B = -1 → A>0=true, B>0=false, A>0 or B>0 = true
TC-02: A = -1, B = -1 → A>0=false, B>0=false, A>0 or B>0 = false
조건 커버리지:
- A > 0: TC-01(true), TC-02(false) → Covered ✓
- B > 0: TC-02(false), TC-01(true) → Covered ✓
결정 커버리지:
- A > 0 or B > 0: TC-01(true), TC-02(false) → Covered ✓
조건/결정 커버리지 = 100%
Ⅲ. 구현 및 실무 응용 (Implementation & Practice)
테스트 케이스 설계 절차
[조건/결정 커버리지 달성 절차]
1단계: 복합 조건 분석
│
└─→ 각 개별 조건과 전체 결정을 식별
2단계: 조건 커버리지 요구사항 확인
│
├─→ 각 개별 조건이 참/거짓取值해야 함
└─→ 이를 만족하는 테스트 케이스 조합 도출
3단계: 결정 커버리지 요구사항 확인
│
├─→ 전체 결정이 참/거짓取值해야 함
└─→ 이를 만족하는 테스트 케이스 조합 도출
4단계: 통합 테스트 세트 설계
│
└─→ 조건과 결정 커버리지를 모두 만족하는 최소 테스트 세트 도출
5단계: 테스트 실행 및 검증
│
└─→ 커버리지 도구로 검증
산업용 제어 시스템 적용
[산업용 제어 시스템 적용]
예시: 발전소 터빈 제어 시스템
조건:
- C1: 온도 > 임계값 (과열 감지)
- C2: 압력 > 임계값 (과압 감지)
- C3: 진동 > 임계값 (이상 진동 감지)
결정: C1 or C2 or C3 (위험 조건)
if (C1 or C2 or C3):
emergencyShutdown()
※ 터빈 보호를 위해 모든 조건과 전체 결정을漏らさず 테스트해야 함
※ 조건/결정 커버리지 100% 달경을 통해 안전 확보
커버리지 측정
[조건/결정 커버리지 측정]
커버리지 도구:
- Java: JaCoCo ( Supports branch coverage metrics)
- C/C++: gcov, LLVM Source-based Coverage
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 보고서 예시 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 메소드 │ 조건 │ 결정 │ 조건/결정 │ │
│ ──────────────────────────────────────────────────────────── │
│ checkSafety() │ 100% │ 100% │ 100% │ │
│ processOrder() │ 80% │ 100% │ ✗ │ │
│ validateInput() │ 100% │ 80% │ ✗ │ │
│ │
│ ※ 조건/결정 커버리지는 두 가지 모두 100%일 때만 달성 │
│ │
└─────────────────────────────────────────────────────────────────┘
Ⅳ. 품질 관리 및 테스트 (Quality & Testing)
조건/결정 커버리지 장단점
[조건/결정 커버리지 장단점]
장점:
├─ 조건 커버리지와 결정 커버리지의 요구사항을 모두 충족
├─ 단일 커버리지 수준보다 더 엄격한 테스트
├─ 대부분의 결함 발견에 효과적
├─ 산업 안전 표준에서 요구되는 수준
└─ 구현이 복잡하지 않아 도구 지원良好
단점:
├─ MC/DC보다 엄격하지 않음 (조건 간 독립성 검증 불가)
├─ 다중 조건의 모든 조합을 검증하지 않음
├─ Short-Circuit 평가에서 일부 조건이 실제로 미평가될 수 있음
└─ 매우 높은 안전 수준이 요구되는 시스템에서는 MC/DC 필요
MC/DC와의 비교
[조건/결정 커버리지 vs MC/DC]
코드:
if (A and B):
result = 1
┌─────────────────────────────────────────────────────────────────┐
│ 커버리지 수준별 비교 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 커버리지 수준 │ 필요한 TC 수 │ 특징 │
│ ──────────────────────────────────────────────────────────── │
│ 결정 커버리지 │ 2 │ 전체 결정의 T/F │
│ 조건 커버리지 │ 2 │ 각 조건의 T/F │
│ 조건/결정 커버리지 │ 2~3 │ 위 두 가지 모두 충족 │
│ MC/DC │ N+1 │ 각 조건의 독립적 영향 증명 │
│ │
│ ※ MC/DC는 N+1개의 테스트로 N개 조건의 독립적 영향을 모두 증명 │
│ ※ 조건/결정 커버리지는 독립적 영향까지 검증하지 않음 │
│ │
└─────────────────────────────────────────────────────────────────┘
- 섹션 요약 비유: 조건/결정 커버리지는 **'학부모 상담 및 내신성적 검토'**와 같다. 학부모가 상담에서 자녀의 전체적인 내신 성적(결정 커버리지)뿐만 아니라, 각 과목별 시험지(조건 커버리지)를 세세하게 확인하는 것이다. 전체 성적도 확인하고 각 과목의 문제점도 파악해야 자녀의 학습 상태를 정확히 파악할 수 있듯이, 조건/결정 커버리지도 전체 결정과 개별 조건을 모두 검증한다.
Ⅴ. 최신 트렌드 및 결론 (Trends & Conclusion)
최신 동향
- 도구 자동화: 커버리지 도구가 자동으로 조건/결정 커버리지를 측정하고, 미달 영역을可視화하여 개발자에게 제공하는 기능 강화
- 산업 표준 적용 확대: ISO 26262(자동차), IEC 62304(의료기기), DO-178C(항공) 등 안전 표준에서 조건/결정 커버리지 활용 증가
- CI/CD 통합: CI/CD 파이프라인에서 조건/결정 커버리지 임계값을 설정하고,达标 여부를 자동으로 검증
한계점 및 보완
- 조건 독립성 검증 불가: 여러 조건이 복합되어 있을 때, 한 조건의 변화가 전체 결과에 독립적으로 영향을 미치는지는 검증하지 않는다.
- 다중 조합 미검증: 모든 가능한 조건 조합을 검증하지 않으므로, 특정 조합에서만 발생하는 결함은 발견되지 않을 수 있다.
- より厳格한 커버리지 필요: 항공기, 원자력 등 매우 높은 안전 수준이 요구되는 시스템에서는 MC/DC가 필수적이다.
조건/결정 커버리지는 조건 커버리지와 결정 커버리지의 요구사항을 모두 충족하는 테스트 수준이다. 개별 조건과 전체 결정을 모두 검증함으로써, 단순한 결정 커버리지나 조건 커버리지보다 더 충분한 테스트를保証한다. 그러나 안전 중요 시스템에서는 MC/DC와 같은 더 엄격한 커버리지 수준이 요구될 수 있음을 유의해야 한다. 기술사는 프로젝트의 안전 요구 수준에 따라 적절한 커버리지 수준을 설정하고 적용해야 한다.
- 섹션 요약 비유: 조건/결정 커버리지는 **'건물 내 emergency 출구 확인'**과 같다. 건물에서emergency時에 전체building(결정)의 출구 위치를 아는 것(결정 커버리지)뿐만 아니라, 각 층의복도(조건)를谁知道도 모두 확인해야 모든 사람이 安全하게 대피할 수 있다. 전체 구조와 세부 구성요소를 모두 파악해야 Emergencies에 대응할 수 있듯이, 조건/결정 커버리지도 전체 결정과 개별 조건을漏らさず 검증해야 한다.
참고
- 모든 약어는 반드시 전체 명칭과 함께 표기:
API (Application Programming Interface) - 일어/중국어 절대 사용 금지 (한국어만 사용)
- 각 섹션 끝에 📢 요약 비유 반드시 추가
- ASCII 다이어그램의 세로선 │와 가로선 ─ 정렬 완벽하게
- 한 파일당 최소 800자 이상의实质 내용