복잡한뇌구조마냥

[CS] 테스트 커버리지(Test Coverage) 정리 본문

공통/CS

[CS] 테스트 커버리지(Test Coverage) 정리

지금해냥 2025. 10. 30. 21:13

📘 1. 테스트 커버리지 (Test Coverage) 란?

테스트 커버리지는 소프트웨어의 테스트가 얼마나 충분히 수행되었는지정량적으로 측정하는 지표입니다.

쉽게 말해, 테스트 케이스가 소프트웨어의 전체 코드 또는 전체 요구사항 중 어느 정도의 비율을 다루고 있는지를 나타냅니다.

📌 왜 중요한가요?

  1. 결함 발견 확률 예측: 커버리지가 높을수록 실행되지 않은 코드 영역(Dead Zone)이 줄어들어, 해당 영역에 숨어있을 수 있는 잠재적 결함을 발견할 확률이 높아집니다.
  2. 테스트 효율성 평가: 단순히 테스트 케이스의 개수가 아닌, 테스트가 얼마나 효과적으로 코드 또는 요구사항을 검증했는지 객관적으로 평가할 수 있습니다.
  3. 릴리즈 기준 설정: 특정 수준 이상의 커버리지를 제품 릴리즈의 필수 기준으로 설정하여 **품질 보증(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% 커버리지가 “완벽한 테스트”를 의미하지 않음

💡 요약:
“테스트 커버리지는 ‘얼마나 테스트했는가’를 수치로 표현하는 지표이며,
오라클은 ‘테스트 결과가 맞는가’를 판단하는 기준이다.”
💡 “논리적 커버리지는 조건문을 얼마나 꼼꼼히 테스트했는지를 나타내며,
구문 → 결정 → 조건 → 결정/조건 → 변경 조건/결정 → 다중 조건 순으로 강해진다.”

 

 

참고자료: https://shinbe.tistory.com/entry/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80Test-Coverage-%EC%BD%94%EB%93%9C-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80Code-Coverage-%E2%91%A0#google_vignette

 

테스트 커버리지(Test Coverage), 코드 커버리지(Code Coverage) / ①

문제7) 테스트 커버리지(Test Coverage)와 코드 커버리지(Code Coverage) 답) 1. 테스트 케이스 실제 수령 여부 확인, 테스트 커버리지(Test Coverage) 설명 가. 테스트 커버리지(Test Coverage)의 정의 및 특징 구

shinbe.tistory.com

 

LIST