The main project I am working on deals with unit testing concurrent programs. I am conducting this research under the supervision of Professor Robert “Corky” Cartwright.
The project focuses on Java programs and makes use of byte code rewriting, custom class loaders, and the Java Platform Debugger Architecture (JPDA).
To ensure deterministic behavior of unit tests, we need to find out when certain synchronization operations (like starting/exiting threads, acquiring/releasing locks, etc.) happen so that we can record them as some sort of trace. Later, we use these traces to generate a large (ideally exhaustive) number of schedules, and later we run programs exactly as described in these schedules.
We will also have to deal with detecting race conditions, as race conditions may lead to non-deterministic behavior; and keeping the schedules of synchronization events up-to-date with source code changes.