Download - Behavior driven development - a recap (@ Symfony Bucharest Meetup)

Transcript
Page 1: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A L I N P A N D I C H I -

BEHAVIOR DRIVEN DEVELOPMENT A RECAP

SOFTWARE DEVELOPER, TRAINER AND

COACH @ MOZAICWORKS

Page 2: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

BDD HAS GOT A BIT

CONFLATED WITH

ACCEPTANCE TESTING IN

THE PHP COMMUNITY

BECAUSE OF TOOLS LIKE

BEHAT AND

CODECEPTION .

A R E D D I T U S E R

Page 3: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

BDD IS MORE

ABOUT WORKFLOW

AND MINDSET

RATHER THAN

TOOLING .

A N O T H E R R E D D I T U S E R

Page 4: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

OVER TIME , BDD HAS

GROWN TO ENCOMPASS

THE WIDER PICTURE OF

AGILE ANALYSIS AND

AUTOMATED

ACCEPTANCE TESTING .

D A N N O R T H

Page 5: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

WE MUST GO BACK TO TDD

T O U N D E R S T A N D B D D . . .

Page 6: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

HTTP://BLOG.THEFIREHOSEPROJECT.COM/POSTS/TEST-DRIVEN-DEVELOPMENT-RSPEC-VS-TEST-UNIT/

Page 7: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

TYPICAL DEV PROBLEMS IN TDD :

- WHERE TO START

- WHAT TO TEST

- WHAT NOT TO TEST

- HOW MUCH TO TEST

- WHAT TO CAL L THE IR TESTS

- HOW TO UNDERSTAND WHY

A TEST FA I L S

Page 8: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

TEST METHOD NAMES SHOULD BE SENTENCES

01

Page 9: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

TEST METHOD NAMES SHOULD BE SENTENCES

01

public class CustomerLookupTest extends TestCase {

   testFindsCustomerById() {

   }

   testFailsForDuplicateCustomers() {

   }

}

Page 10: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

THE CONVENTION OF STARTING TEST METHOD NAMES

WITH THE WORD “SHOULD”

02

Page 11: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

REMOVED ANY REFERENCE TO TESTING AND REPLACED

IT WITH A VOCABULARY BUILT AROUND VERIFYING

BEHAVIOUR

03

Page 12: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

03

public class CustomerLookupTest extends TestCase {

   testFindsCustomerById() {

   }

   testFailsForDuplicateCustomers() {

   }

}

CustomerLookup

- should find customer by id

- should fail for duplicate customers

- ...

Page 13: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

DISCOVERED THE CONCEPT OF BUSINESS VALUE

04

Page 14: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

I HAD ALWAYS BEEN AWARE

THAT I WROTE SOFTWARE FOR

A REASON ,

BUT I HAD NEVER REALLY

THOUGHT ABOUT THE VALUE

OF THE CODE I WAS WRITING

RIGHT NOW .

D A N N O R T H

Page 15: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

WHAT ’S THE NEXT MOST IMPORTANT THING

THE SYSTEM DOESN ’T DO?

05

Page 16: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

BUT THAT ’S JUST LIKE

ANALYSIS .

Y O U , R I G H T N O W

Page 17: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

APPLY ALL OF THIS BEHAVIOUR-DRIVEN THINKING

TO DEFINING REQUIREMENTS

Page 18: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

DEVELOP A CONSISTENT VOCABULARY FOR ANALYSTS ,

TESTERS , DEVELOPERS , AND THE BUSINESS . . .

Page 19: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

S T E P S T O W A R D S B D D

. . .ELIMINATING SOME OF THE AMBIGUITY AND

MISCOMMUNICATION THAT OCCUR WHEN TECHNICAL

PEOPLE TALK TO BUSINESS PEOPLE .

Page 20: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A S T A R T I N G P O I N T .

USER STORY TEMPLATES

As a [X] I want [Y] so that [Z]

Page 21: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A S T A R T I N G P O I N T .

USER STORY TEMPLATES

As a [X] I want [Y] so that [Z]

I want [some feature] So that... [I just do, ok?]

Page 22: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A S T A R T I N G P O I N T .

USER STORY TEMPLATES

As an Endava employee

I want to ride an elevator to my office

So that I don't sweat climbing 10 floors using the stairs.

Page 23: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

IT SAYS NOTHING ABOUT THE BE BEHAVIOUR OF

THE ELEVATOR

As an Endava employee I want to ride an elevator to my office So that I don't sweat climbing 10 floors using the stairs.

Page 24: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A STORY’S BEHAVIOUR IS SIMPLY ITS

ACCEPTANCE CRITERIA

As an Endava employee I want to ride an elevator to my office So that I don't sweat climbing 10 floors using the stairs.

Page 25: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

DESCRIBE THE ACCEPTANCE CRITERIA IN TERMS

OF SCENARIOS

As an Endava employee I want to ride an elevator to my office So that I don't sweat climbing 10 floors using the stairs.

Page 26: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

DESCRIBE THE ACCEPTANCE CRITERIA IN TERMS

OF SCENARIOS

Given some initial context,

When an event occurs,

then ensure some outcomes.

Page 27: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

ACCEPTANCE CRITERIA IN TERMS OF SCENARIOS

Scenario:

Given I am on the 0 floor

And the elevator is on the 0 floor

And a call for 3 floor is registered

And a call for -1 floor is registered

When I call elevator

And the elevator operates

Then the elevator opens door on -1 level

Then the elevator opens door on 0 level

Then the elevator opens door on 3 level

Page 28: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

F I N A L L Y . . .

ACCEPTANCE CRITERIA COULD BE EXECUTABLE

Page 29: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

THE VISION IS TO HAVE A

ROUND-TRIP EDITOR SO THAT

BA`S AND TESTERS CAN

CAPTURE STORIES IN A

REGULAR TEXT EDITOR THAT

CAN GENERATE STUBS FOR

THE BEHAVIOUR CLASSES , ALL

IN THE LANGUAGE OF THE

BUSINESS DOMAIN .

D A N N O R T H

Page 30: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

BDD PRACTITIONERS

EXPLORE , DISCOVER , DEFINE ,

THEN DRIVE OUT THE DESIRED

BEHAVIOUR OF SOFTWARE

USING CONVERSATIONS ,

CONCRETE EXAMPLES AND

AUTOMATED TESTS .

M A T T W Y N N E

Page 31: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

HTTPS://TWITTER.COM/ANTONYMARCANO/STATUS/894822480141066240

Page 32: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

A GROUP OF PEOPLE

SPECIFYING HOW

SOFTWARE SHOULD

BEHAVE BEFORE

IMPLEMENTING IT .

D A N N O R T H

Page 33: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

N O T T H I S !

HTTPS://TWITTER.COM/SEBROSE/STATUS/913080462444253184

Page 34: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

C E R T A I N L Y N O T T H I S !

HTTP://LABS.IG.COM/CODE-COVERAGE-100-PERCENT-TRAGEDY

Page 35: Behavior driven development - a recap (@ Symfony Bucharest Meetup)

R E A D M O R E :

HTTPS : / /DANNORTH .NET/ INTRODUCING-BDD/

HTTP : / /LABS . IG .COM/CODE-COVERAGE-100-

PERCENT-TRAGEDY

HTTPS : / /WWW .YOUTUBE .COM

/WATCH?V=L95DSKM5FBY

HTTPS : / /GITHUB .COM/MSEKNIBILEL /ELEVATOR-

BDD-KATA