Code/Test

[단위 테스트] 1-1. 단위 테스트의 목표: 단위 테스트 목표

noahkim_ 2025. 1. 6. 21:53

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

 

1. 소프트웨어 엔트로피

  • 코드베이스는 시간이 흐를수록 복잡성과 불확실성이 증가하는 경향이 있음

 

흐름

  1. ⚠️ 엔트로피 증가: 코드 변경 시, 복잡도가 증가함
  2. ➡️ 예기치 못한 문제 발생: 복잡한 코드에 새 기능을 추가하면 부작용 발생 가능성이 커짐
  3. ➡️ 신뢰성 하락: 테스트가 없는 프로젝트는 처음엔 빠르게 개발되지만, 시간이 갈수록 코드 작성이 급격히 느려짐

 

2. 테스트 코드 작성의 중요성

  • 새로운 기능을 개발할 때마다 새로운 버그 가능성이 존재함
  • 코드 설계가 적절하지 못하면 테스트 코드 작성이 어려워지고, 테스트 코드 자체도 오류를 포함할 수 있음
  • ⚠️ 잘못된 테스트 코드는 신뢰성을 떨어뜨려, 상황을 더 악화시킬 수 있음
  • ➡️ 테스트 코드의 품질도 본 코드만큼 중요하게 다루어야 함

 

3. 단위 테스트

목표

  • 코드 품질 보장 (간접적): 테스트가 어렵다면, 설계 자체에 문제가 있다는 신호
  • 안전망 역할: 예상치 못한 버그로부터 보호 (보험 역할)
  • 지속 가능한 성장: 새로운 기능 추가 시, 기능이 잘 정상 작동하는지 확인하면서 개발할 수 있음

 

저품질 코드

  • 강결합: 컴포넌트 간 분리 어려움
  • 구조적 문제: 설계가 불량한 경우(복잡한 시나리오, 의존성 많음 등)
  • ⚠️ 테스트하기 어려움

 

장점

항목 설명
지속성
초기는 힘들지만, 장기적으로 유지보수성과 생산성 향상
확장성
프로젝트 규모가 커져도 안정적인 확장이 가능
설계 개선
테스트 가능한 구조는 곧 좋은 설계 구조를 의미 (낮은 결합도, 높은 응집도 등)
이해 용이성
구조가 명확하므로, 이해와 파악이 쉬움

 

고려 사항

항목 설명
테스트 변경 반영
기능 변경 시, 관련 테스트 코드도 함께 수정해야 함
경고 처리 중요성
테스트에서 자주 발생하는 경고를 무시하지 말고, 분석하여 해결해야 함
책임과 비용 인식
코드베이스가 커질수록 테스트의 중요성과 비용이 커짐 (버그 가능성과 유지비용 증가 때문)
→ 테스트 코드도 간결하게 유지해야 함