'TDD'에 해당되는 글 1건
- 2008.08.06 Test Driven Development - TDD
테스트 주도적 개발. 테스트가 개발을 주도해 나가는 방식. 과거의 TestFirstProgramming에 대한 공식적 대체어. TDD로 줄여 쓰기도 한다.
야후그룹을 통해 메일링 리스트가 유지되고 있다.
Thanks To : 김창준,류상민,신제용, http://howproject.net 멤버 모든 분들
세미나 등에 자유롭게 이용하셔도 좋습니다. 그대신 출처에 http://xper.org 를 명시해주시면 좋겠습니다. --강석천
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의 과정을 단계별로 요약하면 다음과 같은 과정이 된다.
- 테스트를 작성한다.
- 작성한 테스트를 통과할 수 있도록 가장 빠른 방법으로 코드를 작성한다. 이 과정에 중복된 코드를 만들어도 상관 없다.
- 테스트를 수행한다.
- 테스트를 통과하면 작성한 코드에서 중복을 제거한다. 아니면 2번으로 돌아간다.
- 테스트를 수행한다.
- 테스트를 통과하면 완성. 다음 테스트를 1번부터 시작한다. 실패하면 4로 돌아가서 디버깅한다.
c2.com에서는 이렇게 요약하고 있다.
- add a test, get it to fail, and write code to pass the test (DoSimpleThings^, CodeUnitTestFirst^)
- remove duplication (OnceAndOnlyOnce, DontRepeatYourself^, ThreeStrikesAndYouAutomate^)
TDD 배우기
TDD에 익숙해지는 것은 상당한 노력과 시간을 요한다. TestDrivenDevelopment시작하기, TDD수련법을 참고하라. TestDrivenDevelopment토론에서는 TDD에 관한 여러 가지 논의와 사람들이 TDD에 대해 자주 궁금해 하는 것에 대한 답변(FAQ)을 볼 수 있다.테스트의 자동화
TDD는 테스트를 자동화하는 것이 필수조건이다. 테스트가 자동화되어 있지 않으면 테스트를 실행하는 것이 귀찮기 때문에 테스트를 자주 실행하지 않게 되며 TDD의 사이클을 진행하는데 장애가 된다. 그래서 자동으로 테스트를 수행할 수 있는 환경을 갖추는 것이 중요하다. 다음은 자동화에 사용하는 도구들이다.- Simple assert functionality in your language
- JUnit, CppUnit, NUnit 등의 유닛 테스트를 위한 xUnit 프레임웍
- FIT, FitNesse - 비즈니스 룰 테스트 자동화 프레임웍
- Continuous Integration Server
Continuous_integration 에 매우 많은 관련 소프트웨어가 나열되어있습니다.
TDD의 적용 분야
TDD 예제
- Query Engine http://www.differentpla.net/~roger/devel/xp/test_first/query_engine/
- Roman to Numeral(or Numeral to Roman)
- TDD로 Digital Circuit Simulation 프로그램 작성. Discreet Event Simulation
관련자료
TDD의 바이블로는 KentBeck이 집필한 TestDrivenDevelopmentByExample(번역서는 테스트주도개발)이 있고, 국내 매체에는 월간마소TDD기사로 소개된 바 있다. 현재![](http://xper.org/ns/img/moin-www.gif)
관련도서
- TestDrivenDevelopmentByExample : 바이블
- TestDrivenDevelopmentaPracticalGuide by DaveAstels^
- UnitTestingInJavaHowTestsDriveTheCode by Johannes Link
- 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버전으로 보시면 됩니다.
관련기사
- Phlip의 TDD in a Nut Shell http://flea.sourceforge.net/TDD_in_a_nut_shell.pdf
- http://wiki.tdd.or.kr/wiki.cgi?act=merge&bookname=TestDrivenDevelopment&opt=print 우연히 찾은 글인데 이렇게 링크 시켜도 될지 잘 모르겠네요.
- 월간마소TDD기사
- 자바, 파이썬 등으로 TDD로 간단한 프로그램 작성. 마지막 회에서는 자바로 비교적 어려운 상황에서 TDD로 헤쳐나가는 방법을 소개.
- Ruby에서의 TDD, 신상호, 마이크로소프트웨어 2005년 6월호
- TDD, AcceptanceTest, UserStory, AgileLanguage^ 등이 잘 결합된 좋은 기사입니다. --김창준
- Customer TestDrivenDevelopment
Toegeun-Driven Development
- 그냥 재미있어서 적어봅니다. --김호성
관련 프레젠테이션
강석천이 TDD 세미나를 진행할 때 이용하던 프레젠테이션 자료입니다. TDD 에 대한 가장 기초적인 부분(테스트의 종류, TDD 진행) 등에 대하여 다룹니다. 혼자의 힘으로 만든 것은 아니고 여러 많은 분들의 도움을 받았습니다.Thanks To : 김창준,류상민,신제용, http://howproject.net 멤버 모든 분들
세미나 등에 자유롭게 이용하셔도 좋습니다. 그대신 출처에 http://xper.org 를 명시해주시면 좋겠습니다. --강석천
- 좋은 자료를 공개해주셔서 감사합니다. 잘 활용하겠습니다. --박계홍
- 테스트주도개발 서적
- Embedded Agile : A Case Study In Numbers, by Nancy Van Schooenderwoert (Grain Monitor System)
- Assessing Test-Driven Development at IBM (Java POS 프로젝트)
- 제 XP 경험 (Daum OMP)
[출처] TDD(Test Driven Development)|작성자 노현석