총평 : 오류 개선 속도 빨라진다.
객체지향적인 코드 개발
테스트 코드를 먼저 짜기 때문에 명확하게 기능 및 구조를 설계.
테스트 위해서라도 재사용 가능한 코드를 짤 수밖에 없게 됨.
설계 수정 시간의 단축
테스트 코드를 먼저 짜기 때문에 설계의 구조적 문제점을 바로 찾을 수 있다. 이로 인해 설계된 것을 수정하는데 시간이 단축될 수 있다.
-> 결함을 일찍 찾을수록 고치는 비용이 적게 든다.
디버깅 시간의 단축
유닛테스트 기반의 테스트 코드 작성 -> 모듈별로 문제점 쉽게 파악(영역별로 분할해서 찾을 수 있다고 함)
유지 보수의 용이성
TDD로 인해 테스트 요소들이 사용자 관점으로 정의되고 진행되기 떄문에 입출력 흐름이 명확해지고 소수 수정 시 구조도 쉽게 파악이 가능하다. -> 재사용 테스트도 쉽다.
테스트 문서의 대체 가능
테스팅을 자동화시킬 수 있어 보다 정확한 테스트 근거를 산출할 수 있다.(통합테스트보다 더 정확한 테스트가 진행되어서?)
총평 : 생산성 저하!!
처음부터 두 개의 코드를 짜야 하고 중간 중간 테스트해가며 고쳐야 함.
테스트 코드 자체가 작성하기 쉽지 않다.(팀원 전체가 익숙해져야 한다.)
10~30% 할 일이 늘어난다.
이제까지 하던 방식을 아예 새로 바꿔야 한다.
규칙에 얽매여서 에자일이 되기 힘들 수도 있다.
모든 상황에서 테스트코드를 작성해야 하는지도 생각해봐야 한다.(배보다 배꼽이 클수도 있다.)