Software Maintenance: Concepts And Practice, Second Edition

If you don t know where you are, you can t be sure you re not travelling in circles
Pickard & Carter ([223], p A-36)
This chapter aims to
Discuss reverse engineering, forward engineering, reengineering and restructuring.
Explain the concepts of redocumentation and design recovery.
Describe the purpose, objectives and benefits of the above techniques with respect to effecting software change.
Discuss reverse engineering tools and identify some of their limitations.
Discuss the application of reverse engineering techniques to maintenance problems.
Discuss the weaknesses associated with the techniques covered in this chapter.
As shown in the previous chapter, understanding a software system precedes any type of change. The comprehension process takes up a great deal of the total time spent on carrying out the change. The reasons for this include incorrect, out-of-date or non-existent documentation, the complexity of the system and a lack of sufficient domain knowledge on the part of the maintainer. One way to alleviate these problems is to abstract from the source code relevant information about the system, such as the specification and design, in a form that promotes understanding.
Reverse engineering is a technique that can be used to do this. Reverse engineering alone does not lead to a change in the program; it simply paves the way for easier implementation of the desired changes. Changes are implemented using techniques such as forward engineering, restructuring, and reengineering. The issues underpinning these techniques form the theme of this chapter.
Abstraction a model that summarises...