Code/Test

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

noahkim_ 2025. 1. 6. 21:53

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

 

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

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

 

2. 소프트웨어 엔트로피

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

 

흐름

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

 

3. 단위 테스트

목표

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

 

저품질 코드 특징

항목 설명
강결합 컴포넌트 간 분리가 어려움
→ 테스트 매우 어려움
약결합이지만 구조적 문제
코드가 분리되어 있어도 설계가 불량한 경우 (복잡한 시나리오, 의존성 많음 등)
→ 테스트가 여전히 어려움

 

장점

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

 

테스트 작성 시, 고려 사항

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