Modern software applications are highly configurable, allowing
configuration options to be changed even during program
execution. When dynamic configuration updating is implemented
incorrectly, program errors can result. These program errors occur
primarily when stale data—computed from old configurations—or
inconsistent data—computed from different configurations—are used. We introduce Staccato, the first tool designed to detect these
errors. Staccato uses a dynamic analysis in the style of taint
analysis to find the use of stale configuration data in Java
programs. It supports concurrent programs running on commodity
JVMs. In some cases, Staccato can provide automatic bug avoidance and semi-automatic repair when errors occur.
We evaluated Staccato on 3 open-source applications that support
complex reconfigurability. Staccato found multiple errors in all of
them. Staccato requires only modest annotation overhead and has
moderate performance overhead.