This is a concoction of geeky posts, programming posts and just general stuff that is in my brain.

It might be updated often but then again it might not...

 

 

What is Behaviour Driven Development?

And so we move on, from my boring life on to something else - Behaviour Driven Development. 

I was meandering along the internet a few weeks ago and found a .NET User Group that met up close to where I live.  They seemed to host regular events and had some good reviews - so I signed up to the Canary Wharf Dot Net User Group.  The next event scheduled was Software that Matters! An introduction to BDD with Liz Keogh and the following nonsense is my interpretation of what BDD is and how it can help your projects.

 

It's not all about testing….

 

Reading about BDD it seems that one of the most common mistakes is to think at BDD is all about testing.  Although BDD in theory replaces TDD, ATDD and such like; the big idea is about Deliberate Discovery.

Deliberate discovery is about always questioning the outcome of any context until all possible outcomes have been exhausted.  If the stakeholder can 100% say that given this scenario then these are the possible outcomes then you are on the right track.

Don't stop there though, once you have done this you may think "Hey, I've gone through everything I can think of and we know all of the possible outcomes"  Well that is true to a point, however it is only the things that YOU can think of.  You will always assume that you know everything - when in actual fact you don't.  What you should then do is go and talk to another developer about it or a business analyst basically anyone who will listen and give you their opinion.  The more people you talk to the more questions you will get and more importantly;  questions that you may not have thought of.

 

BDD is really about having has many conversations and bouncing ideas off as many people as possible.  It's about discovering and learning about the software you are about to write BEFORE you start writing it.  You should use plain English as much as possible as it makes it easier for everyone to understand in the chain.  When presenting you should try to prompt the users to provide as much feedback as possible.  Tell them that you know what you are presenting is not 100% correct and ask THEM how THEY would make it better, what other constraints or workflow should be integrated?

 

Now for a quick example:

Given that I visit a cash machine

When I request that it gives me £20

Then it should give me £20

Simple right? But if we question the context then we realise that there could be many different outcomes.  What if I don't have £20 in my account?

So, now we have two outcomes.  If I have enough money in my account then it will dispense the £20.  If I don't then it won't dispense any money.  So, what happens if I have an overdraft - we get yet another outcome.  We eventually end up with several outcomes - so our job is done…..Well not quite.  After we have taken the money we still need to debit the account!

By questioning a rather simple scenario we have ended up with lots of different outcomes that could have potentially been lost.  Because we have caught them at the very beginning of the process we can code for these eventualities straight away - rather than amending our code later on.

So how does way of things help? Well writing a traditional TDD Test could look like this:

BDD 1

Using BDD your test could look like this:

BDD 2

 

It's clear to see that by using BDD anyone can read your test and point out any errors or omissions.  There is no real code to read or understand and the flow of the process can be easily followed.

Driven by behaviour

 

In order to collate as much information as possible you need to ask the following questions:

  • What should this do?
  • Why should this do it?
  • Who or what needs this?
  • If we didn't do this, then who would care? Would anyone miss it?
  • What value does it provide?

If something doesn't add value or no one would care if it didn't exist then there is no point in doing it.  It's a waste of time and money developing a feature that users aren't even going to use.

 

Prioritise!

 

In BDD you should identify the high risk items and concentrate on these first.  High risk items are  features that are brand new. No one has done these before so you can't say how long they are going to take or what problems you are going to encounter.  Hard code items that you know how to do and you know how long it is going to take - things that have been done many times before e.g login screen, drop downs with users in etc.

 

BDD 3 

Unknown Unknowns - These are areas that are new to us.  We don't know anything about them.

Known Unknowns - These are areas that we have explored and identified as risky.  We know about them but we can't say for certain how long they will take to complete.

Known Knowns - These are areas that we have built.  We can present these back to the business for feedback

Unknown Knowns - These are complete.  They have been stabilised, tested and realised in to the wild. We can forget about them.

 

BDD Cycle

 

 

Typical BDD process

BDD 4

 

When do you jump out of the BDD Cycle?

  • When the code passes the test
  • When the feature is usable
  • When the stakeholders goal is met
  • When the vision is complete
  • When the vision is delivering value

 

 

The best feedback that you can get on your code is when it's released.  If users don't complain then that is good feedback - if they thank you for the code you have released; then that really is the best feedback you can get.

There was one particular quote that Liz said which really stuck in my mind

It doesn't matter how good your software is - if it's the wrong software

And with that ringing in your ears - I am done.

 

Links

 

  • WipFlash - A WPF Application created by Liz Keogh to demonstrate BDD Testing.
  • Dan North - Introducing BDD
  • Skills Matter - Podcast on how you can introduce BDD to the Business

 

Posted by codingbadger at 19:29
Tags :

Authors

Recent Comments

Powered by Disqus