Code/Test

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

noahkim_ 2025. 1. 6. 21:53

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

 

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

  • 새로운 기능을 구현할 때 새로운 버그가 나타날 가능성이 발생함 (지속적으로 테스트 코드를 작성해야 함)
  • 코드의 설계가 적절하지 못하면, 테스트 코드 작성이 어려워지고, 잘못된 테스트 코드를 작성할 가능성이 높아짐
  • 잘못된 테스트 코드는 신뢰도를 떨어뜨리므로, 오히려 상황을 더 악화시킬 수 있음

 

2. 소프트웨어 엔트로피

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

 

흐름

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

 

3. 단위 테스트

목표

항목 설명
지속 가능한 성장
기능 추가 및 유지보수 시, 기존 기능이 여전히 정상 작동하는지 보장함
안전망 역할
테스트 코드는 예상치 못한 버그로부터 보호하는 보험 역할을 함
코드 품질 보장 (간접적)
단위 테스트가 어렵다면, 코드의 구조나 설계에 문제가 있을 가능성을 의미함

 

저품질 코드 특징
항목 설명
강결합
서로 분리되지 않음
-> 테스트가 매우 어려움
약결합
코드가 분리되어 있어도 구조가 복잡하거나 설계가 불량한 경우 (복잡한 시나리오, 의존 흐름이 많음 등)
-> 테스트가 여전히 어려움

 

장점

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

 

고려 사항

항목 설명
테스트 변경 반영하기
기능 수정/추가 시, 관련 테스트 코드도 함께 업데이트해야 함
경고 처리 중요성
테스트에서 자주 발생하는 경고를 무시하지 말고, 원인을 분석해 해결해야 함
책임과 비용 인식
코드베이스가 커질수록 버그 가능성과 유지비용 증가
테스트 코드도 최소한으로 간결하게 유지해야 함