scholarly journals Verification of Java Programs Using Symbolic Execution and Invariant Generation

Author(s):  
Corina S. Păsăreanu ◽  
Willem Visser
2010 ◽  
Vol 10 (4-6) ◽  
pp. 659-674 ◽  
Author(s):  
MIGUEL GÓMEZ-ZAMALLOA ◽  
ELVIRA ALBERT ◽  
GERMÁN PUEBLA

AbstractTesting is a vital part of the software development process. Test Case Generation (TCG) is the process of automatically generating a collection of test-cases which are applied to a system under test. White-box TCG is usually performed by means of symbolic execution, i.e., instead of executing the program on normal values (e.g., numbers), the program is executed on symbolic values representing arbitrary values. When dealing with an object-oriented (OO) imperative language, symbolic execution becomes challenging as, among other things, it must be able to backtrack, complex heap-allocated data structures should be created during the TCG process and features like inheritance, virtual invocations and exceptions have to be taken into account. Due to its inherent symbolic execution mechanism, we pursue in this paper that Constraint Logic Programming (CLP) has a promising application field in tcg. We will support our claim by developing a fully CLP-based framework to TCG of an OO imperative language, and by assessing it on a corresponding implementation on a set of challenging Java programs.


2017 ◽  
Vol 23 (2) ◽  
pp. 573-597
Author(s):  
István Kádár

In a software system, most of the runtime failures may come to light only during test execution, and this may have a very high cost. To help address this problem, a symbolic execution engine called RTEHunter, which has been developed at the Department of Software Engineering at the University of Szeged, is able to detect runtime errors (such as null pointer dereference, bad array indexing, division by zero) in Java programs without actually running the program in a real-life environment. Applying the theory of symbolic execution, RTEHunter builds a tree, called a symbolic execution tree, composed of all the possible execution paths of the program. RTEHunter detects runtime issues by traversing the symbolic execution tree and if a certain condition is fulfilled the engine reports an issue. However, as the number of execution paths increases exponentially with the number of branching points, the exploration of the whole symbolic execution tree becomes impossible in practice. To overcome this problem, different kinds of constraints can be set up over the tree. E.g. the number of symbolic states, the depth of the execution tree, or the time consumption could be restricted. Our goal in this study is to find the optimal parametrization of RTEHunter in terms of the maximum number of states, maximum depth of the symbolic execution tree and search strategy in order to find more runtime issues in a shorter time. Results on three open-source Java systems demonstrate that more runtime issues can be detected in the 0 to 60 basic block-depth levels than in deeper ones within the same time frame. We also developed two novel search strategies for traversing the tree based on the number of null pointer references in the program and on linear regression that performs better than the default depth-first search strategy.


2014 ◽  
Author(s):  
Marcelo Medeiros Eler ◽  
André Takeshi Endo ◽  
Vinícius Durelli

Symbolic execution has been used in software testing as a effective technique to automatically generate test data. Most of approaches are based only on control-flow criteria and generate input data only for a whole program or function. However, testers may want to generate test data for covering data-flow criteria and also for satisfying specific test requirements. This paper presents an approach for generating test data to cover only test requirements selected by users, considering both control- and data-flow criteria. A prototype was implemented to support test data generation for Java programs and to perform a preliminary evaluation of the approach. The results, although in a limited context, are encouraging and motivate future experiments.


2014 ◽  
Vol 21 (3) ◽  
pp. 331-352 ◽  
Author(s):  
István Kádár ◽  
Péter Hegedűs ◽  
Rudolf Ferenc

Sign in / Sign up

Export Citation Format

Share Document