테스트 주도 개발은 테스트 우선 개발과 유사하지만 작은 차이가 있는데 이 차이는 프로그래머에게 여러 기회를 제공한다고 한다. 오늘은 이 강의를 통해 테스트 주도 개발을 통해 명세를 준수하고 일정 수준의 품질을 유지하며 코드로 만들어 가는 과정을 경험할 예정이다.
테스트 주도 개발은 3가지 단계가 반복적으로 사이클이 돌아간다.
주의점 - 의도 노출과 중복 제거는 서로 충돌할 수 있어서 같은 우선순위에 둔다고 한다
흔히 이슈 발생을 생각해보면 TDD와 비슷하다는 걸 깨달을 수 있다.
버그 발생(제보) -> 버그 재현 -> 코드 수정 -> 버그 재현 -> 작업완료
위의 그래프를 보면 TDD 를 적용하는게 모두 좋은건 아니다. t1 시점이 오기전까지 추가적인 기능 없이 운영이 된다면 TDD 미사용이 더 비용이 낮고 시간도 아낀다.t1 시점이 와도 TDD 가 좋은건 아니다. 이전 격차만큼 t2 까지는 TDD 미사용이 더 비용이 저렴하다.
지속적인 기능 확장이 되면 TDD 미사용이 엄청나게 개발 속도가 느려지게 된다. 원인은 이전 기능에 대한 테스트가 전혀 없기 때문에 기능을 모두 재검증 해야 한다. 그에 반해 TDD는 테스트 자동화로 손쉽게 피드백을 받아 확인할 수 있다. 개발자라면 지속적인 기능 확장이 있는지 파악하고 TDD를 적용할지 판단해야한다.
하지만 TDD를 더 잘할 수 있게 되거나, TDD와 관련된 도구가 발달하여 TDD를 사용할 때 드는 비용 자체를 줄 일 수 있다면, 즉 t1, t2 시점이 더 앞으로 땡겨진다면 TDD 도입을 적극적으로 생각해보면 된다.
뭔가 오늘은 드디어 테스트 주도 개발에 대한 핵심에 돌입한 느낌이 들었다. 그리고 아직은 테스트 우선 개발과 테스트 주도 개발의 차이를 잘 모르겠다.