SlideShare a Scribd company logo
1 of 35
Behaviour-Driven
 Development
Writing software that matters

 Dan North, ThoughtWorks
   Liz Keogh, Lunivore
Part 1: Software that
  doesn’t matter


          2     © Dan North, ThoughtWorks
Failure modes – a field guide
 The project comes in late
   ...or costs too much to finish

 The application does the wrong thing

 It is unstable in production

 It breaks the rules

 The code is impossible to work with
                       3            © Dan North, ThoughtWorks
How we deliver software
Planning


           Analysis



                          Design




                                                                Deploy
                                       Code



                                              Test
                                                                          t

                      Why do we do this?
                                   4                 © Dan North, ThoughtWorks
The exponential change curve
$   Planning


               Analysis



                          Design




                                                                Deploy
                                       Code



                                              Test
                                                                           t


                                   5                 © Dan North, ThoughtWorks
The exponential change curve
           $
               We fear this...



so we do                         t               which
this...                                          reinforces
                                                 this!




                         6           © Dan North, ThoughtWorks
If only we could deliver better...
  Deliver features rather than modules

  Prioritise often, change often

  Only focus on high-value features

  Flatten the cost of change

  Adapt to feedback

                      Learn!
                        7             © Dan North, ThoughtWorks
What we would need
Adaptive planning

Streaming requirements

Evolving design

Code we can change

Frequent code integration

Run all the regression tests often

Frequent deployments

                        8            © Dan North, ThoughtWorks
Part 2: Software that
       matters


          9     © Dan North, ThoughtWorks
A loose definition of BDD

“Behaviour-driven development is
  about implementing an application
  by describing its behaviour from
  the perspective of its stakeholders”

               - Me 


                  10          © Dan North, ThoughtWorks
A more formal 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.”

                     11           © Dan North, ThoughtWorks
...second generation...

                  BDD is derivative
        Derives from:
            XP, especially TDD and CI
            Acceptance Test-Driven Planning
            Lean principles
            Domain-Driven Design

        Influenced by:
            Neurolinguistic Programming (NLP)
            Systems Thinking
                            12           © Dan North, ThoughtWorks
...cycle of interactions...

                  BDD in six pictures




                              13   © Dan North, ThoughtWorks
...cycle of interactions...

            The roles in a BDD team
         The stakeholders

         The analysts (or BAs)

         The testers (or QAs)

         The developers

         The project manager (or Boss)
                              14         © Dan North, ThoughtWorks
...outside-in...

          Who is this application for?
                                                          Vision
                                                    (or Purpose)



                    Outcome                                  Outcome                 Outcome




                   Feature set              Feature set                Feature set   Feature set




                   Features...    Features...        Features...           ...




                    Stories...    Stories...                ...




                   Scenarios...       ...



                                                          15                             © Dan North, ThoughtWorks
...clearly-defined outputs...

                   What’s in a story?
                 A story is a unit of delivery

                Story 28 - View patient details

             As an Anaesthetist
             I want to view the Patient’s surgical history
             So that I can choose the most suitable gas




                                   16               © Dan North, ThoughtWorks
...clearly-defined outputs...

                 Focus on the value


                Story 28 - View patient details

             In order to choose the most suitable gas
             an Anaesthetist
             wants to view the Patient’s surgical history




                                   17               © Dan North, ThoughtWorks
...clearly-defined outputs...

                 Focus on the value


                 Story 29 – Log patient details

             In order to choose the most suitable gas
             an Anaesthetist
             wants other Anaesthetists to log the
             Patient’s surgical history for later retrieval




                                    18               © Dan North, ThoughtWorks
...clearly-defined outputs...

                    Agree on “done”
              Define scope using scenarios

            Scenario – existing patient with history


            Given we have a patient on file
            And the patient has had previous surgery
            When I request the Patient’s surgical history
            Then I see all the previous treatments




                                   19                © Dan North, ThoughtWorks
