토픽 130 / 192·소프트웨어 표준과 법제도
테스트 커버리지 (Test Coverage)
테스트 커버리지 (Test Coverage)
테스트 케이스가 소스 코드의 어느 정도를 실행했는지 측정하는 지표로, 테스트 충분성을 정량적으로 평가하고 미테스트 영역을 식별
목적: 테스트 충분성 평가, 미테스트 코드 식별, 품질 기준 설정, 리스크 관리
커버리지 유형 (강도순)
- •문장 커버리지 (Statement/Line Coverage): 실행된 문장 비율, 가장 기본
- •결정 커버리지 (Decision/Branch Coverage): 분기(if/else)의 모든 결과(T/F) 실행
- •조건 커버리지 (Condition Coverage): 개별 조건식의 T/F 실행
- •조건/결정 커버리지 (C/DC): 조건 + 결정 모두 충족
- •MC/DC (Modified Condition/Decision Coverage): 각 조건이 결정에 독립적 영향 증명, DO-178C(항공)
- •경로 커버리지 (Path Coverage): 모든 실행 경로, 실용적 한계
예시 (if (A && B)): 문장(실행되면 OK), 결정(T/F 모두), 조건(A/B 각각 T/F), MC/DC(각 조건이 결과 변화 유발 증명)
도구: JaCoCo(Java), Istanbul(JS), coverage.py(Python), gcov(C/C++)
목표 설정: 일반 앱 70-80%, 핵심 로직 90%+, 안전 필수 MC/DC 100%(DO-178C)
한계: 높은 커버리지 != 좋은 테스트, 100% 커버리지도 모든 결함 발견 불가, 커버리지는 수단이지 목적 아님
CI/CD 통합: 커버리지 임계값 미달 시 빌드 실패
장점: 객관적 테스트 평가, 미테스트 영역 식별, 품질 기준
단점: 테스트 품질과 별개, 100% 목표는 비현실적, 오버헤드
적용사례: 품질 게이트, 규제 준수(항공/의료), 코드 리뷰, TDD
기술요소: 문장/분기/조건/MC/DC 커버리지, 계측, JaCoCo
비교: 문장(기본) < 분기(중요) < 조건(상세) < MC/DC(안전필수)
연관: 테스트, 품질 관리, SonarQube, CI/CD, DO-178C