<테스트 대상 코드>를 변경하면 <테스트코드>를 작성하기 좋을 것 같은데 그대로는 <테스트코드> 만들기가 애매하고 곤란한 경우가 종종 있다. 이럴 때는 어쩌면 좋을까? <테스트코드>를 작성하기 좋게 <테스트 대상 코드>를 변경하는 것이 맞다. 이 것은 주객이 전도되는 것 아닌가? 이게 맞나? 하는 생각이 들 수도 있다. <테스트 대상 코드>가 주(主)이고 <테스트코드>가 객(客)이라고 생각하기 때문인데 그런 생각을 바꿔야한다.
<테스트 대상 코드>와 <테스트코드>는 마치 “복식부기”와도 같다. 구멍가게는 장부가 없거나 간편장부로도 비즈니스가 가능하겠지만 규모가 있는 비즈니스라면 제대로 작성된 “복식부기”가 필요하다. 마찬가지로 규모가 아주 작은 것이 아니라면 소프트웨어도 반드시 <테스트코드>가 있어야한다. <테스트 대상 코드>와 <테스트코드>는 “복식부기”의 <대변>과 <차변>처럼 불가분의 관계다. 서로 아다리가 맞게 작성되어가며 코드의 품질을 높힌다.
Testability가 높은 코드를 작성하면 자연스럽게 유지보수성도 우수해진다. 명확한 책임(Single Responsibility)을 가지는 작은 함수나 클래스들이 Testability가 높다.
<테스트코드>를 먼저 작성하고 그 테스트를 통과하도록 코드를 작성하는 개발방법을 TDD 라고 부른다. TDD는 Testability를 전제하고 개발을 시작한다.