http://wikidocs.net/mybook/read/page?pageid=3019 책 요약
http://xper.org/LineReaderTdd/ LineReader TDD 동영상
http://www.xper.org/wiki/xp/TestDrivenDevelopment?action=show&redirect=TDD
http://www.agiledata.org/essays/tdd.html#Summary셋째날
테스트 주도 개발(TDD)
- "살리고" 철학(살리고 철학은 TDD의 철학적 근간으로, 작동하는 소프트웨어에서 작동하는 소프트웨어로 상태전이하는 것이 가장 효율적이라는 철학입니다)
- 살리고 철학 실습
- 테스팅의 필요성
- Computer Aided Testing
- 자동화된 단위 테스팅
- 자동화된 단위 테스팅 실습
- TDD 기초
- TDD 기초 실습
- TDD 응용 (Mocking & Legacy code)
- TDD 응용 실습
- TDD anti-patterns
Exploratory Testing(탐험적 테스팅)
- Exploratory Testing 실습(코드 레벨)
[질문] Agile의 TDD |
글쓴이 : 최피디 날짜 : 08-08-16 13:49 조회 : 444 |
본인은 온라인게임 서버를 개발하는 과정에서 unit test를 활용하여 테스팅의 효용성을 체험적으로 알게 된 후 Testing 분야에 관심을 갖고 공부를 시작하고 있는 초심자입니다.
최근에 Ron Patton의 Software Testing 2nd ed을 읽으면서, 제가 해왔던 테스트 방식 TDD(Test Driven Development)에 대한 우려가 느껴져서 제가 느낀 점이 과연 그러한지 검증해보고 싶어 문의드리오니 부디 너그럽게 초보자를 지도해주시기 부탁드립니다.
저는 TDD를 책을 통해서 배우게 되었습니다. 켄트 백의 테스트 주도 개발이 그 책인데요. 이 책을 보신 분들은 잘 아시겠지만, 이 책은 소프트웨어을 만들어가는데 지극히 경험적인 접근을 하고 있습니다. 다시말하자면, 설계나 계획에 의한 테스트케이스 도출이 아니라, 현재 상황의 가장 중요한 개발 이슈들이 무엇인가를 목록으로 만들어서 하나씩 삭제시켜가는 방식이었습니다.
테스팅에 대해서 너무 설계과정 없이 무작정, 감으로만 테스트케이스를 만들어 가게 되는데요. 이렇게 유닛테스트 케이스를 만들어가는 것에 문제점은 없는지, 전통적인 테스팅 그룹에서는 TDD에 대해서 어떤 식으로 평가하는 지 궁금합니다.
감사드립니다. |
|
안녕하세요. 박정훈이라고 합니다. 오며가며 한 번 쯤 P-Camp 같은데서 뵈었을 것 같네요.
STEN의 이현주 강사님께서 소개해 주신 사이트입니다. James Bach(http://satisfice.com), 제임스님의 방법이라면 '전통적' 접근 방법과 최근의 Agile 접근 방법을 함께 생각해 보고 회고해 볼 수 있다고 생각됩니다. 참고하시기 바랍니다. :)
(게으르다보니 최근에 알게된 데다가 내용이 심오해서 모두 숙지하지는 못했습니다. 능력 부족으로 자세한 내용 설명이 불가하네요.)
하나 제 의견을 말씀드리자면, 전 세계 어느 Test Group도 별로 그닥 '전통적'이지는 않습니다. 늘 '개선' 해야 하기 때문입니다. (저도 게임 업계에서 tester로 있었지만,) 게임 업계분들이 Test와 Agile을 다르게 보려고 하시는 것 같은데, 전 'organization's improvement' 측면에서 같은 방향으로 가고 있다고 생각합니다. ^^
즐거운 하루 보내세요. |
|
|
박정훈2님
동명이인(同名異人)이 있으신가 보군요. 정훈님께서 소개해주신 사이트는 막 들어가 봤습니다. satisfice는 1인기업 회사인 거 같아 놀랍네요. '한 명의 테스트 전문가로 만들어진 회사라니...' 제임스의 여러 방법 중에 어떤 것이 Agile접근 방법과 비교될 수 있을 지 살펴봐야겠습니다.
Organization's improvement(조직의 성장?) 란 용어가 테스팅에서 쓰는 의미의 것인지 궁금합니다. 구글링을 해도 딱 찾아지지 않아서 여쭙습니다.
이렇게 생각의 단초(端初)들을 제시해주셔서 참 감사드립니다.
오프라인에서 한 번 뵐 수 있다면 더 좋겠네요. ^^ |
|
|
James bach는 exploratory testing의 창시자입니다.
9월이었나..10월이는지 지금 잠시 헷갈리는데.. 국내로 어렵게 초빙하여 교육을 진행할 것입니다. 정부지원을 받으려고 시도중인 것으로 알고 있고, 조만간 공지를 통해 소개해 드릴 것입니다. ^^
Organization's improvement는 테스팅 업계에서 공식적으로 쓰이는 용어는 아니고, 제 생각엔 아마도 조직의 개발 프로세스 개선 정도로 언급하신 듯 싶습니다. |
|
|
임준섭님,
고맙습니다. exploratory testing이란 것인 피드백을 강조하는 귀납적 방식의 테스팅이로군요. 이점이 Agile과 연계되는 부분이 있는 것 같다는 심증(心證)만 있는 상태입니다. 혹시 테스트과 agile 이 둘을 함께 다루고 있는 자료는 없을까요?
감사합니다. |
|
|
임 팀장님께서 잘 설명해 주셨군요. 역시 최고십니다. :)
최 피디님, 제 개인적인 경험입니다만... 게임 업계에 도입된 애자일 방식이 못 마땅합니다. 언젠가 직접 뵐 기회가 있으면 조금은 더 자세히 설명 드리겠습니다. :) |
|
|
박정훈님,
저는 게임 업계에 도입된 애자일 방식이 어떤 것인지 아직 많이 이해가 필요합니다. 그런 기회가 있다면 개인적으로 영광이겠습니다. :) |
|
|
좋은 글 감사드립니다. 좋은 글 소개해 주셔서 보너스로 아래는 Kelly Water님의 블로그를 번역한 글을 올려드립니다. 제가 번역했습니다. ^^ 기술서/기술 관련 번역이 점점 재밋어 지네요.
-------------------------------------------------------------------------- * 원문 주소: http://www.agile-software-development.com/2007/03/why-agile-testers-should-be-in-at-start.html
저의 경험상, 어떤 이들은 애자일 개발방법론을 적용할 때 개발팀을 제외한 다른 주요 직무(예를 들어, 사업 고객이나 테스터들)를 애자일 팀에서 빼두거나 꿔다논 보릿자루처럼 두고 개발팀안에서만 애자일 원리들(agile principles)을 수행하곤 합니다.
제가 블로그 초기에 작성한 것 중에, 애자일로 개발을 진행하는 중에는 많은 이유로 인해 능동적인 사용자의 참여가 필수이다(active user involvement is imperative)라는 글을 포스팅한 적이 있습니다. 각 기능이 실제로 완료되었는지 보증하기 위해 필요한 모든 직무는 애자일 팀에 각기 그 나름대로 중요한 역할을 담당합니다. 여기서 "완료(complete)되다"라는 개념은 각 반복(iteration)이나 스프린트(Sprint)의 끝을 말하는 것입니다.
개발 착수 시기부터 테스터들을 포함하는 것, 특히 계획 단계에서 테스터들을 참가하도록 하는 것은 무척 좋은 생각입니다. 왜냐하면:
* 테스터들은 요구사항들을 이해하기 쉽게 만든다거나, 대안이 될 수 있는 시나리오를 식별해 내는 일에 유별나게 훌륭한 경향이 있습니다. 요구 사항을 설명하고 단계별로 계획하는 방식으로 생각하는 것은 업무에 할당된 품질 수준의 산정치를 향상시키게 되며, 그러므로 고려된 일정 내에 성공적으로 배포할 수 있는 기회 역시 증가하게 됩니다. * 더 중요한 것은 테스트 선행 접근 방법이 알려졌을 때, 개발자들은 이런 접근 방법론을 이용하여 그들이 작성하는 코드가 문제 없이 통과되기만을 바라는 경향이 있습니다! (제가 일전에 작성한 테스트 주도 개발(test driven development)을 참조해주세요.) * 요구 사항 설명과 직접적인 계획에 참가한 테스터들은 무엇이 필요하고 어떻게 수행할 것인가에 대해 더 잘 이해를 할 수 있으며, 그들이 좀 더 나은 테스트 업무를 수행 가능하도록 만들어 줍니다. 애자일을 이용하여 개발하는 프로젝트들에서는 장황하고 긴 명세서가 존재하지 않는 상태에서(In the absence of a lengthy specification) 테스터들이 그들의 업무를 효율적으로 수행할 수 있도록 하는 필수 요소입니다. * 그리고 테스팅은 각 스프린트에서 완료된 모든 기능들에 대해서 반드시 수행되어야 하는데, 여기에서 기능이 완료되었다함은 진짜로 "100% 완료된!" 것을 의미합니다. 예를 들어, Production Ready(역자주 3 참조)
* 참고: 10 Key Principles of Agile Development |
http://terra.springnote.com/pages/1581586
http://jangxyz.springnote.com/pages/1416448?print=1
http://me2day.net/tag/tdd
http://cespc1.kumoh.ac.kr/~juyoon/lecture/java/note08/Java08_XP.pdf
Test-Driven Development eXtreme Programming 테스트 주도 개발 What is TDD? 목표 소프트웨어에 대한 테스트 프로그램을 먼저 (또 는 동시에) 개발 반복적 과정 (iterative process) Why TDD? 빠르게 오류 없는 소프트웨어 개발 • 개발된부분에대한짧은테스트로빠른피드백가능 Why not TDD? GUI, Relational DB 복잡한 I/O 로 인해 분리된 단위 테스트가 어려운 경우 eXtreme Programming 개발 과정 다음 과정을 반복한다. Add a test • 개발의시작은테스트를만드는것부터 ! • 요구사항에대한명확한이해가필요 Use Case, Scenario Run all tests and see the new one fail • 새로운테스트는새로운코드를요구한다 ! sanity check Write some code • 테스트를만족하는코드작성 • 테스트에없는새로운기능을추가하면안된다 ! Run the automated tests and see them succeed • 새로운코드가테스트를통과하는지체크 Refactor code • 중복또는비효율적인부분을제거하고테스트통과 eXtreme Programming 테스트 프로그램 작성 Black-box test 개방된 인터페이스만 사용하여 기능 테스트 내부 변수를 바꾸거나 private 변수를 테스트하지 않 는다. Software modularity 유지 별도의 프로젝트(또는 모듈)로 작성 최종 코드에 가해질 수 있는 부수 효과 제거 테스트 종류 Unit test Integration test Acceptance test eXtreme Programming 테스트 프로그램 작성 권장 사항 test로 시작하는 메소드 사용 테스트 코드 내용 • 테스트에필요한모든조건과상황을준비설정 • 테스트대상메소드호출 • 테스트대상메소드가원하는대로동작함을검증 • 실행이끝나고다른코드에영향이없게정리작업
http://en.wikipedia.org/wiki/Test-driven_development
역자나 저자나 조금 거만한 거 아냐? 라는 것이었다. 그래서 책을 읽고 싶지는 않았으나, 돈도 아깝고 이왕 시작했으니 봐야했다. 하지만, 내 그런 기분도 잠시였다. Kent Beck이라는 저자는 글을 읽는 내내 웃을 수 있게 해주었다. 모든 작업을 간단 간단히 쪼개서 하는 것은 이미 많은 개발자들이 해왔던 바일 것이다. 조금 개발하고 디버그 하고, 조금 개발하고 디버그 하고.. 머리 속에 알게 모르게 초록 막대, 빨강 막대를 생각하고 있었을 것이다. 다만, 그것을 드러내서 많은 사람이 인식하게 했다는 점이 이 TDD의가 아닐까?라는 생각을 해본다. 그리고 여기서 말하는 사고의 크기들이 너무 큼직 큼직했다는 점이 현재까지의 문제점이었다. 이전부터 TDD의 이점에 대한 많은 이야기를 들어왔으나 내 스스로의 기술이 미비한지라 기술을 익히느라 미쳐 책을 읽지 못했으나 시간이 나서 잠깐, 아니 어쩌면 길게 읽어보았다. JUnit을 처음으로 써봤을 때 매우 편리하다고 생각했었는데 이 책을 읽음으로써 그 전부터 암묵적으로 행하고 있던, 테스트-빨강-초록의 그 단계들을 명시적으로 드러내서 하게 되는 계기가 되었다. 물론 저자처럼 눈에 불을 켜고 심각할 정도로 테스트를 먼저 할 것은 아닐거라는 것을 스스로 잘 알고 있긴 하지만, 상당히 즐거운 논조와 즐거운 프로그래밍을 하는 저자의 모습처럼, 나도 저자처럼 즐겁게 생활하는 모습을 떠올리며 이것저것 많은 생각을 하게 되었다. 아키텍쳐(static)를 만드는 다양한 프레임워크들과 Growing이라는 개념을 적용한 TDD(dynamic)의 개념들에 대해 생각해 보다 보니, 이 책의 가치가 더욱 높아진다. 게다가 프로그램을 키워가는 식으로 애정을 가지고 보는 것은 이 얼마나 좋은 것인가? 오랜만에 보석같은 책을 읽게 되어서 기분이 좋았다. 그리고, 역자분께서는 꼼꼼하게 뒤에 혹여나 이해를 못할까봐 부록으로 직접 잘 안되는 부분에 대한 이야기까지 적어 두셨다. 매우 감사할 노릇이다. 처음부분에서 좀 겁을 먹었지만, 어쨌든 우리와 우리의 프로그램을 발전시키는 건 그러한 [[[ 두 려 움 ]]]이 아닐런지.. [장점] 1. TDD가 무엇인지 직접 보여준다. 2. 스트레스에서 벗어날 수 있는 방법을 보여준다. 3. 웃기다. [단점] 1. 도입부가 거창하고 거만해서 겁먹게 한다. 2. 중복되는 내용이 있다. 3. 저자가 생각하는 낙관적인 개념에서 설명하는 경우가 있다.
|