Search
Duplicate

TDD 수련법

테스트 주도 개발(Test-Driven Development)를 잘 하기 위한 수련 방법에 대해 해당 책의 저자 김창준 님은 무술의 수행 단계를 나누는 수파리에 빗대어 테스트 주도 개발 수련 방식을 구분한다.

참고: 수파리(守破離)란?

무술의 수행 단계를 가리키는 말로 각 단계는 다음과 같이 구분된다. : 규칙을 충실치 지키는 것 : 그것을 깨트려 자기만의 방식을 찾는 것 : 규칙이나 형에서 자유로워지는 것

수(守)

처음에 수행해볼 방식으로 다음과 같다.
간단하고 쉬운 문제들로 TDD를 시도한다.
테스트 통과 시점(초록불) 에서 다음 통과 시점까지의 주기를 짧게 가지도록 한다.
a = b + 3 x c 라는 식을 입력하려 할 때 a= 까지 입력했을땐 빨간 막대 시점이라 할 수 있다.
테스트 통과시점 간의 최대 시간을 정해놓고, 이 시간을 초과하면 직전 상태로 롤백한 뒤 다시 시작하는게 좋다.
진짜로 만들기 전까지만 가짜로 구현하기를 적극적으로 사용하자. 테스트 통과 시점간의 거리를 좁히는 가장 간단하고 빠른 방법이다.
같은 문제를 여러번 풀어 보자.
처음에는 리팩토링 툴같은 자동화 도구를 사용하지 말자. 초보가 연습할 수 있는 순서나 과정을 생략하게 될 수 있다.

파(破)

테스트를 작성함에 있어 여유를 가지도록 하자. 정신없이 조급하게 프로그래밍을 할 필요 없다.
메타인식(meta-cognition)을 통해 내가 하는 것을 관조하고 기록하여 분석하자. 학습과 개선의 필수요소이다.
프로토콜 분석(주: 사고과정에서 생각한 것을 입으로 말하고 녹음하여 분석하는 것) 혹은 같은 문제를 반복해서 풀어보는것도 유용하다.
TDD로 하지 않았던 부분들에 대해서도 테스트를 수행해보자.
자신이 편한 속도를 찾을때까지 속도를 조절하는 훈련을 해보자.
작은 애플리케이션을 TDD로 완성해보자. 대략 일주일 정도의 비용이 드는게 좋다.
여러가지 언어(이왕이면 다른 패러다임의 언어)로 TDD를 해보자.

리(離)

같은 문제를 TDD를 적용하지 않고 접근해보자. 이전에 하던 방식과 비교해 어떤 점이 낫고, 낫지 않은지 비교해보자.
TDD와 적절한 초기 설계를 섞어보자.
TDD와 함께 다른 방법들도 사용해보자.
의도에 의한 프로그래밍(XP Installed)
단계적 개선(다익스트라다 논문 참고)
도메인 주도 설계(Domain Driven Design)