Behavior-Driven Development (BDD) is a well-known practice for collaboration, and teams use it to bridge the gap between product management and the software development team. It is also very popular among quality engineers to develop test automation frameworks.
BDD helps in describing requirements in the form of a feature file and scenarios, which are further defined in the format of Given, When, and Then. Gherkin language can be used to write feature files in more than 40 languages. Some of the important keywords of Gherkin mentioned below that help in describing features and scenarios:-
Feature, Scenario, Given, When, Then, And, But, Background, Scenario Outline, and Examples
How to write a Feature file?
You can write a feature file in Notepad or some popular IDEs like Visual Studio, Eclipse, and IntelliJ. Basically, there is no need to know any particular tools. But the most important thing is how to prepare for these scenarios? There is a very popular practice known as the 3 Amigos session. Here is a brief about this session as described in the glossary on Agile Alliance.
Three amigos refers to the primary perspectives to examine an increment of work before, during, and after development. Those perspectives are:
Business — What problem are we trying to solve?
Development — How might we build a solution to solve that problem?
Testing — What about this, what could possibly happen?
People holding these different perspectives should collaborate to define what to do, and agree on how they know when it is done correctly. The end result of such a collaboration results in a clearer description of an increment of work often in the form of examples, leading to a shared understanding for the team.
If you are developing software using Scrum, then you may like to host these sessions during Product Backlog Refinement or Sprint Planning. It is because the Product Owner and the Development Team participate in both the business and development aspects, where the Product Owner provides a business perspective and the Development Team (consisting of developers, testers, and other members) provides development and testing perspectives.
Example of a Feature using BDD
Feature: Search Flight
As a flyer, I want to search for available flights between Bangalore and Chennai So that I can book to travel on a given date.
#above story/description is optional
Scenario: Search all available flight based on date, origin, and destination
Given flyer enter travel date as “12/12/2020” and origin as “Bangalore and Destination as “Chennai”
When Click on the Search button
Then Search page should show all available flight
And Provide option to book flight
What is a complex story/requirement?
Consider the above example of a flight search; it appears straightforward, but can it be delivered within 2 weeks of the Sprint? Do we have an answer to the following questions?
- Who is the user (persona) of this story?
- Do you know the data sources for each airline?
- Do we know what these personas expect from this feature?
- What’s going to be the order of data?
- Will it have filters?
- What are the actions users perform?
Questions can be much more than the above, and need to explore, develop, and validate all those.
It may or may not be possible to complete this feature in one sprint. Does it also depend on all work that has been mentioned in the Definition of Done (DoD)? Yes, it is. How can we slice this feature to deliver a releasable Product Increment that meets DoD by the end of the Sprint?
Use the BDD scenario below to slice it and then prioritize based on the value that you see in each slice. Develop stories incrementally and ensure you get feedback to maximize user experience and optimize the value of the work.
Basic examples of slicing using Scenarios
Now, change the scenario to search flights for one airline at a time, as connecting multiple sources may not be possible in one sprint, and modify it as follows.
Scenario: Search only Indigo flight based on date, origin, and destination
Given flyer enter travel date as “12/12/2020” and origin as “Bangalore and Destination as “Chennai”
When Click on the Search button
Then Search page should show all available flight
And Provide option to book flight
Scenario: Search only Spicejet flight based on date, origin, and destination
Given flyer enter travel date as “12/12/2020” and origin as “Bangalore and Destination as “Chennai”
When Click on the Search button
Then Search page should show all available flight
And Provide option to book flight
Scenario: Search only Jet Airways flight based on date, origin, and destination
Given flyer enter travel date as “12/12/2020” and origin as “Bangalore and Destination as “Chennai”
When Click on the Search button
Then Search page should show all available flight
And Provide option to book flight
Now the team can decide to build only those scenarios that can be delivered within one Sprint, and the rest of the scenarios in upcoming Sprints (if it makes sense).
The above scenarios can also be further sliced as follows if needed.
- Scenario: One-way flight of Indigo
- Scenario: Return flight of Indigo
- Scenario: Multiple location search for Indigo, etc.
What’s the meaning of optimizing the value
A few things to care about while talking about optimizing value:
- Small increment
- Less waste
- Early release of a feature
- Better quality
- Automation
How does Behavior-Driven Development optimize the value of the work done?
BDD helps in getting everything done. Developing stories based on scenarios helps in getting small Increments out, and releasing them internally or externally if it makes sense. Getting into detail of each story reduces ambiguity, rework, and rejection, so the team produces less waste. BDD scenarios are automated using various tools like Cucumber, SpecFlow, and Behave, making regression tests easy to execute every time. Better quality can be achieved by continuously refactoring code, and developers feel safe in refactoring as these tests protect them from breaking running code.
I hope this is useful. If you have further queries, please reach out to me at naveen@agilemania.com.
Agilemania offers Scrum and agile training, including TDD, BDD, and Extreme Programming, for those interested in learning these methodologies.