ATDD : The approach and the tools
If you are familiar with TDD then ATDD is somehow TDD with a higher level of testing and with more stakeholder involved, in other words it’s more of an acceptance testing than unit testing. If you want to know more about TDD then please check the following post:
What is 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, behaviour-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.
Widely implemented within Agile teams, ATDD is a practice where business analysts, developers ,testers and the users work together to define each story (or feature) acceptance criteria in an early stage of development process (Before coding starts). This approach allows all the stakeholders to have and maintain the same level of expected results before any developer start coding.
I know we’ve all heard this stereotype of “Developers don’t care about specification and Testers don’t want to do automation» but with ATDD this will save a lot of wasted time and money by ensuring that the developers are more involved in the early stages of specification and the tester are automating the acceptance tests.
How ATDD is implemented in “real life»?
Are you using SCRUM? If yes then you’re already doing most of the work in ATDD. if not then the following example must feed your curiosity :
Example
Let’s assume that the product owner or the client requested the following feature in our mobile application: “As a user I want to bypass the login screen so I can use the application anonymously» After reviewing this request with all the team (Business analyst, Developers, Testers…) and with more details added to the story or the feature, we shall have some “acceptance” or «functional” tests similar to this (Please note this is just an example, many acceptance tests are missing for this feature):
- Acceptance Criteria 1: The application optionally accepts login/password to login
- Acceptance Criteria 2: The button bypass allows the user to browse within the application without login.
- Acceptance Criteria 3: When the button bypass selected the application does not store or display any user specific information.
- Acceptance Criteria 4: When the login/password are used, the application GUI must be adjusted to the user settings.
Benefits
1- Client-Seller alignment : By having the acceptance criteria above as an input information, we (every team member) are now sure that the application will maintain its login/password functionality and will only add a button to allow the user to bypass the login screen.
2- Quality and cost effectiveness: The tests above can be easily automated even before the developers start coding.
3- Time to Market: Once the tests are implemented the developers can validate their required tasks before announcing that they have finished.
ATDD does not require any specific tools. It is important to know, that NOT all acceptance tests must be automated. Automating your tests depends on multiple aspects such as: technical challenges, deadline and cost.
Any tools recommended?
ATDD does not require any specific tools. It is important to know, that NOT all acceptance tests must be automated. Automating your tests depends on multiple aspects such as: technical challenges, deadline and cost.
In this section I will give you just an overview of the most used automation tools on ATDD:
FitNess: The fully integrated standalone wiki and acceptance testing framework
Robot framework: generic test automation framework for acceptance testing and acceptance test-driven development (ATDD)
Calabash: Automated acceptance testing for mobile apps — Be aware that this framework may not support latest OS version (above Android O )