테스트 주도 개발(TDD : Test-Driven Development)은 반복 테스트를 이용한 소프트웨어 개발 방법론으로, 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식이다.
애자일 방법론 중 하나인 '익스트림 프로그래밍'의 Teset-First 개념에 기반을 둔, 개발 주기가 짧은 개발 프로세스로 단순한 설계를 중시한다.
테스트 주도 개발의 개발 주기
테스트 주도 개발은 위와 같이 3단계로 개발 주기를 표현한다.
실패 테스트 작성 : 실패하는 경우의 테스트 코드를 먼저 작성한다.
테스트 통과하는 코드 작성 : 테스트 코드를 성공시키기 위한 실제 코드를 작성
리팩토링 : 중복 코드를 제거하거나 일반화하는 리팩토링 수행
테스트 주도 개발의 효과
왜 TDD는 갑자기 뜨고 있을까? 이에 여러 이점 중 몇 가지를 적어보았다.
테스트 코드 기반으로 개발이 진행되기 때문에 문제가 발생했을 때 어디서 잘못됐는지 확인하기 쉽다.
테스트 코드를 통해 지속적으로 애플리케이션 코드의 불안정성에 대한 피드백을 받기 때문에 리팩토링 횟수가 줄고 생산성이 높아진다.
작성되어 있는 테스트 코드를 기반으로 코드를 작성하기 때문에 재설계가 필요할 경우 테스트 코드를 조정하는 것으로 재설계 시간을 단축할 수 있다.
테스트 코드를 통해 의도한 기능을 미리 설계하고 코드를 작성하기 때문에 목적에 맞는 코드를 작성하는 데 비교적 용이하다.
이처럼 여러 장점도 가지고 있다. 하지만 아직 현업에서 이를 적용하는 직업은 많지 않다. 기존 개발에 익숙하기도 하고, 자칫 오히려 생산성이 저하될 수 있고 쉽게 도전할만한 것은 아니기 때문일 수도 있다. 나는 무조건 추천할 정도의 방법은 아닌듯 하다. 좋은 것도 맞지만, 시기, 상황에 따라 다를 수 있다고 본다. 처음부터 개발을 해야하고 빠르게 시장에 내놓아야하는 스타트업의 경우에는 안 맞을 것 같고, 대기업이나 조금 여유가 있는 상태라면 충분히 시도해볼만한 방법이라고 생각한다.