The notion of a program slice, originally introduced by Mark Weiser, is a fundamental operation for addressing many software-engineering problems, including program understanding, debugging, maintenance, testing, and merging. A slice determines either all program elements that might affect a given element (“backward slicing”) or all elements that could be affected by a given element (“forward slicing”). Jackson and Rollins introduced a related operation, called program chopping, which is a kind of “filtered” slice: Chopping answers questions of the form “What are all the program elements v that serve to transmit effects from a given source element s to a given target element t?” However, Jackson and Rollins define only a limited form of chopping: Among other restrictions, they impose the restriction that s and t be in the same procedure. This paper solves the unrestricted interprocedural chopping problem, as well as a variety of other useful variants of interprocedur...
Thomas W. Reps, Genevieve Rosay