property based bdd examples - etsi · 2016-11-17 · property based bdd examples ... automation...

20
Budapest, 26-28 October 2016 PROPERTY BASED BDD EXAMPLES Presented by Gaspar Nagy © All rights reserved [email protected] @gasparnagy, http://gasparnagy.com

Upload: others

Post on 31-May-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Budapest, 26-28 October 2016

PROPERTY BASED BDD EXAMPLESPresented by Gaspar Nagy 

© All rights reserved

[email protected]@gasparnagy, http://gasparnagy.com

Page 2: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

BDD PBT

• Behavior Driven Development

• ~Specification by Example (SbE)

• ~Acceptance Test Driven Development (ATDD)

• ~Keyword Driven Testing

2 © All rights reserved

• Property Based Testing

• Property Testing• ~Random Testing• ~Model‐based Testing

Page 3: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

[HttpPost]public ActionResult Answer(int answer){

TriviaEntities db = new TriviaEntities();var question = db.FindQuestion(CurrentQuestion);

if (question.Type == QuestionType.Easy){

db.AddScore(question, user, 10);}else{

db.AddScore(question, user, 50);}

var model = new GameModel{ Score = db.GetScore(question, user) };

return View(model);}

implement

feedback

What is BDD? – Classic model

Page 4: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Scenario: Correct easy answer scores 10Given I register a teamWhen I submit a correct easy answerThen my score should be 10

Collaboration Automation with Cucumber/SpecFlow

What is BDD?

Page 5: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

This is an example!

5 © All rights reserved

Scenario: Correct easy answer scores 10Given I register a teamWhen I submit a correct easy answerThen my score should be 10

Page 6: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

How many examples you need?

6 © All rights reserved

Scenario: Add two numbersGiven I have entered 1 into the calculatorAnd I have entered 2 into the calculatorWhen I press addThen the result should be 3 on the screen

Scenario: Add two numbersGiven I have entered 5 into the calculatorAnd I have entered ‐7 into the calculatorWhen I press addThen the result should be ‐2 on the screen

Scenario: Add two numbersGiven I have entered 2 into the calculatorAnd I have entered 0 into the calculatorWhen I press addThen the result should be 2 on the screen

Page 7: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Scenario Outlines

7 © All rights reserved

Scenario Outline: Add two numbersGiven I have entered <a> into the calculatorAnd I have entered <b> into the calculatorWhen I press addThen the result should be <result> on the screen

Examples:| a | b | result || 1 | 2  | 3      || 5 | ‐7 | ‐2     || 2 | 0  | 2      |

Page 8: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

BDD is for…

understanding & validating

business requirements

through illustrative examples

8 © All rights reserved

Page 9: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

PBT is for…

verifying 

implementation

through checking statements about the 

output for many different possible inputs

9 © All rights reserved

source: http://blog.jessitron.com/2013/04/property-based-testing-what-is-it.html

the “properties”

Page 10: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

For example for addition…

• Commutative property: a + b = b + a• Associative property: (a + b) + c = a + (b + c)• Identity property: a + 0 = a• Distributive property: a * (b + c) = a*b + a*c

We would like to verify these for ~ALL input combinations!

10 © All rights reserved

Page 11: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

There is a tool for doing this!

• QuickCheck (Haskell) is the canonical framework, but there are many different ports of it to other programming languages• QuickCheck for Java• PhpQuickCheck for PHP• ScalaCheck for Scala• FsCheck for .NET (F#, C#)• … (see more at https://en.wikipedia.org/wiki/QuickCheck)

11 © All rights reserved

Page 12: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

FsCheck Sample

12 © All rights reserved

Page 13: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

When the implementation is wrong…

13 © All rights reserved

Page 14: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

BDD PBT

• 1 + 2 = 3• 5 + ‐7 = ‐2• 2 + 0 = 2

14 © All rights reserved

• Commutative• Associative• Identity• Distributive

Page 15: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Examples in SpecFlow

15 © All rights reserved

Page 16: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Identity property BDD style…

16 © All rights reserved

Page 17: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Defining constraints and expectations…

17 © All rights reserved

Page 18: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

More real life examples…

18 © All rights reserved

Page 19: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

Summary

• BDD turns examples into automated tests• PBT automates rules with many different input

• The power of this two can be combined to achieve an executable specification

• The BDD and the PBT tools can work together for this• See http://github.com/gasparnagy/SpecFlow.FsCheck

19 © All rights reserved

Page 20: PROPERTY BASED BDD EXAMPLES - ETSI · 2016-11-17 · PROPERTY BASED BDD EXAMPLES ... Automation with Cucumber/SpecFlow What is BDD? This is an example! 5 ©Allrightsreserved Scenario:

[email protected]@gasparnagyhttp://gasparnagy.com

© All rights reserved

Special thanks to • Ciaran McNulty• Konstantin Kudryashov