TestDrivenDevelopment design

원문 : http://www.martinfowler.com/bliki/TestDrivenDevelopment.html

테스트 주고 개발(TDD)는 테스트를 통해서 개발을 이끌어 내는 설계 기술이다. 본질적으로 다음 세 개의 단순한 단계를 반복하는 것이다.

•    다음으로 추가하고 싶은 기능을 위한 테스트를 작성한다.
•    테스트가 통과 하도록 기능 코드를 작성하라.
•    전체적으로 구조화 되도록 새로운 코드와 기존의 코드를 재구성한다.

시스템의 기능을 구현할 때 한번에 하나씩 테스트 하면서 지속적으로 이 세 단계를 반복한다. XPE2가 선 테스트 프로그래밍(Test First Programming)이라고 부르는 대로 Test를 먼저 작성하는 것은 두 가지 주요 장점이 있다. 그 중 가장 명백한 것으로 테스트를 통과하는 기능 코드만을 작성할 수 있기 때문에 자체 테스트 코드를 얻을 수 있다. 두 번째로 테스트를 먼저 생각하게 되면 코드의 인터페이스를 먼저 생각하게 된다. 인터페이스 그리고 클래스를 어떻게 사용할 것인지에 초점을 맞추는 것은 구현으로부터 인터페이스를 분리해 내는데 도움이 된다.

TDD의 효율성을 올리는 가장 흔한 방법으로 세 번째 단계를 생략하는 것이라고 들었다. 깔끔하게 유지하기 위해 코드를 재구성 하는 것은 TDD 프로세스의 핵심이다. 그렇게 하지 않으면 난잡한 코드 조각 덩어리들의 모임을 보게 될 것이다. (그래도 최소한 테스트는 가지고 있을 것이기 때문에 대부분의 설계 실패에 대한 고통보다는 덜 할 것이다.)