코드를 작성하는 일은 생각보다 복잡하다. 고객이 원하는 기능을 만들어야 하고, 팀원들과 함께 일해야 하며, 버그 없이 잘 동작하는지 확인도 해야하고, 정해진 시간 안에 완성해야한다.
이렇게 많은 것들을 한번에 신경 쓰다 보니 실수가 잦아질 수밖에 없었고, 이를 해결하기 위해 개발 방법론이 등장하게 되었다고 한다.
개발 방법론을 사용하면 여러 가지 장점이 있다. 프로젝트가 언제 끝날지, 어떤 결과물이 나올지 미리 예측할 수 있고, 체계적으로 일하다 보니 실수도 줄고 더 좋은 프로그램을 만들 수 있다. 또한 팀원들이 같은 방식으로 일하기 때문에 협력이 더 쉬워지고, 문제가 커지기 전에 미리 발견하고 해결할 수 있다는 장점도 있다.
TDD는 1990년대 후반 Kent Beck이 Extreme Programming의 일부로 개발한 기법이다.
전통적인 개발 방식이 “구현 → 테스트” 순서였다면, TDD는 “테스트 → 구현 → 리팩토링”이라는 반복적인 주기로 개발을 진행한다.

TDD의 핵심 사이클은 Red-Green-Refactor로 요약되지만, “리팩토링”의 저자인 마틴 파울러는 먼저 테스트 케이스의 목록을 작성하는 것을 강조한다. 이 단계에서는 다음 내용을 수행한다.
마틴 파울러는 테스트 우선 작성(Test-First-Programming)이 제공하는 두 가지 이점을 강조한다.
모든 기능 코드는 반드시 테스트를 통과해야만 작성될 수 있기에 자연스럽게 높은 테스트 커버리지가 보장된다.
테스트를 먼저 작성함으로써 코드의 사용자 관점에서 먼저 생각하게 되며, 인터페이스와 구현의 분리를 자연스럽게 달성할 수 있다.
마틴 파울러는 TDD를 실패하는 가장 흔한 원인으로 리팩토링 단계를 소홀히 하는 것을 꼽았다.
리팩토링 없이는 코드가 점차 지저분해지고, 테스트는 있지만 코드의 품질은 저하될 수 있다.
TDD는 단순해 보이는 프로세스 속에 깊이 있는 통찰과 원칙이 담겨 있는 방법론이다. 초기에는 개발 속도가 더딜 수 있으나, 장기적으로는 높은 품질의 소프트웨어를 만들고 유지보수하는데 큰 도움이 된다.