ReEx: Re-Execution based Exploration of Multithreaded Java Programs

Welcome to the ReEx project homepage. ReEx is a testing framework that dynamically explores all the possible behaviors/schedules of a multithreaded Java program in order to find buggy behaviors/schedules. The tool consists of two main parts, instrumentation and exploration. The instrumentation part dynamically instruments all schedule relevant bytecode instructions (eg. field read/write, monitor enter/exit, wait, notify, notifyAll, join etc) and provides hooks which are in turn used by the exploration part to re-execute the given program once for each possible schedule. In order to allow the user to try different exploration strategies, ReEx provides interfaces that can be used by the user to customize the exploration it performs. Infact, ReEx has been used to test real-world multithreaded Java programs using customized exploration strategies as reported in our ISSTA 2011 paper.

Publications

Change-Aware Preemption Prioritization

By Vilas Jagannath, Qingzhou Luo, and Darko Marinov.
20th International Symposium on Software Testing and Analysis
(ISSTA 2011), pages 133-143, Toronto, Canada, July 2011

Downloads

Version 1.0

Binaries, source Code, and examples can be found in reex-1.0.tar.gz. Additional details can be found in the README.

All Downloads (including previous versions and md5sums)

Can be found here.