커버리지는 정한 항목을 실행한 비율이다. 어떤 문장과 제어흐름 간선을 분모로 삼았는지부터 확인해야 숫자를 비교할 수 있다.
별도의 가상 대출 정책은 일반 회원 7일, 연장 승인 회원 21일이다. extended는 불리언이라고 가정한다. 아래 코드에서 S1·S2·S3로 표시한 세 문장을 실행 항목으로 센다. D1은 이 그림의 판단 노드이며 표시 문장 집계에서 뺐다. true 한 번이면 세 문장을 모두 실행하지만 D1에서 곧바로 S3으로 가는 거짓 경로는 지나지 않는다.
제어흐름 그림은 시작·S1·D1·S2·S3·종료를 잇는 e1~e6 여섯 간선을 직접 정의한다. 참 경로는 e1·e2·e3·e5·e6, 거짓 경로는 e1·e2·e4·e6이다. 이 그림의 전체 간선을 분모로 세면 true만으로는 5/6, false만으로는 4/6이며 둘을 합쳐야 6/6이다. D1의 참·거짓 두 결과만 세는 지표와 이 여섯 간선 지표를 같은 분모로 쓰지 않는다.
문장이나 분기를 지났다는 사실은 그 결과가 업무 규칙에 맞는지까지 판단하지 않는다. S2의 21을 실수로 20으로 바꿔도 두 입력은 같은 간선을 지나간다. 연장 승인 회원의 예상값을 별도로 21이라고 비교해야 이 결함을 발견한다. 실제 도구는 언어·계측 설정에 따라 항목을 나누므로 이 작은 그림의 개수를 그대로 다른 보고서에 적용하지 않는다.
- 01 →
실행 항목을 정한다
- 02 →
입력별 경로를 추적한다
- 03 →
합집합으로 비율을 센다
- 04
예상 반환값도 비교한다
무조건 흐름도 간선으로 셉니다. D1의 두 결과만 세는 비율과 분모가 다릅니다.
같은 상황에서 비교하기
| 개념 | 기준 | 확인할 점 |
|---|---|---|
| 문장 실행률 | S1·S2·S3 중 실행한 항목 | true만으로도 세 문장을 지난다 |
| 이 그림의 간선 실행률 | e1~e6 중 지난 항목 | true만이면 e4가 빠진다 |
| 결과의 옳고 그름 | 합의한 정책과 실제 반환 비교 | 21 대신 20이면 경로가 같아도 실패다 |
도서관 예제로 따라가기
function allowedDays(extended) {
let days = 7; // S1
if (extended) { // D1
days = 21; // S2
}
return days; // S3
}| 입력 집합 | 반환값 | 표시 문장 | 그림 간선 |
|---|---|---|---|
| true만 | 21 | 3/3 = 100% | 5/6 ≈ 83.33% |
| false만 | 7 | 2/3 ≈ 66.67% | 4/6 ≈ 66.67% |
| false와 true | 7, 21 | 3/3 = 100% | 6/6 = 100% |
분모는 표시한 문장 3개와 그림의 간선 6개로 고정한다. 실행률은 테스트 집합에서 한 번 이상 거친 항목의 합집합으로 세며 반복 실행 횟수를 더하지 않는다. 소수 비율은 둘째 자리까지 반올림했다. 조건 커버리지·MC/DC와 예외·반복문 경로는 이 예제의 범위 밖이다.
내 말로 설명해 보기
true 한 건의 문장 실행률과 간선 실행률이 다른 이유를 그림의 e4로 설명해 보자. 반환값 검사는 왜 별도로 필요한가?
설명 예시 확인
true는 S1·S2·S3을 모두 지나지만 D1의 거짓 간선 e4는 지나지 않아 각각 3/3과 5/6이다. false를 보태면 e4도 지나지만 반환값 21이 정책과 같은지 비교하지 않으면 잘못된 상수 같은 결함을 놓칠 수 있다.
참고한 자료
이전 개념 자료와의 연결
이전 자료에서 다룬 주제를 이어받아 설명과 예시를 다시 썼어요.
- 문장·분기·조건 커버리지
- 예상 결과와 테스트 오라클