본문으로 건너뛰기

테스트 커버리지

· 약 8분

💡 다음 내용은 chatGPT를 기반으로 작성된 내용으로, 부정확한 정보가 있을 수 있습니다.


테스트 커버리지란?

  • 테스트 커버리지(Test Coverage)는 소프트웨어 테스트의 범위를 측정하는 지표
  • 테스트가 얼마나 철저히 이루어졌는지를 나타내는 수치

코드 커버리지

  • 프로그램 코드 중 테스트된 코드가 차지하는 비율
  • 전체 코드가 100줄인데 테스트를 통해 80줄이 실행되었다면, 테스트 커버리지는 80%

기능 커버리지

  • 소프트웨어의 기능이 얼마나 테스트되었는지 확인하는 개념
  • 모든 기능이 테스트되었는지, 주요 기능만 다루고 있는지를 평가

테스트 커버리지의 유형

  • 문장(Statement) 커버리지: 코드의 각 문장이 실행되었는지 확인
  • 분기(Branch) 커버리지: 조건문(if, switch 등)의 각 분기가 실행되었는지 확인
  • 조건(Condition) 커버리지: 조건문에서 개별 조건이 참/거짓을 모두 만족했는지 확인

왜 중요할까?

  • 결함 감소: 더 높은 커버리지는 소프트웨어 결함을 줄이는 데 도움을 줌
  • 품질 관리: 테스트가 충분히 이루어졌는지 객관적으로 확인
  • 리스크 최소화: 테스트되지 않은 부분에서 발생할 수 있는 예기치 못한 오류를 감소

테스트 커버리지 유형

1. 문장(Statement) 커버리지

기본 개념: 코드의 각 문장이 한 번이라도 실행되었는지를 확인

  • 목표: 코드의 모든 문장이 실행되도록 테스트 케이스를 작성
  • 장점: 구현된 코드의 기본적인 실행 여부를 빠르게 확인 가능
  • 한계: 조건문 내부의 다양한 경로(분기)나 복잡한 논리는 놓칠 수 있음
if (x > 0):
y = x

x > 0 조건이 참인 경우만 실행하면 문장 커버리지는 충족되지만, x <= 0의 경우는 테스트되지 않을 수 있음

2. 분기(Branch) 커버리지

기본 개념: 조건문(if, switch 등)의 모든 분기 경로가 실행되었는지 확인

  • 목표: 코드의 분기마다 테스트 케이스를 작성해 모든 분기가 실행되도록 함
  • 장점: 다양한 경로에 대한 테스트 가능
  • 한계: 모든 가능한 조건 조합을 보장하지는 못함
if (x > 0):
y = x
else:
y =- x

분기 커버리지는 x > 0 (참)과 x <= 0 (거짓) 모두를 테스트해야 충족

3. 조건(Condition) 커버리지

기본 개념: 조건문 내부의 개별 조건식이 참과 거짓을 모두 만족하는지를 확인

  • 목표: 조건식 자체의 모든 가능성을 테스트
  • 장점: 조건문의 논리적 정확성을 검증
  • 한계: 전체 분기 경로를 확인하지는 못할 수도 있음
if (a > 0 && b < 5):
y = a + b

a > 0b < 5의 각각이 참/거짓을 모두 만족해야 조건 커버리지가 충족

4. 결합 조건/분기 커버리지 (Condition/Decision Coverage, CDC)

기본 개념: 분기 커버리지와 조건 커버리지를 결합한 형태

  • 목표: 각 조건이 참/거짓을 만족하고, 분기 경로가 모두 실행되도록 함.
  • 장점: 더 정교한 테스트 가능.
  • 한계: 테스트 케이스 수가 많아질 수 있음.

5. 변형 조건/결정 커버리지 (Modified Condition/Decision Coverage, MC/DC)

기본 개념: 조건/결정 커버리지를 개선한 형태로, 각 조건이 분기 결과에 독립적으로 영향을 미침을 보장

  • 목표: 조건식 간의 상호 의존성을 고려하여 더 효과적인 테스트 작성
  • 장점: 테스트 케이스 수를 줄이면서 논리적 오류 발견
  • 적용 사례: 안전-critical한 소프트웨어(항공, 의료 등)에서 사용
if (A || B):
y = 10

A와 B가 각각 결과에 영향을 주는 테스트를 모두 작성해야 MC/DC가 충족

6. 루프(Loop) 커버리지

기본 개념: 반복문(loop)이 다양한 조건에서 제대로 동작하는지를 확인

  • 목표: 반복문이 (1) 실행되지 않는 경우, (2) 한 번만 실행되는 경우, (3) 여러 번 실행되는 경우를 모두 테스트
  • 장점: 반복문에서 발생할 수 있는 오류 방지
  • 한계: 복잡한 반복문에서는 테스트 케이스가 많아질 수 있음

7. 패스(Path) 커버리지

기본 개념: 프로그램의 모든 가능한 실행 경로를 테스트합니다.

  • 목표: 프로그램의 시작부터 끝까지의 모든 경로를 따라가며 테스트
  • 장점: 모든 실행 경로를 테스트하므로 가장 철저한 커버리지
  • 한계: 경로가 많을 경우 현실적으로 모든 경로를 테스트하기 어려움

비교 요약

유형측정 대상테스트 목표예시
문장 커버리지코드의 각 문장모든 문장이 실행되었는지단순 실행
분기 커버리지조건문의 분기모든 분기 실행if 참/거짓
조건 커버리지조건식의 개별 조건조건식의 참/거짓 모두 테스트조건별 확인
결합 조건/분기 커버리지조건 + 분기분기와 조건의 모든 경우 확인분기+조건
변형 조건/결정 커버리지조건 간 독립성 검증조건이 결과에 미치는 영향 검증상호 독립
루프 커버리지반복문다양한 반복 상태 테스트반복 테스트
패스 커버리지실행 경로모든 가능한 경로 테스트경로 탐색