Yoan
April 03, 2020
190

# Improve your software quality with Property-Based Testing

April 03, 2020

## Transcript

1. @yot88
PROPERTY-BASED TESTING
(PBT)
PBT

2. @yot88
A DEV STORY
Scott Wlaschin
https://fr.slideshare.net/ScottWlaschin/an-introduction-to-property-based-testing

3. A dev story

4. A dev story

5. A dev story

6. A dev story

7. @yot88
Which tests would you have been written ?

8. A dev story

9. A dev story

10. A dev story

11. A dev story

12. A dev story

13. A dev story

14. A dev story

15. A dev story
What is our code
coverage ?

16. @yot88

17. @yot88
A dev story
WTF ?

18. @yot88
A dev story

19. A dev story

20. @yot88
A dev story

21. @yot88
A dev story
Let’s rethink the approach
Do not use specific examples anymore

22. @yot88
A dev story
We can’t test the add by using +

23. @yot88
PBT to the rescue

24. @yot88
Testing with requirements / properties
What about parameter order ? (compared to subtract)
The parameter order does not matter
“add 1” twice is the same as doing “add 2” (compared to multiply)
We are confident the implementation is correct if we test these properties
It applies to all inputs

25. Specification with properties
Associativity property
Commutativity property
Identity property

26. @yot88
Is there a simpler way to do it ?

27. @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.

28. What is Property based testing
PBT

29. @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

30. @yot88
What is Property based testing

31. @yot88
What can we do in java ?

32. Junit-quickcheck
https://pholser.github.io/junit-quickcheck/site/0.9.1/

33. Junit-quickcheck

34. Junit-quickcheck

35. Junit-quickcheck

36. Junit-quickcheck

37. Junit-quickcheck

38. Junit-quickcheck

39. Junit-quickcheck

40. Junit-quickcheck

41. Junit-quickcheck

42. @yot88
And in real life ?

43. Real life

44. 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

45. 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

46. Real life – implementation

47. @yot88
Vavr stuff ?

48. PBT in vavr

49. PBT in vavr

50. @yot88
And so ?

51. @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

52. @yot88
What could we do together ?
NEXT STEPS

53. @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