Property Base Your State Machine (Combo Talk)
Types are great, but in most languages we use, they can't cover everything.
Testing tries to fill that gap. Property-based testing generates bizarre
examples and finds minimal reproductions that break your tests - a significant
improvement over writing test cases by hand. But what if you have a thorny
stateful system to test?
State Machine Testing extends property-based testing to randomly test stateful
systems. The actions performed against the system are modeled as commands, and
the usual property-based test machinery, generates test cases, and shrinks
failing tests to their minimal counter-examples.
In this talk we will provide a quick refresher (or crash-course) of
property-based testing, and then give an overview of 'property-based state
machine testing' and how it works. We'll then start a workshop where we begin
building up a state-machine test suite for a small imperative system.
Learning Outcome
- Gain a basic understanding of property-based state-machine testing
- Have implemented several state-machine tests using the Haskell `hedgehog` testing library
- Understand its importance as an extremely powerful testing tool
- Be excited enough that they want to apply it to their own projects
- Gain awareness that:
- Haskell isn't the only language that has this capability
- Even in Haskell, `hedgehog` isn't the only library that can do this
Target Audience
People wanting a hands-on introduction to using property-based state-machine testing
Prerequisites for Attendees
- Intermediate Haskell knowledge is required.
- Knowledge of property-based (but not state-machine) testing would be beneficial
Links
What began as a blog series on QFPL : https://qfpl.io/posts/intro-to-state-machine-testing-1/ and presentation at LambdaJam 2018. Is now growing into a fully fledged course: https://github.com/qfpl/state-machine-testing-course/.