매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스.
테스트가 코드 작성을 주도하는 개발방식.
새로운 기능에 대한 테스트케이스 작성 -> 테스트를 통과하는 코드 작성 -> 상황에 맞게 리팩토링
- 기능 추가 전 테스트를 먼저 작성함으로서 개발자가 요구사항에 집중할 수 있다.
- 새로운 기능이 제대로 작동함과 동시에 기존 기능들이 잘 작동하는지까지 확인할 수 있다.
- 코드량이 방대해졌을 때 리팩토링의 중심을 잡아준다. (= 리팩토링의 속도, 코드 퀄리티 향상)
cf) 퀄리티가 향상된 코드란?
객체지향적/확장용이/재설계 시간 단축/디버깅 시간 단축
- 테스트 코드 작성으로 인해 코드량이 늘어나므로 코드 퀄리티보다는 생산성이 중요할 경우 적합하지 않다.
- 테스트 코드 작성을 위한 학습이 필요하다. (어떠한 부분을 어떻게 테스트 할지, 어떤 테스트 프레임워크를 사용할지 등)
- 생각지도 못한 예외 케이스가 존재할 수 있다. 테스트 코드 작성의 어려움이 생긴다면 실제 코드보다 테스트 코드의 비중이 더 커질수 있다.
모든 코드에 대해서 테스트 코드를 작성할 수 없으며 작성할 필요도 없다.
테스트 코드를 작성한다고 해서 버그가 발생하지 않는 것이 아니다.
TDD는 100% coverage와 무결성을 보장하는 것이 아니다.
https://github.com/JaeYeopHan/Interview_Question_for_Beginner