Extracting Reusable Functions by Program Slicing
Abstract
An alternative approach to developing reusable components from
scratch is to recover them from existing systems. In this paper, we apply
program slicing, introduced by Weiser, to the problem of extracting
reusable functions from ill-structured programs. We extend the definition
of program slice to a transform slice, one that includes statements which
contribute directly or indirectly to transform a set of input variables
into a set of output variables. Unlike conventional program slicing,
these statements do not include neither the statements necessary to get
input data nor the statements which test the binding conditions of the
function. Transform slicing presupposes the knowledge that a function is
performed in the code and its partial specification, only in terms of
input and output data. Using domain knowledge we discuss how to formulate
expectations of the functions implemented in the code. In addition to the
input/output parameters of the function, the slicing criterion depends on
an initial statement which is difficult to obtain for large programs.
Using the notions of decomposition slice and concept validation we
demonstrate how to produce a set of candidate functions, which are
independent of line numbers but must be evaluated with respect to the
expected behavior. Although human interaction is required, the limited
size of candidate functions makes this task easier than looking for the
last function instruction in the original source code.
(Also cross-referenced as UMIACS-TR-96-13)