코드 커버리지(Code Coverage)는 테스트가 프로덕션 코드를 얼마나 실행했는지를 비율로 측정하는 지표다. 테스트 충분성의 객관적 척도로 사용되지만, 높은 커버리지가 높은 품질을 보장하지는 않는다.
커버리지 종류
| 종류 | 측정 대상 | 강도 |
|---|
| Statement | 실행된 문(Statement) 비율 | 약 |
| Branch | if/else/switch 분기 비율 | 중 |
| Function | 호출된 함수 비율 | 중 |
| Line | 실행된 라인 비율 | 약 |
| Condition | 각 조건식 T/F 비율 | 강 |
| MC/DC | 조건 독립 영향 검증 | 매우 강 (항공/의료) |
Branch 커버리지 예제
typescript
function classify(n: number): string {
if (n > 0) { // 분기 1: true/false
return 'positive';
} else if (n < 0) { // 분기 2: true/false
return 'negative';
} else {
return 'zero';
}
}
// Statement 100% 달성 케이스:
classify(1); classify(-1); classify(0);
// Branch 커버리지:
// 분기 1 true: classify(1) ✓
// 분기 1 false: classify(-1) ✓
// 분기 2 true: classify(-1) ✓
// 분기 2 false: classify(0) ✓
// → Branch 100%
Jest + Istanbul 설정
json
// package.json
{
"jest": {
"collectCoverage": true,
"coverageThreshold": {
"global": {
"statements": 80,
"branches": 75,
"functions": 80,
"lines": 80
}
},
"coverageReporters": ["text", "html", "lcov"]
}
}
bash
npx jest --coverage
# 출력 예시
# File | % Stmts | % Branch | % Funcs | % Lines
# math.ts | 95.24 | 87.50 | 100.0 | 95.00
# utils.ts | 72.00 | 60.00 | 75.0 | 72.00
커버리지 목표 가이드
비즈니스 로직 핵심: 90%+
유틸리티/헬퍼: 80%+
UI 컴포넌트: 70%+
설정/부트스트랩: 50%+
100% 맹목적 추구는 비효율:
- 단순한 getter/setter 테스트
- 자동 생성 코드 테스트
- 커버리지를 위한 의미 없는 테스트
관련 문서