Reverse engineering is now recognized as the vital discipline in supporting software maintenance. Documentation is always incomplete and out of date, so one relies on the code. Even the cleanest code, however, fails to identify all of the requirements, assumptions, and dependencies involved.
In the last two decades, many novel tools and techniques have been developed to help programmers analyze code. One of the strengths of this paper is the categorization of the types of tools and their desirable features. ¿The list of nearly 50 recent references is a good starting point for researchers. An older annotated bibliography [1] gives a historical perspective.
The paper has a few spelling mistakes and grammatical errors, but is still clear and accurate. Though it is a good survey of reverse engineering tools, the figures in the virtual extension of the magazine ruined it for me.¿One figure is a bandwidth-consuming computer-generated image with no visible relation to the topic being discussed.¿The other figure is a visual summary of the ontology that the authors developed from Chikofsky and Cross’s¿taxonomy [2]. This diagram claims to use the unified modeling language (UML), but is full of novice-type errors, such as roles at the wrong ends of associations and incorrect arrowheads. Researchers¿would be wise to get the Hypertext Markup Language (HTML) version that omits the figures.¿The tables of tools, however, will be valuable to practitioners, and these are only in the PDF version of the paper.