O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Behavior Driven Development
Writing better scenario
Arnauld LOYER — @aloyer Mastering Software Development
EAre You really...
Disclaimer
No scenario has been harmed during the investigation
github search:
extension:feature travel/deal/…
Most remark...
Let’s try to diagnose the maturity
@aloyer
Anti-Pattern
… an antipattern was something
that seems like a good idea when
yo...
Having conversations with domain experts
and discover unknowns
and using examples
to gain a shared understanding of the de...
Ready?
Functional Tests or BDD ?
@aloyer
Functional Tests or BDD ?
@aloyer
Functional Tests or BDD ?
@aloyer
Acceptance
Feature: The Confluence server is up



In order to make sure that Confluence has been installed and runs

As a developer
...
Feature: The Confluence server is up



In order to make sure that Confluence has been installed and runs

As a developer
...
Feature: The Confluence server is up



In order to make sure that Confluence has been installed and runs

As a developer
...
@aloyer 12
Given-When-Then
Then an outcome should be observed
Given a context
When an event happens
3 phases
setup/arrange...
Feature: Asset Manager



@local-network

@normal

Scenario: check an asset can be loaded

Given I am testing "asset-manag...
Feature: Asset Manager



@local-network

@normal

Scenario: check an asset can be loaded

Given I am testing "asset-manag...
Feature: Asset Manager



@local-network

@normal

Scenario: check an asset can be loaded

Given I am testing "asset-manag...
Tests BDD
Business
Tech’
Cucumber
Behavior
Let’s try to diagnose the maturity
@aloyer
Should I use cucumber to write technical tests?
Be pragmatic!
Who will read the scenario?
Are you ready to pay the cucumbe...
Who write the scenario ?
&read
@aloyer
L
N
C
Tester
Business/PO Developer
?
@aloyer
Feature: Asset Manager



@local-network

@normal

Scenario: check an asset can be loaded

Given I am testing "asset-manag...
@MoveToken

Feature: Moving the token over the board



As a player

I want to move to new positions on the board

So that...
@MoveToken

Feature: Moving the token over the board



As a player

I want to move to new positions on the board

So that...
@MoveToken

Feature: Moving the token over the board



As a player

I want to move to new positions on the board

So that...
Feature: Deal team invitations



1. A "My deals" section with

The deals that I created

The deals on which me or my team...
Feature: Deal team invitations



1. A "My deals" section with

The deals that I created

The deals on which me or my team...
Feature: Deal team invitations



1. A "My deals" section with

The deals that I created

The deals on which me or my team...
Feature: Deal team invitations



1. A "My deals" section with

The deals that I created

The deals on which me or my team...
Feature: Deals display order in the home page

As an FO

I need to see my deals ordered in the way that fits my function

...
Feature: Deals display order in the home page

As an FO

I need to see my deals ordered in the way that fits my function

...
Feature: Deals display order in the home page

As an FO

I need to see my deals ordered in the way that fits my function

...
Feature: Deals display order in the home page

As an FO

I need to see my deals ordered in the way that fits my function

...
Feature: Deals display order in the home page

As an FO

I need to see my deals ordered in the way that fits my function

...
Tests BDD
Business
Tech’
Cucumber
Behavior
Let’s try to diagnose the maturity
@aloyer
Cucumber
3 Amigos
Tests BDD
Business
Tech’
Behavior
Let’s try to diagnose the maturity
@aloyer
Cucumber
3 Amigos
Tests BDD
Business
Tech’
Behavior
Let’s try to diagnose the maturity
Scenario
@aloyer
Cucumber
Scenario
3 Amigos
Driven Development
Tests BDD
Business
Tech’
Behavior
Let’s try to diagnose the maturity
@aloyer
Scenario should be written using the Business Language
Together
What is the intent?
Have I understood the expected behavio...
What level of details ?
Writing better scenario
@aloyer
@BuyingProperties

Feature: Buying properties



As a player

I want to buy properties

So that I can ask rent when my opp...
@BuyingProperties

Feature: Buying properties



As a player

I want to buy properties

So that I can ask rent when my opp...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Default properties - explicit

Given the default properties are used

Then the available properties should be at...
Scenario: Buying property

Given I land on unowned property

And my funds are sufficient

When I choose to buy the propert...
Scenario: Create a Stock option
Given the following option:
| Property | Value |
| delivery | Cash |
| bo strike | no |
| ...
Scenario: Create an external OTC deal
Given the following option:
| Property | Value |
| delivery | Cash |
| bo strike | n...
Scenario: Standard option
Given a standard option with no specifics
Then the option should have the following properties:
|...
Scenario: Create a Stock option
Given the following option:
| Property | Value |
| delivery | Cash |
| bo strike | no |
| ...
Enough details ?
http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/
@aloyer
Enough details ?
http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/
@aloyer
Lot of details ...
Enough details ?
http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/
@aloyer
Lot of details ...
Enough details ?
http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/
@aloyer
why no date the...
Enough details ?
http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/
@aloyer
Why would such ...
@aloyer
@aloyer
# language: fr

