Transcript
Page 1: Behaviour-Driven Development – a road to effective design and clean code

Behaviour-Driven Development

A road to effective design and clean code

Dan North - ThoughtWorks

Page 2: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

My name is Dan

• I am a developer•

I am a coach•

I am your guide

2

Page 3: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Part 1: ineffective design and ugly code

3

Page 4: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Project failures - a field guide

• The project comes in too 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

4

Page 5: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

How we deliver software

• Top-down•

Bottom-up•

Why do we do this?

5

Page 6: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Part 2: effective design and clean code

Page 7: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

If we could deliver better

• Only focus on high-value features• Flatten the cost of change

• of anything, at any stage

• Prioritise often, change often• Adapt to feedback•

Learn!

7

Page 8: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

What we would need

• Streaming requirements• Evolving design• Code we can change• Frequent code integration• Run all the regression tests often

8

Page 9: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Part 3: Getting there with BDD

Page 10: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

A definition of BDD

“Behaviour-driven development is about implementing an application by

describing it from the point of view of its stakeholders”

- Me :)

10

Page 11: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

BDD is derivative

• “Second generation” agile methodology• - XP, especially TDD and CI• - Domain-Driven Design• - Acceptance Test-Driven Planning• - Neurolinguistic Programming (NLP)• - Systems Thinking

11

Page 12: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

What makes BDD?• Getting the words right• Enough is enough

• ...agree on “Done”

• Outside-in• Interactions•

People over Process!

12

Page 13: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

“Getting the words right”

• “When I use a word”, said Humpty Dumpty in a rather scornful tone, “it means just what I

want it to mean, neither more nor less”

• Lewis Carroll - Through the Looking Glass

13

Page 14: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

“Getting the words right”

• Model your domain• ...and identify your core domain

• Create a shared language• ...and make it ubiquitous

• Determine its bounded context• ...and think about what happens at the edges

14

Page 15: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

“Enough up-front thinking”

• Identify the desired outcomes• Do enough to feel safe to estimate

• ...and keep a note of your assumptions

• Then “blink estimate” - with people you trust• ...because anything else is false confidence

Estimation is fractal - don’t misunderestimate!

15

Page 16: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

A story is a unit of delivery

As an Anaesthetist

I want to view the Patient’s surgical history

So that I can choose the most suitable gas

Story 28 - View patient details

16

Page 17: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Try to focus on the value

In order to choose the most suitable gas

an Anaesthetist

wants to view the Patient’s surgical history

Story 28 - View patient details

17

Page 18: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Try to 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 surgery details for later retrieval

18

Page 19: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Agree on “Done”Define acceptance criteria as 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 history

Then I should see all the previous treatments

19

Page 20: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Automate the scenariosEach step corresponds to running code

Given we have a patient on file

In Ruby:

Given “we have a patient on file” do @patient = Patient.createend

In Java:

@Given(“we have a patient on file”)public void createPatient() { patient = patientFactory.create();}

20

Page 21: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

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”

21

Page 22: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Then bring it all together

• Examples become code tests• …and documentation•

Scenarios become acceptance tests• ...which become regression tests•

Automation is key

22

Page 23: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Inside-out - an example

• Map<int, Map<int, int>> portfoliosByTraderId;

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

Becomes:•

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

23

Page 24: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

The team

• The stakeholders• The BAs• The QAs• The developers• The project manager

24

Page 25: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

The destination

Page 26: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Effective Design andClean Code

• ...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 the right direction26

Page 27: Behaviour-Driven Development – a road to effective design and clean code

© 2008 Dan North, ThoughtWorks

Thank you

• Any questions?

[email protected]

• http://dannorth.net

• http://lizkeogh.com• http://jbehave.org

• http://rspec.info

27

Page 28: Behaviour-Driven Development – a road to effective design and clean code

© 2008 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

28


Top Related