The Surgeon's Assistant is a CASE tool for software maintainers and
developers of ANSI C programs. It is based on the premises that maintainers
need to limit the scope of changes and that most development
starts from some existing, similar systems (and can therefore be
classified as ``maintenance'').

The Surgeon's Assistant provides an environment that is based on a new
software maintenance process model proposed in [7].
The maintainer can perform decomposition slices on given variables. Then, a
textual display of the slice's source code is displayed beside its
complement2. The maintainer is permitted to edit portions of
the slice that do not affect the complement. After testing the slice as an
independent program, the maintainer then merges the modified slice with its
complement, thus changing the original program. Note that the maintainer only
needs to test the slice, not the complement, to validate the correctness of
the change (i.e., under this model, no regression testing is required).

Most of the Surgeon's Assistant provides only a textual interface to view the
slices and to affect changes. Textual viewers are provided to view the entire
program or individual slices. These textual viewers present a complete
analysis of how a change to one slice will affect the program. However, the
amount of information can still be overwhelming.

Once a slice is chosen, The Surgeon's Assistant presents a context sensitive
editor that only allows changes to the chosen slice. The maintainer may use
this editor to change statements that are part of the chosen slice, and test
the program with these changes. When finished, the maintainer uses the
Surgeon's Assistant to merge the changes with the complement to again create a
full program.

This textual interface, although useful, does not provide enough
information to truly visualize the effects that the proposed change
would have. Pictorial representations of the slices would be a better
method to understand these effects. Decomposition slices of a given
program form an acyclic directed graph where a node represents a
decomposition slice, and an edge represents the predicate ``is
contained in'' [7]. If the maintainer can be
made aware that the chosen slice is at the top of the graph
(i.e. contains many of the other slices), the maintainer may
reconsider the proposed change. The textual interface may provide
this information by number of lines of code, but gleaning this
information from the textual interface becomes impractical when large
programs are sliced.