...clearly-defined outputs...

            Automate the scenarios
                 Make each step executable

               Given we have a patient on file
              In Ruby:
              Given “we have a patient on file” do
                  # ...
              end

              In Java:
              @Given(“we have a patient on file”)
              public void createPatientOnFile() {
                  // ...
              }
                                 20             © Dan North, ThoughtWorks
...clearly-defined outputs...

    Code-by-example to implement
                           Also known as TDD

         Start at the edges, with what you know

         Implement outermost objects and operations

         Discover collaborators, working inwards
             and mock them out for now

         Repeat until “Done”

            If the model doesn’t “feel” right, experiment!

                                  21            © Dan North, ThoughtWorks
...clearly-defined outputs...

            Code-by-example example
      Scenario
                           Examples




 Scenario




                                      22   © Dan North, ThoughtWorks
...clearly-defined outputs...

           Good tools can help here
         Cucumber or JBehave for stories

         RSpec, XUnit for code examples

         Mockito, Mocha, Moq for mocking

         Be opinionated rather than dogmatic
                    with the tooling!

                                23   © Dan North, ThoughtWorks
...clearly-defined outputs...

    We keep the development artifacts
         Examples become code tests
             …and documentation


         Scenarios become acceptance tests
             which become regression tests
             ...and documentation


                        Automation is key
                                24           © Dan North, ThoughtWorks
Part 3: Getting the
   words right


         25    © Dan North, ThoughtWorks
26   © Dan North, ThoughtWorks
Domain-driven design 101
Model your domain
  ...and identify the core domain


Create a shared language
  ...and make it ubiquitous


Determine the model’s bounded context
  ...and think about what happens at the edges
                      27            © Dan North, ThoughtWorks
The map is not the territory
There are many kinds of model
  Each is useful in different contexts


There is no “perfect” domain model
  So don’t try to create one!


  Domain modelling takes practice

                    28            © Dan North, ThoughtWorks
A legacy domain modelling example
    Map<int, Map<int, int>>
      portfolioIdsByTraderId;

    if (portfolioIdsByTraderId.get(trader.getId())
        .containsKey(portfolio.getId())) {...}


    becomes:
    if (trader.canView(portfolio)) {...}




                              29               © Dan North, ThoughtWorks
We often manage multiple domains
 You want to retrieve patient records
   in Java, using Hibernate


 so you define
   class HibernatePatientRecordRepository {


        What if your IDE did domain-specific fonts?




                          30                 © Dan North, ThoughtWorks
Writing effective stories
Each story represents (part of) a feature
   and each feature belongs to a stakeholder

Each stakeholder represents a domain
   even the incidental stakeholders

Mixing domains within a scenario leads to brittle tests
   What exactly is the scenario verifying?
   What does it mean when things change?

“What does the stakeholder want from this story?”
                            31               © Dan North, ThoughtWorks
Conclusion


    32       © Dan North, ThoughtWorks
Software that matters
...has tangible stakeholder value
...is delivered on time, incrementally
...is easy to deploy and manage
...is robust in production
...is easy to understand and communicate

      BDD is a step in that direction

                     33          © Dan North, ThoughtWorks
Thank you

        Any questions?
    dan.north@thoughtworks.com
          http://dannorth.net
              @tastapod

           liz@lunivore.com
           http://lizkeogh.com
                @lunivore

Google Group: BehaviorDrivenDevelopment


                   34             © Dan North, ThoughtWorks
Bibliography
Extreme Programming explained (2nd edition)
- Kent Beck

Domain-Driven Design - Eric Evans

The Art of Systems Thinking
  and
The Way of NLP - Joseph O’Connor

                      35            © Dan North, ThoughtWorks

More Related Content

What's hot

What's hot (20)

Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVA
 
Behavior Driven Development Testing (BDD)
Behavior Driven Development Testing (BDD)Behavior Driven Development Testing (BDD)
Behavior Driven Development Testing (BDD)
 
Bdd – with cucumber and gherkin
Bdd – with cucumber and gherkinBdd – with cucumber and gherkin
Bdd – with cucumber and gherkin
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 
Agile QA presentation
Agile QA presentationAgile QA presentation
Agile QA presentation
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
 
What Is Cucumber?
What Is Cucumber?What Is Cucumber?
What Is Cucumber?
 
Successfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile WorldSuccessfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile World
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
Gatling
Gatling Gatling
Gatling
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
 
Agile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile TesterAgile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile Tester
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)
 

