블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.
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. 성공적인 테스트 스위트
개발 주기에 통합돼 있음
- 빌드 시스템에 통합하기
- 코드가 변경될 때마다 아무리 작은 것이라도 테스트 스위트도 작성 해야 함
코드베이스에서 가장 중요한 부분만을 대상으로 함
- 시스템에서 가장 중요한 부분은 도메인 모델 부분 (비즈니스 로직)
- 다른 부분인 인프라, 외부 종속성, 통합 코드는 중요한 부분만 수행 (알고리즘)
최소한의 유지비로 최대의 가치를 끌어냄
가치 있는 테스트 식별하기
가치 있는 테스트 작성하기
- 코드베이스 설계를 잘해야 좋은 테스트 코드를 작성할 수 있음
'Code' 카테고리의 다른 글
[단위 테스트] 2-2. 단위 테스트란 무엇인가: 런던파와 고전파 (1) | 2025.01.07 |
---|---|
[단위 테스트] 2-1. 단위 테스트란 무엇인가: 단위 테스트란 (0) | 2025.01.07 |
[단위 테스트] 1-1. 단위 테스트의 목표: 단위 테스트 목표 (0) | 2025.01.06 |
[ 리팩토링 by 마틴 파울러 ] Chapter12. 상속 다루기 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter11. API 리팩토링 (0) | 2021.07.22 |