올바른 답을 얻기 위한 모든 요소를 포함 시킬 것.
가능한 빨리 테스트를 통과 시키는 코드를 작성한다. 이를 위해서 중복코드, 상수 반환 등을 해도 좋다.
2에서 발생한 코드 중복을 제거하고, 상수나 stub으로 구현되어 있는 부분을 실제 구현으로 바꾼다.
'작동하는' '깔끔한' 코드를 위해 TDD에서는 '작동하는'을 우선적으로 해결하고 ADD에서는 '깔끔한'을 먼저 해결한다.
프로덕트 관점에서 볼 때 조금 덜 깔끔하더라도 일단은 요구사항대로 작동하는게 더 중요하지 않을까라는 생각이 들긴 하는데 아직은 정확한 장단점을 모르겠다.
TDD로 구현할 땐 테스트 코드의 줄 수와 모델 코드의 줄 수가 거의 비슷한 상태로 끝난다. TDD가 경제적이기 위해서는 매일 만들어 내는 코드의 줄 수가 두 배가 되거나 동일한 기능을 구현하되 절반의 줄 수로 해내야 할 것이다. TDD가 자신의 방법에 비해 어떻게 다른지 직접 측정해 보아야 할 것이다. 이때 디버깅, 통합 작업, 다른 사람에게 설명하는 데 걸리는 시간 등의 요소를 반드시 포함해야 한다.
TDD를 한다는 것은 테스트 코드 작성 시간, 리팩토링 시간 등을 생각했을 때 전체적으로 공수가 더 들어갈 수 밖에 없는 것 같다. 다만 TDD로 짜여진 코드의 신뢰도?가 그것을 상쇄한다는 것일까? 문득 생각보다 러닝커브가 크겠다라는 생각이 든다.