BDD – Working with Scenarios

Behaviour Driven Development (BDD) or Specification by Example is the process of writing acceptance criteria as tests, using the defined format of Scenarios.

Some teams take this further using a tool such as Cucumber to automate the tests, but the primary benefit of writing scenarios is to use specific examples when discussing the functionality and constraints of a feature before implementing it. This allows us to bring the specification into the tests we write, eliminating the ‘defect-injection-process’ of writing specs first then deducing tests and code from them separately. It also brings us closer to creating truly living documentation.

Recently our team’s focus has been on creating better acceptance criteria for stories. One of the problems faced is that it looks deceptively easy to write a scenario in the format; “Given (a context) When (an event occurs) Then (we should have a result) …but of course, as it turns out, there’s a lot more to it.

Understanding the Concepts

Armed with insights from Kevin Trethewey and Mark Pearl’s Specification By Example session at SUGSA’s CodeLab, and going back to source’ with Dan North and Liz Keogh’s blogs on the topic, we gathered the following key points about User Stories and Acceptance Criteria:

Kevin Trethewey & Mark Pearl Specification By Example:

And:

Liz Keogh:
BDD1-300x214.jpg

And practically:

Dan North

The Scenario Title should say what’s different about this path
Given: should describe all of and no more than the given context

When: the action or event should describe the feature

Then: should describe all of and no more than the outcome of this path

So that’s the theory (somewhat condensed)… now to apply it to our stories.

Applying the Concepts

I think one of the problems we had experienced most was simply getting around to writing the scenarios. Feeling the pressure to get them “right” at the start so as to move quickly onto the next feature resulted in a tendency to avoid doing them at all. Up to this point, we hadn’t been creating scenarios as a Scrum team; the developers had created them as part of their Sprint Planning 2 and fleshed them out as they went along. But we were on a mission, so we persevered.

We started with a simple story:

As: A fleet operator
I want: Events coloured according to the event time
So that: I can identify the age of the events

With the following status key:

**Age of event** **Colour**
event age < 30 mins old Green
30 mins ≥ event age ≥ 1hr Blue
event age ≥ 1 hour Red

As a group, we started writing the initial scenario:

Scenario: Event is 30 minutes old
Given: An event is raised at 12:00
And: the current time is 12:30
When: the event is displayed on the map
Then: the location of the event should be displayed in blue

Delving into the Detail

At first this seemed clear enough, but as we discussed the event being raised and the fleet manager watching the screen, we quickly realised our scenario didn’t take time zones into account. The events are all sent from the units in UTC, but the fleet operators viewing the maps have their regional settings as Central African Time (GMT +2.00).

This led to a lengthy discussion around how and when the time zone offset was being applied to the event.

So we changed our scenario as follows:

Scenario: Event is 30 minutes old
Given: An event is raised at 12:00 UTC
And: the current time is 12:30 UTC (14:30 CAT)
When: the event is displayed on the map
Then: the location of the event should be displayed in blue

We expanded our state table to include CAT, and specific detail:

**Event Time** **Current time in UTC** **Current time in CAT** **Colour**
12:00 12:15 14:15 Green
12:00 12:30 14:30 Blue
12:00 12:45 14:45 Blue
12:00 13:00 15:00 Red

As we connected the dots between our unspoken assumptions, there was a profound feeling of relief and clarity on how to move forward.

In retrospect, I wonder whether we should have included a check for the users’ regional settings affecting the display – something along the lines of “the fleet manager is viewing the map at 14:30 CAT”?

We might also have benefited from special scenarios for the point when an event should change colour:

Scenario: Event becomes 30 minutes old
Given: An event is raised at 12:00
And: the current time is 12:29 UTC
And: the fleet manager is viewing the map at 14:29 CAT When: the time changes to 12:30 UTC
Then: the location of the event should be displayed in blue without the page refreshing

The more we thought about it, the more there seemed to be to think about – a both refreshing and daunting concept.

Reflections

Having gone back to the initial reading, I took heart that our learnings echo Liz Keogh’s observations:

I’m left with the reflection that in software, the words “it goes without saying that …” often precede some of the most critical assumptions and constraints in our work, and should never go without saying.

It still feels hard to start the BDD discussions but we’ve committed to bringing them into our grooming sessions, so I hope this will be the start of a growing trend of becoming aware of what we know, as well as what we don’t know, and finding the right questions to ask to get us smoothly to Done.

About the author:
Cara Turner is a scrum master and agile coach at KRS. With experience over a wide variety of software projects, she has a particular passion for creating great working environments that meet the complex challenges of software development.

 
0
Kudos
 
0
Kudos

Now read this

Excel – Using the CELL function

Here’s a small selection of useful functions, including CELL, MID and FIND. Typing “=CELL(“ in Excel will drop this menu down. Most are self-explanatory, but there are some uses for CELL with filename that are “different”. For example,... Continue →