TDD란 Test Driven Development라는 약자로 테스트 주도 개발을 의미한다.
테스트는 서비스의 품질 확인 및 버그를 찾는 데 사용할 수 있다. 내가 작성한 코드가 예상하는 대로 동작하는지 검증하고 확인하는 것이다.
테스트 주도 개발은 무엇일까?
테스트 주도 개발이란 테스트를 통해서 개발이 이끌어지는 개발 방법론이다.
예를 들어, 아래와 같이 진행한다.
1. 테스트를 먼저 작성한다.(간단하게 어떤 결과가 예측되어야 하는지 기술하는 단계)
2. 작성한 테스트의 기능만큼의 개발을 진행한다.
3. 코드를 리팩토링 한다.
여기서 테스트를 작성하지 않은 부분은 구현하지 않는 것이다.
테스트 주도 개발은 위와 같은 사이클을 반복한다.
1. 먼저 테스트를 작성하고 개발이 구현되어있지 않기 때문에 테스트 코드를 돌리면 실패를 하게 된다.(🔴)
2. 작성한 테스트 코드가 정상적으로 수행이 되도록 실제 코드를 작업한다.(🟢)
3. 작성한 코드를 표준에 맞도록 리팩토링 단계이다.(🟡)
프로젝트가 점점 커질 경우 어떤 기능을 추가할 때 해당 기능이 기존 코드들에 어떤 영향을 미칠지 모른다는 점이 가장 큰 문제이다. 하지만 테스트 주도 개발을 하는 경우 테스트 코드를 먼저 작성하기 때문에 무엇을 해야 하는지 명확하게 정의함으로써 불필요한 설계를 피할 수 있고 완성도 높은 설계로 이어진다. 따라서 예외상황이 생길 확률이 낮아지고 추가적인 요구 사항이 있어도 손쉽게 요구사항을 반영할 수 있게 된다.
TDD cycle을 반복하는 경우 처음부터 두 개의 코드를 짜야하고, 중간중간 테스트를 하면서 고쳐나가기 때문에 생산성이 저하되는 단점이 있다. 하지만 결국 시간이 지나고 프로젝트가 커질수록 개발 비용을 줄이고 높은 퀄리티의 제품을 생산할 수 있게 된다.