(그림 출처) 맨땅에 코딩 https://boorownie.github.io/2019-11-27/agail_and_atdd
이 글은 제가 ATDD에 대해서 학습하는 내용을 정리하려고 작성한 글이므로 참고만 부탁드립니다. 상세한 내용은 ATDD에 관련된 서적 혹은 공식 문서들이 정확할 것입니다.
혹시 TDD(Test Driven Development)를 아시는지요? TDD를 아신다면 Skip하시면 됩니다.
TDD에 대해서 모르시는 분을 위해서 간략하게 TDD를 설명드리겠습니다. TDD를 먼저 설명드리는 것이 ATDD를 이해하시는데에 도움이 됩니다.
다음 그림은 TDD cycle을 나타낸 그림입니다.
(출처: https://www.thinktocode.com/2018/02/05/what-is-tdd/)
TDD는 다음의 세단계를 반복하면서 개발 합니다.
TDD는 단위 테스트를 개발자가 먼저 구현하고 자신의 코드를 개발해나가는 개발방법론입니다.
(그림 출처) 맨땅에 코딩 https://boorownie.github.io/2019-11-27/agail_and_atdd
ATDD를 가장 쉽게 설명하는 그림을 찾아 보다가 가장 적절한 그림을 Boorownie님의 github 블로그에서 가져왔습니다.
ATDD는 다음과 정의할 수 있습니다.
위키피디아의 정의는 다음과 같습니다.
Acceptance test–driven development (ATDD) is a development methodology based on communication between the business customers, the developers, and the testers. ATDD encompasses many of the same practices as specification by example (SBE),behavior-driven development (BDD), example-driven development (EDD), and support-driven development also called story test–driven development (SDD). All these processes aid developers and testers in understanding the customer's needs prior to implementation and allow customers to be able to converse in their own domain language.
ATDD is closely related to test-driven development (TDD). It differs by the emphasis on developer-tester-business customer collaboration. ATDD encompasses acceptance testing, but highlights writing acceptance tests before developers begin coding.
ATDD는 인수 테스트를 먼저 작성한 다음 기능 개발을 하는 개발방법론입니다. 인수 테스트는 고객이 만들어진 소프트웨어를 실제로 사용하기 전에 테스트 하는 것을 말합니다.
맨 위에 있는 ATDD Cycle을 정리한 그림에 대해서 설명을 하는 것으로 ATDD에 대해서 알아보겠습니다.
4가지 ACTION(Discuss, Distill, Develop, Demo)과 4가지 산출물(User Story, Accpetance Cretieria, Tests, Working software), 하나의 결과(Business Value)로 표현되고 있습니다.
TDD(Test Driven Development), BDD(Behavioral Deiven Development), ATDD(Acceptance Deiven Development)를 비교하는 것이 이해를 가장 돕는 좋은 방법 같아서 다음의 자료를 찾았습니다.
TDD | BDD | ATDD |
---|---|---|
TDD focuses on the implementation of a feature | BDD focuses on the system's behavior | ATDD focuses on capturing the accurate requirements |
Mainly developers involve in this to write Unit Tests | Developers, QAs and Customers involve in this process | Developers, QAs and Customers involve in this process |
Written in a programming language like Python, Java etc. | Written in simple plain English, Gherkin | Written in simple plain English, Gherkin |
These tests are technical. Not easy for non technical person to understand this | It is easy for non technical person to understand this | It is easy for non technical person to understand this |
Focus is to write Unit Tests | Focus is to understanding requirements | Focus is to write Acceptance Tests |
Tools used in TDD are JDave, Cucumber, JBehave, Spec Flow, BeanSpec, Gherkin Concordian, FitNesse, Junit, TestNG, NUnit frameworks, Selenium tool (any open source tools) | Tools used in Gherkin, Dave, Cucumber, RSpec, Behat, Lettuce, JBehave, Specflow, BeanSpec, Concordian, MSpec, Cucumber with Selenium / Serenity | Tools used in TestNG, FitNesse, EasyB, Spectacular, Concordian, Thucydides, Robot Framework, FIT |
출처 : TDD vs BDD vs ATDD: Key Differences
https://www.softwaretestingmaterial.com/tdd-vs-bdd-vs-atdd/
위에 표에 나온 용어들을 찾아서 아래에 정리하였습니다. 용어를 모르시면 오이, 피클등으로 해석하실 것 같아서 찾아 놓았습니다.
- Cucumber : Cucumber is tool that supports Behaviour-Driven Development(BDD)
- Gherkin : Gherkin is set of grammer rules that makes plan text structred enough Cucumber to understand. The senario above is wriiten in Gherkin.
- Cucumber Introduction : https://cucumber.io/docs/guides/overview/
- Cucumber 한글시나리오 작성 : https://velog.io/@clarekang/cucumber-kr-introduce
(그림 출처: https://github.com/msbaek/atdd-example)
테스트의 레벨을 그려서 이해하기 쉽게 하려고 만든 그림입니다.
설명하자면 다음과 같습니다.
ATDD는 개발조직과 실제 사용자가 같이 협업을 하면서 전체 개발과정을 진행할수 있다면 매우 매력적인 개발방법론으로 생각합니다.
TDD는 개발 문화상에서 녹여낸다면 충분히 수행이 가능하지만 ATDD는 사용자(고객), QA, 기획자, 개발자 등 모든 관련된 사람이 같이 협업을 해야 하는 개발방법론인 것으로 생각됩니다. 하지만 ATDD를 잘 적용하고 같이 협업한다면 MVP(Minimum Viable Product)를 정말 잘 만들어나갈 수 있는 가장 좋은 개발방법론 같습니다.
좋은 도구가 모든 일을 해주지는 않지만 좋은 도구를 가지고 일을 한다면 더 일을 잘할 수 있는 것은 당연하지 않을까요? 도전해볼만한 개발방법론입니다.
다시 한번 말씀 드리지만, 위에서도 제가 말씀 드렸지만 ATDD를 공부하기 위해서 각종 자료를 찾아보고 공부한 내용을 정리한 자료입니다. 아무래도 제가 가지고 있는 배경지식을 기반으로 정리한 자료임으로 이 글을 읽으시는 분들에게 충분한 자료가 될지는 모르겠습니다.
제가 찾아보고 공부했던 자료를 모두 아래에 참고자료에 정리해 놓았으니 한번 읽어보기를 부탁드리겠습니다.
Agile Alliance ATDD 정의
https://www.agilealliance.org/glossary/atdd/
Driving Development with Tests: ATDD and TDD
http://testobsessed.com/wp-content/uploads/2011/04/atddexample.pdf
Acceptance test–driven development(WIKIPEDIA)
https://en.wikipedia.org/wiki/Acceptance_test%E2%80%93driven_development
ATDD기반 Web Application 개발
https://github.com/msbaek/atdd-example
ATDD(Acceptance Test Driven Development)
https://o-m-i.tistory.com/478
ATDD 프로세스
https://boorownie.github.io/2019-11-27/agail_and_atdd
Levels of testing in software testing
https://www.guru99.com/levels-of-testing.html
FitNesse: The fully integrated standalone wiki and accptance testing framework
http://fitnesse.org/
https://github.com/unclebob/fitnesse