72
Mastering Software Development arolla.fr Arnauld Loyer @aloyer /[TBD]DD/ fanboy this is a regular expression!

Bdd training v5.2.0 - public

Embed Size (px)

Citation preview

Mastering Software Developmentarolla.fr

Arnauld Loyer @aloyer /[TBD]DD/ fanboy

this is a

regular expression!

3

Behavior Driven Development

&

Specification by Exampleswith

@aloyer

1. testing new functionalities

2. non-regression testing

3. having conversation

4. writing scenario and automating it

5. using Cucumber/Specflow

6. other…

O

For You what is BDD About?

4@aloyer

Exercise: Draw a 12 points Star

@aloyer 5

@aloyer

Shared documents aren’t shared understanding - @jeffpatton

http://www.math.u-bordeaux1.fr/~abachelo/enseignement.html

http://defringe.com/article/kai-ziehl

Build a Shared Understanding

@aloyer 11

shared understanding@jeffpatton

Shared documentsaren’t

C LN❝

Exercise: Chess moves

@aloyer 12

Specify the Knight movement rules

https://en.wikipedia.org/wiki/Rules_of_chess#Basic_moves

j

Exercise: Chess moves

@aloyer 13

A knight moves to the nearest square not on the same rank, file, or diagonal.

https://en.wikipedia.org/wiki/Rules_of_chess#Basic_moves // https://en.wikipedia.org/wiki/Knight_(chess)

❝j

Exercise: Chess moves

@aloyer 14

File A column of the chessboard. A specific file can be named either using its position in algebraic notation, a–h, or by using its position in descriptive notation.

For example, the f-file or the king bishop file comprises the squares f1–f8 (or KB1–KB8 in descriptive notation)

https://en.wikipedia.org/wiki/Glossary_of_chess#Rank

Rank A row of the chessboard. In algebraic notation, ranks are numbered 1–8 starting from White's side of the board; however, players customarily refer to ranks (but not files) from their own perspectives.

For example: White's king and other pieces start on his first (or "back") rank, whereas Black calls the same rank the eighth rank;

j

Exercise: Chess moves

@aloyer 15

Specify the Knight movement rules

https://en.wikipedia.org/wiki/Rules_of_chess#Basic_moves

jProvide some real examples ?

Exercise: Chess moves

@aloyer 16

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

jGiven a Knight located at d4 Then the Knight should be able to move to: b3, c2, b5, c6, e2, f3, e6, f5

Exercise: Chess moves

@aloyer 17

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

jGiven a Knight located at d4 Then the Knight should be able to move to: b3, c2, b5, c6, e2, f3, e6, f5

Do you need

a valid ga

me

setup to ch

eck this ru

le?

What would make impossible

the Knight to go to those

locations?

Deliberate Discovery

Exercise: Chess moves

@aloyer 18

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

j

l n

l

Given a Knight located at d4

And a King located at c3 And … When the Knight attempts to move to f5 Then …

Exercise: Chess moves

@aloyer 19

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

jGiven a Knight located at d4

And a King located at c3 And … When the Knight attempts to move to f5 Then …

l n

l

thewhite

white

Exercise: Chess moves

@aloyer 20

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

jGiven the board �c3, �d4, �e7, �g7 When the move �d4-f5 is attempted Then …

l n

lBusiness Languagee.g. Algebraic chess notation

Exercise: Chess moves

@aloyer 21

j

a b c d e f g h

1

2

3

4

5

6

7

8

++

++ +

+

++

jGiven the following board -- -- -- -- -- -- -- -- -- -- -- -- bK -- bB -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- wN -- -- -- -- -- -- wK -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- When … l n

lBusiness Languagee.g. Dedicated DSL

Exercise: Chess moves

@aloyer 22

A knight moves to the nearest square not on the same rank, file, or diagonal.

https://en.wikipedia.org/wiki/Rules_of_chess#Basic_moves // https://en.wikipedia.org/wiki/Knight_(chess)

❝j

Given a Knight located at d4 Then the Knight should be able to move to: b3, c2, b5, c6, e2, f3, e6, f5

Rule

Example

~ Acceptance Criteria

Three Amigos

!

!!Developper

Tester/QA

Domain Expert

BDD is the art of using examples in conversation to illustrate behavior

and discover unknowns

@aloyer 25

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

to gain a shared understanding of the desired behavior

and discover unknowns

@aloyer 26

Having conversations with domain experts

but

conversations only are not enough

Curse of Knowledge

B E? ??

���☃℥

http://www.nytimes.com/2007/12/30/business/30know.html?_r=1&

and discover unknowns

@aloyer 27

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

