behaviour-driven development – a road to effective design and clean code

28
Behaviour-Driven Development A road to effective design and clean code Dan North - ThoughtWorks

Upload: best-tech-videos

Post on 17-Nov-2014

479 views

Category:

Documents


1 download

DESCRIPTION

In this talk, Dan contrasts the traditional top-down and bottom-up approaches with a proven "outside-in" approach based on real life experience - engaging with and listening to our stakeholders. He shows how this can allow us to stay firmly on track, leading to clean code and effective design that provides maximum value to our stakeholders, not just the famous Scrum Product Owner Watch a video at http://www.bestechvideos.com/2009/07/17/behaviour-driven-development-a-road-to-effective-design-and-clean-code

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