Issue No. 01 - January (1997 vol. 23)
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/32.581327
<p><b>Abstract</b>—A dynamic program slice is an executable part of the program whose behavior is identical, for the same program input, to that of the original program with respect to a variable(s) of interest at some execution position. The existing algorithms of dynamic slice computation use data and control dependencies to compute dynamic slices. These algorithms are limited to structured programs because, as we will show, they may compute incorrect dynamic slices for unstructured programs due to the limitations of control dependencies that are used to compute dynamic slices. In this paper we present a novel approach of dynamic slice computation for unstructured programs. The approach employs the notion of a removable block in finding dynamic program slices. Dynamic slices are derived by identifying not only these parts of program execution that contribute to the computation of the value of a variable of interest, but also these parts of program execution that do not contribute to the computation of the variable value. Data dependencies are used to identify contributing computations, whereas removable blocks are used to identify noncontributing computations. We have proven that the presented dynamic slicing algorithms compute correctly dynamic slices. In addition, these algorithms may compute more accurate dynamic slices as opposed to the existing algorithms that use control dependencies. The presented algorithms have been implemented in a dynamic slicing tool that supports dynamic slicing for Pascal programs.</p>
Program slicing, dynamic program slicing, removable block, control dependence, data dependence, execution trace, unstructured program, debugging.
B. Korel, "Computation of Dynamic Program Slices for Unstructured Programs," in IEEE Transactions on Software Engineering, vol. 23, no. , pp. 17-34, 1997.