그 어떤 도구와 마찬가지로 테스트 주도 개발은 프로그래머의 모든 문제를 해결하지는 못한다. 단위 테스트와 테스트 주도 개발이 도와주지 못하는 문제들을 언급하고 테스트 주도 개발을 사용하기 어려운 환경에 대해서 강의를 통해 알아보자.
은탄환은 없다
도구의 법칙
- 테스트 주도 개발은 유용하고 매력적인 도구이다. 하지만 테스트 주도 개발 역시 남용을 주의해야 한다.
불안정한 목표
- 모든 코드의 목표가 안정적이지는 않다.
- 탐색적으로 목표를 찾아내야 한다면 테스트 코드 작성 비용 부담이 크다.
환경 제어
- 하위 시스템이 협력하는 다른 하위 시스템, 의존성 중 일부는 출력의 예측과 제어가 어렵다.
-> 단위 테스트는 결정적일수록 유용하다.
- 의존성 중 일부는 동작이 매우 느리다.
-> 단위 테스트는 빠를수록 유용하다.
- 의존성의 단점을 보완할 대역을 도입하면 가정이 발생한다.
-> 가정으로 인한 안정감 감소한다.
낮은 코드 적응력
- 코드 적응력이 낮으면 단위 테스트하기 매우 어렵다.
- 이미 코드 적응력이 낮은 코드 기반에 테스트 주도 개발을 적용하기 어렵다.
- 코드 기반의 적응력을 높이는 것도 어렵다.
- 설계 변경의 어려움이 있다.
- 변경된 설계 검증 필요하다.
회고
무조건 TDD 좋다, 최고다 써야 한다. 이게 아니라 어떤 상황에서는 TDD를 사용하면 오히려 안좋구나를 알 수 있었다. TDD를 사용하기 적합한 상황인지를 분별하는 것이 좋을 것 같다.