Demand-Driven Path-Sensitive Program Slicing
نویسندگان
چکیده
Program slicing is a technique to extract relevant parts of a program, and it is widely used in program debugging, parallelization, testing, reverse engineering, etc. This paper concerns static slicing and it follows the Weiser’s definition of slicing that consists of computing what statements of the program might affect the value of some particular variable at a specified program point. We argue that although there is a broad variety of static slicing methods, it is commonly assumed that all paths are executable. However, this limitation may be completely unacceptable in, for instance, debugging and program understanding tasks since the slice is often quite big. In this paper, we present a fully path-sensitive slicing that identifies infeasible paths in order to obtain accurate slices. Infeasible paths are detected by performing symbolic execution of the program. The major challenge is that in general there are exponentially many paths. Our method traverses the symbolic execution tree, in a post-order manner, and discovers an interpolant which generalizes the execution context of the tree. This enhances the likelihood that the dependencies computed for that tree can be reused in multiple contexts. Another key feature is that our algorithm stores, for each dependency, the executable path that defines it, that is, the representative path formula that gives rise to it. By doing so, the dependency information is accurate since it is only used if the new context demonstrates that the representative is executable. In fact, for loop-free programs, our algorithm computes exactly the statements relevant to the slicing criterion.
منابع مشابه
A demand-driven approach to slicing legacy COBOL systems
Maintenance of aging legacy COBOL systems is labor-intensive and is becoming a more and more difficult problem. Program slicing is a potentially useful analysis for aiding different maintenance activities, including program comprehension, reverse engineering, debugging, and testing. Numerous techniques have been proposed in the past decades; however, in interactive contexts, we found none of th...
متن کاملAn Approach to Slicing Widget-Based Event-Driven Programs and Its Implementation
In program slicing, widget-based event-driven programs are different from conventional programs because of their particular features of object construction infrastructure and event-driven mechanism and asynchronous access of global variables. Therefore conventional slicing techniques cannot be applied to widget-based event-driven programs. To solve this problem, this paper first introduces a se...
متن کاملA Path Dependency Graph for Verilog Program Analysis
In this paper, we present a path dependency graph for Verilog-HDL programs called path sequence. This path sequence can be used in static analysis based techniques, such as program slicing, and model abstraction as well as in functional test generation. We have implemented this graph inside a model reduction tool. It enhanced the capability of the tool without adding significant timing overhead.
متن کاملValidation of measurement software as an application of slicing and constraint solving
We show how to combine program slicing and constraint solving in order to obtain better slice accuracy. The method is used in the VALSOFT slicing system. One particular application is the validation of computer-controlled measurement systems. VALSOFT will be used by the Physikalisch-Technische Bundesanstalt for verification of legally required calibration standards. The article describes the VA...
متن کاملInterprocedural Dataflow Analysis via Graph Reachability
This paper shows how a large class of interprocedural dataflow-analysis problems can be solved precisely in polynomial time. The only restrictions are that the set of dataflow facts is a finite set, and that the dataflow functions distribute over the confluence operator (either union or intersection). This class of problems includes—but is not limited to—the classical separable problems (also k...
متن کامل