Code

[단위 테스트] 1-2. 단위 테스트의 목표: 커버리지 지표

noahkim_ 2025. 1. 6. 22:26

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.


1. 테스트 스위트 품질 측정을 위한 커버리지 지표

커버리지 지표

  • 테스트 스위트가 소스 코드를 얼마나 실행하는 지를 백분율로 나타내는 지표
  • 테스트 스위트의 품질을 평가하는데 자주 사용됨

 

문제점
public String categorizeAge(int age) {
    if (age < 0) {
        return "Invalid";
    } else if (age < 18) {
        return "Child";
    } else if (age < 65) {
        return "Adult";
    } else {
        return "Senior";
    }
}
  • 테스트 대상 시스템의 모든 가능한 결과를 검증한다 보장할 수 없음

 

@Test
public void testIsValidInput() {
    assertTrue(isValidInput("abcdef"));  // 단일 입력값만 테스트
}

private boolean isValidInput(String input) {
    return StringUtils.isNotEmpty(input) && input.length() > 5;
}
  • 외부 라이브러리의 코드 경로를 고려할 수 있는 커버리지 지표가 없음
    • 내부적으로 여러 조건을 확인하며 작동하지만, 테스트 커버리지에 포함되지 않음
    • 내부 코드 경로에서 발생할 수 있는 에러가 검증되지 않음
    • ex) null, "", 정수가 아님

 

코드 커버리지

  • 실행 코드 라인 수 / 전체 라인 수

 

분기 커버리지

  • 통과한 분기 / 전체 분기
  • 코드 커버리지보다 더 정확한 결과 제공

 

2. 성공적인 테스트 스위트

개발 주기에 통합돼 있음

  • 빌드 시스템에 통합하기
  • 코드가 변경될 때마다 아무리 작은 것이라도 테스트 스위트도 작성 해야 함

 

코드베이스에서 가장 중요한 부분만을 대상으로 함

  • 시스템에서 가장 중요한 부분은 도메인 모델 부분 (비즈니스 로직)
  • 다른 부분인 인프라, 외부 종속성, 통합 코드는 중요한 부분만 수행 (알고리즘)

 

최소한의 유지비로 최대의 가치를 끌어냄

가치 있는 테스트 식별하기
가치 있는 테스트 작성하기
  • 코드베이스 설계를 잘해야 좋은 테스트 코드를 작성할 수 있음