Program slicing was originally introduced by Mark Weiser to formalize the mental process that a programmer follows to find a bug. Essentially, program slicing extracts those sentences that are related to some criterion (referred to as “slicing criterion”), usually given by a pair (set_of_variables, line_number). The original technique was static, in the sense that it did not consider particular input data. Later, Korel and Laski introduced a dynamic form of slicing that considered a concrete program input. Dynamic slicing is particularly well suited for debugging, because bugs are often associated with a particular program run; furthermore, dynamic slices are usually smaller (more precise) than static slices.
This paper shows that, in contrast to what is commonly believed, dynamic slicing is not a particular case of static slicing. Its main contribution is the identification of the main aspects that distinguish both forms of slicing: first, whether input data are provided or not; second, whether all or only some executions of a given statement are relevant; and, third, whether the (filtered) sequence of executed sentences should be preserved or not. The last two aspects have not been considered before. From all possible combinations of these aspects, we get eight forms of slicing (six of which are novel).
The paper is reasonably well written, contains sufficient examples, and includes an adequate comparison to related work. There are two sections that are devoted to formally proving the relationships among the eight forms of slicing. Although some statements are a bit sloppy, this represents a novel and significant result. All in all, this is a must-read paper for researchers interested in the theoretical aspects of slicing.