Mastering Software Developmentarolla.fr
Arnauld Loyer @aloyer /[TBD]DD/ fanboy
this is a
regular expression!
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
Shared documents aren’t shared understanding - @jeffpatton
http://www.math.u-bordeaux1.fr/~abachelo/enseignement.html
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
!
!!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
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/
@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 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
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
@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