Blog

Read

TDD

May 4, 2021

The Goal of Unit Testing

단위테스트의 목표는 무엇인가? 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 테스트는 안전망 역할을 하며, 대부분 회귀(버그) 에 대한 보험을 제공하는 도구라 할 수 있다. 새로운 기능을 도입하거나 리팩터링 한 후에도 기존 기능이 잘 작동하는지 확인하는데 도움이 된다.

모든 테스트를 작성할 필요는 없다. 고품질 테스트 에만 집중해야 하며 테스트의 가치와 유지 비용을 모두 고려해야 한다.

  • 베이스 코드를 리팩토링 할때 테스트도 리팩토링 하라
  • 각 코드 변경시 테스트를 실행하라
  • 테스트가 잘못된 경고를 발생시킬 경우 처리하라
  • 베이스 코드가 어떻게 동작하는지 이해하려고 할 때는 테스트 코드를 읽는데 시간을 투자하라

테스트 결과 자체를 기능명세로 볼 수 있도록 구체적으로 기술한다.


Example of successful test suite

  • 개발 주기에 통합되어 있다.
    • 코드가 변경될 때마다 아무리 작은 것이라도 실행해야 한다
    • 실제로 사용하는 테스트에만 가치가 있다.
  • 코드베이스에서 가장 중요한 부분만을 대상으로 한다
    • 비즈니스 로직(도메인 모델)에 집중하자
    • 중요도가 낮은 부분
      • 인프라 코드
      • 데이터베이스나 서드파티 시스템과 같은 외부 서비스 및 종속성
      • 모든 것을 하나로 묶는 코드
  • 최소한의 유지비로 최대의 가치를 끌어낸다
    • 테스트를 분석하는데 사용할 수 있는 기준틀이 필요하고 이는 코드 설계와 관련이 깊다
    • 가치있는 테스트를 식별해야 한다.

코드의 어떤 부분을 테스트해야 하는가에 대한 고찰이 필요하다.