| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 서버리스 #
- 데이터베이스 #try #이중
- jwt
- es6
- Websocket
- 0.5px border
- 전역변수
- literal
- Props
- 클론코딩
- Strict
- ES5
- 0.25px border
- font-size
- TS
- &연산
- 0.75px border
- 타입스크립트
- 문서번호
- 컴포넌튼
- ZOOM
- 10px
- TypeScript
- github
- angular
- 으
- npm
- 1px border
- entity
- 당근마켓
Archives
- Today
- Total
복잡한뇌구조마냥
[CS] 테스트 커버리지(Test Coverage) 정리 본문
📘 1. 테스트 커버리지 (Test Coverage) 란?
테스트 커버리지는 소프트웨어의 테스트가 얼마나 충분히 수행되었는지를 정량적으로 측정하는 지표입니다.
쉽게 말해, 테스트 케이스가 소프트웨어의 전체 코드 또는 전체 요구사항 중 어느 정도의 비율을 다루고 있는지를 나타냅니다.

📌 왜 중요한가요?
- 결함 발견 확률 예측: 커버리지가 높을수록 실행되지 않은 코드 영역(Dead Zone)이 줄어들어, 해당 영역에 숨어있을 수 있는 잠재적 결함을 발견할 확률이 높아집니다.
- 테스트 효율성 평가: 단순히 테스트 케이스의 개수가 아닌, 테스트가 얼마나 효과적으로 코드 또는 요구사항을 검증했는지 객관적으로 평가할 수 있습니다.
- 릴리즈 기준 설정: 특정 수준 이상의 커버리지를 제품 릴리즈의 필수 기준으로 설정하여 **품질 보증(QA)**의 객관성을 확보할 수 있습니다.
💡 2. 커버리지 포함관계
테스트 커버리지
┣━━ 기능 커버리지 (요구사항 기준)
┣━━ 데이터 커버리지 (입력값 기준)
┗━━ 코드 커버리지
┣━━ 구문 커버리지
┣━━ 결정 커버리지
┣━━ 조건 커버리지
┣━━ 결정/조건 커버리지
┣━━ 변경 조건/결정 커버리지 (MC/DC)
┗━━ 다중 조건 커버리지
🧩 3. 커버리지의 주요 종류
테스트 커버리지는 분석 기준(단위) 에 따라 여러 종류로 나뉜다.
| 커버리지 종류 | 설명 | 예시 |
| 구문 커버리지 (Statement Coverage) |
프로그램의 모든 **문장(코드 라인)**이 한 번 이상 실행되었는지 확인 | if문 안/밖 포함 전체 실행 |
| 분기 커버리지 (Branch Coverage) |
조건문(if, switch)의 **모든 분기(True/False)**가 수행되었는지 확인 | if의 참/거짓 모두 실행 |
| 조건 커버리지 (Condition Coverage) |
복합 조건식의 각 개별 조건이 참/거짓을 모두 경험했는지 확인 | (A && B) → A, B 각각 True/False |
| 결정 커버리지 (Decision Coverage) |
조건 전체의 결과(True/False) 가 모두 발생했는지 확인 | if문 전체 결과 기준 |
| 경로 커버리지 (Path Coverage) |
가능한 모든 실행 경로를 테스트 | 모든 루프, 분기 조합 실행 |
| 함수(메서드) 커버리지 (Function Coverage) |
모든 함수(또는 메서드)가 호출되었는지 확인 | add(), delete(), update() 등 |
| 요구사항 커버리지 (Requirements Coverage) |
요구사항이 테스트 케이스로 모두 검증되었는지 확인 | 명세 기반 테스트에서 사용 |
+ 논리적 커버리지의 종류

