테스트 주도 개발(Test-Driven Development)를 잘 하기 위한 수련 방법에 대해 해당 책의 저자 김창준 님은 무술의 수행 단계를 나누는 수파리에 빗대어 테스트 주도 개발 수련 방식을 구분한다.
참고: 수파리(守破離)란?
무술의 수행 단계를 가리키는 말로 각 단계는 다음과 같이 구분된다.
수: 규칙을 충실치 지키는 것
파: 그것을 깨트려 자기만의 방식을 찾는 것
리: 규칙이나 형에서 자유로워지는 것
수(守)
처음에 수행해볼 방식으로 다음과 같다.
•
간단하고 쉬운 문제들로 TDD를 시도한다.
•
테스트 통과 시점(초록불) 에서 다음 통과 시점까지의 주기를 짧게 가지도록 한다.
◦
a = b + 3 x c 라는 식을 입력하려 할 때 a= 까지 입력했을땐 빨간 막대 시점이라 할 수 있다.
•
테스트 통과시점 간의 최대 시간을 정해놓고, 이 시간을 초과하면 직전 상태로 롤백한 뒤 다시 시작하는게 좋다.
•
진짜로 만들기 전까지만 가짜로 구현하기를 적극적으로 사용하자. 테스트 통과 시점간의 거리를 좁히는 가장 간단하고 빠른 방법이다.
•
같은 문제를 여러번 풀어 보자.
•
처음에는 리팩토링 툴같은 자동화 도구를 사용하지 말자. 초보가 연습할 수 있는 순서나 과정을 생략하게 될 수 있다.
파(破)
•
테스트를 작성함에 있어 여유를 가지도록 하자. 정신없이 조급하게 프로그래밍을 할 필요 없다.
•
메타인식(meta-cognition)을 통해 내가 하는 것을 관조하고 기록하여 분석하자. 학습과 개선의 필수요소이다.
◦
프로토콜 분석(주: 사고과정에서 생각한 것을 입으로 말하고 녹음하여 분석하는 것) 혹은 같은 문제를 반복해서 풀어보는것도 유용하다.
•
TDD로 하지 않았던 부분들에 대해서도 테스트를 수행해보자.
•
자신이 편한 속도를 찾을때까지 속도를 조절하는 훈련을 해보자.
•
작은 애플리케이션을 TDD로 완성해보자. 대략 일주일 정도의 비용이 드는게 좋다.
•
여러가지 언어(이왕이면 다른 패러다임의 언어)로 TDD를 해보자.
리(離)
•
같은 문제를 TDD를 적용하지 않고 접근해보자. 이전에 하던 방식과 비교해 어떤 점이 낫고, 낫지 않은지 비교해보자.
•
TDD와 적절한 초기 설계를 섞어보자.
•
TDD와 함께 다른 방법들도 사용해보자.
◦
의도에 의한 프로그래밍(XP Installed)
◦
단계적 개선(다익스트라다 논문 참고)
◦
도메인 주도 설계(Domain Driven Design)