When
we need to update the software to keep it to the current market, without
impacting its functionality, it is called software re-engineering. It is a
thorough process where the design of software is changed and programs are
re-written.
Legacy
software cannot keep tuning with the latest technology available in the market.
As the hardware become obsolete, updating of software becomes a headache. Even
if software grows old with time, its functionality does not.
For
example, initially Unix was developed in assembly
language. When language C came into existence, Unix was
re-engineered in C, because working in assembly language was difficult.
Other
than this, sometimes programmers notice that few parts of software need more
maintenance than others and they also need re-engineering.
● Decide what
to re-engineer. Is it whole software or a part of it?
● Perform Reverse
Engineering, in order to obtain specifications of existing software.
● Restructure
Program if required. For example, changing function-oriented
programs into object-oriented programs.
● Re-structure
data as required.
● Apply
Forward engineering concepts in order to get re-engineered software.
There
are few important terms used in Software re-engineering
It
is a process to achieve system specification by thoroughly analyzing, understanding the existing system. This process
can be seen as reverse SDLC model, i.e. we try to get higher abstraction level
by analyzing lower abstraction levels.
An
existing system is previously implemented design, about which we know nothing.
Designers then do reverse engineering by looking at the code and try to get the
design. With design in hand, they try to conclude the specifications. Thus,
going in reverse from code to system specification.
It
is a process to re-structure and re-construct the existing software. It is all
about re-arranging the source code, either in same programming language or from
one programming language to a different one. Restructuring can have either
source code-restructuring and data-restructuring or both.
Re-structuring
does not impact the functionality of the software but enhance reliability and
maintainability. Program components, which cause errors very frequently can be
changed, or updated with re-structuring.
The
dependability of software on obsolete hardware platform can be removed via
re-structuring.
Forward
engineering is a process of obtaining desired software from the specifications
in hand which were brought down by means of reverse engineering. It assumes
that there was some software engineering already done in the past.
Forward
engineering is same as software engineering process with only one difference –
it is carried out always after reverse engineering.