Curse of Knowledge

and discover unknowns

@aloyer 28

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

and discover unknowns

@aloyer 29

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

Ubiquitous Language

and discover unknowns

@aloyer 30

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

Ubiquitous Language

Hunt for rules and

acceptance criteria

@aloyer 31

Exercise: Permissions Inheritance

Files and subfolders can inherit permissions from a parent folder. By default, any new permissions you assign to a folder are passed on to subfolders as well. Thus, when you create a new subfolder in your My Documents folder, it inherits the permissions you've set for your profile. If you made your user profile private, the new subfolder and any files you create or store within it will be private as well.

You can prevent permissions from being inherited by changing the inheritance options for a folder. You can specify that subfolders or files (or both) no longer inherit permissions that have been assigned to the parent folder containing them. Instead, only permissions you explicitly apply to files and subfolders will apply.

Fix Example

@aloyer 32

Exercise: Password Rules

List Sesame RulesExamples?

and discover unknowns

@aloyer 33

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

and discover unknowns

@aloyer 34

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

and discover unknowns

@aloyer 35

Having conversations with domain experts

and using examples

to gain a shared understanding of the desired behavior

conversation patterns

having conversations is more important than capturing conversations is more important than

automating conversations - Liz Keogh

https://www.flickr.com/photos/ironrodart/8678383872/

Outside-InAn Agile point of view

Outside-In

Outside-In

Organisation Goal

Outside-In

Capability/Feature

Outside-In

User Story

Outside-In

Acceptance Criteria

Outside-In

Examples

Outside-In

Automatisation

Outside-InTDD

Implementation …

How

@aloyer 58

Why

What/Intent

Rules for the conversation

five why rules

Tips

Tips

@aloyer 59https://pragprog.com/magazines/2012-01/the-dude-abides

@aloyer 60

tap

.I

deliver running water

hand

wash hands

What do I want? Why? Not how I’ll perform it

Describe the task not the functionTips

@aloyer 61

.I

What do I want? Why? Not how I’ll perform it

Describe the task not the function

In order to really appreciate my meal As a sea food eater I want to wash my hands afterwards

Tips

@aloyer 62

.I

What do I want? Why? Not how I’ll perform it

Describe the task not the function

In order to really appreciate my meal As a sea food eater I want to wash my hands afterwards

In order to <achieve a vision/goal> As a <stakeholder> I want to <value>

Tips

@aloyer 63

Behavior

Behavior = Context + Action + Outcome

Tips

@aloyer 64

Given-When-Then

Then an outcome should be observed

Given a context

When an event happens

3 phases

setup/arrange

exercise/act

verify/assert

Tips

@aloyer 65

Given-When-Then

Then an outcome should be observed

Given a context

When an event happens

3 phases

setup/arrange

exercise/act

verify/assert

behavior

Tips

@aloyer 66

Given-When-Then

Then an outcome should be observed

Given a context

When an event happens

3 phases

Business Language Only!!!

Tips

@aloyer 67

Exercise: Scenario AnalysisScenario: A visitor can add an item to the basket

Given I am viewing a product "product/id/1" When I click "#addNowButton" Then I should see "Items added to basket"

what do you think ?

Tips

@aloyer 68

Scenario: A visitor can add an item to the basket

Given I am viewing a product "product/id/1" When I click "#addNowButton" Then I should see "Items added to basket"

Exercise: Scenario Analysis???

authenticated anonymous…

website? api? web-services?

technical details?

technical details?

Tips

@aloyer 69

In order to ease buying As a visitor I want to be able to add item in my basket

Scenario: A non authenticated visitor can add item to its basket

Given I was not yet authenticated And I had no item in my basket And I was looking at the book « Living Documentation » When I add the book in my basket Then my basket should contain the book « Living Documentation »

Scenario: A visitor can add an item to the basket

Given I am viewing a product "product/id/1" When I click "#addNowButton" Then I should see "Items added to basket"

Exercise: Scenario Analysis

only

1st… 2nd… 3rd… nth draft

Tips

@aloyer 70

In order to ease buying As a visitor I want to be able to add item in my basket

Scenario: A non authenticated visitor can add item to its basket

Given I was not yet authenticated And I had no item in my basket And I was looking at the book « Living Documentation » When I add the book in my basket Then my basket should contain the book « Living Documentation »

Exercise: Scenario Analysis

only

there is already something in the basket

the book was already in the basket it is the second time i visit the site anonymously…

a book was in the basket but not anymore available…

what if?

Tips

@aloyer 71

Scenario: A non authenticated visitor can add item to its basket

