A new algorithm for the calculation of transitive dependences

Program slicing can be used to aid in a variety of software maintenance activities including code understanding, code testing, debugging, and program re-engineering. Program slicing (as well as other program analysis functions including ripple analysis) can be efficiently performed on an internal program representation called a system dependence graph (SDG). This paper will describe a new method for calculating transitive dependencies in the presence of recursion. This method requires neither the (explicit) calculation of the GMOD and GREF sets nor the construction of a linkage grammar and the corresponding subordinate characteristic graphs of the linkage grammar's nonterminals. Additionally, a beneficial side effect of this method is that it provides us with a new method for performing interprocedural, flow-sensitive data flow analysis. Finally, this paper will illustrate the versatility of the SDG as an internal program representation by briefly describing a tool that we have developed that permits slicing, dicing, ripple analysis, and other static analysis functions to be performed on programs written in a subset of ANSI C (e.g., C without gotos and pointers).

[1]  Thomas W. Reps,et al.  Integrating non-intering versions of programs , 1988, POPL '88.

[2]  Thomas W. Reps,et al.  Illustrating interference in interfering versions of programs , 1989, SCM.

[3]  M. W. Du,et al.  Finding program slices for recursive procedures , 1988, Proceedings COMPSAC 88: The Twelfth Annual International Computer Software & Applications Conference.

[4]  E. B. Swanson,et al.  Software maintenance management , 1980 .

[5]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[6]  David Callahan,et al.  The program summary graph and flow-sensitive interprocedual data flow analysis , 1988, PLDI '88.

[7]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[8]  Mark Weiser,et al.  Minimizing Communication for Synchronizing Parallel Dataflow Programs , 1988, International Conference on Parallel Processing.

[9]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[10]  Alfred V. Aho,et al.  The Design and Analysis of Computer Algorithms , 1974 .

[11]  Thomas W. Reps,et al.  Integrating noninterfering versions of programs , 1989, TOPL.

[12]  Girish Parikh,et al.  Handbook of software maintenance , 1986 .

[13]  John Banning,et al.  : An Efficient , 2022 .

[14]  Wuu Yang,et al.  The Semantics of Program Slicing , 1988 .

[15]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[16]  Panos E. Livadas,et al.  System Dependence Graphs Based on Parse Trees and their Use in Software Maintenance , 1994, Inf. Sci..

[17]  Wuu Yang,et al.  Detecting Program Components With Equivalent Behaviors , 1989 .

[18]  Mark Weiser,et al.  Programmers use slices when debugging , 1982, CACM.

[19]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984, SDE 1.

[20]  Mark Weiser,et al.  Experiments on slicing-based debugging aids , 1986 .

[21]  Hareton K. N. Leung,et al.  Comments on Program Slicing , 1987, IEEE Trans. Software Eng..