임베디드 시스템(Embedded System) 소프트웨어 시험에서 중요한 코드 커버리지 기법인 MC/DC(Modified Condition/Decision Coverage)에 대해 설명하시오.
MC/DC(Modified Condition/Decision Coverage) 는 소프트웨어 시험에서 사용되는 구조적 테스트 커버리지 기법으로, 각 조건이 독립적으로 최종 결정(decision)의 결과에 영향을 미치는지 검증하는 기술입니다. 이는 DO-178B/C, IEC 61508과 같은 안전 필수(safety-critical) 시스템의 국제 표준에서 요구하는 고수준 테스트 커버리지입니다.
MC/DC는 다음의 세 가지 커버리지 요구사항을 포함합니다:
조건식 내의 각 조건 C에 대해:
1. C가 참인 테스트 케이스와 거짓인 테스트 케이스가 존재해야 함
2. C의 값만 변경했을 때 전체 조건식의 결과가 바뀌어야 함 (독립적 영향)
3. 다른 모든 조건은 동일한 값을 유지해야 함
if (A && B) { ... }
MC/DC를 충족하기 위한 테스트 케이스:
| 테스트 | A | B | A && B | 목적 |
|---|---|---|---|---|
| 1 | T | T | T | 기본 참 케이스 |
| 2 | F | T | F | A의 독립적 영향 검증 |
| 3 | T | F | F | B의 독립적 영향 검증 |
if ((A && B) || C) { ... }
MC/DC를 충족하기 위한 테스트 케이스:
| 테스트 | A | B | C | (A && B) || C | 목적 |
|---|---|---|---|---|---|
| 1 | T | T | F | T | 기본 (A && B) 참 케이스 |
| 2 | F | T | F | F | A의 독립적 영향 검증 |
| 3 | T | F | F | F | B의 독립적 영향 검증 |
| 4 | F | F | T | T | C의 독립적 영향 검증 |
| 5 | F | F | F | F | 기본 거짓 케이스 |
| 커버리지 기법 | 설명 | MC/DC 대비 특징 |
|---|---|---|
| 문장 커버리지(Statement Coverage) | 모든 코드 라인이 최소 한번 실행 | 조건식 내부 로직 검증 불가 |
| 분기 커버리지(Branch Coverage) | 모든 분기(if, switch 등)의 참/거짓 경로 실행 | 복합 조건식 내 개별 조건 검증 불가 |
| 조건 커버리지(Condition Coverage) | 모든 Boolean 조건식의 참/거짓 결과 검증 | 조건 간 상호작용 및 독립성 검증 불가 |
| 조건/결정 커버리지(Condition/Decision) | 모든 조건 및 결정의 참/거짓 검증 | 독립적 영향 검증 부족 |
| 다중 조건 커버리지(Multiple Condition) | 모든 조건 조합 검증 | 테스트 케이스 수 기하급수적 증가 (2^n) |
| MC/DC | 각 조건의 독립적 영향 검증 | 효율적 테스트 수(n+1)로 높은 결함 탐지 |
| 표준 | 분야 | MC/DC 요구사항 |
|---|---|---|
| DO-178C | 항공 전자 | Level A(치명적) 소프트웨어에 필수 |
| IEC 61508 | 산업 안전 | SIL 3, 4에 권장 |
| ISO 26262 | 자동차 | ASIL D에 권장 |
| IEC 62304 | 의료기기 | Class C 소프트웨어에 고려 |
| 도구 | 기능 | 지원 언어 |
|---|---|---|
| LDRA Testbed | MC/DC 분석 및 테스트 생성 | C, C++, Ada, Java 등 |
| VectorCAST | 단위 테스트 및 MC/DC 분석 | C, C++, Ada |
| Parasoft C/C++test | 테스트 자동화 및 커버리지 분석 | C, C++ |
| TESTWELL CTC++ | 테스트 커버리지 분석기 | C, C++ |
| GcovGCOV | 오픈소스 커버리지 도구 | C, C++ |
MC/DC는 컴퓨터 프로그램이 제대로 작동하는지 확인하는 특별한 방법이에요. 예를 들어, "날씨가 좋고 시간이 있으면 놀이터에 가자"라는 규칙이 있다면:
이렇게 각각의 조건(날씨, 시간)이 결정(놀이터에 갈지 말지)에 어떻게 영향을 주는지 꼼꼼히 확인하는 방법이에요. 비행기나 자동차, 의료 기기처럼 안전이 중요한 시스템에서는 이런 꼼꼼한 검사가 매우 중요해요!