Robust Dynamically Deployed Static Analysis for Java
Guaranteeing the absence of errors in a program is a great challenge and many static analysis techniques have been developed to see whether a program is correct before we run it. There is, however, a whole class of programs that are especially difficult to analyze in this manner. These programs have a very different behavior that depends on configuration files, command line parameters and user input. Also, they are long running. For such programs, there are advantages to dynamically deployed analyses that can tell us after the program has been run for some time whether crashes are still possible in its future execution. In this thesis, we see how to combine current program state with static analysis techniques to predict absence of errors in the future. We show how, if a program can not yet be guaranteed to run correctly, we can make future checks more efficient. The thesis also explores how the analysis can run in parallel with program execution without slowing down execution too much. The techniques that are explored are implemented as an extension for the Java PathFinder Java Virtual Machine.