Viewers also liked

Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
dversaci
 
ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009
Thoughtworks
 
Agile Recruiting White Paper
Agile Recruiting White PaperAgile Recruiting White Paper
Agile Recruiting White Paper
Amber Grewal
 
Lean Times Require Lean Thinking
Lean Times Require Lean ThinkingLean Times Require Lean Thinking
Lean Times Require Lean Thinking
Thoughtworks
 

Viewers also liked (20)

Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
 
Code as a Communication Tool
Code as a Communication ToolCode as a Communication Tool
Code as a Communication Tool
 
ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009
 
Ciso executive summit 2012
Ciso executive summit 2012Ciso executive summit 2012
Ciso executive summit 2012
 
Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)
 
Agile Recruiting White Paper
Agile Recruiting White PaperAgile Recruiting White Paper
Agile Recruiting White Paper
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
Lean Times Require Lean Thinking
Lean Times Require Lean ThinkingLean Times Require Lean Thinking
Lean Times Require Lean Thinking
 
Tech Lead Skills for Developers
Tech Lead Skills for DevelopersTech Lead Skills for Developers
Tech Lead Skills for Developers
 
Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)
 
Mass Media
Mass MediaMass Media
Mass Media
 
managing change in the digital environment
managing change in the digital environmentmanaging change in the digital environment
managing change in the digital environment
 
BDD-Driven Microservices
BDD-Driven MicroservicesBDD-Driven Microservices
BDD-Driven Microservices
 
Effects of social networking
Effects of social networkingEffects of social networking
Effects of social networking
 
Rolf Russel - system thinking
Rolf Russel - system thinkingRolf Russel - system thinking
Rolf Russel - system thinking
 
Cucumber ppt
Cucumber pptCucumber ppt
Cucumber ppt
 
Ill effects of mobile
Ill effects of mobileIll effects of mobile
Ill effects of mobile
 
Introduction to User Experience - Mike Biggs
Introduction to User Experience - Mike BiggsIntroduction to User Experience - Mike Biggs
Introduction to User Experience - Mike Biggs
 

Similar to Bdd Introduction

Why Your Agile Rollout Is Failing
Why Your Agile Rollout Is FailingWhy Your Agile Rollout Is Failing
Why Your Agile Rollout Is Failing
Dan North
 
An idea in a making
An idea in a makingAn idea in a making
An idea in a making
Lisa Tyboni
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't Evil
IBM UrbanCode Products
 
Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)
stanbridge
 
Pnp Agile Tech Ed India
Pnp Agile Tech Ed IndiaPnp Agile Tech Ed India
Pnp Agile Tech Ed India
rsnarayanan
 

Similar to Bdd Introduction (20)

Why Your Agile Rollout Is Failing
Why Your Agile Rollout Is FailingWhy Your Agile Rollout Is Failing
Why Your Agile Rollout Is Failing
 
ASE01.ppt
ASE01.pptASE01.ppt
ASE01.ppt
 
An idea in a making
An idea in a makingAn idea in a making
An idea in a making
 
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETNDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
 
Devnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology back toschool software reengineering
Devnology back toschool software reengineering
 
Methodology
MethodologyMethodology
Methodology
 
Introduction to Optimization Group
Introduction to Optimization GroupIntroduction to Optimization Group
Introduction to Optimization Group
 
Lean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute EntrepreneursLean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute Entrepreneurs
 
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't Evil
 
Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)
 
