Code

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

noahkim_ 2025. 1. 6. 21:53

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

 

1. 단위 테스트 현황

비율

  • 제품 코드와 테스트 코드의 비율은 1:1~3 정도

 

새로운 기능과 버그 발생

  • 새로운 기능을 구현할 때 새로운 버그가 지속적으로 나타남

 

테스트 코드 작성의 어려움

  • 적절하지 않은 설계의 코드를 테스트할 경우, 테스트 코드를 작성하는데 어려움이 있음
  • 잘못된 테스트 코드는 오히려 상황을 더 악화시킬 수 있음

 

2. 단위 테스트 목표

소프트웨어 엔트로피

  • 프로젝트에서는 시간이 지날수록 코드베이스의 복잡성과 불확실성이 증가하는 경향이 있음

 

엔트로피 증가
  • 코드 변경시 엔트로피는 증가함
  • 기존 기능에 영향을 주어 예기치 못한 문제가 발생
  • 테스트가 없는 프로젝트는 시작은 유리하지만 이내 진척이 없을 정도로 느려짐
  • 결국 코드베이스를 신뢰할 수 없음

 

목표

지속 가능한 성장
  • 기능 추가 및 유지보수가 진행되는 동안 기존 기능이 여전히 올바르게 작동하는지 보장

 

안전망 역할
  • 예상치 못한 버그로부터 보호하는 보험과 같은 역할

 

코드의 품질 보장
  • 단위 테스트를 하기 어렵다면, 코드의 구조와 설계에 문제가 있음을 의미함
  • 비교적 높은 정확도로 코드 품질을 파악할 수 있음
  • 저품질
    • 강결합
      • 서로 분리가 되지 않는 코드
      • 테스트가 어려움
    • 약결합
      • 분리되어 있어도 구조가 복잡하거나 설계가 나빠 테스트가 어려울 수 있음

 

장점

지속성
  • 초반에 노력이 많이 듬
  • 그러나 장기적으로 보면 비용을 메울 수 있음

 

확장성
  • 테스트 없이 큰 규모의 프로젝트로 확장할 수 없음

 

부수 효과

설계 개선
  • 테스트하기 쉬운 코드는 더 나은 설계 구조를 가지고 있다 말할 수 있음

 

이해 용이성
  • 코드베이스를 이해하기 쉬움

 

권장 사항

코드 변경 시 테스트 변경하기
  • 기능을 수정하거나 추가할 때, 관련 테스트도 업데이트 해야 함

 

잘못된 경고 처리하기
  • 테스트에서 자주 발생하는 경고를 무시하지 말고, 원인을 분석해 처리하기

 

책임
  • 코드베이스가 변경될수록 버그에 노출되는 표면적과 유지비가 늘어남
  • 테스트 코드도 마찬가지이므로, 최소의 코드로 문제를 해결하는 것이 좋음