Fonctionnalité:













@reseau_simplifié

Scénario: Obtenir une feuille de l'itinéraire par ...
@aloyer
# language: fr

Fonctionnalité:







Scénario: Rer A dans le réseau de transport simplifié



Etant donné le rés...
To be continued…
@aloyer
# language: fr

Fonctionnalité:



Scénario: Le métro 1 dans le réseau de transport simplifié



...
Adjust the cursor
@aloyer
declarative imperative
too much
details
not enough
details
Adjust the cursor
@aloyer
declarative imperative
too much
details
not enough
details
Together!
Remove ambiguities but keep scenario short
Am I concrete enough on the expected behavior?
Signal vs noise ratio?
What if t...
is NOT About is About
BDD
!
"
KLa tool for test automation communication
acceptance criteriaL K behavior
Questions?
Arnauld LOYER — @aloyer
QTraining
Coaching
/[TBD]DD/
Testing/Clean Code
Mastering Software Development
Próximos SlideShares
Carregando em…5
×

BDD - Writing better scenario

156.124 visualizações

Publicada em

Brown Bag Lunch (BBL) on Behavior Driven Development (BDD) - scenario anti-patterns - three amigos - scenario review

Publicada em: Software, Tecnologia
  • Visit this site: tinyurl.com/sexinarea and find sex in your area for one night)) You can find me on this site too)
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Earn $500 for taking a 1 hour paid survey! read more... ★★★ https://tinyurl.com/make2793amonth
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Discover the secrets to getting a bigger penis naturally with this 100% free. ●●● http://ishbv.com/pebible/pdf
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Sex in your area for one night is there tinyurl.com/hotsexinarea Copy and paste link in your browser to visit a site)
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Proof Of REAL Growth. Women Lie: Size DOES Matter, They HATE It When It's Small. Don't Disapoint Her With Your Little Guy. ◆◆◆ https://tinyurl.com/yaygh4xh
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

