Predictable and Progressive Testing of Multithreaded Code

Developing concurrent software is hard. Testing concurrent software is harder. Although sequential program testing has many useful concepts, techniques, and tools (for example, assertions, unit testing, test-driven development, code coverage, and test generation tools), the testing workbench for concurrent programs is comparatively quite bare. Chess is a new testing tool for concurrent multithreaded programs. It repeatedly executes a multithreaded program, while guaranteeing predictable and deterministic scheduling and progressively exploring more schedules to uncover errors quickly.