나는 TDD 왜하는가.
TDD 왜하는가?
일을 더욱 빨리 끝낼 수 있다. TDD는 여러가지 장점을 가지고 있지만, 그중에서도 이것이 가장 직관적이고 매력적인 장점이다.
불필요한 것을 안할 수 있다.
구현을 먼저 했을때 발생할 수 있는 불필요한 것 (문제를 받은 순간이 가장 모르는 순간이다.)
- 문제를 잘 모르는 상태에서의 과도한 설계
- 실제로는 발생하지 않는 시나리오(할일 목록)
- 필요할 것 같아서 작성한 구현코드
- 잘 동작하는지는 봐야해서 하는 수동 테스트
- 길어진 구현에서 버그가 발생했을 때의 도미노 수정
등등 이런 것들을 피할 수 있다.
실패를 빠르게 반복 할 수 있다.
먼저 구현하지 않고 테스트코드(특히 단위테스트)를 작성하면, 최소한의 코드를 작성하며 문제 분해에 대한 실패를 반복할 수 있다. 그 과정에서 학습이 발생하며, 결과적으로 올바른 문제 분해에 빠르게 도달할 수 있다.
내가 TDD하는 방법
어떤 문제가 주어지고, TDD로 코드를 작성한다고 하자.
- 가장 먼저. 첫 번째 테스트 코드를 작성해야한다.(한개만)
- 그러기 위해 문제 해결을 위한 시나리오(할일 목록)가 필요하다.
- 목록이 없다면, 러프하게 스케치하듯 목록을 작성한다. 첫번째 테스트 코드만 작성하면 되니 몇 개만 있으면 된다.
- 전부 작성한다고 시간을 쓰면 낭비가 발생한다.(작업 초기엔 문제에 대해 가장 모른다.)
- 테스트 코드를 작성하려면 구현할 코드의 인터페이스가 있어야한다. 입력데이터-인터페이스-출력데이터를 정하게 된다.
- 구체적인 입출력데이터를 정하면서, 문제에 대한 구체적인 풀이가 시작되고 학습이 시작된다.
- 풀이/학습이 진행되면서 시나리오도 구체적으로 정리된다.
- 구체적인 입출력데이터를 정하면서, 문제에 대한 구체적인 풀이가 시작되고 학습이 시작된다.
- 구현한다.
- 동작하게 하고, 테스트-리팩토링 싸이클 반복.
- 다시 첫번째 테스트 코드를 작성한다. 문제가 해결될 때까지 반복.