Reachability testing is a technique for testing concurrent programs. Reachability testing derives test sequences on-the-fly as the testing process progresses, and can be used to systematically exercise all the behaviors of a program. The main contribution of this paper is a general model for reachability testing. This model allows reachability testing to be applied to many different types of concurrent programs, including asynchronous and synchronous message passing programs, and shared-memory programs that use semaphores, locks, and monitors. We define a common format for execution traces and present timestamp assignment schemes for identifying races and computing race variants, which are a crucial part of reachability testing. Finally, we discuss a prototype reachability testing tool, called RichTest, and present some empirical results.
Richard H. Carver, Yu Lei