1 What is BDD?

 

This chapter covers

  • Key challenges faced by current software development processes
  • The three practices of Behavior Driven Development (BDD)
  • The relationship between BDD and Test-Driven Development (TDD)
  • Common challenges faced when adopting a BDD approach
  • Tips for adopting BDD

It’s tempting to think of software development as a purely technical task—writing code to instruct a machine. In reality, software is the product of an ongoing socio-technical conversation among users, business stakeholders, and the delivery team. That conversation evolves over time, and the challenge is to capture it in a form that is precise, testable, and useful as a guide for building the system. This is the central goal of Behavior-Driven Development, or BDD.

BDD originated in the mid-2000s as a refinement of Test-Driven Development (TDD), created to make technical practices more accessible and closely aligned with business needs. Today, it is supported by a mature ecosystem of tools such as Cucumber, Reqnroll, and Behave, alongside nearly two decades of hard-earned lessons from practitioners. In this book, we’ll explore how BDD can help you deliver high-quality, maintainable software that meets user expectations. From the initial discovery of requirements to the use of automated tests that ensure applications adapt gracefully to changing needs, BDD offers a collaborative, sustainable way to bridge the gap between intent and implementation.

1.1 The missing link

1.1.1 Incomplete requirements

1.1.2 Unreliable documentation

1.1.3 Slow feedback

1.2 An overview of BDD

1.2.1 Origins of BDD

1.2.2 User stories

1.2.3 Discovery

1.2.4 Formulation

1.2.5 Automation

1.2.6 Testing

1.2.7 Bridge

1.3 Common challenges

1.3.1 Naming is hard

1.3.2 BDD without the business

1.3.3 Automation in isolation

1.3.4 Unreadable documentation

1.3.5 Unmaintainable automation

1.4 Where to begin

1.4.1 Evolution, not revolution

1.4.2 Collaboration

1.4.3 Opinions have context

1.4.4 Free lunch or silver bullet?

1.5 Summary