BDD - Writing better scenario

  1. Behavior Driven Development Writing better scenario Arnauld LOYER — @aloyer Mastering Software Development EAre You really doing BDD?
  2. Disclaimer No scenario has been harmed during the investigation github search: extension:feature travel/deal/… Most remarks are purely subjectives @aloyer
  3. Let’s try to diagnose the maturity @aloyer Anti-Pattern … an antipattern was something that seems like a good idea when you begin, but leads you into trouble. http://martinfowler.com/bliki/AntiPattern.html
  4. Having conversations with domain experts and discover unknowns and using examples to gain a shared understanding of the desired behavior @aloyer C
  5. Ready?
  6. Functional Tests or BDD ? @aloyer
  7. Functional Tests or BDD ? @aloyer
  8. Functional Tests or BDD ? @aloyer Acceptance
  9. Feature: The Confluence server is up
 
 In order to make sure that Confluence has been installed and runs
 As a developer
 I want to access Confluence's home page
 
 Scenario: Developer accesses the home page
 Given the url of Confluences home page
 When a web user browses to the url
 Then the connection should be successful
 Then the page status should be OK
 Then the page should have the title "Confluence Setup Wizard - Confluence" https://github.com/xebia-france/chef-confluence-jira-crowd/blob/a26e29a85d1e75b9b612a560685940b40c971adc/test/integration/confluence-jira-crowd/cucumber/confluence_up.feature BDD ? @aloyer
  10. Feature: The Confluence server is up
 
 In order to make sure that Confluence has been installed and runs
 As a developer
 I want to access Confluence's home page
 
 Scenario: Developer accesses the home page
 Given the url of Confluences home page
 When a web user browses to the url
 Then the connection should be successful
 Then the page status should be OK
 Then the page should have the title "Confluence Setup Wizard - Confluence" https://github.com/xebia-france/chef-confluence-jira-crowd/blob/a26e29a85d1e75b9b612a560685940b40c971adc/test/integration/confluence-jira-crowd/cucumber/confluence_up.feature Sanity CheckBDD ? behavior ? @aloyer
  11. Feature: The Confluence server is up
 
 In order to make sure that Confluence has been installed and runs
 As a developer
 I want to access Confluence's home page
 
 Scenario: Developer accesses the home page
 Given the url of Confluences home page
 When a web user browses to the url
 Then the connection should be successful
 Then the page status should be OK
 Then the page should have the title "Confluence Setup Wizard - Confluence" https://github.com/xebia-france/chef-confluence-jira-crowd/blob/a26e29a85d1e75b9b612a560685940b40c971adc/test/integration/confluence-jira-crowd/cucumber/confluence_up.feature Sanity CheckBDD ? behavior ? @aloyer
  12. @aloyer 12 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
  13. Feature: Asset Manager
 
 @local-network
 @normal
 Scenario: check an asset can be loaded
 Given I am testing "asset-manager"
 And I am an authenticated API client
 When I visit "/assets/513a0efbed915d425e000002"
 Then I should get a 200 status code
 And I should see "120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 
 @normal
 Scenario: check an asset can be served
 Given I am testing "static"
 When I visit "/media/ 513a0efbed915d425e000002/120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 Then I should get a 200 status code
 And I should get a content length of "212880" https://github.com/alphagov/smokey/blob/4c8fe739938e4a4b8b7bb393dfd485efd39dc034/features/asset_manager.feature BDD ? @aloyer
  14. Feature: Asset Manager
 
 @local-network
 @normal
 Scenario: check an asset can be loaded
 Given I am testing "asset-manager"
 And I am an authenticated API client
 When I visit "/assets/513a0efbed915d425e000002"
 Then I should get a 200 status code
 And I should see "120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 
 @normal
 Scenario: check an asset can be served
 Given I am testing "static"
 When I visit "/media/ 513a0efbed915d425e000002/120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 Then I should get a 200 status code
 And I should get a content length of "212880" https://github.com/alphagov/smokey/blob/4c8fe739938e4a4b8b7bb393dfd485efd39dc034/features/asset_manager.feature BDD ? Business Language? Technical Test web page Selenium technical details @aloyer
  15. Feature: Asset Manager
 
 @local-network
 @normal
 Scenario: check an asset can be loaded
 Given I am testing "asset-manager"
 And I am an authenticated API client
 When I visit "/assets/513a0efbed915d425e000002"
 Then I should get a 200 status code
 And I should see "120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 
 @normal
 Scenario: check an asset can be served
 Given I am testing "static"
 When I visit "/media/ 513a0efbed915d425e000002/120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 Then I should get a 200 status code
 And I should get a content length of "212880" https://github.com/alphagov/smokey/blob/4c8fe739938e4a4b8b7bb393dfd485efd39dc034/features/asset_manager.feature BDD ? Technical Test differences? @aloyer different results? Unclear and non-sustainable
  16. Tests BDD Business Tech’ Cucumber Behavior Let’s try to diagnose the maturity @aloyer
  17. Should I use cucumber to write technical tests? Be pragmatic! Who will read the scenario? Are you ready to pay the cucumber overhead? compared to raw xUnit tests Do you really contribute to a shared knowledge or do you increase the business/technical gap? @aloyer
  18. Who write the scenario ? &read @aloyer
  19. L N C Tester Business/PO Developer ? @aloyer
  20. Feature: Asset Manager
 
 @local-network
 @normal
 Scenario: check an asset can be loaded
 Given I am testing "asset-manager"
 And I am an authenticated API client
 When I visit "/assets/513a0efbed915d425e000002"
 Then I should get a 200 status code
 And I should see "120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 
 @normal
 Scenario: check an asset can be served
 Given I am testing "static"
 When I visit "/media/ 513a0efbed915d425e000002/120613_Albania_Travel_Advice_WEB_Ed2_jpeg.jpg"
 Then I should get a 200 status code
 And I should get a content length of "212880" https://github.com/alphagov/smokey/blob/4c8fe739938e4a4b8b7bb393dfd485efd39dc034/features/asset_manager.feature Who wrote this ? @aloyer
  21. @MoveToken
 Feature: Moving the token over the board
 
 As a player
 I want to move to new positions on the board
 So that I can get rich and win the game
 
 Scenario Outline: Moving a token after a single throw
 Given players token is at starting position <startingPosition>
 When player throws die1 <die1> and die2 <die2>
 Then players token moves to a new position <newPosition>
 
 Examples:
 | startingPosition | die1 | die2 | newPosition |
 | 1 | 1 | 2 | 4 |
 | 2 | 3 | 4 | 9 |
 | 39 | 2 | 2 | 3 |
 Forgot the rule ? https://github.com/xebia/spec-by-example-2014-09-29/blob/4eabded6b22e816f6509a3ecd2c2180b62f4d73d/src/test/resources/monopoly/cucumber/MoveToken.feature @aloyer
  22. @MoveToken
 Feature: Moving the token over the board
 
 As a player
 I want to move to new positions on the board
 So that I can get rich and win the game
 
 Scenario Outline: Moving a token after a single throw
 Given players token is at starting position <startingPosition>
 When player throws die1 <die1> and die2 <die2>
 Then players token moves to a new position <newPosition>
 
 Examples:
 | startingPosition | die1 | die2 | newPosition |
 | 1 | 1 | 2 | 4 |
 | 2 | 3 | 4 | 9 |
 | 39 | 2 | 2 | 3 |
 Forgot the rule ? https://github.com/xebia/spec-by-example-2014-09-29/blob/4eabded6b22e816f6509a3ecd2c2180b62f4d73d/src/test/resources/monopoly/cucumber/MoveToken.feature @aloyer where is the rule? The All-In-One Effect
  23. @MoveToken
 Feature: Moving the token over the board
 
 As a player
 I want to move to new positions on the board
 So that I can get rich and win the game
 
 Scenario Outline: Moving a token after a single throw
 Given players token is at starting position <startingPosition>
 When player throws die1 <die1> and die2 <die2>
 Then players token moves to a new position <newPosition>
 
 Examples:
 | startingPosition | die1 | die2 | newPosition |
 | 1 | 1 | 2 | 4 |
 | 2 | 3 | 4 | 9 |
 | 39 | 2 | 2 | 3 |
 Forgot the rule ? https://github.com/xebia/spec-by-example-2014-09-29/blob/4eabded6b22e816f6509a3ecd2c2180b62f4d73d/src/test/resources/monopoly/cucumber/MoveToken.feature where is the rule? the outline effect @aloyer The All-In-One Effect
  24. Feature: Deal team invitations
 
 1. A "My deals" section with
 The deals that I created
 The deals on which me or my team are deal leaders
 The deals on which me or my team are deal members
 
 2. A "Other deals" section with:
 The deals for which me or my team are "other contact"
 
 Scenario Outline: People invited into deal team directly
 Given the following deals have been created
 | Name | Creator | User leaders | User members | User other contacts |
 | AF | John | Charlotte | Peter | Diego |
 | KLM | Charlotte | John | Charlotte | Peter |
 | IB | Charlotte | Charlotte | John | Peter |
 | GW | Diego | Charlotte | Peter | John |
 | TAP | Diego | Charlotte | Peter | |
 | TUN | Diego | Charlotte | Peter | Matthieu |
 When <user> logs into the platform
 Then the My deals section should have only <my deals>
 And the Other deals section should have only <other deals>
 
 Examples:
 | user | my deals | other deals |
 | John | AF, KLM, IB | GW |
 | Charlotte | AF, KLM, IB, GW, TAP, TUN | <none> |
 | Peter | AF, GW, TAP, TUN | KLM, IB |
 | Matthieu | <none> | TUN |
 | Mariem | <none> | <none> | Is the rule obvious? @aloyer
  25. Feature: Deal team invitations
 
 1. A "My deals" section with
 The deals that I created
 The deals on which me or my team are deal leaders
 The deals on which me or my team are deal members
 
 2. A "Other deals" section with:
 The deals for which me or my team are "other contact"
 
 Scenario Outline: People invited into deal team directly
 Given the following deals have been created
 | Name | Creator | User leaders | User members | User other contacts |
 | AF | John | Charlotte | Peter | Diego |
 | KLM | Charlotte | John | Charlotte | Peter |
 | IB | Charlotte | Charlotte | John | Peter |
 | GW | Diego | Charlotte | Peter | John |
 | TAP | Diego | Charlotte | Peter | |
 | TUN | Diego | Charlotte | Peter | Matthieu |
 When <user> logs into the platform
 Then the My deals section should have only <my deals>
 And the Other deals section should have only <other deals>
 
 Examples:
 | user | my deals | other deals |
 | John | AF, KLM, IB | GW |
 | Charlotte | AF, KLM, IB, GW, TAP, TUN | <none> |
 | Peter | AF, GW, TAP, TUN | KLM, IB |
 | Matthieu | <none> | TUN |
 | Mariem | <none> | <none> | Is the rule obvious?ARE S
  26. Feature: Deal team invitations
 
 1. A "My deals" section with
 The deals that I created
 The deals on which me or my team are deal leaders
 The deals on which me or my team are deal members
 
 2. A "Other deals" section with:
 The deals for which me or my team are "other contact"
 
 Scenario Outline: People invited into deal team directly
 Given the following deals have been created
 | Name | Creator | User leaders | User members | User other contacts |
 | AF | John | Charlotte | Peter | Diego |
 | KLM | Charlotte | John | Charlotte | Peter |
 | IB | Charlotte | Charlotte | John | Peter |
 | GW | Diego | Charlotte | Peter | John |
 | TAP | Diego | Charlotte | Peter | |
 | TUN | Diego | Charlotte | Peter | Matthieu |
 When <user> logs into the platform
 Then the My deals section should have only <my deals>
 And the Other deals section should have only <other deals>
 
 Examples:
 | user | my deals | other deals |
 | John | AF, KLM, IB | GW |
 | Charlotte | AF, KLM, IB, GW, TAP, TUN | <none> |
 | Peter | AF, GW, TAP, TUN | KLM, IB |
 | Matthieu | <none> | TUN |
 | Mariem | <none> | <none> | what if …I belongs to multiple group? Is the rule obvious?ARE S the outline effect
  27. Feature: Deal team invitations
 
 1. A "My deals" section with
 The deals that I created
 The deals on which me or my team are deal leaders
 The deals on which me or my team are deal members
 
 2. A "Other deals" section with:
 The deals for which me or my team are "other contact"
 
 Scenario Outline: People invited into deal team directly
 Given the following deals have been created
 | Name | Creator | User leaders | User members | User other contacts |
 | AF | John | Charlotte | Peter | Diego |
 | KLM | Charlotte | John | Charlotte | Peter |
 | IB | Charlotte | Charlotte | John | Peter |
 | GW | Diego | Charlotte | Peter | John |
 | TAP | Diego | Charlotte | Peter | |
 | TUN | Diego | Charlotte | Peter | Matthieu |
 When <user> logs into the platform
 Then the My deals section should have only <my deals>
 And the Other deals section should have only <other deals>
 
 Examples:
 | user | my deals | other deals |
 | John | AF, KLM, IB | GW |
 | Charlotte | AF, KLM, IB, GW, TAP, TUN | <none> |
 | Peter | AF, GW, TAP, TUN | KLM, IB |
 | Matthieu | <none> | TUN |
 | Mariem | <none> | <none> | what if …I belongs to multiple group? Is the rule obvious?ARE S the outline effect
  28. Feature: Deals display order in the home page
 As an FO
 I need to see my deals ordered in the way that fits my function
 In order to have a clear view of the most important or urgent deals.
 
 Clarifications:
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For cards display, the oldest cards will be on the top and for cards on the same row, the oldest card will be on the left.
 For table display, the oldest cards will on the top.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user members | user other contacts | expected closing date | pricing status | Credit approval status | Lso deal code | Cwf request code | stage | confidentiality level |
 | Aircraft AF | Air France | 150000000 | Johny | Charlotte | Peter | Diego | May 12, 2016 | true | Not submitted | L0377450 | 2015_07_001105 | Marketing | My Team |
 | Aircraft KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | Peter | Jul 11, 2014 | false | In progress | L0377451 | 2015_08_001105 | Bidding | Confidential |
 | Aircraft TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte | Peter | Jul 12, 2014 | false | In progress | L0377451 | 2015_09_001105 | Bidding | My Team |
 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as Aircraft KLM,Aircraft TUN,Aircraft AF
 the A4 rule ? @aloyer
  29. Feature: Deals display order in the home page
 As an FO
 I need to see my deals ordered in the way that fits my function
 In order to have a clear view of the most important or urgent deals.
 
 Clarifications:
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For cards display, the oldest cards will be on the top and for cards on the same row, the oldest card will be on the left.
 For table display, the oldest cards will on the top.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user members | user other contacts | expected closing date | pricing status | Credit approval status | Lso deal code | Cwf request code | stage | confidentiality level |
 | Aircraft AF | Air France | 150000000 | Johny | Charlotte | Peter | Diego | May 12, 2016 | true | Not submitted | L0377450 | 2015_07_001105 | Marketing | My Team |
 | Aircraft KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | Peter | Jul 11, 2014 | false | In progress | L0377451 | 2015_08_001105 | Bidding | Confidential |
 | Aircraft TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte | Peter | Jul 12, 2014 | false | In progress | L0377451 | 2015_09_001105 | Bidding | My Team |
 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as Aircraft KLM,Aircraft TUN,Aircraft AF
 the A4 rule ? Feature: Deals display order in the home page
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user memb | AF | Air France | 150000000 | Johny | Charlotte | Peter | KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as KLM, TUN, AF
  30. Feature: Deals display order in the home page
 As an FO
 I need to see my deals ordered in the way that fits my function
 In order to have a clear view of the most important or urgent deals.
 
 Clarifications:
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For cards display, the oldest cards will be on the top and for cards on the same row, the oldest card will be on the left.
 For table display, the oldest cards will on the top.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user members | user other contacts | expected closing date | pricing status | Credit approval status | Lso deal code | Cwf request code | stage | confidentiality level |
 | Aircraft AF | Air France | 150000000 | Johny | Charlotte | Peter | Diego | May 12, 2016 | true | Not submitted | L0377450 | 2015_07_001105 | Marketing | My Team |
 | Aircraft KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | Peter | Jul 11, 2014 | false | In progress | L0377451 | 2015_08_001105 | Bidding | Confidential |
 | Aircraft TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte | Peter | Jul 12, 2014 | false | In progress | L0377451 | 2015_09_001105 | Bidding | My Team |
 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as Aircraft KLM,Aircraft TUN,Aircraft AF
 the A4 rule ? Feature: Deals display order in the home page
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user memb | AF | Air France | 150000000 | Johny | Charlotte | Peter | KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as KLM, TUN, AF
  31. Feature: Deals display order in the home page
 As an FO
 I need to see my deals ordered in the way that fits my function
 In order to have a clear view of the most important or urgent deals.
 
 Clarifications:
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For cards display, the oldest cards will be on the top and for cards on the same row, the oldest card will be on the left.
 For table display, the oldest cards will on the top.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user members | user other contacts | expected closing date | pricing status | Credit approval status | Lso deal code | Cwf request code | stage | confidentiality level |
 | Aircraft AF | Air France | 150000000 | Johny | Charlotte | Peter | Diego | May 12, 2016 | true | Not submitted | L0377450 | 2015_07_001105 | Marketing | My Team |
 | Aircraft KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | Peter | Jul 11, 2014 | false | In progress | L0377451 | 2015_08_001105 | Bidding | Confidential |
 | Aircraft TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte | Peter | Jul 12, 2014 | false | In progress | L0377451 | 2015_09_001105 | Bidding | My Team |
 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as Aircraft KLM,Aircraft TUN,Aircraft AF
 the A4 rule ? Feature: Deals display order in the home page
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user memb | AF | Air France | 150000000 | Johny | Charlotte | Peter | KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as KLM, TUN, AF B
  32. Feature: Deals display order in the home page
 As an FO
 I need to see my deals ordered in the way that fits my function
 In order to have a clear view of the most important or urgent deals.
 
 Clarifications:
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For cards display, the oldest cards will be on the top and for cards on the same row, the oldest card will be on the left.
 For table display, the oldest cards will on the top.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | client name | total amount | creator | user leaders | user members | user other contacts | expected closing date | pricing status | Credit approval status | Lso deal code | Cwf request code | stage | confidentiality level |
 | Aircraft AF | Air France | 150000000 | Johny | Charlotte | Peter | Diego | May 12, 2016 | true | Not submitted | L0377450 | 2015_07_001105 | Marketing | My Team |
 | Aircraft KLM | KLM | 15000000 | Charlotte | Johny | Charlotte | Peter | Jul 11, 2014 | false | In progress | L0377451 | 2015_08_001105 | Bidding | Confidential |
 | Aircraft TUN | Tunisair | 16000000 | Johny | Charlotte | Charlotte | Peter | Jul 12, 2014 | false | In progress | L0377451 | 2015_09_001105 | Bidding | My Team |
 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as Aircraft KLM,Aircraft TUN,Aircraft AF
 the A4 rule ? Feature: Deals display order in the home page
 Deals should be ordered by expected closing date, the first deals displayed should be the ones with the oldest expected closing date.
 For deals with the same expected closing date, they should be ordered by deal name
 
 Scenario: Deals display order
 Given the following deals
 | name | expected closing date |
 | AF | May 12, 2016 |
 | KLM | Jul 11, 2014 |
 | TUN | Jul 12, 2014 | 
 When Charlotte logs into the platform
 Then the My deals section must be ordered as KLM, TUN, AF O
  33. Tests BDD Business Tech’ Cucumber Behavior Let’s try to diagnose the maturity @aloyer
  34. Cucumber 3 Amigos Tests BDD Business Tech’ Behavior Let’s try to diagnose the maturity @aloyer
  35. Cucumber 3 Amigos Tests BDD Business Tech’ Behavior Let’s try to diagnose the maturity Scenario @aloyer
  36. Cucumber Scenario 3 Amigos Driven Development Tests BDD Business Tech’ Behavior Let’s try to diagnose the maturity @aloyer
  37. Scenario should be written using the Business Language Together What is the intent? Have I understood the expected behavior? Do I clearly understand the rule when reading a scenario? How many rules are exposed within the scenario? @aloyer Try to limit to One rule per scenario
  38. What level of details ? Writing better scenario @aloyer
  39. @BuyingProperties
 Feature: Buying properties
 
 As a player
 I want to buy properties
 So that I can ask rent when my opponents land on it
 
 Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed
 
 
 Scenario: No sufficient funds
 Given I land on unowned property
 And my funds are not sufficient
 Then I am not able to buy the property
 https://github.com/xebia/workshop-agile-testing/blob/8705e3f93270662285cd9c8ec8c24e5ac957f3ed/src/test/resources/features/BuyingProperties.feature Enough details ? @aloyer
  40. @BuyingProperties
 Feature: Buying properties
 
 As a player
 I want to buy properties
 So that I can ask rent when my opponents land on it
 
 Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed
 
 
 Scenario: No sufficient funds
 Given I land on unowned property
 And my funds are not sufficient
 Then I am not able to buy the property
 https://github.com/xebia/workshop-agile-testing/blob/8705e3f93270662285cd9c8ec8c24e5ac957f3ed/src/test/resources/features/BuyingProperties.feature Enough details ? too declarative which one? what does it mean? « Pay » is an outcome? Choose? @aloyer
  41. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed @aloyer
  42. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 @aloyer
  43. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed to pay is an action (when) not an outcome (then) value can be changed 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 can help to project to other case Can it always be applied? @aloyer
  44. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 @Then("^my funds should be (?:decreased to |increased to )?(d+)$")
 public void my_funds_should_be_(int amount) @aloyer
  45. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed @default_properties
 Scenario: Default properties - by tag
 Then the available properties should be at least:
 | name | price |
 | east | 150 |
 | west | 200 |
 | north | 100 |
 | south | 40 | 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 @aloyer
  46. Scenario: Default properties - explicit
 Given the default properties are used
 Then the available properties should be at least:
 | name | price |
 | east | 150 |
 | west | 200 |
 | north | 100 |
 | south | 40 | Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed @default_properties
 Scenario: Default properties - by tag
 Then the available properties should be at least:
 | name | price |
 | east | 150 |
 | west | 200 |
 | north | 100 |
 | south | 40 | 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 @aloyer
  47. Scenario: Buying property
 Given I land on unowned property
 And my funds are sufficient
 When I choose to buy the property
 Then I pay the printed price
 And I receive the title deed 
 @default_properties @default_player
 Scenario: Buying property
 
 
 Given I land on unowned "west" property that cost 180
 When I choose to buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased by 180 
 @default_properties
 Scenario: Buying property
 
 Given I land on unowned "west" property
 And my funds are 2000
 When I buy the property
 And I pay the printed price
 Then I should receive the "west" title deed
 And my funds should be decreased to 1800 @aloyer
  48. Scenario: Create a Stock option Given the following option: | Property | Value | | delivery | Cash | | bo strike | no | | floor | 0 | | forex constat | - | | forex constat date | 1970-JAN-01 | | forex start date | 1970-JAN-01 | | guaranteed currency | EUR | | guaranteed rate | 0 | | initial spot | 0 | ... | maturity | 2020-FEB-05 | | option quotity | 1 | | strike | 2500 | | underlying id | SOCIETE-GLE_X | | underlying type | Stock | And the option’s restriking infos is: | Property | Value | | floating rate | no | | fixed rate | no | ... | last update | <now> | | first trading date | <now> | | rate offset | 0.0 | When I create the option Then the option id should be filled in Scenario: Create a Fund option Given the following option: | Property | Value | | delivery | Cash | | bo strike | no | | floor | 0 | | forex constat | - | | forex constat date | 1970-JAN-01 | | forex start date | 1970-JAN-01 | | guaranteed currency | EUR | | guaranteed rate | 0 | | initial spot | 0 | ... | maturity | 2020-FEB-05 | | option quotity | 1 | | strike | 2500 | | underlying id | SOCIETE-GLE_X | | underlying type | Fund | And the option’s restriking infos is: | Property | Value | | floating rate | no | | fixed rate | no | ... | last update | <now> | | first trading date | <now> | | rate offset | 0.0 | When I create the option Then the option id should be filled in ~53 properties ~20 properties @aloyer Too much details ?
  49. Scenario: Create an external OTC deal Given the following option: | Property | Value | | delivery | Cash | | bo strike | no | | floor | 0 | | forex constat | - | | forex constat date | 1970-JAN-01 | | forex start date | 1970-JAN-01 | | guaranteed currency | EUR | | guaranteed rate | 0 | | initial spot | 0 | ... | maturity | 2020-FEB-05 | | option quotity | 1 | | strike | 2500 | | underlying id | SOCIETE-GLE_X | | underlying type | Stock | And the option’s restriking infos is: | Property | Value | | floating rate | no | | fixed rate | no | ... | last update | <now> | | first trading date | <now> | | rate offset | 0.0 | And an external OTC deal: | Property | Value | | category | OTC | | delivery | - | | initial price | 0 | | internal market | yes | | last update | <now> | ... | quantity | 6000 | | remaining quantity | 6000 | And the deal’s counter part is: | Property | Value | | confirm mode | ST | | market maker | Nefertiti | ... And the deal’s sales part is: | Property | Value | | accounting center | - | | derogation | no | ... And the deal’s collateral is: | Property | Value | | IA | no | | currency | - | ... When I create the option And I create the deal with the created option Then the deal id should be filled in ~58 ~5 ~58 ~22 @aloyer Too much details ?
  50. Scenario: Standard option Given a standard option with no specifics Then the option should have the following properties: | Property | Value | | delivery | Cash | | bo strike | no | | floor | 0 | | forex constat | - | | forex constat date | 1970-JAN-01 | | forex start date | 1970-JAN-01 | | guaranteed currency | EUR | | guaranteed rate | 0 | | initial spot | 0 | ... | maturity | 2020-FEB-05 | | option quotity | 1 | | strike | 2500 | | underlying id | SOCIETE-GLE_X | | underlying type | Stock | | restriking infos | <standard> | ~53 properties Scenario: Standard option’s restriking infos Given a standard option’s restriking infos Then the option’s restriking infos should be: | Property | Value | | floating rate | no | | fixed rate | no | ... | last update | <now> | | first trading date | <now> | | rate offset | 0.0 | ~20 @aloyer Too much details ? use persona Persona is checked AND documented
  51. Scenario: Create a Stock option Given the following option: | Property | Value | | delivery | Cash | | bo strike | no | | floor | 0 | | forex constat | - | | forex constat date | 1970-JAN-01 | | forex start date | 1970-JAN-01 | | guaranteed currency | EUR | | guaranteed rate | 0 | | initial spot | 0 | ... | maturity | 2020-FEB-05 | | option quotity | 1 | | strike | 2500 | | underlying id | SOCIETE-GLE_X | | underlying type | Stock | And the option’s restriking infos is: | Property | Value | | floating rate | no | | fixed rate | no | ... | last update | <now> | | first trading date | <now> | | rate offset | 0.0 | When I create the option Then the option id should be filled in Scenario: Create a Stock Option Given a standard option with the following specifics: | underlying type | underlying id | | Stock | SOCIETE-GLE_X | When I create the option Then the option id should be filled in @aloyer Too much details ? use persona
  52. Enough details ? http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/ @aloyer
  53. Enough details ? http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/ @aloyer Lot of details there no details! no way to challenge the result
  54. Enough details ? http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/ @aloyer Lot of details there, 6 decimals precision! GPS? GPS? - destination is usually an address!
  55. Enough details ? http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/ @aloyer why no date there but it is explicit there
  56. Enough details ? http://blog.thiga.fr/product-management/bdd-gherkin-pour-ecrire-vos-user-stories/ @aloyer Why would such result exist?
  57. @aloyer
  58. @aloyer # language: fr
 Fonctionnalité:
 
 
 
 
 
 
 @reseau_simplifié
 Scénario: Obtenir une feuille de l'itinéraire par d'arrivée
 
 2 Place de la Défense: 48.893195, 2.238945
 
 Etant donné que je veux aller de "48.893195, 2.238945" au "25 rue du Louvre, Paris"
 Et que je veux partir à 9h30 avec les options suivantes:
 | X | Transport en commun |
 | X | Le plus rapide |
 | | Le moins de changement |
 Alors je devrais obtenir la feuille de route suivante:
 | Type | Heure | Localisation | Transport | Durée | Distance |
 | départ | 9h30 | 2 Place de la Défense | Pied | ~5min | 400m |
 | - | 9h37 | La Défense | RER A vers Vincennes | 10min | - |
 | - | 9h47 | Châtelet - Les Halles | Pied | ~7min | 550m |
 | arrivée | 9h54 | 25 rue du Louve | - | - | - |
  59. @aloyer # language: fr
 Fonctionnalité:
 
 
 
 Scénario: Rer A dans le réseau de transport simplifié
 
 Etant donné le réseau de transport simplifié "Parisien"
 Alors le Rer A devrait passer toutes les 10mins à "la Défense" à partir de 5h37
 Alors les temps de transport cumulés depuis "la Défense" devraient être:
 | Charles de Gaulle Etoile | 5min |
 | Auber | 7min |
 | Chatelet les Halles | 10min |
 
 
 @reseau_simplifié
 Scénario: Obtenir une feuille de l'itinéraire par d'arrivée
 
 2 Place de la Défense: 48.893195, 2.238945
 
 Etant donné que je veux aller de "48.893195, 2.238945" au "25 rue du Louvre, Paris"
 Et que je veux partir à 9h30 avec les options suivantes:
 | X | Transport en commun |
 | X | Le plus rapide |
 | | Le moins de changement |
 Alors je devrais obtenir la feuille de route suivante:
 | Type | Heure | Localisation | Transport | Durée | Distance |
 | départ | 9h30 | 2 Place de la Défense | Pied | ~5min | 400m |
 | - | 9h37 | La Défense | RER A vers Vincennes | 10min | - |
 | - | 9h47 | Châtelet - Les Halles | Pied | ~7min | 550m |
 | arrivée | 9h54 | 25 rue du Louve | - | - | - |
  60. To be continued… @aloyer # language: fr
 Fonctionnalité:
 
 Scénario: Le métro 1 dans le réseau de transport simplifié
 
 Etant donné le réseau de transport simplifié "Parisien"
 Alors le métro 1 devrait passer dans chaque station toutes les 5mins à partir de 6h00
 
 Scénario: Rer A dans le réseau de transport simplifié
 
 Etant donné le réseau de transport simplifié "Parisien"
 Alors le Rer A devrait passer toutes les 10mins à "la Défense" à partir de 5h37
 Alors les temps de transport cumulés depuis "la Défense" devraient être:
 | Charles de Gaulle Etoile | 5min |
 | Auber | 7min |
 | Chatelet les Halles | 10min |
 
 
 @reseau_simplifié
 Scénario: Obtenir une feuille de l'itinéraire par d'arrivée
 
 2 Place de la Défense: 48.893195, 2.238945
 
 Etant donné que je veux aller de "48.893195, 2.238945" au "25 rue du Louvre, Paris"
 Et que je veux partir à 9h30 avec les options suivantes:
 | X | Transport en commun |
 | X | Le plus rapide |
 | | Le moins de changement |
 Alors je devrais obtenir la feuille de route suivante:
 | Type | Heure | Localisation | Transport | Durée | Distance |
 | départ | 9h30 | 2 Place de la Défense | Pied | ~5min | 400m |
 | - | 9h37 | La Défense | RER A vers Vincennes | 10min | - |
 | - | 9h47 | Châtelet - Les Halles | Pied | ~7min | 550m |
 | arrivée | 9h54 | 25 rue du Louve | - | - | - |
  61. Adjust the cursor @aloyer declarative imperative too much details not enough details
  62. Adjust the cursor @aloyer declarative imperative too much details not enough details Together!
  63. Remove ambiguities but keep scenario short Am I concrete enough on the expected behavior? Signal vs noise ratio? What if the scenario has more details? @aloyer Rely on Persona/Defaults… Do Scenario Review…
  64. is NOT About is About BDD ! " KLa tool for test automation communication acceptance criteriaL K behavior
  65. Questions? Arnauld LOYER — @aloyer QTraining Coaching /[TBD]DD/ Testing/Clean Code Mastering Software Development

×