[TIL] 테스트 주도 개발의 패턴

<테스트 주도 개발>(켄트 벡)을 읽으며 배운 것들을 정리해본다.

  • 격리된 테스트: 각각의 테스트는 다른 테스트와 완전히 독립적이어야 한다. 이는 결과적으로 시스템이 응집도는 높고 결합도는 낮은 객체의 모음으로 구성되도록 한다.
  • 테스트 목록: 테스트를 시작하기 전에 테스트를 짜야할 테스트 목록을 먼저 짠다.
  • 테스트 우선: 코드를 짜기 전에 테스트를 먼저 작성한다.
  • Assertion 우선: 테스트를 짤 때는 Assertion부터 시작한다. 어떤 결과가 나올지를 먼저 정의하고, 거기서부터 역산해서 위로 올라가며 짠다. 즉 assert문을 먼저 짜고, assert문에서부터 순차적으로 올라가면서 구현한다.
  • 명백한 데이터: 후에 읽을 사람도 생각한다. 입력으로 사용된 숫자와 예상되는 결과 사이의 관계 등을 읽어낼 수 있어야 한다.
  • 한 단계 테스트: 자신에게 새로운 무엇인가를 가르쳐줄 수 있는 것이면서도 충분히 구현할 수 있다는 확신이 드는 것부터 시작한다.
  • 회귀 테스트(Regression Test): 시스템 장애가 발생하면 제일 먼저 그 장애로 인해 실패하는 테스트, 그 테스트가 통과하면 장애가 수정되었다고 할 수 있는 테스트를 작성하는 것부터 시작한다. 시스템 장애를 손쉽게 격리시킬 수 없다면 리팩토링 해야 한다.