테스트 커버리지 (문장, 분기, 조건, MC/DC, 경로)
🔥 매회 출제 (priority 3)
🌱 왜 배우나
“테스트를 100개 돌렸다”는 말만으로는 품질이 보장되지 않는다. 100개의 테스트가 사실은 같은 코드 몇 줄만 반복해서 실행했다면, 나머지 코드는 한 번도 검증되지 않은 셈이다. 공장에 빗대면 완성품 100개를 검사했어도 같은 생산 라인만 봤다면 다른 라인의 불량은 그대로 흘려보낸 것과 같다. 그래서 “코드의 어느 부분이 얼마나 실행됐는지”를 숫자로 보여 주는 지표가 필요하다. 그 지표가 테스트 커버리지(Test Coverage)다.
📖 핵심 개념
테스트 커버리지는 테스트가 소스 코드의 어느 부분을 실행했는지 백분율로 나타내는 지표다. 쉽게 말하면 “전체 코드 중 테스트로 확인된 비율”이다.
커버리지 기준은 5단계이고, 위로 갈수록 엄격해진다.
- 문장(모든 줄 실행)
- 분기(모든 if의 참/거짓 실행)
- 조건(if 안 개별 조건의 참/거짓 실행)
- MC/DC(각 조건이 독립적으로 결과에 영향)
- 경로(가능한 모든 실행 순서 실행)
엄격해질수록 필요한 테스트 케이스(입력값과 예상 결과의 조합) 수가 늘어난다. 커버리지 숫자가 높다고 품질이 자동으로 좋아지는 건 아니다. 다만 테스트가 충분한지 판단하는 기준으로 쓴다.
🔍 시각화
커버리지 강도 (약 → 강)
문장 분기 조건 MC/DC 경로
─●────────●────────●────────●────────●──→ 강도
(약) (강)
예시 코드: if (A && B) { ... }
[문장 커버리지] 코드 줄이 1번이라도 실행되면 OK
[분기 커버리지] 전체 조건식(A&&B)의 참/거짓 모두 실행
[조건 커버리지] A의 참/거짓 + B의 참/거짓 각각 실행
[MC/DC] 각 조건(A, B)이 단독으로 결과를 바꾸는 케이스 실행
[경로 커버리지] 가능한 모든 실행 경로 실행 (경우의 수 폭발 주의)
↔️ 이웃 개념 구분
- 분기 커버리지 vs 조건 커버리지: 분기 커버리지는
if (A && B)전체 조건식의 참/거짓을 모두 만드는 것. 조건 커버리지는 조건식 안의 개별 변수 A와 B가 각각 참/거짓을 모두 갖도록 만드는 것. 조건 커버리지를 만족해도 전체 조건식의 참/거짓이 전부 나오지는 않을 수 있다. - MC/DC vs 경로 커버리지: MC/DC는 각 조건이 독립적으로 결과를 바꾸는지를 확인하는 방식으로, 현실적인 목표로 쓸 만하다. 경로 커버리지는 모든 실행 경로를 다 돌려야 해서 경우의 수가 폭발하기 쉽고, 사실상 달성 불가능한 경우가 많다.
🔑 핵심 용어
- 문장 커버리지 (Statement Coverage): 실행 가능한 모든 코드 줄을 최소 1회 실행한다. 가장 약한 기준
- 분기 커버리지 (Branch / Decision Coverage): 모든 조건문(if, switch 등)의 참·거짓 분기를 모두 실행한다
- 조건 커버리지 (Condition Coverage): 조건식을 이루는 개별 조건(Boolean 표현식) 각각이 참·거짓을 모두 취하도록 실행한다. 분기 커버리지를 자동으로 포함하지는 않는다
- MC/DC (Modified Condition/Decision Coverage, 변경 조건/결정 커버리지): 각 개별 조건이 독립적으로 전체 결정 결과를 바꾼다는 사실을 증명하는 기준. 항공 소프트웨어 표준 DO-178C에서 요구
- 경로 커버리지 (Path Coverage): 프로그램의 모든 가능한 실행 경로를 실행한다. 가장 강력하지만 반복문이 포함되면 경우의 수가 거의 무한대로 늘어 달성이 어렵다
✅ 스스로 가르쳐보기
if (A && B)라는 코드가 있다고 가정하고, 분기 커버리지와 조건 커버리지를 각각 만족시키려면 어떤 테스트 케이스가 필요한지 본인 말로 설명해 보세요. 표 대신 말로 풀어서 설명할 수 있으면 이해한 겁니다.
체크포인트:
- 커버리지 강도 순서(문장 < 분기 < 조건 < MC/DC < 경로)를 막힘 없이 말할 수 있나요?
- 분기 커버리지가 “전체 조건식”의 참/거짓을, 조건 커버리지가 “개별 조건”의 참/거짓을 다룬다는 차이를 설명할 수 있나요?
- MC/DC가 어떤 산업 분야에서 요구되는지 한 줄로 말할 수 있나요?
🎯 기출 포인트
2025-2회:
if (A && B)조건에서 분기 커버리지와 조건 커버리지의 테스트 케이스 수 비교가 출제됐다. 분기 커버리지는 전체 조건식의 T/F를 만들어야 하므로 최소 2개(예: A=T,B=T / A=F,B=F). 조건 커버리지는 개별 조건 A, B 각각 T/F를 만들면 되지만 분기 커버리지가 보장되지는 않는다. 단락평가(Short-circuit)에서 A=F이면 B는 평가되지 않는다는 점도 함께 알아두자. 2025-3회: 조건 커버리지의 정의와 분기 커버리지의 차이점을 서술하는 문제가 출제됐다. 분기 커버리지는 조건식 전체의 T/F, 조건 커버리지는 개별 조건의 T/F. 이 차이를 분명히 구분하자. MC/DC는 분기와 조건 커버리지를 동시에 만족시키면서 조건 간 독립성까지 보장한다.
🔗 연결 개념
- 소프트웨어 테스트 기법 — 화이트박스 vs 블랙박스
mt-testing-002