TDD 의 목적
The journey is the reward - sreve jobs
TDD 방법론은 테스트 가능한 코드는 좋은 코드이다
라는 것을 전제로 하고 있습니다.
그렇기 때문에 Testibility 를 확보할 수 있도록 구현한다면 결국 좋은 설계를 얻게 될 것입니다.
그렇게 얻은 좋은 설계와 구현체를 가지고 실제로 테스트를 하든지 말든지 알 바 아니고, 어쨌든 테스트 가능한 구조를 얻었다면 TDD가 의도한 목적을 달성했다 라고 볼 수 있다고 생각합니다.
좋은설계 설명하기
좋은 설계를 말하기 위해 관심도를 분리하고, 추상화 하고 의존성을 낮추고 등등 언급하고 말해야 할 것들이 많습니다. 그렇다면 그것이 잘 되어 있는지 어떻게 측정하죠?
TDD에서는 그것을 testibility로 판가름 합니다.
작성된 설계와 코드가 testible 합니까? 그렇다면 일단 나쁜 구조는 아니겠군요! 라고 말이죠.
좋은설계 유도하기
그럼 testibility를 유지하면서 어떻게 코드를 만들어갈 것인가? test를 먼저 두고 개발을 시작하면 되죠!
네. 그것이 TDD 인 것입니다.
테스트할 결심
TDD하기로 했다는 것은 좋은 설계로 코드를 만들어 보겠다 혹은 그렇게 코드를 변경하기로 하겠다는 것을 의미합니다.
그러니까 테스트 하는데 불편한 것이 있다면 당연히 뜯어고치고 리팩토링 해서 테스트하기 편한 코드를 만들어 내야 합니다.
그 과정에서 얻게되는 testible한 구조와 설계가 바로 TDD의 목적이니까요!