(이 글을 읽는 분들이 TDD를 이미 알고 있다고 가정하고 쓰겠습니다)
여러 가지 정의가 있지만 제가 제일 좋아하는 정의는 이거예요:
TDD is an awareness of the gap between decision and feedback during programming, and techniques to control that gap. --Test Driven Development by Example, p xxi
대충 번역해보면:
TDD란 프로그래밍 의사결정과 피드백 사이의 간극을 의식하고 이를 제어하는 기술이다.
풀어보면:
- 프로그래밍을 하는 과정에서 일어나는 의사결정들(변수 이름을 이렇게 지어야지, 메서드를 짧게 만들어야 겠다, 커맨드 패턴을 적용해야겠다 등등)
- 그러한 의사결정을 내린 후에 돌아오는 피드백(컴파일 에러, 버그, 깔끔한 코드, 금전적 손실 등등)
- 그리고 이 둘 사이의 간극
이 세 가지를 잘 의식하면서 적극적으로 제어하려는 노력.
이게 테스트 주도 개발이라는 얘기입니다. 테스트 케이스를 만들었나 안 만들었나, 테스트를 먼저 했나 나중에 했나 하는 것은 실은 (달이 아니라) 손가락인거죠.
지인과 대화하다가 갑자기 생각나서 적어봤습니다. --;