테스트 주도 개발(TDD, Test Driven Development)
는 개발 과정을 여러 세부 단위로 나누어 테스트하고, 수정하고, 완성하는 과정을 반복하는 익스트림 프로그래밍 방식 중 하나 입니다. 개발자는 테스트를 위한 코드를 작성하고, 그 테스트를 통과하기 위한 코드를 작성하며 개발해나가게 됩니다. 이 과정을 프로젝트가 완성될 때까지 반복해서 개발을 진행하게 됩니다.
기존의 개발 방식이 설계 -> 실제 코드 작성 -> 테스트
의 순서로 이루어졌었다면, 테스트 주도 개발
방식은 설계 -> 테스트 -> 실제 코드 작성
의 순서로 진행됩니다.
테스트 주도 개발
의 가장 큰 특징은 단위 테스트
로 프로젝트를 일정 단위로 나누고 나뉜 단위에 대해 테스트 코드를 작성하는 작업을 실시합니다. 그리고 작성된 테스트를 통과하는 코드를 작성하고, 작성된 코드를 리팩토링 과정을 거쳐 실제 코드로 만들어나가게 됩니다.
테스트 주도 개발
의 장점은 다음과 같습니다.
테스트 주도 개발
의 단점은 다음과 같습니다.
단점을 조금 자세히 이야기 하자면, 아무래도 기존 방식에서 제일 나중에 실시하는 테스트 과정을 먼저 실시하기 때문에 기존 방식에 익숙해진 개발자들이 적용하기 어렵다는 점이 있습니다.
또한 소단위 테스트와 리팩토링으로 인해 전체적인 개발 시간이 늘어나게 됩니다. 따라서 개발 기간 엄수가 중요하다면 다른 방식을 사용하거나, 예상 시간을 잘 지켜야합니다.
테스트 주도 개발
은 다음과 같은 절차를 프로그램 완성시까지 계속해서 반복합니다.
개발자가 테스트 주도 개발과정에서 각 과정들을 효율적으로 할 수 있도록 다양한 도구들이 나와있습니다. 물론 도구 없이도 TDD를 구현할 수 있으나, 도구를 사용한다면 효율 좋은 TDD를 할 수 있습니다.
자바의 JUnit, C++의 CppUnit, 자바스크립트의 Jasmine, Mocha, QUnit 등이 있습니다.