5장 테스트 주도 개발 주기의 유지
-
각 기능을 인수 테스트로 시작하라.
- 인수 테스트를 작성하는 것으로 신기능을 작업 하는 데 착수
- 그 기능이 완성 되기 까지 진행 상황을 반영한다. -> 프로젝트를 나아가게 함.
-
회귀를 포착하는 테스트와 진행 상황을 추적하는 테스트를 분리하라.
- 인수 테스트 통과 주기 : 중첩된 프로젝트 피드백 고리를 구동하는 엔진
- 회귀를 포착하는 테스트 : 기존 코드의 망가짐을 확인하는 것 (?)
- 진행 상황을 측정하는 테스트 : 새로운 인수테스트 (?)
-
테스트를 가장 간단한 성공 케이스로 시작하라.
- 시스템에 가치를 더하고 아이디어의 유효성에 관해 충분한 피드백을 주는 테스트 케이스를 작성하라.
-
읽고 싶어할 테스트를 작성하라.
- 가능한한 명확하게 표현해야 한다.
- 잘 읽히는 테스트 -> 테스트를 그 다음으로 지원하는 기반 구조를 만든다.
-
테스트가 실패하는 것을 지켜보라.
- 오류 메시지를 검사해야 하는 이유
- 현재 작업중인 코드에 대한 가정을 확인하기 위해
- 테스트와 실패 메시지는 코드가 의도( 무엇을 해야 하는지 )를 강조하는 표현이기 떄문이다. -> 신뢰성있고 유지하기 쉬운 시스템을 개발하는 데 필수
-
입력에서 출력 순서로 개발하라.
- 기능 개발을 시작할 때 가장 먼저 시스템이 새로운 행위를 일으키게 하는 이벤트를 고려함.
- 외부 이벤트를 받는 객체 -> 중간 계층 -> 중심 도메인
-
메서드가 아닌 행위를 단위 테스트하라.
- 행위 = 테스트의 목적을 알려주기 때문
- 테스트 -> 무엇을 테스트 하는가, 왜 테스트 하는가가 중요
- 테스트 이름 짓기
- 객체의 책임이 무엇인가
- 객체의 여러 메서드가 어떻게 함께 동작하는지
-
테스트에 귀를 귀울이라.
- 테스트하기 어려운 기능 발견 -> 스스로에게 묻기
- 기능을 어떻게 테스트할 것인가
- 왜 테스트하기 어려운가
- 테스트하기 어렵다. -> 설계 개선이 필요하다.
TDD의 테스트 부분에서 얻을 수 있는 최고의 혜택은 코드를 망가뜨리지 않고도 변경할 수 있다는 자신감이다. 진행을 막는 것은 바로 두려움이다.