Specification by Example (BDD)
Agenda
• Software Development Challenges
• BDD to the Rescue
• Spec Examples
• Automation Tools
Creating software products is challenging…
requirements codeS P
Cliqz
Cost of translation
years
weeks
Behaviour Driven Development
BDD is about eliminating Translation cost from business to developers
using the language of examples
business goalsspecifying
deriving scope
collaboratively specifyexamples
refining specification
automatedvalidation of specifications
building
living documentation
requirements codeS P
years
weeks
Cost of translation
examples
BDD
${ } { }
DDD
Spec examples
What makes a good test
• In domain language
• Easy to understand
• Precise and testable
• Self-explanatory
• Consistent
evaluation scenarios
3D-secure v1Feature: 3d Secure
In order to reduce chargeback costsAs a system ownerI want players to go through 3D secure enrollment and verification
BackgroundGiven the card number 4236754 is enrolledAnd the card number 2341238 is not enrolled
Scenario: Enrolled cardGiven the player has a card with number 4236754
And expiry date 12 11And address line 1 Max Weber Platz 23And address line 2 1st floorAnd post code 12300And city VienaAnd country AustriaWhen the player starts a transaction for 10 EURThen the system will send a message “””
<message type=“ENROLMENT_CHK_MSG”><CARD> 4236754</CARD>
</message>“””And the system will receive a response “””
<response><ENROLEMENT_CHK>enrolled</
ENROLEMENT_CHK></response>
“””
3D-secure v1Then the system will send a message “””<message type=“3D_AUTHORIZE”>
<CARD>4236754</CARD><EXPIRY>1211</EXPIRY><ADDRESS_LINE1>Max Weber Platz
23</ADDRESS_LINE_1><ADDRESS_LINE2>1st floor</ADDRESS_LINE_1><POST_CODE>12300</POST_CODE><CITY>VIENNA</CITY><COUNTRY>AUSTRIA</COUNTRY>
</message>“””And the system will receive a response “””
<response><AUTHORIZE>
<3D_SECURE_URL>http://hsbc.co.uk</3D_SECURE_URL><PA_REQ>232325454-444444232323232</PA_REQ>
</AUTHORIZE></response>
“””And the system will redirect the user to http://hsbc.co.ukAnd the PA-REQ code in the form will be 232325454-
444444232323232
3D-secure v2
Feature: Card enrollment with 3d SecureIn order to reduce chargeback costsAs a system ownerI want players to go through 3D secure enrollment and
verificationbefore proceeding with actual authorization
Scenario Outline: 3d transaction processingGiven the card was <enrolled>
And 3D Secure gateway response was <response>Then the transaction status is <status>
Examples: Response arrived
Examples: still waiting for response
Examples: card not enrolled, so not going through 3D at all
enrolled response status YES cancel CANCELLED
YES authorize PENDING_AUTHORIZATION
enrolled response status YES not received yet PENDING 3D SECURE
enrolled response status NO not received yet PENDING AUTHORIZATION
Automation tools
• Cucumber: http://cucumber.io
• JBehave: http://jbehave.org
• SpecFlow: http://www.specflow.org
• Appium: http://appium.io/