개념
건강검진 결과표를 떠올려 보자. 쓸모 있는 결과표에는 세 가지가 있다 — 수치(콜레스테롤 240), 기준과의 비교(정상 범위 200 이하), 그리고 권고(식습관 조정, 3개월 후 재검사). 수치만 있으면 받는 사람이 아무 판단도 못 한다.
테스트 보고서가 정확히 같다. 숫자만 나열한 보고서는 읽히지 않는다. "커버리지 92%" 는 수치일 뿐이고, "계획 범위의 92%를 봤고 못 본 8%는 다국어·저사양 기기입니다" 가 판단 재료다.
테스트 보고서의 목적
테스트 보고서는 "내가 뭘 했는지" 자랑하는 문서가 아니다. 의사결정자가 이 정보를 보고 릴리스할지 말지 판단할 수 있게 만드는 문서다 — 모듈 4(레슨 5)에서 배운 Go/No-Go 결정의 근거 자료가 바로 이 보고서다. 좋은 보고서는 숫자(지표)와 그 숫자가 의미하는 바(해석)를 함께 담는다.
읽는 사람이 다르면 보고서도 다르다
같은 테스트 결과를 네 종류로 써야 할 때가 있다. 양을 줄이는 것이 아니라 관심사가 다르다.
| 읽는 사람 | 알고 싶은 것 | 먼저 쓸 것 |
|---|---|---|
| 개발 리드 | 어디가 불안한가 | 영역별 결함 분포, 재오픈 건 |
| PM·기획 | 내보낼 수 있나 | 미해결 고위험 건수와 영향 |
| 경영·임원 | 위험이 얼마나 되나 | 한 줄 결론과 못 본 영역 |
| QA 자신 | 다음에 무엇을 할까 | 탈출 결함의 원인 유형 |
세 번째 줄에서 많은 보고서가 실패한다. 임원이 받는 보고서에 지표 열 개를 나열하면 아무것도 전달되지 않는다. 결론 한 줄 + 위험 세 개 가 전부여야 한다.
보고서 한 장의 구조
길이가 아니라 순서가 전달력을 만든다. 결론을 맨 앞에 둔다.
| 순서 | 내용 |
|---|---|
| 1 | 결론 — 내보낼 수 있는지, 조건이 있는지 |
| 2 | 범위 — 무엇을 테스트했나(기간·환경·버전) |
| 3 | 지표 — 커버리지·실패율·결함 현황 |
| 4 | 미해결 고위험 — 건수와 각각의 영향 |
| 5 | 못 한 것 — 범위에서 빠진 영역과 이유 |
| 6 | 권고 — 다음에 필요한 것 |
5번이 보고서의 신뢰를 결정한다. "전부 테스트했습니다" 는 반드시 거짓이고, 한 번 들키면 다음 보고가 안 믿긴다(레슨 3·모듈 5 레슨 13).
지표 1 — 커버리지(Coverage)
"계획한 테스트 중 몇 %를 실행했는가"를 나타낸다.
테스트 실행률 = 실행한 테스트 케이스 수 / 계획한 전체 테스트 케이스 수 × 100100%를 실행했다고 결함이 없다는 뜻은 아니다 — 그저 "계획한 범위를 다 확인했다"는 뜻일 뿐이다. 계획 자체가 부족했다면 커버리지 100%도 의미가 제한적이다.
커버리지의 두 가지 뜻
"커버리지" 라는 한 단어가 전혀 다른 두 가지를 가리킨다. 섞어 쓰면 보고서가 거짓이 된다.
| 종류 | 계산 | 무엇을 말하나 |
|---|---|---|
| 케이스 실행률 | 실행 케이스 ÷ 계획 케이스 | 계획을 얼마나 소화했나 |
| 요구사항 커버리지 | 확인한 요구 ÷ 전체 요구 | 빠진 요구가 있나 |
두 번째가 더 중요하고 덜 쓰인다. 케이스 실행률 100%라도 요구사항 하나에 케이스가 아예 없으면 그 요구는 검증되지 않았다. 계획 자체의 구멍은 실행률로는 절대 드러나지 않는다.
그리고 케이스 실행률에는 함정이 하나 더 있다. 케이스마다 크기가 다르다.
200개 중 180개 실행 = 90%. 그런데 남은 20개가 전부 결제 영역이면 실질 커버리지는 90%가 아니다.
그래서 실행률은 반드시 무엇이 남았는지와 함께 보고한다. "90% 실행, 미실행 20건은 결제 영역" 이 정직한 한 줄이다.
지표 2 — 결함 밀도(Defect Density)
기능 영역(레슨 4의 라벨/컴포넌트)이나 코드 규모 단위로, 결함이 얼마나 집중되어 있는지 나타낸다.
결함 밀도 = 발견된 결함 수 / 규모(예: 기능 개수, 화면 개수, 1000줄당)결제 모듈에서 결함 15건, 설정 화면에서 결함 2건이 나왔다면, 절대 건수만 보고 "결제 모듈이 문제"라고 단정하기보다, 각 영역의 규모 (화면 수, 기능 수)로 나눠서 밀도를 비교해야 공정하다. 결제 모듈이 화면 수가 5배 많다면 밀도는 오히려 비슷할 수 있다.
규모 단위는 구할 수 있는 것으로 고른다.
| 단위 | 쓸 때 | 주의 |
|---|---|---|
| 화면·기능 개수 | QA가 가장 쉽게 센다 | 기능의 복잡도 차이는 무시된다 |
| 코드 1,000줄당 | 개발과 함께 볼 때 | 줄 수는 품질과 비례하지 않는다 |
| 테스트 케이스당 | 케이스 기반 조직 | 케이스 크기 차이가 섞인다 |
| 변경된 파일·커밋당 | 회귀 분석에 유용 | 도구 연동이 필요하다 |
완벽한 단위는 없다. 중요한 것은 같은 단위로 계속 재는 것이다. 단위를 바꾸면 추세가 끊기고, 추세가 없으면 밀도는 거의 쓸모가 없다.
밀도가 높은 영역을 발견했을 때의 해석도 조심해야 한다.
- 정말 그 영역이 취약할 수 있다 → 다음 테스트를 더 투입한다
- 또는 그 영역만 열심히 봤을 수 있다 → 다른 영역이 미탐일 가능성
- 또는 그 영역만 변경이 많았을 수 있다 → 당연한 결과다
두 번째 가능성을 늘 함께 적는다. 결함이 안 나온 영역은 깨끗한 것이 아니라 안 본 것일 수 있다.
지표 3 — 결함 탈출률(Defect Escape Rate)
QA 단계에서 못 잡고 운영 환경까지 새어나간 결함의 비율이다.
결함 탈출률 = 운영에서 발견된 결함 수 / (QA에서 발견 + 운영에서 발견) × 100이 지표가 높다는 건 테스트 커버리지나 테스트 설계 자체에 구멍이 있다는 신호다. 결함 탈출률은 QA 활동의 효과성을 가장 직접적으로 보여주는 지표 중 하나다.
이 지표에는 시간 함정이 있다. 운영 결함은 릴리즈 직후가 아니라 몇 주에 걸쳐 나온다.
릴리즈 ──┬── 1주 ──── 2주 ──── 4주 ────▶
│
└ 운영 결함 2건 +3건 +2건 ← 계속 늘어난다그래서 "이번 달 탈출률" 처럼 달 단위로 자르면 숫자가 왜곡된다. 올바른 방법은 릴리즈 기준으로 묶는 것이다 — "v2.14 릴리즈 후 4주간 운영 결함 7건" 처럼 기준 기간을 고정해 비교한다.
그리고 분류가 전제다. 레슨 4의 발견 단계 라벨(개발 중 / QA / 운영)이 없으면 이 지표는 계산 자체가 불가능하다.
해석에서 가장 조심할 것은 이 숫자를 QA의 성적표로 읽지 않는 것이다. 탈출률이 높을 때 원인은 셋 중 하나다.
| 원인 | 신호 | 대응 |
|---|---|---|
| 테스트 설계에 구멍 | 탈출 결함이 특정 유형에 몰린다 | 치트시트에 한 줄 추가(모듈 5 레슨 14) |
| 환경 차이 | 운영에서만 나는 결함이 많다 | 테스트 환경을 운영에 가깝게 |
| 시간 부족 | 미실행 케이스가 많았다 | 일정 협상의 근거로 쓴다 |
세 번째를 숫자로 보여 줄 수 있으면 탈출률은 QA를 비난하는 지표에서 자원을 요청하는 근거로 바뀐다.
지표 4 — 실패율(Failure Rate / Pass Rate)
실패율 = 실패한 테스트 케이스 수 / 실행한 테스트 케이스 수 × 100실패율이 릴리스 직전까지 계속 높게 유지된다면, 기능이 아직 불안정 하다는 신호다. 반대로 실패율이 낮더라도 커버리지 자체가 낮다면 그 낮은 실패율은 신뢰할 수 없다 — 커버리지와 실패율은 항상 같이 봐야 한다.
실패율에는 셈하는 방식의 문제가 있다. 같은 케이스를 고친 뒤 다시 돌려 통과하면 그것을 실패로 셀까 통과로 셀까.
- 마지막 결과로 센다 → 릴리즈 시점의 상태를 보여 준다(보고용)
- 첫 실행 결과로 센다 → 처음 얼마나 불안정했는지 보여 준다(품질용)
둘을 섞지 않는다. 보고서에는 어느 쪽으로 셌는지 적는다. 적어 두지 않으면 지난 릴리즈와 비교할 수 없다.
과정 지표 — 결함이 흐르는 속도
레슨 1에서 본 세 숫자가 여기 들어온다. 위의 네 지표가 결과를 보여 준다면 이 셋은 과정을 보여 준다.
| 지표 | 계산 | 나쁜 신호 |
|---|---|---|
| 재오픈율 | 재오픈 건 ÷ 수정 완료 건 | 15% 초과 → 수정이 성급하거나 리포트가 부실 |
| 반려율 | 반려 건 ÷ 등록 건 | 높으면 리포트 품질 또는 문서 공백 |
| New 체류 시간 | New 상태 평균 일수 | 7일 초과 → 배정 단계가 비어 있다 |
과정 지표가 결과 지표보다 먼저 움직인다. 재오픈율이 오르는 것은 다음 릴리즈의 탈출률이 오를 예고이고, 손쓸 시간이 있다는 뜻이다.
절대값보다 추세
숫자 하나로는 좋은지 나쁜지 알 수 없다. 결함 밀도 0.8이 좋은가? 아무도 모른다. 비교 대상이 없기 때문이다.
| 보고 방식 | 전달력 |
|---|---|
| "결함 밀도 0.8" | 판단 불가 |
| "결함 밀도 0.8 (지난 릴리즈 1.4)" | 개선되고 있다 |
| "탈출률 12% (3개 릴리즈 평균 7%)" | 악화 신호 |
그래서 지표는 처음부터 같은 방식으로 계속 재는 것이 전부다. 완벽한 지표를 설계하려다 시작을 미루는 것보다, 거친 지표라도 같은 방식으로 다섯 번 재는 편이 훨씬 쓸모 있다.
결함 유입·해결 곡선
표 대신 그림이 설득력을 갖는 경우가 하나 있다. 쌓이는 속도와 해결되는 속도를 나란히 그리는 것이다.
건수
60│ ┌─ 누적 발견
│ ┌────┘
40│ ┌────┘
│ ┌────┘ ┌──── 누적 해결
20│ ┌────┘ ┌────┘
│ ┌────┘ ┌───────┘
0└───┴──────────┴────────────┴────▶
1주 2주 3주 4주
↑ 두 선의 간격 = 미해결 건수두 선이 벌어지면 발견이 해결을 앞지르고 있다 — 릴리즈가 다가와도 미해결이 줄지 않는다는 뜻이다. 좁아지면 안정화 중이다.
이 그림이 강한 이유는 "더 시간이 필요하다" 를 말로 설명하지 않아도 되기 때문이다. 간격이 좁아지는 추세가 안 보이면 날짜를 지킬 수 없다는 것이 그림으로 보인다.
지표는 목표가 아니라 신호다
지표 하나만 보고 판단하면 왜곡되기 쉽다. 예를 들어 "결함 탈출률을 낮추자"는 목표가 도구화되면, 팀이 사소한 결함까지 전부 QA 단계에서 붙잡으려다 릴리스 일정 자체가 늦어질 수 있다. 지표는 "지금 상황이 어떤지 알려주는 신호" 로 쓰고, 그 신호를 해석해서 다음 행동을 결정하는 건 사람의 몫이다.
이것은 "측정이 목표가 되면 측정이 망가진다" 는 오래된 법칙이다. 지표 하나하나가 어떻게 망가지는지 보면 조심할 지점이 분명해진다.
| 지표가 목표가 되면 | 사람들이 하는 일 |
|---|---|
| 커버리지 100% | 쉬운 케이스를 늘린다. 어려운 영역은 그대로 |
| 결함 수 많이 | 사소한 것을 쪼개 올린다 |
| 결함 수 적게 | 발견을 늦게 올린다. 또는 말로만 전한다 |
| 실패율 낮게 | 불안정한 케이스를 지운다 |
| 탈출률 0 | 릴리즈를 계속 미룬다 |
세 번째 줄이 가장 위험하다. 결함 수를 적게 유지하라는 압력이 생기면 결함이 기록되지 않고, 기록되지 않은 결함은 사라지는 것이 아니라 보이지 않게 될 뿐이다. 그 순간 모든 지표가 거짓이 된다.
쓰면 안 되는 지표
측정 자체가 해로운 것이 있다. 사람 단위로 집계하는 지표다.
| 쓰지 않는다 | 왜 |
|---|---|
| QA별 결함 등록 수 | 건수를 늘리는 행동을 유도한다. 품질과 무관 |
| 개발자별 결함 수 | 비난의 도구가 된다(레슨 3). 정보가 숨는다 |
| QA별 탈출 결함 수 | 어려운 영역을 맡기 꺼리게 만든다 |
두 번째는 특히 조심한다. 한 번 이런 집계가 공유되면, 그 뒤로 개발자는 결함을 인정하지 않는 쪽으로 움직인다. 레슨 3에서 본 "정보가 숨는다" 가 지표에서 벌어지는 모습이다.
영역 단위·유형 단위 집계는 괜찮다. "결제 영역 밀도가 높다" 는 정보고, "A님 영역 밀도가 높다" 는 평가다.
숫자에 해석을 붙이는 문장 틀
보고서에서 가장 자주 비는 부분이 해석이다. 틀을 외워 두면 쉽다.
[지표] 가 [값] 입니다 ([비교 대상] 대비 [변화]). 이것은 [의미] 라는 뜻이고, 따라서 [권고] 를 제안합니다.
적용하면 이렇게 된다.
| 숫자만 | 해석을 붙이면 |
|---|---|
| "커버리지 90%" | "커버리지 90%입니다(계획 200건 중 180건). 미실행 20건이 전부 결제 영역이어서, 결제는 아직 검증되지 않았다는 뜻입니다. 이틀을 더 쓰거나 결제 변경을 다음 릴리즈로 미루는 것을 제안합니다." |
| "탈출률 12%" | "탈출률 12%입니다(최근 3개 릴리즈 평균 7%). 탈출 결함 7건 중 5건이 모바일 환경이어서, 테스트 기기 구성에 공백이 있다는 뜻입니다. 기기 2종 추가를 제안합니다." |
오른쪽의 공통점은 숫자 뒤에 "그래서 무엇을 하자" 가 붙는다는 것이다. 이것이 보고서를 읽히게 만드는 유일한 차이다.
Go/No-Go 한 장 예시
지금까지의 요소를 모은 모습이다. 이 한 장이 모듈 4 레슨 5의 회의에 들어간다.
■ 결론
조건부 Go. 결제 영역 확인 이틀을 확보하면 내보낼 수 있습니다.
확보가 어려우면 결제 변경분만 제외하는 것을 제안합니다.
■ 범위
v2.14 / 2026-09-28 ~ 10-04 / 스테이징·운영 유사 환경
미포함: 다국어, 저사양 기기(이유: 기기 미확보)
■ 지표
케이스 실행률 180/200 (90%) ← 미실행 20건 전부 결제
실패율 20/180 (11%) ← 마지막 실행 기준
결함 밀도 결제 1.9 / 설정 0.3 (화면 수 기준)
재오픈율 8% (지난 릴리즈 14%)
■ 미해결 고위험
S1 0건
S2 2건 · 쿠폰 중복 적용 시 할인 과다 (영향: 손실 발생)
· 주문 취소 후 재고 미복구 (영향: 데이터 누적 오류)
■ 못 한 것
결제 수단 전환 경로(차터 2개), 다국어, 저사양 기기
■ 권고
1) 결제 차터 2개에 이틀 확보
2) S2 2건은 릴리즈 전 수정 또는 운영 감시 지표 합의
3) 기기 2종 확보(탈출 결함의 5/7이 모바일)"못 한 것" 과 "권고" 가 이 문서의 값이다. 지표만 있는 보고서는 읽는 사람에게 일을 넘기고, 이 두 절이 있는 보고서는 판단을 가능하게 만든다.
사례 — 커버리지 98%인데 운영 사고
한 릴리즈의 보고서에 커버리지 98%, 실패율 2%, 미해결 S1 0건이 적혀 있었다. 숫자로는 완벽했고 Go가 났다. 이틀 뒤 결제 실패 문의가 쏟아졌다.
원인을 추적하자 세 가지가 겹쳐 있었다.
| 무엇이 가려졌나 | 지표에서는 |
|---|---|
| 신규 결제 수단에 케이스가 아예 없었다 | 케이스 실행률에는 안 나타난다 |
| 테스트 환경이 결제 테스트 모드였다 | 실패율은 정상으로 나온다 |
| 미실행 2%가 전부 결제 영역이었다 | "98%" 라는 한 줄에 묻혔다 |
세 가지 모두 숫자가 거짓말을 한 것이 아니라, 숫자가 그 질문에 답하지 않았던 것이다. 커버리지는 "계획을 소화했나" 에 답하고, "계획이 충분했나" 에는 답하지 않는다.
그 뒤 보고서에 두 줄을 추가했다.
- 요구사항 커버리지 — 요구 목록 대비 케이스가 없는 요구를 센다
- 미실행 항목의 영역 — "2%" 가 아니라 "미실행 4건: 결제 3, 설정 1"
첫 줄에서 케이스가 없는 요구 3건이 바로 드러났다. 지표를 하나 더 더한 것이 아니라, 원래 묻고 싶었던 질문으로 지표를 바꾼 것이다.
실무에서 왜 필요한가
모듈 4(레슨 5)에서 Go/No-Go를 결정할 때 "지금까지 발견된 결함 현황"을 근거로 든다고 배웠다. 이 레슨에서 배운 지표들이 바로 그 근거를 숫자로 만드는 방법이다. 커버리지·결함 밀도·결함 탈출률· 실패율을 계산하고 해석할 수 있는 QA는, 릴리스 회의에서 "느낌상 괜찮아 보여요"가 아니라 "커버리지 92%, 심각도 높음 결함 0건 잔존, 지난 릴리스 대비 결함 탈출률 감소"처럼 근거 있는 발언을 할 수 있다.
지표는 QA의 요구를 관철하는 수단이다
QA가 자원을 요청할 때 가장 약한 말은 "시간이 더 필요합니다" 다. 가장 강한 말은 같은 요청을 숫자로 바꾼 것이다.
| 약한 요청 | 강한 요청 |
|---|---|
| "테스트 시간이 부족해요" | "미실행 20건이 전부 결제 영역입니다. 이틀이면 끝납니다" |
| "기기가 필요합니다" | "지난 3개 릴리즈 탈출 결함 7건 중 5건이 모바일입니다" |
| "개발 단계 테스트가 필요해요" | "운영 발견 비중이 12% 입니다. 앞에서 잡는 장치가 없습니다" |
| "인원이 더 필요합니다" | "재검증 대기가 평균 41건으로 쌓여 릴리즈 직전에 몰립니다" |
오른쪽은 거절하기 어렵다. 거절하려면 그 숫자를 반박해야 하고, 숫자가 사실이면 반박할 것이 없다. 이것이 지표를 재는 가장 실용적인 이유다.
보고서는 QA의 일을 보이게 만든다
QA의 작업은 결함이 안 났을 때 가장 안 보인다. 아무 일도 없었던 릴리즈의 공로는 측정되지 않는다. 보고서가 그 공백을 메운다 — "차터 12개, 케이스 180건, 결함 35건 중 S1 4건을 릴리즈 전에 잡았다" 는 기록이 남는다.
이 기록은 평가 시즌에도 쓰이지만, 더 중요한 쓸모가 있다. 다음 릴리즈의 일정을 협상할 근거가 된다. 지난 릴리즈에 실제로 며칠이 걸렸는지가 적혀 있으면 추정이 감이 아니게 된다(모듈 5 레슨 13).
채용시장에서의 위치
지표를 계산할 수 있는 사람은 많고, 해석해서 다음 행동을 제안하는 사람은 드물다. 면접에서 갈리는 지점이 정확히 거기다.
| 질문 | 약한 답 | 강한 답 |
|---|---|---|
| "품질 지표를 어떤 걸 보셨어요?" | "커버리지랑 결함 수요" | "결과 지표 네 개와 과정 지표 세 개를 나눠 봤습니다. 과정 지표가 먼저 움직입니다" |
| "커버리지 95%면 안심되나요?" | "꽤 괜찮은 수준입니다" | "남은 5%가 무엇인지를 봅니다. 전부 결제라면 95%는 의미가 없습니다" |
| "탈출률이 높으면 누구 책임인가요?" | "QA 책임입니다" | "설계 구멍·환경 차이·시간 부족 셋으로 나눠 봅니다. 셋의 대응이 다릅니다" |
| "지표 때문에 문제가 생긴 경험?" | 없음 | "결함 수를 줄이라는 압력이 생기면 결함이 기록되지 않습니다" |
| "보고서에 꼭 넣는 게 있나요?" | "지표와 결과요" | "못 한 것과 권고입니다. 그 둘이 없으면 판단을 넘기는 문서가 됩니다" |
다섯 번째가 가장 변별력이 크다. "못 한 것을 적는다" 는 답은 보고서를 실제로 의사결정에 올려 본 사람만 한다. 레슨 3의 릴리즈 판단, 모듈 5 레슨 13의 종료 보고와 같은 태도다.
세 번째도 좋은 답이다. 탈출률을 자기 성적표로 받아들이는 사람은 그 숫자를 숨기거나 변명하게 되고, 원인으로 나눠 보는 사람은 그 숫자로 자원을 얻는다.
직무로는 QA 리드·QA 매니저·품질 기획에서 직접 쓰인다. 공고 표현으로는 "품질 지표 관리", "테스트 보고 체계 수립", "릴리즈 품질 판단" 이 걸린다. 그리고 신입 단계에서도 계산은 할 수 있어야 하는 범위다.