dBug: Systematic Testing of Unmodified Distributed and Multi-threaded Systems

In order to improve quality of an implementation of a distributed and multithreaded system, software engineers inspect code and run tests. However, the concurrent nature of such systems makes these tasks challenging. For testing, this problem is addressed by stress testing, which repeatedly executes a test hoping that eventually all possible outcomes of the test will be encountered.