Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Improve your software quality with Property-Based Testing

Yoan
April 03, 2020

Improve your software quality with Property-Based Testing

Yoan

April 03, 2020
Tweet

More Decks by Yoan

Other Decks in Programming

Transcript

  1. @yot88 Testing with requirements / properties What about parameter order

    ? (compared to subtract) The parameter order does not matter when_I_add_two_numbers_the_result_should_not_depend_on_parameter_order “add 1” twice is the same as doing “add 2” (compared to multiply) What about adding 0 ? Adding 0 does nothing We are confident the implementation is correct if we test these properties It applies to all inputs
  2. @yot88 What is Property based testing ? A property is

    the combination of an invariant with an input values generator. For each generated value, the invariant is treated as a predicate and checked whether it yields true or false for that value. As soon as there is one value which yields false, the property is said to be falsified, and checking is aborted. If a property cannot be invalidated after a specific amount of sample data, the property is assumed to be satisfied.
  3. @yot88 What is Property based testing ? Describe the input

    Describe the properties of the output Have the computer try lots of random examples Check if it fails
  4. Real life – identify properties The balance should be decremented

    of the withdrawal amount when I have enough money Or the overdraft is authorized for my account I must not be allowed to withdraw when The withdraw amount is over my max withdrawal amount My balance is insufficient, and overdraft is not authorized for my account
  5. Real life – custom generators To use them Or use

    the serviceloader by creating a file called: com.pholser.junit.quickcheck.generator.Generator in META-INF/services
  6. @yot88 PBT and example-based tests PBTs are more general 1

    property-based test can replace many example-based tests PBTs can reveal edge cases Nulls, negative numbers, weird strings (encoding for example), … PBTs ensures deep understanding of the business invariants Example-based tests are still helpful though Easier to understand & start with
  7. @yot88 Resources An introduction to property-based testing – Scott Wlaschin

    Property-Based Testing for everyone - Romeu Moura (Video) Property-based testing in Java with JUnit-Quickcheck - Kenny Baas-Schwegler https://baasie.com/2017/06/12/property-based-testing-in-java-with-junit-quickcheck-part-2- generators/ Property Testing with vavr junit-quickcheck documentation