Prof Thomas Arts is the co-founder and CTO of Quviq, a small company that produced QuickCheck, as testing tool for Erlang. Thomas has over 30 publications in various journals and has experience refereeing conferences and workshops. He has successfully introduced some new technologies to the industry, the latest being QuickCheck, a tool for property based testing and aims to support test driven development. Thomas is also a professor at Chalmers University of Technology in Gothenburg, Sweden.

Thomas was one of the members of Ericsson's computer science lab where he worked on program verification and the development of the Erlang programming language. He has also worked in the broad spectrum theoretical computer science, formal methods and industrial case-study research, mainly applying all kind of techniques to systems written in Erlang.

Tutorial: If You Want to test Really Concurrent Software, PULSE is What You need to know About - 3h

Testing software is difficult, testing concurrent software seems almost impossible. Just writing a test case for a concurrent program is a challenge, since one may have a number of different correct executions that result in different, but correct results.

Quviq QuickCheck is an automated testing tool that can be used to automatically generate test cases. In traditional testing, one often writes a sequence of operations to be executed and that sequence is tested. Running the commands in that sequence in parallel is far harder, since how would the test case look like? QuickCheck specification also often start from specifying sequential execution of possible sequences; but QuickCheck can run the commands in the sequence in parallel and the specification can be used to validate the outcome of such a run. All that, fully automatically.

In this way, testing the Erlang OTP dets module becomes possible.

PULSE is an addition to QuickCheck that enables you to find concurrency errors like race conditions and deadlocks in Erlang programs. Even if those errors may not show on a single processor system, they may be sitting there waiting to be revealed when you switch to multi-core. With PULSE you explore random schedulings that are possible on a multi-core but not on a single core, therewith increasing the possibility to reveal weird errors. Of course, the test case is minimized when finding a concurrency error, which results in a repeatable test case that helps to analyze the cause of the error quickly.

In this tutorial some knowledge of QuickCheck is required; it suffices if you participated in a QuickCheck talk or tutorial before. We will look at a few examples in which QuickCheck and PULSE are used to find concurrency errors.