'TDD'에 해당되는 글 1건

  1. 2008.08.06 Test Driven Development - TDD

Test Driven Development - TDD

|
테스트 주도적 개발. 테스트가 개발을 주도해 나가는 방식. 과거의 TestFirstProgramming에 대한 공식적 대체어. TDD로 줄여 쓰기도 한다.

  1. TestDrivenDevelopment란 무엇인가?
  2. TDD 배우기
  3. 테스트의 자동화
  4. TDD의 적용 분야
  5. TDD 예제
  6. 관련자료
    1. 관련도서
    2. 관련기사
    3. 관련 프레젠테이션

TestDrivenDevelopment란 무엇인가?

작성해야하는 프로그램에 대한 테스트를 먼저 작성하고 이 테스트를 통과할 수 있도록 실제 프로그램의 코드를 작성한다. 여기서 만드는 테스트도 그 자체로 하나의 프로그램이며 프로그램의 요구사항을 반영할 수 있게 만든다. 예를 들어 두 수를 더하는 add 함수를 만들어야 한다면 add 함수부터 만드는 것이 아니라 다음과 같은 testAdd 함수를 먼저 만든다.
int testAdd() { 
  assert 5 + 4 == add(5, 4) 
  assert -4 + 9 == add(-4, 9) 
} 
그리고 나서 이 테스트를 통과하도록 add 함수를 만드는 것이다. 만약 testAdd를 실행했는데 add 함수에 문제가 있으면 assert에서 에러가 발생할 것이다. 테스트를 통과하면 add 함수는 5 + 4와 -4 + 9를 정확하게 계산해낸다는 것을 보증할 수 있다. 이처럼 테스트에 요구사항이 제대로 동작함을 입증할 수 있는 코드를 작성하고 이 테스트를 만족하는 실제 프로그램을 써나가는 것이 TestDrivenDevelopment이다.

TDD의 과정을 단계별로 요약하면 다음과 같은 과정이 된다.

  1. 테스트를 작성한다.
  2. 작성한 테스트를 통과할 수 있도록 가장 빠른 방법으로 코드를 작성한다. 이 과정에 중복된 코드를 만들어도 상관 없다.
  3. 테스트를 수행한다.
  4. 테스트를 통과하면 작성한 코드에서 중복을 제거한다. 아니면 2번으로 돌아간다.
  5. 테스트를 수행한다.
  6. 테스트를 통과하면 완성. 다음 테스트를 1번부터 시작한다. 실패하면 4로 돌아가서 디버깅한다.

그러면 왜 TestDrivenDevelopment를 하는가? 먼저 테스트를 먼저 작성하고 실제 코드를 작성하기 때문에 테스트 되지 않는 코드가 없어진다. 즉, 프로그램의 모든 코드가 테스트되기 때문에 버그의 발생 가능성이 줄어든다. 또 테스트 자체가 요구사항을 분명하게 드러나게 해주는 효과가 있고 테스트에 맞게 코딩하다보면 자연스럽게 프로그램의 디자인이 SimpleDesign이 되는 경향이 있다. 그리고 테스트가 잘 작성되어 있으면 프로그램에 여러 가지 변경 작업을 할 때 그 변경으로 인해 다른 부분에서 예상치 못한 문제가 발생하는 것을 쉽게 알아차릴 수 있으므로 변경 작업을 두려움 없이 쉽게 할 수 있게 되어 개발 과정의 유연성이 높아진다. 그래서 최종적으로 생산성 향상에 기여한다. TddProductivity에서 TDD의 생산성에 관한 논의를 볼 수 있다.

c2.com에서는 이렇게 요약하고 있다.

TDD 배우기

TDD에 익숙해지는 것은 상당한 노력과 시간을 요한다.
TestDrivenDevelopment시작하기, TDD수련법을 참고하라. TestDrivenDevelopment토론에서는 TDD에 관한 여러 가지 논의와 사람들이 TDD에 대해 자주 궁금해 하는 것에 대한 답변(FAQ)을 볼 수 있다.

테스트의 자동화

TDD는 테스트를 자동화하는 것이 필수조건이다. 테스트가 자동화되어 있지 않으면 테스트를 실행하는 것이 귀찮기 때문에 테스트를 자주 실행하지 않게 되며 TDD의 사이클을 진행하는데 장애가 된다. 그래서 자동으로 테스트를 수행할 수 있는 환경을 갖추는 것이 중요하다. 다음은 자동화에 사용하는 도구들이다.

TDD의 적용 분야

TDD 예제

관련자료

TDD의 바이블로는
KentBeck이 집필한 TestDrivenDevelopmentByExample(번역서는 테스트주도개발)이 있고, 국내 매체에는 월간마소TDD기사로 소개된 바 있다. 현재 야후그룹을 통해 메일링 리스트가 유지되고 있다.

관련도서

이 외에도 TDD는 아니지만 XP와 관련있다고 주장하는 코딩 관련 서적으로
  • Java Tools for Extreme Programming: Mastering Open Source Tools Including Ant, JUnit, and Cactus 047120708X
  • Extreme Programming with Ant: Building and Deploying Java Applications with JSP, EJB, XSLT, XDoclet?, and JUnit 0672325624
  • Java Extreme Programming Cookbook 0596003870
  • Junit in Action : Junit을 포함한 J2EE(JSP,Servlet,EJB)에서의 TDD에 대해서 상세하게 예제를 들어 설명하고 있습니다. J2EE 개발에 TDD를 적용할때 많은 도움이 될것 같습니다. ISBN:1930110995,E,noimg (A) --김진영?
  • Junit Recipes
      이제까지 레인스버거의 글들을 볼 때 사뭇 기대하지 않을 수 없네요. --김창준
  • Pragmatic Unit Testing In Java With JUnit : TDD를 콕찝은 책은 아니지만 유팃테스팅에 관련해서 입문서로서의 역할에 충실하다. TDDBE에서는 나오지 않는 테스트케이스가 어디에 있어야 할까?, 서블릿 테스팅 등의 활용적인 면도 강점이다. 쉬운영어, 얇은 두께를 통한 쉬운접근만으로도 일단 만족.
  • Pragmatic Unit Testing In C# with NUnit : 위 자바 책의 MS .NET버전으로 보시면 됩니다.

관련기사

관련 프레젠테이션

강석천이 TDD 세미나를 진행할 때 이용하던 프레젠테이션 자료입니다. TDD 에 대한 가장 기초적인 부분(테스트의 종류, TDD 진행) 등에 대하여 다룹니다. 혼자의 힘으로 만든 것은 아니고 여러 많은 분들의 도움을 받았습니다.
Thanks To : 김창준,류상민,신제용, http://howproject.net 멤버 모든 분들
세미나 등에 자유롭게 이용하셔도 좋습니다. 그대신 출처에 http://xper.org 를 명시해주시면 좋겠습니다. --강석천
    좋은 자료를 공개해주셔서 감사합니다. 잘 활용하겠습니다. --박계홍
참고자료 :

'SE' 카테고리의 다른 글

UML강좌  (0) 2008.08.06
UML[4/4]  (0) 2008.07.25
UML[3/4]  (0) 2008.07.25
UML[2/4]  (0) 2008.07.25
UML[1/4]  (0) 2008.07.25
And
prev | 1 | next