Software Re-Engineering Summary
Software Re-Engineering Summary
Program stucture
Automated diagrams
analysis
System
System to be Document Data stucture
information
re-engineered generation diagrams
store
Manual
annotation Traceability
matrices
Levels 9
Engineering (1/2)
Reverse engineering involves performing one or more of the types of
abstraction, in a bottom-up and incremental manner.
It entails detecting low-level implementation constructs and replacing
them with their high-level counterparts.
The process eventually results in an incremental formation of an overall
architecture of the program.
It should be noted that the product of a reverse engineering process does
not necessarily have to be at a higher level of abstraction.
If it is at the same level as the original system, the operation is commonly
known as “redocumentation”.
If the resulting product is at a higher level of abstraction, the operation is
known as 'design recovery' or 'specification recovery
Levels 10
Engineering (2/2)
documentation 11
Engineering (1/3)
Redocumentation is the recreation of a semantically equivalent
representation within the same relative abstraction level.
The goals of this process are threefold.
Firstly, to create alternative views of the system so as to enhance
understanding, for example the generation of a hierarchical data flow or
control flow diagram from source code.
Secondly, to improve current documentation. Ideally, such
documentation should have been produced during the development of
the system and updated as the system changed.
Thirdly, to generate documentation for a newly modified program. This
is aimed at facilitating future maintenance work on the system –
preventive maintenance.
documentation 12
Engineering (2/3)
documentation 13
Engineering (3/3)
Design 14
Engineering Recovery (1/3)
Design recovery entails identifying and extracting meaningful
higher level abstractions beyond those obtained directly from
examination of the source code.
This may be achieved from a combination of code, existing
design documentation, personal experience, and knowledge of
the problem and application domains.
The recovered design – which is not necessarily the original
design - can then be used for redeveloping the system (a baseline
for future system modifications).
The design could also be used to develop similar but non-
identical applications.
Design 15
Engineering Recovery (2/3)
Different approaches, which vary in their focus, can be used to
recover design.
Some draw heavily on programming language constructs
contained in the program text.
They argue that an important aspect of design recovery is being
able to recognize, understand and represent design decisions
present in a given source code.
Program constructs (e.g., control and data structures, variables,
procedures and functions, definition and implementation
modules, and class hierarchies), which vary between
programming languages, enable recognition of design decisions.
Design 16
Engineering Recovery (3/3)