블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.
1. 단위 테스트 현황
비율
- 제품 코드와 테스트 코드의 비율은 1:1~3 정도
새로운 기능과 버그 발생
- 새로운 기능을 구현할 때 새로운 버그가 지속적으로 나타남
테스트 코드 작성의 어려움
- 적절하지 않은 설계의 코드를 테스트할 경우, 테스트 코드를 작성하는데 어려움이 있음
- 잘못된 테스트 코드는 오히려 상황을 더 악화시킬 수 있음
2. 단위 테스트 목표
소프트웨어 엔트로피
- 프로젝트에서는 시간이 지날수록 코드베이스의 복잡성과 불확실성이 증가하는 경향이 있음
엔트로피 증가
- 코드 변경시 엔트로피는 증가함
- 기존 기능에 영향을 주어 예기치 못한 문제가 발생
- 테스트가 없는 프로젝트는 시작은 유리하지만 이내 진척이 없을 정도로 느려짐
- 결국 코드베이스를 신뢰할 수 없음
목표
지속 가능한 성장
- 기능 추가 및 유지보수가 진행되는 동안 기존 기능이 여전히 올바르게 작동하는지 보장
안전망 역할
- 예상치 못한 버그로부터 보호하는 보험과 같은 역할
코드의 품질 보장
- 단위 테스트를 하기 어렵다면, 코드의 구조와 설계에 문제가 있음을 의미함
- 비교적 높은 정확도로 코드 품질을 파악할 수 있음
- 저품질
- 강결합
- 서로 분리가 되지 않는 코드
- 테스트가 어려움
- 약결합
- 분리되어 있어도 구조가 복잡하거나 설계가 나빠 테스트가 어려울 수 있음
- 강결합
장점
지속성
- 초반에 노력이 많이 듬
- 그러나 장기적으로 보면 비용을 메울 수 있음
확장성
- 테스트 없이 큰 규모의 프로젝트로 확장할 수 없음
부수 효과
설계 개선
- 테스트하기 쉬운 코드는 더 나은 설계 구조를 가지고 있다 말할 수 있음
이해 용이성
- 코드베이스를 이해하기 쉬움
권장 사항
코드 변경 시 테스트 변경하기
- 기능을 수정하거나 추가할 때, 관련 테스트도 업데이트 해야 함
잘못된 경고 처리하기
- 테스트에서 자주 발생하는 경고를 무시하지 말고, 원인을 분석해 처리하기
책임
- 코드베이스가 변경될수록 버그에 노출되는 표면적과 유지비가 늘어남
- 테스트 코드도 마찬가지이므로, 최소의 코드로 문제를 해결하는 것이 좋음
'Code' 카테고리의 다른 글
[단위 테스트] 2-1. 단위 테스트란 무엇인가: 단위 테스트란 (0) | 2025.01.07 |
---|---|
[단위 테스트] 1-2. 단위 테스트의 목표: 커버리지 지표 (0) | 2025.01.06 |
[ 리팩토링 by 마틴 파울러 ] Chapter12. 상속 다루기 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter11. API 리팩토링 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter10. 조건부 로직 간소화 (0) | 2021.07.22 |