Notes 2
Notes 2
Re engineering
• Software Re-engineering is a process of software development which is done to
improve the maintainability of a software system. Re-engineering is the examination
and alteration of a system to reconstitute it in a new form.
• Steps involved in Re-engineering.
• Inventory Analysis
• Document Reconstruction
• Reverse Engineering
• Code Reconstruction
• Data Reconstruction
• Forward Engineering
•
Dynamic representation
Re engineering
• Re engineering cost factors:
• The quality of the software to be re-engineered
• The tool support available for re-engineering
• The extent of the required data conversion
• The availability of expert staff for re-engineering
Re engineering
• Reengineering is done to transform an existing “lesser or simpler”
system into a new “better” system.
• Reengineering is the examination, analysis and restructuring of an
existing software system to reconstitute it in a new form, and the
subsequent implementation of the new form.
• Jacobson and Lindstorm defined following formula:
Reengineering = Reverse engineering + + Forward engineering.
• Reverse engineering is the activity of defining a more abstract, and easier to
understand, representation of the system
• The core of reverse engineering is the process of examination, not a process of
change, therefore it does not involve changing the software under examination.
• The third element “forward engineering,” is the traditional process of moving
from high-level abstraction and logical, implementation-independent designs to
the physical implementation of the system.
• The second element captures alteration that is change of the system.
Reverse and forward engineering
• Reverse engineering, sometimes called back engineering, is a process
in which software, machines, aircraft, architectural structures and
other products are deconstructed to extract design information from
them. Often, reverse engineering involves deconstructing individual
components of larger products. The reverse engineering process
enables you to determine how a part was designed so that you can
recreate it.
• The reverse engineering process is named as such because it involves
working backward through the original design process.
Reverse and forward engineering
• Forward Engineering is a method of creating or making an application
with the help of the given requirements. Forward engineering is also
known as Renovation and Reclamation. Forward engineering is
required high proficiency skills. It takes more time to construct or
develop an application.
• The goal of reengineering is to:
• understand the existing software
system artifacts, namely, specification,
design, implementation, and
documentation, and
• improve the functionality and quality
attributes of the system.
• Software systems are reengineered
by keeping one or more of the
following four general objectives in
mind:
• Improving maintainability.
• Migrating to a new technology.
• Improving quality.
• Preparing for functional enhancement.
• Abstraction and Refinement are key concepts
used in software development, and both the
concepts are equally useful in reengineering.
• Abstraction is concerned with hiding lower levels of
detail; it moves from lower to higher levels.
• It may be recalled that abstraction enables
software maintenance personnel to reduce the
complexity of understanding a system by:
(i) focusing on the more significant
information about the system; and
(ii) Hiding the irrelevant details now.
• On the other hand, refinement is the reverse
of abstraction.
Reengineering Concepts
• On the other hand, the upward movement through the layers of abstractions is called
reverse engineering.
• Reverse engineering of software systems is a process comprising the following steps:
(i) analyze the software to determine its components and the relationships among the components,
(ii) represent the system at a higher level of abstraction or in another form.
• Reverse engineering, sometimes called back engineering, is a process in which software,
machines, aircraft, architectural structures and other products are deconstructed to extract
design information from them. Often, reverse engineering involves deconstructing individual
components of larger products. The reverse engineering process enables you to determine
how a part was designed so that you can recreate it.
• The reverse engineering process is named as such because it involves working backward
through the original design process.
• De-compilation is an example of Reverse Engineering, in which object
code is translated into a high-level program.
Figure 4.1 levels of abstraction and refinement
•
• Requirements,
• Design, and
• Implementation.
• The refinement process:
why? ! what? ! what & how? !
how?
• The abstraction process:
how? ! what & how? !
what? ! why?
Figure 4.2 Conceptual basis for the
reengineering process
Figure
proposed
by Eric J.
Byrne
Figure 4.3 General model of software reengineering
suggests
that
reengine
ering is a
sequence
of three
activities:
– reverse
engine
ering,
re-
design,
and
forwar
d
engine
ering
–
strongl
y
founde
d in
three
principl
es,
namely
,
abstrac
tion,
alterati
on, and
refine
ment.
• A visual
metaph
or called
horsesh
oe, as
depicted
in Figure
4.4, was
develop
ed by
Figure 4.4 Horseshoe model of reengineering
Kazman
et al. to
describe
a three-
step
architect
ural
reengine
ering
process.
• Three
distinct
segment
s of the
horsesh
oe are
the left
side, the
A General Model For Software Reengineering
top part,
and the
right
side.
Those
three
parts
denote
the
three
steps of
the
reengine
ering
process.
Now, we are in a position to re-visit three definitions of
reengineering.
• The definition by Chikofsky and Cross II:
Software reengineering is the analysis
and alteration of an operational system
to represent it in a new form and to
A General Model For Software Reengineering
technique.
• A change in functionality comes from a change
in the business rules,
• Next, concerning a change of implementation
technique, an end-user of a system never
knows if the system is implemented in an
object-oriented language or a procedural
language.
• Another common term
used by practitioners
of reengineering is
rehosting.
• Rehosting means
reengineering of
source code without
addition or reduction
of features in the
transformed targeted
source code.
• Rehosting is most
effective when the user
is satisfied with the
A General Model For Software Reengineering
system’s functionality,
but looks for better
qualities of the system.
• Examples of better
qualities are improved
efficiency of execution
and reduced
maintenance costs.
Based on the type of changes required,
system characteristics are divided into
groups: rethink, respecify, redesign, and
re-code.
Recode:
• Implementation characteristics of the source
program are changed by re-coding it. Source-
code level changes are performed by means
of rephrasing and program translation.
• In the latter approach, a program is
transformed into a program in a different
language. On the other hand, rephrasing
keeps the program in the same language
• Examples of translation scenarios are
compilation, decompilation, and migration.
• Examples of rephrasing scenarios are
normalization, optimization, refactoring, and
renovation.
Types of Change
Redesign:
• The design characteristics of the
software are altered by re-designing the
system. Common changes to the
software design include:
(i) restructuring the architecture;
(ii) Modifying the data model of the system;
and
(iii) replacing a procedure or an algorithm
with a more efficient one.
Respecify:
• This means changing the requirement
characteristics of the system in two
ways:
(i) change the form of the
requirements, and
(ii) change the scope of the
requirements.
Rethink:
• Re-thinking a system means
manipulating the concepts embodied
in an existing system to create a
system that operates in a different
Types of Change
problem domain.
• It involves changing the conceptual
characteristics of the system, and it
can lead to the system being changed
in a fundamental way.
• Moving from the development of an
ordinary cellular phone to the
development of smartphone system is
an example of Re-think.
Three strategies
that specify the
basic steps of
reengineering
are rewrite,
Software Reengineering Strategies
rework, and
Figure 4.5 Conceptual basis for reengineering strategies
replace.
Rewrite strategy:
This strategy
reflects the
principle of
alteration. By
means of
alteration, an
operational
system is
transformed
into a new
system, while
preserving the
abstraction level
of the original
system. For
example, the
Fortran code of
a system can be
rewritten in the
C language.
Rework strategy:
• The rework strategy applies
all the three principles.
• Let the goal of a
Figure 4.5 Conceptual basis for reengineering strategies
reengineering project is to
Software Reengineering Strategies
• To change a certain
characteristic of a system:
(i) the system is
reconstructed at a
higher level of
abstraction by hiding
the details of the
characteristic; and
(ii) a suitable
representation for the
target system is
generated at a lower
level of abstraction by
applying refinement.
• Let us reconsider the
GOTO example. By means
of abstraction, a program
is represented at a higher
level without using
control flow concepts.
• Next, by means of
refinement, the system is
represented at a lower
level of abstraction with a
new structured control
flow.
Reengineering Variations
Figure 4.8 Software reengineering process phases
• The phase
model of
software
reengineerin
g was
originally
proposed by
Byrne and
Gustafson.
• The model
comprises
Phase Reengineering Model
five phases:
analysis and
planning,
renovation,
target
system
testing,
redocument
ation, and
acceptance
testing and
system
transition, as
depicted in
Figure 4.8.
• The labels
•
present state of the system to be
reengineered and understanding its
properties.
• The second technical issue concerns the
identification of the need for the system
to be reengineered.
• The third technical issue concerns the
specification of the characteristics of the
new system to be produced.
• The economic issue concerns a cost and
benefit analysis of the reengineering
project.
• Planning includes:
• understanding the scope of the work;
• identifying the required resources;
• identifying the tasks and milestones;
• estimating the required effort; and
• preparing a schedule.
Phase Reengineering Model
Renovation:
• An operational system is modified into
the target system in the renovation
phase.
• Two main aspects of a system are
considered in this phase:
Phase Reengineering Model
Renovation:
Example
• A project in which
the objective is to
re-code the system
from C to C++.
• Figure 4.9 shows the
three possible
replacement
strategies.
Phase Reengineering Model
• First, to perform
source-to-source
translation, program
migration is used.
• Second, a high-level
design is
constructed from
the operational
source code, say, in
C, and the resulting
design is re-
implemented in the
target language, C++
in this case.
• Finally, a mix of
compilation and
decompilation is
used to obtain the
system
implementation in C
Target system
testing:
• In this phase for system
testing, faults are
detected in the target
system.
• Those faults might have
been introduced during
reengineering.
• Fault detection is
performed by applying
Phase Reengineering Model
•
system pass those tests,
preparation begins to
transition to the new system.
• On the other hand, if the
reengineered system fails
some tests, the faults must
be fixed; in some cases,
those faults are fixed after
the target system is
deployed.
• Upon completion of the
acceptance tests, the
reengineered system is
made operational, and the
old system is put out of
service.
• System transition is guided
by the prior developed
transition plan.