변경조건결정커버리지(MC/DC) 개념과 테스트 설계 완벽 가이드
소프트웨어 테스트를 공부하다 보면 변경조건결정커버리지라는 용어를 반드시 만나게 됩니다. 특히 ISTQB 자격시험을 준비하거나 안전 필수 소프트웨어(Safety-Critical Software) 분야에서 일하는 분이라면 이 개념이 왜 중요한지 궁금할 수밖에 없습니다. 이 글에서는 변경조건결정커버리지의 정의부터 테스트 케이스 설계 방법, 실무 적용 사례까지 체계적으로 정리해 드리겠습니다.
변경조건결정커버리지(MC/DC)란 무엇인가
변경조건결정커버리지는 영어로 Modified Condition/Decision Coverage, 줄여서 MC/DC라고 부릅니다. 이 커버리지 기준은 복합 조건식 내의 각 개별 조건(Atomic Condition)이 전체 결정(Decision)의 결과에 독립적으로 영향을 미치는지를 검증하는 화이트박스 테스트 기법입니다. 쉽게 말해, 하나의 조건값만 바꾸었을 때 전체 조건식의 결과가 달라지는 경우를 모두 테스트하겠다는 의미입니다.
ISTQB 용어집에서는 변경조건결정커버리지를 "결정의 결과에 독립적으로 영향을 미치는 모든 단일 조건 결과가 테스트 케이스 스위트에 의해 실행된 비율"로 정의합니다. 100% MC/DC를 달성하면 100% 결정조건커버리지(Decision Condition Coverage)도 자동으로 보장됩니다. 이 때문에 MC/DC는 조건 커버리지와 결정 커버리지를 모두 포함하는 상위 개념으로 이해할 수 있습니다.
📌 관련 글
테스트 커버리지 유형과 MC/DC의 위치
변경조건결정커버리지의 위상을 이해하려면 먼저 소프트웨어 테스트 커버리지의 전체 구조를 파악해야 합니다. 코드 커버리지는 크게 구문(Statement), 결정(Decision), 조건(Condition) 구조를 기준으로 측정됩니다.
구문 커버리지(Statement Coverage)
프로그램 내 모든 실행 가능한 코드 라인이 최소 한 번 이상 실행되었는지를 측정합니다. 가장 기본적인 커버리지 수준으로, 대부분의 프로젝트에서 기본 척도로 사용됩니다. 다만 조건문의 분기를 충분히 검증하지 못하는 한계가 있습니다.
결정 커버리지(Decision Coverage)
모든 조건문(if, while 등)이 참(True)과 거짓(False) 두 가지 결과를 모두 갖도록 테스트하는 기준입니다. 브랜치 커버리지(Branch Coverage)라고도 부르며, 구문 커버리지보다 강력합니다. 100% 결정 커버리지를 달성하면 100% 구문 커버리지가 보장됩니다.
조건 커버리지(Condition Coverage)
복합 조건식 내부의 각 개별 조건이 참과 거짓을 각각 한 번 이상 갖도록 테스트합니다. 그러나 조건 커버리지를 만족해도 결정 커버리지를 만족하지 못할 수 있다는 점이 중요합니다.
변경조건결정커버리지(MC/DC)
위에서 설명한 모든 커버리지를 포함하면서, 각 개별 조건이 전체 결정에 독립적으로 영향을 줄 수 있음을 추가로 검증합니다. 이 독립성 검증이 MC/DC를 가장 강력한 조건 기반 커버리지로 만드는 핵심입니다.
| 구분 | 측정 기준 | 강도 | 테스트 케이스 수 |
|---|---|---|---|
| 구문 커버리지 | 모든 코드 라인 실행 여부 | 기본 | 적음 |
| 결정 커버리지 | 조건문의 True/False 모두 실행 | 중간 | 보통 |
| 조건 커버리지 | 개별 조건의 True/False 모두 실행 | 중간 | 보통 |
| 변경조건결정커버리지 | 개별 조건의 독립적 영향력 검증 | 강력 | N+1개 (N=조건 수) |
| 다중 조건 커버리지 | 모든 조건 조합 테스트 | 최강 | 2^N개 |
MC/DC 테스트 케이스 설계 방법
변경조건결정커버리지를 실제로 적용할 때 가장 중요한 것은 테스트 케이스를 올바르게 설계하는 것입니다. MC/DC의 핵심 원리는 한 번에 하나의 조건값만 변경하여 전체 결정 결과가 달라지는 쌍(Independence Pair)을 찾는 것입니다.
기본 원리: N+1 테스트 케이스
N개의 개별 조건을 가진 결정문에서 MC/DC를 만족하려면 최소 N+1개의 테스트 케이스가 필요합니다. 예를 들어 조건이 3개인 복합 조건식이라면 최소 4개의 테스트 케이스로 충분합니다. 모든 조합을 테스트하는 다중 조건 커버리지가 2^N(8개)을 요구하는 것과 비교하면 매우 효율적입니다.
AND 연산자 예시: A AND B
A AND B 조건식의 경우 진리표는 총 4가지 조합이 존재합니다. MC/DC를 만족하려면 3개의 테스트 케이스를 선택해야 합니다. A의 독립적 영향을 보여주려면 B를 True로 고정하고 A만 True→False로 변경하여 결과가 달라지는 것을 확인합니다. B도 같은 방식으로 A를 True로 고정한 상태에서 B를 변경합니다. 결과적으로 (T,T), (F,T), (T,F) 세 가지 테스트 케이스가 도출됩니다.
OR 연산자 예시: A OR B
A OR B의 경우에도 3개의 테스트 케이스가 필요합니다. 이번에는 각 조건의 영향을 확인하기 위해 나머지 조건을 False로 고정합니다. A의 독립성을 보려면 B를 False로 고정하고 A를 변경하며, B의 독립성은 A를 False로 고정하고 B를 변경합니다. 결과적으로 (F,F), (T,F), (F,T) 세 가지 테스트 케이스가 도출됩니다.
복합 조건식 예시: A AND (B OR C)
조건이 3개인 복합 조건식 A AND (B OR C)의 경우, 진리표를 작성한 뒤 각 조건의 독립성 쌍을 식별합니다. A의 경우 B OR C가 True인 상태에서 A만 변경하여 결과가 달라지는 쌍을 찾고, B와 C도 마찬가지로 나머지 조건을 고정한 채 해당 조건만 변경합니다. 이 과정을 통해 최소 4개(N+1)의 테스트 케이스를 도출할 수 있습니다.
MC/DC가 필수인 산업 표준과 규격
변경조건결정커버리지는 단순한 학술 개념이 아니라 실제 산업 현장에서 법적·규격적으로 요구되는 테스트 기준입니다. 소프트웨어의 결함이 인명 피해로 직결될 수 있는 안전 필수 시스템 분야에서 MC/DC는 핵심적인 역할을 합니다.
항공 분야: DO-178C
항공 소프트웨어 인증 표준인 DO-178C에서는 가장 높은 안전 등급인 Level A 소프트웨어에 대해 MC/DC 커버리지를 필수로 요구합니다. 항공기의 지속적인 안전 비행과 착륙에 직접 영향을 미치는 소프트웨어가 이 등급에 해당하며, 100% MC/DC 달성이 인증 조건입니다.
자동차 분야: ISO 26262
자동차 기능안전 국제표준 ISO 26262에서도 최고 안전 무결성 수준인 ASIL D에서 MC/DC를 요구합니다. 자율주행, 전자식 브레이크 시스템 등 안전에 직결되는 소프트웨어 컴포넌트가 이 기준을 충족해야 합니다. 소프트웨어 테스트에 관한 국제표준과 자격에 대해 더 알고 싶다면 KSTQB 공식 사이트에서 ISTQB 관련 실러버스와 학습 자료를 확인할 수 있습니다.
우주항공 분야: NASA NPR 7150.2D
NASA는 안전 필수 소프트웨어 컴포넌트에 대해 100% MC/DC 커버리지를 의무화하고 있습니다. 유럽우주국(ESA)도 ECSS-E-ST-40C 규격에 따라 최고 위험도 등급에서 MC/DC를 요구합니다.
의료기기 분야: IEC 62304
의료기기 소프트웨어 수명주기 표준인 IEC 62304와 기본 안전 규격 IEC 61508에서도 최고 안전 무결성 수준(SIL 4)에서 MC/DC를 강력히 권고합니다. 행정안전부에서도 소프트웨어 보안약점 진단가이드를 통해 안전한 소프트웨어 개발의 중요성을 강조하고 있으며, 관련 지침은 행정안전부 공식 사이트에서 확인할 수 있습니다.
MC/DC 적용 시 실무 팁과 주의사항
이론적으로는 깔끔해 보이는 MC/DC도 실무에 적용할 때는 여러 가지 고려사항이 있습니다. 특히 복잡한 조건식이 등장하는 실제 코드에서는 체계적인 접근이 필요합니다.
진리표 작성의 중요성
MC/DC 테스트 케이스를 도출하려면 반드시 진리표를 먼저 작성해야 합니다. 조건이 3개 이하일 때는 수작업으로 충분하지만, 4개 이상이 되면 자동화 도구의 도움을 받는 것이 효율적입니다. 진리표에서 독립성 쌍을 정확히 식별하는 것이 테스트 품질을 좌우합니다.
커플링(Coupling)과 마스킹(Masking) 이해
MC/DC에는 크게 두 가지 해석 방식이 있습니다. Unique-Cause MC/DC는 정확히 하나의 조건만 다른 테스트 쌍을 요구하고, Masking MC/DC는 논리적으로 결과에 영향을 주지 않는 조건의 값 변경을 허용합니다. 사용하는 표준에 따라 어떤 해석을 적용해야 하는지 사전에 확인하는 것이 중요합니다.
도구 활용
실무에서는 gcov, LDRA, VectorCAST 등의 코드 커버리지 측정 도구를 활용하여 MC/DC 달성 여부를 자동으로 확인합니다. 단, 일부 도구는 결정(Decision)의 정의를 엄격하게 적용하지 않을 수 있으므로, 도구가 보고하는 100% 커버리지를 그대로 신뢰하지 말고 수동 검증을 병행하는 것이 바람직합니다.
* N+1 원칙: N개 조건의 MC/DC에는 최소 N+1개 테스트 케이스가 필요합니다. 이는 모든 조합(2^N)보다 훨씬 효율적입니다.
* 독립성 검증: 각 조건이 결정 결과에 독립적으로 영향을 미치는지 반드시 확인해야 합니다. 단순히 True/False를 한 번씩 실행하는 것과는 다릅니다.
* 상위 호환: 100% MC/DC를 달성하면 결정 커버리지, 조건 커버리지, 구문 커버리지가 모두 보장됩니다.
* 구문 재배치 주의: 복합 조건식을 임시 변수로 분리하는 코드 리팩토링만으로는 MC/DC의 어려움을 줄일 수 없습니다. 의미론적으로 동일한 코드는 동일한 테스트를 요구합니다.
* 도구 신뢰도: 커버리지 측정 도구의 결과를 맹신하지 말고, 테스트 설계의 논리적 정확성을 직접 검증하세요.
📖 함께 읽으면 좋은 글
- 연소근로자란? 청소년 아르바이트 근로조건과 보호제도 총정리
- 2025 연말정산 간소화 서비스 이용방법과 일정 총정리
- 물류센터 알바 채용 시급 월급 피킹 포장 분류 야간 근무조건 지원방법 후기 총정리
자주 묻는 질문 (FAQ)
A. 다중 조건 커버리지는 모든 조건의 가능한 조합을 전부 테스트하므로 2^N개의 테스트 케이스가 필요합니다. 반면 변경조건결정커버리지는 각 조건의 독립적 영향력만 검증하므로 N+1개의 테스트 케이스로 충분합니다. MC/DC는 적은 비용으로 높은 수준의 논리적 검증을 달성할 수 있어 실무에서 훨씬 실용적입니다.
A. MC/DC는 ISTQB Foundation Level(CTFL) v.4 실러버스의 화이트박스 테스트 기법 섹션에서 소개됩니다. 보다 심화된 내용은 Advanced Level의 Technical Test Analyst 모듈에서 다루어지며, Automotive Software Tester 스페셜리스트 모듈에서도 중요하게 출제됩니다.
A. MC/DC는 본질적으로 코드 구조를 분석하는 화이트박스 테스트 기법입니다. 요구사항 기반의 블랙박스 테스트로 우연히 높은 MC/DC를 달성할 수는 있지만, 소스 코드를 분석하지 않고는 MC/DC 달성 여부를 측정하거나 보장할 수 없습니다. 따라서 안전 필수 시스템에서는 반드시 화이트박스 방식으로 MC/DC를 측정합니다.
마치며
변경조건결정커버리지(MC/DC)는 복합 조건식의 각 개별 조건이 전체 결정에 독립적으로 영향을 미치는지를 검증하는 강력한 테스트 커버리지 기준입니다. N+1개의 테스트 케이스만으로 높은 수준의 논리적 검증을 달성할 수 있어 항공, 자동차, 우주항공, 의료기기 등 안전 필수 소프트웨어 분야에서 필수적으로 요구됩니다. 소프트웨어 품질에 관심 있는 개발자나 테스터라면 MC/DC의 원리와 설계 방법을 정확히 이해하고 실무에 적용하는 역량을 갖추시길 권합니다.