| 커버리지 종류 | 설명 | 예시 |
| 구문 커버리지 (Statement Coverage) |
모든 명령문(코드 라인) 이 한 번 이상 실행되었는가 | if문 안과 밖 코드 모두 실행 |
| 결정 커버리지 (Decision Coverage) |
모든 분기(조건의 전체 결과 True/False) 가 한 번 이상 수행되었는가 | if 조건이 참일 때, 거짓일 때 모두 테스트 |
| 조건 커버리지 (Condition Coverage) |
조건식 안의 각 개별 조건이 참/거짓을 모두 경험했는가 | (A && B) → A, B 각각 True/False |
| 결정/조건 커버리지 (Decision/Condition Coverage) |
조건 커버리지 + 결정 커버리지를 모두 만족 | A, B 각각의 값 + 전체 결과 참/거짓 확인 |
| 변경 조건/결정 커버리지 (Modified Condition/Decision Coverage) |
각 개별 조건이 결정 결과에 독립적으로 영향을 주는지 검증 | A 또는 B가 결과에 영향을 미치는 케이스를 분리 테스트 |
| 다중 조건 커버리지 (Multiple Condition Coverage) |
모든 조건 조합이 한 번 이상 실행되었는가 | (A,B) = (T,T), (T,F), (F,T), (F,F) 모두 테스트 |
🧠 4. 각 커버리지의 관계 (포함 관계)
Path Coverage ⊃ Branch Coverage ⊃ Statement Coverage
다중 조건 ⊃ 변경 조건/결정 ⊃ 결정/조건 ⊃ 조건 ⊃ 결정 ⊃ 구문 커버리지
경로 커버리지를 만족하면
분기 커버리지와 문장 커버리지도 자동으로 포함됨.
📊 5. 테스트 커버리지 목표 기준 (일반 가이드라인)
| 유형 | 권장 커버리지 수준 |
| 단위 테스트 (Unit Test) | 80~90% 이상 |
| 통합 테스트 (Integration Test) | 60~80% |
| 시스템 테스트 | 40~60% |
| 전체 프로젝트 기준 | 평균 70~80% 이상 권장 |
📈 100% 커버리지가 항상 좋은 것은 아니다.
테스트가 “실질적인 버그 검출력”을 가지는지가 더 중요하다.
💬 6. 테스트 커버리지 vs 테스트 오라클 비교
| 항목 | 테스트 커버리지 | 테스트 오라클 |
| 의미 | 테스트가 얼마나 실행되었는가 | 결과가 옳은지 판단하는 기준 |
| 측정 목적 | 범위 중심 | 정확성 중심 |
| 대표 도구 | JaCoCo, Jest, Coverage.py | assert문, 기대값 검증 등 |
| 지표 형태 | % (양적) | Pass/Fail (질적) |
🧾 7. 정리 요약
| 항목 | 내용 |
| 정의 | 테스트가 코드 또는 요구사항을 얼마나 실행했는지를 측정하는 지표 |
| 계산식 | (테스트된 항목 수 ÷ 전체 항목 수) × 100 |
| 종류 | 구문, 분기, 조건, 결정, 경로, 함수, 요구사항 커버리지 |
| 도구 | JaCoCo, Jest, Coverage.py, gcov 등 |
| 주의점 | 100% 커버리지가 “완벽한 테스트”를 의미하지 않음 |
💡 요약:
“테스트 커버리지는 ‘얼마나 테스트했는가’를 수치로 표현하는 지표이며,
오라클은 ‘테스트 결과가 맞는가’를 판단하는 기준이다.”
💡 “논리적 커버리지는 조건문을 얼마나 꼼꼼히 테스트했는지를 나타내며,
구문 → 결정 → 조건 → 결정/조건 → 변경 조건/결정 → 다중 조건 순으로 강해진다.”
테스트 커버리지(Test Coverage), 코드 커버리지(Code Coverage) / ①
문제7) 테스트 커버리지(Test Coverage)와 코드 커버리지(Code Coverage) 답) 1. 테스트 케이스 실제 수령 여부 확인, 테스트 커버리지(Test Coverage) 설명 가. 테스트 커버리지(Test Coverage)의 정의 및 특징 구
shinbe.tistory.com
LIST
'공통 > CS' 카테고리의 다른 글
| [CS] 소프트웨어 아키텍처 4+1 뷰 모델 정리 (0) | 2025.10.31 |
|---|---|
| [CS] 테스트 오라클(Test Oracle) 정리 (0) | 2025.10.31 |
| [CS] UML 정리 (다이어그램 종류, 관계, 표기법 등) (0) | 2025.10.30 |
| [CS] EAI (Enterprise Application Integration) 정리 (0) | 2025.10.30 |
| [CS] OSI 7계층 ( OSI 7 Layer ) (0) | 2025.06.29 |