Given I was not yet authenticated And I had no item in my basket And I was looking at the book « Living Documentation » When I add the book in my basket Then my basket should contain only the book « Living Documentation »

Scenario: An authenticated visitor can add item to its basket

Given I was already authenticated as « Emma » And I had no item in my basket And I was looking at the book « Living Documentation » When I add the book in my basket Then my basket should contain only the book « Living Documentation »

Exercise: Scenario AnalysisTips

How

@aloyer 72

Why

What/Intent

What if…?

use Should

Business Language only

Always assume you’re ignorantProvide a context for your use-case

Rules for the conversationTips

Tips

C QExamples

LO

A P

LLLRequirements

N3 Amigos Workshop

development / tests

uat@aloyer 73

when

http://yellowpencil.com/blog/testing-testing-1-2-3/ @aloyer 74http://www.isixsigma.com/industries/software-it/defect-prevention-reducing-costs-and-enhancing-quality/

Relative Costs to Fix Software Defects (Source: IBM Systems Sciences Institute)

automation

ExamplesTests

Requirements

clarify

can become

verify

@aloyer

ExamplesTests

Requirements

clarify

can become

verify

@aloyer

Show me some real examples!

@aloyer

Examples of « Horse Betting » scenario

@aloyer

Examples of « Horse Betting » scenario

@aloyer

Scenario: Without an audit, I cannot cancel a deal with a passed value date

Given I have inserted a standard OTC deal with a standard product and the following specific | price | trade date | value date | | 50 | 2014-JUL-01 | 2014-JUL-01 | When I try to cancel the deal Then I should have an error message indicating "The input is not intraday: you must provide a justification"

Scenario: Volume OTC deals

Given a standard option And a standard external OTC deal with the following specifics | way | quantity | | buy | 100 | When I create the option And I create the deal with the created product And I generate the report Volume OTC deals Then the deal should appear in the report

Examples of « CIB » scenario

@aloyer

Scenario: The portfolio position of an OTC option is properly impacted when a deal is created # # In financial trading, a position is a binding commitment to buy or sell a given amount # of financial instruments, such as securities, currencies or commodities, for a given price. # # The term "position" is also used in the context of finance for the amount of securities # or commodities held by a person, firm, or institution, and for the ownership status of # a person's or institution's investments. # # Note: strike is part of the unicity of the product; by using different strike value one # can ensure product is different among scenario Given a standard option with no specifics And a standard external OTC deal with the following specifics | portfolio | direction | quantity | | PR-GT-FR | buy | 100 | When I create the option And I check the position of the option in portfolio PR-GT-FR for TODAY And I create the deal with the created option Then the position of the option in portfolio PR-GT-FR for TODAY should be the checked position - 100

Examples of « CIB » scenario

@aloyer

Scenario: ELS - insert a CLP with a rate leg and an option leg

# L'ELS (Equity Linked Swap) est un produit dérivé modélisé en CLP (Combinaison linéaire de # produits) et permettant à deux parties de s’échanger des flux de performances et de # dividendes d’un sous-jacent equity contre un taux (jambe performance contre jambe taux).

Given a standard ELSCL PRS with the following specifics | Start date | Maturity date | End date | | 2014/02/05 | 2014/02/13 | 2014/02/13 | And with the following legs | type | numerator | | Rate | -1 | | Option | +1 | And on the following periods (with a dedicated option for each) | Start date | Constatation date | Fixing date | Payment date | End date | | 2014/02/05 | 2014/02/05 | 2015/02/05 | 2015/02/05 | 2015/02/05 | | 2015/02/05 | 2015/02/05 | 2015/02/05 | 2016/02/09 | 2016/02/09 | | 2016/02/09 | 2016/02/09 | 2016/02/09 | 2017/02/07 | 2017/02/07 | | 2017/02/07 | 2017/02/07 | 2017/02/07 | 2018/02/06 | 2018/02/06 | | 2018/02/06 | 2018/02/06 | 2018/02/06 | 2019/02/05 | 2019/02/05 | Given a standard external ELS deal with the following specifics | Trade date | Value date | Category | | 2014/02/05 | 2014/02/05 | ELSCL | When I create the ELSCL And I create an external ELS deal with the created ELSCL Then the deal should correctly be created

Examples of « CIB » scenario

https://mes-aides.gouv.fr/tests/ - 2015-MAR-16

https://mes-aides.gouv.fr/tests/ - 2015-MAR-16

https://mes-aides.gouv.fr/tests/ - 2015-MAR-16

Three Amigos

Specifications

Requirements

Validate Examples Development

Automation Living Documentation

Examples

Validatio

n

Non-Regression

Right Software

@aloyer 87