Test-Driven Development의 약자
소프트웨어를 동작시키기 위한 로직을 작성하기 전에, 테스트 코드를 구현하는 것을 프로세스화 한 개발 방법.
테스트 코드를 먼저 작성하지 않으면 의식의 흐름대로 코드를 작성하기 때문에, 문제 발생 시 확인해야 할 코드의 범위가 넓어집니다. 반대로 테스트 코드를 먼저 작성하면 예외적인 사항을 미리 정리할 수 있기 때문에, 엣지 케이스에서 버그가 생기는 것을 사전에 방지할 수 있습니다.
또한, 잘 작성된 테스트 코드는 동료 개발자에게 코드의 의도를 설명하는 코드 명세서의 역할을 할 수 있습니다.
TDD를 사용하면 개발의 초점이 기능 구현에서 소프트웨어의 사용으로 이동합니다. 테스트 우선 접근 방식을 통해 개발자에게 사용자가 가질 수 있는 사용성 문제를 보다 신중하게 고려할 수 있게 합니다.
모듈별로 자동화 된 테스트 코드가 없다면 버그가 발생했을 때 모든 코드를 확인하면서 어디서 발생한 에러인지 찾아봐야 합니다. 또 버그가 언제부터 발생했는지 추적하기 어렵습니다.
TDD의 경우 자동화 된 단위 테스트를 전제로 하기 때문에 어디에서 발생하고 있는 버그인지 쉽게 찾아낼 수 있다는 장점이 있습니다.
테스트 코드를 작성하는 과정에서 기능 구현을 위한 설계 요소, 객체의 동작 수행과 객체간의 데이터 전달을 고민하게 되어 구조적으로 더 나은 코드를 작성할 수 있습니다.

TDD의 수많은 장점에도 불구하고 현실적으로 도입하는데에 가장 큰 장벽으로 초기 비용 증대와 생산성 저하를 꼽을 수 있습니다. 장기적으로는 TDD를 사용하지 않았을 때와 비교하여 시간 대비 비용이 더 커지지 않고 일정하게 유지되지만 단기적으로 TDD를 사용했을 때의 초기 비용은 TDD를 사용하지 않았을 때보다 크기 때문입니다.
기능 하나를 추가할 때마다, 테스트 코드의 수정 및 추가가 필요하기 때문에 개발자는 프로젝트의 일정과 자원을 고려해 TDD의 사용 여부를 결정할 수 있습니다.
TDD는 공동의 목표를 효율적으로 달성하기 위한 도구임을 잊지 말아야 합니다.
Related Post
리액트 리팩토링 테스트부터 최적화까지(단위 테스트, 통합 테스트, E2E)
Reference
https://marsner.com/blog/why-test-driven-development-tdd/
https://jay-flow.medium.com/tdd란-무엇이며-왜-필요한가-18cb5979629c
https://lgphone.tistory.com/156
https://media.fastcampus.co.kr/knowledge/dev/tdd/