제가 개발하는 시스템에 TDD(테스트 주도 개발)와 CI를 꼭 적용해 보고 싶습니다. TDD로 이뤄줄 낼 수 있는 객체지향성과 테스트 자동화가 시스템 개발에 큰 도움이 될 수 있다고 생각하기 때문입니다. 이번에 XUnit Patterns를 구매하여 공부할겸 TDD책을 다시 보며 기억을 상기시키고 있습니다.
TDD라는 것이 하나의 방법론인 만큼 그것에 대한 지식만큼 Practice도 중요한 것 같습니다. TDD를 적용해 보고 싶은데 뭔가 잘 안된다면 이런 조언들이 도움이 될 것 같아서 정리해 봅니다.
- 격리된 테스트 (TDD 재출간판 페이지 206)
- 테스트간에는 서로 영향이 없어야 한다. 테스트를 전체 애플리케이션으로 하는 것보다 좀 더 작은 단위의 스케일로 한다.
- 테스트를 격리하기 위한 노력은 결과적으로 응집도는 높고 결합도는 낮은 디자인으로 이끈다.
- 테스트 목록(p.208)
- 시작하기 전에 작성해야 할 테스트 목록을 적어보자. 너무 많아질 수 있으니 몇 시간 내로 해결할 것으로 제한하자.
- 너무 많은 것을 한번에 통과시키려고 하지 말자.
- 리팩토링이 필요한 것들도 적어놓자.
- 단언 우선(p.211)
- 테스트를 작성할 때 단언(assert)을 제일 먼저 쓰고 시작하자.
- 단언 우선은 ‘올바른 결과는 무엇인가?’, ‘어떤 식으로 검사할 것인가?’에 집중하게 해준다.
- 테스트 데이터(p.213)
- 읽기 쉽고 따라가기 좋은 데이터를 선택하자.
- 실제 데이터를 구할 수 있다면 사용하자.
- 한 단계 테스트(p.217)
- 다음 발 내닫기. 작성된 테스트 목록에서 다음 대상을 고를 때는 새로운 무언가를 가르쳐 줄 수 있으며, 구현할 수 있다는 확신이 드는 것으로 한다.
- 시작 테스트(p.219)
- 당신에게 뭔가 가르쳐줄 수 있으면서도 빠르게 구현할 수 있는 테스트를 선택하라.
- 싸구려 책상, 좋은 의자(p.228)
- 에어론 의자(Aeron chair)를 구해라.
여기까지 책에서 제공된 TDD에 관한 일반적인 조언이었습니다. 실제적인 내용들은 직접 해보며 그때그때 올리겠습니다.