테스트 주도 개발(Test-Driven Development, TDD)은 소프트웨어 개발 방법론 중의 하나로, 간단하게 말하면 코드를 작성하기 전에 테스트를 먼저 작성하는 개발 방법이다.
새로운 기능이나 변경 사항을 도입하려면 먼저 그 기능을 테스트하는 테스트 케이스를 작성한다. 이때 아직 해당 기능은 구현되지 않았기 때문에 테스트는 실패한다.
테스트가 실패하는 것을 확인한 후에, 이제 해당 테스트를 통과할 수 있도록 코드를 작성한다. 기능을 최소한으로 구현하고 테스트를 통과하도록 만드는 것이 핵심이다.
테스트를 통과한 후에는 작성한 코드를 리팩토링하여 코드의 가독성, 구조, 성능 등을 향상시킨다. 이때 리팩토링은 기능의 변경 없이 코드의 품질을 높이는 작업을 의미 한다.
- 신뢰성 확보: 테스트 케이스가 코드의 기능을 정확하게 정의하고 있기 때문에 테스트를 통과하는 코드는 예상대로 동작하는 것으로 간주할 수 있다.
- 설계의 향상: 테스트 코드 작성 시 코드의 사용성, 모듈화, 의존성 등에 대한 설계 고민이 발생하게 되어 좀 더 견고하고 유연한 구조의 코드를 얻을 수 있다.
- 지속적인 통합과 배포: 테스트 코드를 자동화된 테스트 스위트로 구성하면 지속적 통합과 배포 시에 코드 변경에 대한 검증이 자동으로 이루어져 안정적인 소프트웨어 개발이 가능하다.
- 문서화 역할: 테스트 코드는 코드의 사용법과 예상 동작을 제공하는 추가적인 문서 역할을 한다.