Behavior driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project. It was originally named in 2003 by Dan North[1] as a response to Test Driven Development, including Acceptance Test or Customer Test Driven Development practices as found in Extreme Programming. It has evolved over the last few years[2].
On the “Agile Specifications, BDD and Testing eXchange” in November 2009 in London, Dan North[3] gave the following definition of BDD:
BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.
BDD focuses on obtaining a clear understanding of desired software behavior through discussion with stakeholders. It extends TDD by writing test cases in a natural language that non-programmers can read. Behavior-driven developers use their native language in combination with the ubiquitous language of domain driven design to describe the purpose and benefit of their code. This allows the developers to focus on why the code should be created, rather than the technical details, and minimizes translation between the technical language in which the code is written and the domain language spoken by the business, users, stakeholders, project management, etc.
http://en.wikipedia.org/wiki/Behavior_Driven_Development
In theory the purpose of BDD is noble. However in practice I saw that it fails very often. Actually I heard no real success story in BDD applied to automation.
Applied to test automation BDD approach is understood as allowing automation developers to develop framework and QA engineers to create automated tests by writing domain language.
Good aim, but what results?
On one project guys used robot framework to wrap already existing python framework, because PM wanted QA engineers automate test cases.
After implementation of Robot Framework was done, QA engineers refuse working with it. So automation developers should continue automating test case, but now not in python, but on domain specific programming pseudo language.
I understand QA engineers, that refused to create tests in domain language, because that language is actually a programming language, but with another syntax. And in complex tests it does not seem natural, but as just another vendor script.
Also, now you can’t debug whole test case, because it is written in “natural” language(actually new script language) and none thought adding debug function for it.
You can debug runner, however, runner will be wrapping that domain language and you can access to test methods in debug mode only if runner is a part of test suite. It make debug much more complicated and thus make test suite much harder to maintain. And if maintenance in automation fails, then automation fails as well.
So the questions are:
How did you solve problem with debugging on your project with BDD approach?
Where QA engineers eager to write test cases in domain language?
What time QA engineers need to stop asking questions if some keyword exist?
What time QA engineer need to stop asking questions (if they write test case in wrong syntax)?
What time it took for QA engineer to update test case in comparing with update of TA developer?

