TDD란?
Test-Driven-Development 의 약자로 "테스트 주도 개발" 을 뜻한다.
에자일 개발 방법론중 하나인 eXtream Programming(XP)의 주요 실천방법중 하나이며 반복 테스트를 이용한 소프트웨어 개발 방법론이다.
보통 코드를 우선 작성하고 테스트를 해보곤 하는데 TDD의 경우 테스트코드
를 우선적으로 작성하고 이를 통과하기 위한 코드를 작성한다고 볼 수 있다.
아래 그림은 TDD의 계념을 잘 나타내고 있다.
위의 순서와 같이 1 -> 2 -> 3의 순서로 진행후 완료되면 다시 1로 돌아가 테스트코드를 작성하고 진행하게 된다.
우선 알아둬야할 계념은 기능 테스트(Funtional Test)와 단위 테스트(Unit Test)다.
이처럼 기능 테스트는 단위테스트 보다 좀더 상위의 계념으로 볼 수 있다.
이제 TDD 개발과정으로 넘어가보자.
아래 그림은 TDD개발의 기본 프로세스이다.
위의 절차대로 테스트 작성 후 실행을 위한 최소코드를 작성해 통과할때 까지 반복하는 과정이 필요한것을 볼수 있다.
여기서 위의 프로세스를 단위테스트로 보았을때 해당 상위 기능테스트를 만족하기 위해 이런 프로세스가 여러번 반복될 것이다.
아래 그림은 기능테스트와 단위테스트의 관계를 잘 보여준다.
여기서 두 테스트의 차이점은 기능테스트의 리팩토링은 application 단에서 이뤄지는것이고 단위테스트(내부 프로세스)의 리팩토링은 실행되는 코드(함수, 클래스)영역에서 실행되는것을 볼수있다.
이처럼 TDD의 전체적인 흐름은 기능테스트의 테스트 코드 작성(1), 단위테스트의 테스트 코드 작성(2), 단위 테스트 통과 및 리팩토링(3), 기능테스트 통과 및 리팩토링(4) 의 순서로 진행된다고 말할수 있다.
참고자료
https://nesoy.github.io/articles/2017-01/TDD
https://www.youtube.com/watch?v=dGrrbspxfqk&list=PL7Jt0R1Ai2ynwIP9MwI0-zmlBh_YtoiiG&index=10