This paper presents an evaluation and comparison of practical implementations of program slicing, which is a technique for extracting parts of computer programs by tracing the program's control and data flow related to some data item. Slicing has applications is several areas such as debugging, data flow testing, integration of several source program versions into single version, etc. The usefulness of slicing is related to its ability to focus on relevant parts of large programs.
Static program slicing, which is a compile-time version of the analysis, was first introduced 1982, whereas run-time based dynamic slicing systems appeared around 1988. However, previously there has not been any comprehensive evaluation of the state of the art regarding slicing system implementations. This is an attempt to partially fill that need, by evaluating five implementations. Not surprisingly, it was observed that dynamic slicing systems often give smaller and more precise slices than static slicing systems, since in the dynamic case an actual flow of control is known. An unexpected observation was that dynamic slicers can sometimes be faster than static slicers. One of the systems shows how slicing can be integrated into a conventional debugging tool. All systems can be regarded as first generation systems, in that they have some performance problems and in several cases support rather small language subsets. The next generation of such systems may become useful tools integrated as part of program development environments.