PE Notes · SW
테스트 커버리지
실행 비율로 충분성을 재는 커버리지를 문장부터 경로·MC/DC까지 강도로 가른 뒤, 요구사항 추적과 항공·자동차 안전 기준을 붙입니다.
줄은 많이 돌렸는데, if의 거짓 칸은 한 번도 안 타본 적이 있습니다. 그때 “시험을 했다”와 “시험을 충분히 했다”가 갈립니다. 는 스위트가 무엇을 얼마나 건드렸는지를 비율로 적습니다. (실행된 항목 / 전체 항목) × 100입니다. 모든 입력을 칠 수 없으니, 어디를 목표로 칠지를 숫자로 남깁니다.
코드 위에서 세는 강도
구조 기반 시험의 잣대입니다. 가 기법을 적으면, 커버리지는 그 기법이 어디까지 닿았나를 잽니다. 테스트 기법 글이 동등 분할·경계값을 고르는 쪽이면, 여기는 실행 흔적의 두께입니다.
(C0)는 실행 가능 문장을 한 번씩 지나가면 됩니다. if (a > 0) x = 1;에서 참만 타도 문장은 찰 수 있습니다. 거짓 분기는 비어 있습니다. (C1)는 if·while·switch의 참과 거짓을 각각 한 번 이상 엽니다. C1을 채우면 C0은 따라옵니다.
조건 커버리지(C2)는 복합식 안의 각 항을 참·거짓으로 한 번씩 뒤집습니다. if (A && B)에서 항은 채워도 결정의 참·거짓이 비는 조합이 남습니다. 결정과 조건을 동시에 채우는 칸이 그 위입니다. 는 한 걸음 더 갑니다. 각 단순 조건이 다른 항을 고정한 채 전체 결정을 뒤집는 증거가 있어야 합니다. A && B && C면 A만, B만, C만 바꿔 결과가 바뀌는 경우가 각각 필요합니다. 경우의 수는 대략 조건 수 + 1 근처로, 모든 조합보다 얇습니다.
는 가능한 실행 길을 모두 한 번입니다. 루프와 분기가 겹치면 수가 폭발합니다. 가장 두껍지만 실무의 목표로 쓰기 어렵습니다. 강도는 문장 < 분기 < 조건 < 결정·조건 < MC/DC < 경로입니다.
| 유형 | 세는 것 | 한계 |
|---|---|---|
| 문장 (C0) | 실행 문장 | 분기 방향을 안 가른다 |
| 분기 (C1) | 결정의 참·거짓 | 복합 항의 독립 영향은 안 본다 |
| 조건 (C2) | 각 항의 참·거짓 | 결정 커버를 보장하지 않을 수 있다 |
| MC/DC | 항이 결정을 독립으로 뒤집음 | 도구·설계 비용이 든다 |
| 경로 | 실행 길 전체 | 조합이 폭발한다 |
코드 밖과 안전 칸
줄 비율만 올리면 요구 한 줄이 시험에 없을 수 있습니다. 는 명세 항목이 케이스로 검증된 비율입니다. 추적 표(RTM)가 요구와 시험을 한 줄로 잇습니다. 기능 커버리지는 함수가 한 번이라도 불렸는지, 인터페이스 커버리지는 모듈 사이 호출이 시험에 나왔는지입니다. 통합·계약 시험 자리에 가깝습니다.
안전 칸은 숫자를 의무로 올립니다. 항공 는 등급 A에 MC/DC 100%, B에 분기 100%, C에 문장 100%를 자주 붙입니다. 자동차 ISO 26262의 높은 ASIL, 의료 IEC 62304의 높은 등급도 분기 또는 MC/DC를 요구합니다. 일반 제품은 팀 정책으로 문장 80%를 게이트에 넣는 관례가 있습니다. 미달이면 배포를 막습니다.
ISO/IEC 25010의 신뢰성·유지보수성이 “얼마나 믿을 수 있나”를 특질로 적으면, 커버리지는 그 특질을 시험이 뒷받침하는 두께입니다. 회귀 스위트가 커져도 빈 분기는 그대로입니다. 비율은 수단이지, 결함 없음을 증명하지 않습니다.