An overview and comparative classification of program slicing techniques

Program slicing is a method for decomposing programs into slices. A program slice contains all statements that could have influenced the value of a variable of interest at some program point. The technique of program slicing has up to now been applied within a number of areas, such as software maintenance, program integration, testing, parallel processing distribution and, especially, program debugging. A slice of a program is computed either by use of static information (a static slice) or dynamic information (a dynamic slice). A static slice of a program, although imprecise, contains much broader information, and thus it tends to be much thicker than the corresponding dynamic slice. The reason is that, for a specified variable in a program, the static slice is the collection of all possible computations of values of that variable. On the other hand, a dynamic slice isolates the unique computation of the value of the specified variable for a certain program execution. The current literature on slicing is becoming unwieldy, with many different notions and methods. This article attempts to bring order to disorder by identifying and classifying different notions of program slicing and their applications. A new notion of execution slice and a method for interprocedural dynamic slicing are introduced as well.

[1]  Janusz W. Laski,et al.  Dynamic slicing of computer programs , 1990, J. Syst. Softw..

[2]  Peter Fritzson,et al.  Affect-chaining and dependency oriented flow analysis applied to queries of programs , 1988, SIGSMALL '88.

[3]  Rajiv Gupta,et al.  Distributed Slicing and Partial Re-execution for Distributed Programs , 1992, LCPC.

[4]  Keith Brian Gallagher,et al.  Using Program Slicing in Software Maintenance , 1991, IEEE Trans. Software Eng..

[5]  David A. Padua,et al.  Dependence graphs and compiler optimizations , 1981, POPL '81.

[6]  Nahid Shahmehri,et al.  Interprocedural dynamic slicing applied to interprocedural data flow testing , 1993, 1993 Conference on Software Maintenance.

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

[8]  P. E. Livadas,et al.  Program dependence analysis , 1992, Proceedings Conference on Software Maintenance 1992.

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

[10]  Nahid Shahmehri,et al.  Generalized algorithmic debugging , 1991 .

[11]  Eugene H. Spafford,et al.  Dynamic slicing in the presence of unconstrained pointers , 1991, TAV4.

[12]  Joseph Robert Horgan,et al.  Dynamic program slicing , 1990, PLDI '90.

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

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

[15]  Jeffrey M. Barth A practical interprocedural data flow analysis algorithm , 1978, CACM.

[16]  Mariam Kamkar,et al.  Dynamic slicing of distributed programs , 1995, Proceedings of International Conference on Software Maintenance.

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

[18]  Keith Gallagher,et al.  A program decomposition scheme with applications to software modification and testing , 1989, [1989] Proceedings of the Twenty-Second Annual Hawaii International Conference on System Sciences. Volume II: Software Track.

[19]  Peter Fritzson,et al.  Semi-automatic bug localization in software maintenance , 1990, Proceedings. Conference on Software Maintenance 1990.

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

[21]  Mark Weiser,et al.  Program Slicing , 1981, IEEE Transactions on Software Engineering.

[22]  Jong-Deok Choi,et al.  A Mechanism for Efficient Debugging of Parallel Programs , 1988, PLDI.