Effective Techniques for Stateless Model Checking
- Plats: ITC/2446, Lägerhyddsvägen 2, 752 37, Uppsala
- Doktorand: Aronis, Stavros
- Om avhandlingen
- Arrangör: Avdelningen för datalogi
- Kontaktperson: Aronis, Stavros
Stateless model checking is a technique for testing and verifying concurrent programs, based on exploring the different ways in which operations executed by the processes of a concurrent program can be scheduled. The goal of the technique is to expose all behaviours that can be a result of scheduling non-determinism. As the number of possible schedulings is huge, however, techniques that reduce the number of schedulings that must be explored to achieve veriﬁcation have been developed. Dynamic partial order reduction (DPOR) is a prominent such technique.
This dissertation presents a number of improvements to dynamic partial order reduction that signiﬁcantly increase the effectiveness of stateless model checking. Central among these improvements are the Source and Optimal DPOR algorithms (and the theoretical framework behind them) and a technique that allows the observability of the interference of operations to be used in dynamic partial order reduction. Each of these techniques can exponentially decrease the number of schedulings that need to be explored to verify a concurrent program. The dissertation also presents a simple bounding technique that is compatible with DPOR algorithms and effective for ﬁnding bugs in concurrent programs, if the number of schedulings is too big to make full veriﬁcation possible in a reasonable amount of time, even when the improved algorithms are used.
All improvements have been implemented in Concuerror, a tool for applying stateless model checking to Erlang programs. In order to increase the effectiveness of the tool, the interference of the high-level operations of the Erlang/OTP implementation is examined, classiﬁed and precisely characterized. Aspects of the implementation of the tool are also described. Finally, a use case is presented, showing how Concuerror was used to ﬁnd bugs and verify key correctness properties in repair techniques for the CORFU chain replication protocol.