Behavior-Driven Development (BDD) is an evolution in the thinking behind Test-Driven Development. It pulls together strands from Test-Driven Development and Domain-Driven Design into an integrated whole, making the relationship between these two powerful approaches to software development more evident.It aims to help focus development on the delivery of prioritized, verifiable business value by providing a common vocabulary (also referred to as a Ubiquitous Language) that spans the divide between Business and Technology.
It presents a framework of activity based on three core principles:
- Business and Technology should refer to the same system in the same way - Its All Behavior
- Any system should have an identified, verifiable value to the business - Where is the Business Value
- All project activities have a diminishing return - Enough Is Enough
BDD relies on the use of a very specific (and small) vocabulary to minimize miscommunication and to ensure that everyone – the business, developers, testers, analysts and managers – are not only on the same page but using the same words. For people familiar with the concept of Domain-Driven Design, you could consider BDD to be a Ubiquitous Language for software development.
It must be stressed that BDD is a rephrasing of existing good practice, it is not a radically new departure. Its aim is to bring together existing, well-established techniques under a common banner and with a consistent and unambiguous terminology. BDD is very much focused on “Getting the words right” and this focus is intended to produce a vocabulary that is accurate, accessible, descriptive and consistent.
In fact “Getting the words right” was the starting point for the development of BDD, and is still very much at its core, but the power of getting the words right has led to some insights and extrapolations that have helped us to better understand our approach and to extend it.