A program slice describes all the statements of the program affecting a given variable x at a given point p. Interprocedural slicing, in which a slice crosses the boundaries of the procedure calls, is studied here.
A short history of this problem is presented. An algorithm due to Weiser [1] identifies imprecise slices--those that include large parts of the program that do not affect the point and the variable under consideration. Another algorithm produces more precise slices which, however, are not executable [2].
Starting from this last algorithm, the author presents a new algorithm for producing executable interprocedural slices. He gives a proof of the correctness of this algorithm.
The problem studied in this paper has a number of important applications for understanding complex code and for debugging and maintaining software products. The presentation is clear, with comprehensive examples and a suitable mathematical model, a system dependence graph.