테스트 주도 개발은 소프트웨어 개발 방법론 중 하나로, 코드를 작성하기 전에 먼저 테스트 코드를 작성하는 방식이다.
TDD 기본 원칙은 코드 작성이 테스트를 통과하는 데 필요한 만큼만 이루어지고, 이를 통해서 코드의 품질과 유지보수성을 높인 다는 점이다.
개발 단계를 보면, 실제 코드를 작성하기 전에 해당 기능이 어떻게 동작해야 하는지에 대한 테스트 코드를 작성한다. 이때 실제 코드는 없기 때문에 당연히 실패하고 이 단계를 Red 단계라고 부른다.
그리고 테스트를 통과하기 위해 최소한의 코드를 작성하고, 테스트가 성공적으로 통과하도록 만든다. 이과정을 Green 단계라고 부른다.
마지막으로 테스트를 통과한 코드를 더 깔끔하고 효율적으로 개선하며 리팩토링을 하면서 모든 테스트가 여전히 통과하는지 확인한다. 이 과정을 리팩토링 단계라고 부른다.
이 TDD의 주요 장점은 코드가 테스트 가능하고 모듈화된 상태로 유지되도록 개발할 수 있는 점이다. 또한 테스트 코드를 미리 작성하면 오류를 빠르게 발견할 수 있고, 이후 코드 변경 시에도 안정성을 유지할 수 있다. 그리고 테스트가 쉽다는 건 하나하나가 굉장히 잘 분리가 되어있다고 볼 수 있다.
단점은 초기 개발 단계에서 테스트 코드 작성에 시간이 많이 소요될 수 있고, 프로젝트가 커질수록 테스트 코드의 양이 늘어나서 관리가 어려울 수 있다. 그리고 애자일 방법론을 볼 때 그때 그때 요구 사항이 변할 수 있고, 비즈니스 요구 사항은 항상 매 스프린트마다 변할 수 있는데, 이때 테스트가 많이 있다면, 그 테스트들은 의미가 없어질 수 있다.
참고 자료
[TDD] 단위 테스트와 TDD(테스트 주도 개발) 프로그래밍 방법 소개 - (1/5)
TDD 방법론 (테스트 주도 개발) - 알기 쉽게 정리