*Result*: Java program analysis by symbolic execution

Title:
Java program analysis by symbolic execution
Authors:
Contributors:
Giesl, Jürgen, Spoto, Fausto
Source:
Aachen : Fachgruppe Informatik, RWTH Aachen University, Aachener Informatik-Berichte 2013,16 223 S. : graph. Darst. (2015). = Zugl.: Aachen, Techn. Hochsch., Diss., 2015
Publisher Information:
Fachgruppe Informatik, RWTH Aachen University
Publication Year:
2015
Collection:
RWTH Aachen University: RWTH Publications
Subject Geographic:
DE
Document Type:
*Dissertation/ Thesis* doctoral or postdoctoral thesis
Language:
English
ISSN:
0935-3232
Relation:
info:eu-repo/semantics/altIdentifier/urn/urn:nbn:de:hbz:82-rwth-2015-013732; info:eu-repo/semantics/altIdentifier/issn/0935-3232
Rights:
info:eu-repo/semantics/openAccess
Accession Number:
edsbas.7FA56D7D
Database:
BASE

*Further Information*

*Program analysis has a long history in computer science. Even when only considering the important aspect of termination analysis, in the past decades an overwhelming number of different techniques has been developed. While the programming languages considered by these approaches initially were more of theoretical importance than of practical use, recently also automated analysesfor imperative programming languages like C or Java have been developed. Here, a major challenge is to deal with language constructs and concepts which do not exist in simpler languages. For example, in Java one often uses dynamic dispatch, complex object hierarchies, or side-effects with far-reaching consequences involving the global heap. In this thesis, we present a preprocessing step for JBC programs in which all such complicated language constructs are handled. This way, subsequent analyses do not need to be concerned with these, and making use of existing techniques is easy. In particular, we show how Symbolic Execution Graphs can be constructed which contain an over-approximation of all possible program runs. This way, and by taking care of having a precise approximation, the information contained in the constructed graphs can, for example, be used to reason about the termination behavior of the original program. Additionally to the construction of such graphs, in this thesis we present a new analysis technique which helps end users identify parts of the analyzed code which are irrelevant for the desired outcome. This way, programming errors causing code to be not executed can be identified and, consequently, fixed by the user. For this technique to be useful, the information containedin the previously constructed graph needs to be precise. We will demonstrate that this is the case. For the techniques presented in this thesis, a rigorous formalization is shown. To comply with the overall goal of, for example, automated termination analysis, we also need to implement the techniques and theoretical results. In this thesis we show how ...*