Skip to main content

Benefits of using BDD

For those that aren't aware, BDD stands for Behaviour Driven Development. It is a style of writing (often) acceptance tests, in a Given, When Then format. I've spoke about them in previous blog posts.

People often say what are the benefits of them? Why not just write normal tests?

Firstly, I feel that BDD isn't just useful as an automation framework, but more of a method of documenting the system that is under test. The Feature files become the documentation, and the great thing is, if the system changes, then the feature files need to be kept up to date to ensure they still pass! Documentation that is always kept up to date sounds too good to be true right!? Not with BDD!!! It provides a living specification of the software under test.

Secondly, BDD is a method of getting teams to discuss Acceptance Criteria, and ensuring that teams fully understand the business requirements up front, and it's a great enabler for Acceptance Test Driven Development.

Related to the above, using BDD ensures a common language is adopted for discussing new features and removes a lot of the ambiguity that can sometimes creep into User Stories or PBIs.

So there you have it, what I see as the main benefits of BDD. I'm a big advocator of it, having used it for over a year now, I can safely say it is a great method of creating living documentation and encouraging conversations between relevant parties with the goal of producing quality software.

Comments

  1. Can u teach, how to get started, where in there is no previous BDD at workplace.

    ReplyDelete

Post a Comment

Popular posts from this blog

Coding something simple.... or not! Taking a screenshot on error using Selenium WebDriver

I recently wrote a little function that takes a screenshot at the end of a test if it has errored. What sounded very simple at the start turned out to be quite a bit of work, and quite a few lines of code to handle certain scenarios! It's now over 50 lines of code! I'll start with what I had at the beginning, this was to simply take a screenshot in the working directory, we are using SpecFlow and Selenium to run the tests, so we are going to check if the ScenarioContext.Current.TestError isn't null, if it is, then using Selenium, take a screenshot (note the below code is a simplified version of what I had at the beginning). [AfterScenario]         public static void TakeScreenShotOnError()         {             if (ScenarioContext.Current.TestError == null) return;             var screenshotDriver = Driver as ITakesScreenshot;             if (screenshotD...

How to manage resources within new teams?

Working where I work we are constantly spinning up new teams to take on new workloads as business come up with new demands and new features they want developed and tested. The problem with this is how do we ensure the work of the newly spun up team is of sufficient quality. One method is by taking people from other established teams and placing them on the new team. This works great for the new team, but unfortunately it will oftenl eave the established team lacking in a resource whilst they try and fill the gap left by the person who has left. We are seeing this often with our offshore teams, it can be damaging to the team structure and the teams velocity, but try as I might, I can't think of another way around it. It's far easier to take 1 person from a team that is established than it is to build a whole new team from scratch. At least by leaving the core of a team in place, you should be guaranteeing that the new team are aware of any coding standards or any QA standard...

Considerations when creating automated tests

We recently released to a number of teams our automated regression pack that has been worked on over the past few months. This regression pack tests legacy code, but contains a large number of tests.  As a bit of background, a number of teams are working on new solutions whilst some are still working on legacy code. With this in mind we constructed an email with a list of guidelines when creating new tests that need to be added to this regression pack.  I figured that these can be quite broad so should apply for any organisation, so thought it would make an interesting blog post...  So here goes,  when creating automated tests, it's important to consider and adhere to the following: - Think about data . The tests need to retrieve or set the data they need without any manual intervention - This should help them be more robust and easier to run without manual intervention. - The tests need to be idempotent - By making it so that each test is standalone and does...