Yes But What Do We Do?
Yes But What Do We Do?Yes But What Do We Do?
Yes But What Do We Do?
 
A Grand Unified Theory of Software
A Grand Unified Theory of SoftwareA Grand Unified Theory of Software
A Grand Unified Theory of Software
 
Splunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdfSplunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdf
 
Product Development 230109
Product Development 230109Product Development 230109
Product Development 230109
 
A Developers Take on Cooper
A Developers Take on CooperA Developers Take on Cooper
A Developers Take on Cooper
 
Execute for Every Screen
Execute for Every ScreenExecute for Every Screen
Execute for Every Screen
 
Domain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring PortfolioDomain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring Portfolio
 
Pnp Agile Tech Ed India
Pnp Agile Tech Ed IndiaPnp Agile Tech Ed India
Pnp Agile Tech Ed India
 
Collaboration Tools to Create Better Products
Collaboration Tools to Create Better ProductsCollaboration Tools to Create Better Products
Collaboration Tools to Create Better Products
 

More from Skills Matter

Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
Skills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
Skills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
Skills Matter
 

More from Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

Bdd Introduction

  • 1. Behaviour-Driven Development Writing software that matters Dan North, ThoughtWorks Liz Keogh, Lunivore
  • 2. Part 1: Software that doesn’t matter 2 © Dan North, ThoughtWorks
  • 3. Failure modes – a field guide The project comes in late ...or costs too much to finish The application does the wrong thing It is unstable in production It breaks the rules The code is impossible to work with 3 © Dan North, ThoughtWorks
  • 4. How we deliver software Planning Analysis Design Deploy Code Test t Why do we do this? 4 © Dan North, ThoughtWorks
  • 5. The exponential change curve $ Planning Analysis Design Deploy Code Test t 5 © Dan North, ThoughtWorks
  • 6. The exponential change curve $ We fear this... so we do t which this... reinforces this! 6 © Dan North, ThoughtWorks
  • 7. If only we could deliver better... Deliver features rather than modules Prioritise often, change often Only focus on high-value features Flatten the cost of change Adapt to feedback Learn! 7 © Dan North, ThoughtWorks
  • 8. What we would need Adaptive planning Streaming requirements Evolving design Code we can change Frequent code integration Run all the regression tests often Frequent deployments 8 © Dan North, ThoughtWorks
  • 9. Part 2: Software that matters 9 © Dan North, ThoughtWorks
  • 10. A loose definition of BDD “Behaviour-driven development is about implementing an application by describing its behaviour from the perspective of its stakeholders” - Me  10 © Dan North, ThoughtWorks
  • 11. A more formal 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.” 11 © Dan North, ThoughtWorks
  • 12. ...second generation... BDD is derivative Derives from: XP, especially TDD and CI Acceptance Test-Driven Planning Lean principles Domain-Driven Design Influenced by: Neurolinguistic Programming (NLP) Systems Thinking 12 © Dan North, ThoughtWorks
  • 13. ...cycle of interactions... BDD in six pictures 13 © Dan North, ThoughtWorks
  • 14. ...cycle of interactions... The roles in a BDD team The stakeholders The analysts (or BAs) The testers (or QAs) The developers The project manager (or Boss) 14 © Dan North, ThoughtWorks
  • 15. ...outside-in... Who is this application for? Vision (or Purpose) Outcome Outcome Outcome Feature set Feature set Feature set Feature set Features... Features... Features... ... Stories... Stories... ... Scenarios... ... 15 © Dan North, ThoughtWorks
  • 16. ...clearly-defined outputs... What’s in a story? A story is a unit of delivery Story 28 - View patient details As an Anaesthetist I want to view the Patient’s surgical history So that I can choose the most suitable gas 16 © Dan North, ThoughtWorks
  • 17. ...clearly-defined outputs... Focus on the value Story 28 - View patient details In order to choose the most suitable gas an Anaesthetist wants to view the Patient’s surgical history 17 © Dan North, ThoughtWorks
  • 18. ...clearly-defined outputs... Focus on the value Story 29 – Log patient details In order to choose the most suitable gas an Anaesthetist wants other Anaesthetists to log the Patient’s surgical history for later retrieval 18 © Dan North, ThoughtWorks
  • 19. ...clearly-defined outputs... Agree on “done” Define scope using scenarios Scenario – existing patient with history Given we have a patient on file And the patient has had previous surgery When I request the Patient’s surgical history Then I see all the previous treatments 19 © Dan North, ThoughtWorks
  • 20. ...clearly-defined outputs... Automate the scenarios Make each step executable Given we have a patient on file In Ruby: Given “we have a patient on file” do # ... end In Java: @Given(“we have a patient on file”) public void createPatientOnFile() { // ... } 20 © Dan North, ThoughtWorks
  • 21. ...clearly-defined outputs... Code-by-example to implement Also known as TDD Start at the edges, with what you know Implement outermost objects and operations Discover collaborators, working inwards and mock them out for now Repeat until “Done” If the model doesn’t “feel” right, experiment! 21 © Dan North, ThoughtWorks
  • 22. ...clearly-defined outputs... Code-by-example example Scenario Examples Scenario 22 © Dan North, ThoughtWorks
  • 23. ...clearly-defined outputs... Good tools can help here Cucumber or JBehave for stories RSpec, XUnit for code examples Mockito, Mocha, Moq for mocking Be opinionated rather than dogmatic with the tooling! 23 © Dan North, ThoughtWorks
  • 24. ...clearly-defined outputs... We keep the development artifacts Examples become code tests …and documentation Scenarios become acceptance tests which become regression tests ...and documentation Automation is key 24 © Dan North, ThoughtWorks
  • 25. Part 3: Getting the words right 25 © Dan North, ThoughtWorks
  • 26. 26 © Dan North, ThoughtWorks
  • 27. Domain-driven design 101 Model your domain ...and identify the core domain Create a shared language ...and make it ubiquitous Determine the model’s bounded context ...and think about what happens at the edges 27 © Dan North, ThoughtWorks
  • 28. The map is not the territory There are many kinds of model Each is useful in different contexts There is no “perfect” domain model So don’t try to create one! Domain modelling takes practice 28 © Dan North, ThoughtWorks
  • 29. A legacy domain modelling example Map<int, Map<int, int>> portfolioIdsByTraderId; if (portfolioIdsByTraderId.get(trader.getId()) .containsKey(portfolio.getId())) {...} becomes: if (trader.canView(portfolio)) {...} 29 © Dan North, ThoughtWorks
  • 30. We often manage multiple domains You want to retrieve patient records in Java, using Hibernate so you define class HibernatePatientRecordRepository { What if your IDE did domain-specific fonts? 30 © Dan North, ThoughtWorks
  • 31. Writing effective stories Each story represents (part of) a feature and each feature belongs to a stakeholder Each stakeholder represents a domain even the incidental stakeholders Mixing domains within a scenario leads to brittle tests What exactly is the scenario verifying? What does it mean when things change? “What does the stakeholder want from this story?” 31 © Dan North, ThoughtWorks
  • 32. Conclusion 32 © Dan North, ThoughtWorks
  • 33. Software that matters ...has tangible stakeholder value ...is delivered on time, incrementally ...is easy to deploy and manage ...is robust in production ...is easy to understand and communicate BDD is a step in that direction 33 © Dan North, ThoughtWorks
  • 34. Thank you Any questions? dan.north@thoughtworks.com http://dannorth.net @tastapod liz@lunivore.com http://lizkeogh.com @lunivore Google Group: BehaviorDrivenDevelopment 34 © Dan North, ThoughtWorks
  • 35. Bibliography Extreme Programming explained (2nd edition) - Kent Beck Domain-Driven Design - Eric Evans The Art of Systems Thinking and The Way of NLP - Joseph O’Connor 35 © Dan North, ThoughtWorks