TDD : Test-Driven Development
켄트 백이 익스트림 프로그래밍의 일부로 제안한 소프트웨어 개발 방법론.
테스트를 먼저 작성하고 이를 기준으로 코드를 개발하는 방식.
- 테스트 작성 : 구현하고자 하는 기능에 대한 테스트 코드를 먼저 작성.
- 코드 구현 : 테스트를 통과할 수 있도록 최소한의 코드를 작성하여 기능 구현.
- 리팩토링 : 테스트를 통과한 후, 코드 품질을 개선하기 위해 리팩토링 진행.
장점
- 소프트웨어 품질 보장 : TDD를 통해 요구사항에 따른 명확한 테스트가 작성되므로 개발된 코드가 요구사항을 충족하는지 확인 가능
- 문제 예방 : 초기 단계부터 테스트를 함으로써, 잠재적인 문제를 먼저 발견하고 해결하며 개발.
- 리팩토링 안전성 확보 : 코드 변경 시 기존 테스트가 작동하기 때문에 기능 안정성을 유지하면서 리팩토링이 가능함.
- 애자일 개발과 시너지 : TDD는 애자일과 잘 맞아 빠른 피드백과 지속적인 개발 사이클을 지원함.
단점
- 초기 개발 속도 감소 : 테스트를 먼저 작성해야 해서 초기 개발 단계에서 시간이 더 오래 걸린다.
- 테스트 품질 의존성 : 테스트를 잘못 작성한 경우, 코드 개발에도 영향을 미치기 때문에, 신중하고 숙련된 테스트 작성이 필요하다.
- 복잡한 테스트 관리 : 테스트 코드가 많이 생기기 때문에 관리를 잘 해야한다. 테스트 코드의 유지보수성을 신경써야 하며, 변경된 요구사항에 맞게 업데이트해야 한다.
- 소규모 프로젝트에서 비효율적 : 프로젝트 규모가 작은 경우, 테스트 작성이 실제 개발보다 더 오래 걸릴 수 있다.
- 비즈니스 로직 중심 : 기술적 구현과 비즈니스 로직에 초점을 맞추지만, 사용자 경험이나 인터페이스와 관련된 요소를 다루는 데는 제한적이다.
TDD 방법론 활용 예시
웹 애플리케이션 개발 시,
유저 인증, DB 연동, API 통신 등 주요 기능의 테스트를 먼저 작성한다.
이를 기반으로 구현을 진행한다.
이렇게 기능별로 구현을 하면 테스트가 이미 구성되어 있고, 유지보수나 확장 작업이 수월하다.