Uses the existing source code and a comprehension process to define a representation of the system at a higher level of abstraction.
Uses the improved understanding of what a program does to reimplement it.
Exploring the source code and other supporting documents in an attempt to recover the design decision and rationale.
The process of reformulating a program without raising the level of abstraction. Replacing GOTO calls in older programs with control structures would be an example.