The need to test software is as relevant as ever, witness the
massive amount of programs that surround us (mobile apps, web
servers and services, automotive software, infrastructure such as
the Danish Rejsekort, etc.). Testing either of these (either
module-by-module or as a whole) can however be both cumbersome and
tricky to exercise all the possible execution paths.

QuickCheck (also known as randomized property-based testing) offers
an alternative testing approach, in which the developer tests
properties (specifications) across a range of arbitrary generated
inputs. As such, the technique can exercise a piece of software on a
bigger fraction of the input space and on cases a human would
potentially forget or omit. In doing so, QuickCheck can find
counterexamples to a given specification which can help a developer
to fix any encountered problems and ultimately produce more robust
software.

For this reason the approach has gained increasing acceptance within
the software industry, initially within the Erlang programming
language community (a language used by Ericsson) and more recently
it has been used for testing AUTOSAR components for Volvo cars.

Course content

This course provides an introduction to randomized property-based
testing exemplified by QuickCheck.
We will study

properties (what specification should hold for a given piece of software?)

generators (techniques for generating arbitrary input, from simple ones to more complex ones)

We will initially study and work with the basic concepts within the functional
programming language OCaml (the course will provide an introduction to
this language).
In personal projects students are requested to QuickCheck a piece of
software, to write a report summarizing their results, and to
deliver an oral presentation to all course attendees.