1.3 테스트가 개발을 안내하게 하라
켄트 벡(Kent Beck)은 구현을 작성하기 전에 테스트를 작성하라는 아이디어를 처음 소개했다3. 그는 자신의 아이디어를 ‘테스트 우선’이라고 불렀지만, 이제는 좀 더 착 달라붙는 용어인 테스트 주도 개발(Test Driven Development, TDD)이라는 말로 널리 알려져 있다. 테스트부터 작성하라는 말은 처음에는 직관에 위배되는 것처럼 들린다. 아직 기능을 작성하지도 않았는데 테스트를 작성하는 게 무슨 소용이란 말인가? 분명 일단 기능을 작성하고 나면 무언가 테스트하고 싶은 내용이 생길 것이다. 하지만 TDD 방식은 아주 효과적이다. 이 책에서는 함수형 프로그래밍이 TDD에 가져올 수 있는 특성에 초점을 맞출 것이다.
TDD로 코드를 작성하는 것은 실패하는 테스트로 시작한 다음에 그 테스트를 통과할 수 있게 코드를 작성하고, 마지막으로 새로운 테스트로 전환할 수 있을 만큼 만족할 만한 수준이 되도록 코드를 정리한다는 뜻이다. 실패한 테스트는 빨간색으로 표시되고 통과한 테스트는 녹색으로 표시되기 때문에 이 과정을 빨강-초록-리팩터링 사이클이라고 부른다.