A Java monitor is a Java class that defines one or more synchronized methods. Unlike a regular object, a Java monitor object is intended to be accessed by multiple threads simultaneously. Thus, testing a Java monitor can be significantly different from testing a regular class. In this paper, we propose a state exploration-based approach to testing a Java monitor. A novel aspect of our approach is that during exploration, threads are introduced on-the-fly, and as needed, to simulate race conditions that can occur when multiple threads try to access a monitor object at the same time. Furthermore, each transition is defined in a way such that the behavior of the threads along each path can be precisely characterized and controlled. We describe a prototype tool called MonitorExplorer and report three case studies that are designed to provide an initial evaluation of our approach.
Yu Lei, Richard H. Carver, David Chenho Kung, Vidu