This web site is based on an automatic and precise thread safety checker. The checker consists of three parts: a generator of concurrent tests, a test execution component, and the thread safety oracle.
To test a class, the checker starts by generating a concurrent test for the class. Each generated test consists of a sequential part, which sets up an instance of the class, and a concurrrent part, which uses the shared instance from multiple threads. Next, the generated test is executed. The result of the test execution is analyzed by the thread safety oracle. If the test leads to an exception or to a deadlock, then the oracle checks whether the problem could also occur when calling all methods of the test from a single thread. If the exception or deadlock is impossible in a sequential execution, the problem is definitely due to concurrency and the thread safety oracle reports a bug. The checker repeatedly executes the test to explore different interleavings of the concurrent threads. If the checker cannot find any thread safety violation with the test, it starts over the whole process by generating a new test.
The thread safety checker has been developed as a research project at ETH Zurich. A detailed description is available in the following research paper:
Fully Automatic and Precise Detection of Thread Safety Violations
Michael Pradel and Thomas R. Gross
Conference on Programming Language Design and Implementation (PLDI), 2012
We provide supplementary material for the paper to allow others to reproduce our results and to compare with them.