Software Re-Engineering
Software Re-Engineering
Software Re-Engineering (often known as preventive maintenance) is the
examination and alteration of a system to reconstitute it in a new form.
The principles of Re-Engineering when applied to the software development
process is called software re-engineering.
It affects positively at software cost, quality, service to the customer and
speed of delivery. In Software Re-engineering, we are improving the software
to make it more efficient and effective.
Re-engineering V/S New Software
Development
Software Re-Engineering
Software re-engineering is an economical process for software development
and quality enhancement of the product.
This process enables us to identify the useless consumption of deployed
resources and the constraints that are restricting the development process so
that the development process could be made easier and cost-effective (time,
financial, direct advantage, optimize the code, indirect benefits, etc.) and
maintainable.
Importance
a) Reduction in risks: Instead of developing the software product from
scratch or from the beginning stage here developers develop the product
from its existing stage to enhance some specific features that are brought
in concern by stakeholders or its users. Such kind of practice reduces the
chances of fault fallibility.
b) Saves time: As we stated above here that the product is developed
from the existing stage rather than the beginning stage so the time
consumes in software engineering is lesser.
Importance
c) Optimization: This process refines the system features, functionalities and
reduces the complexity of the product by consistent optimization as
maximum as possible.
Need
We decide to reengineer mostly when:
▪ When system changes are confined to one subsystem, the subsystem
needs to be reengineered
▪ When hardware or software support becomes obsolete
▪ When tools to support restructuring are readily available
Software Re-Engineering Activities
Software Re-Engineering Activities
1. Inventory Analysis
▪ Every software organization should have an inventory of all the applications.
Inventory can be nothing more than a spreadsheet model containing
information that provides a detailed description of every active application.
▪ By sorting this information according to business criticality, longevity, current
maintainability and other local important criteria, candidates for re-
engineering appear. The resource can then be allocated to a candidate
application for re-engineering work.
Software Re-Engineering Activities
2. Document reconstructing
▪ Documentation of a system either explains how it operates or how to use
it. Documentation must be updated.
▪ It may not be necessary to fully document an application. In situations
when the system is business-critical then it must be fully re-documented.
Software Re-Engineering Activities
3. Reverse 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.
Software Re-Engineering Activities
3. Reverse Engineering
▪ While performing reverse engineering on a large system, tools and methodologies are
generally not stable. Therefore, a high-level organizational paradigm enables repetitions
of processes so that maintenance engineers learn about the system. Benedusi et al.
have proposed a repeatable paradigm, called Goals/Models/Tools, that describes
reverse engineering in three successive stages, namely, Goals, Models and Tools.
▪ Goals: In this phase, one analyzes the motivations for setting up the process to
identify the information needs of the process and the abstractions to be produced.
Software Re-Engineering Activities
3. Reverse Engineering
▪ Models: In this phase, one analyzes the abstractions to construct representation models
that capture the information needed for their production.
▪ Tools: In this phase, software tools are defined, acquired, enhanced, integrated, or
constructed to:
(i) execute the Models phase
(ii) transform the program models into the abstractions identified in the
Goals phase.
Software Re-Engineering Activities
3. Reverse Engineering
▪ It is important to note that fact-finding and information gathering from the source code are
keys to the Goal/Models/Tools paradigm. In order to extract information that is not explicitly
available in source code, automated analysis techniques, such as lexical analysis, syntactic
analysis, control flow analysis, data flow analysis, and program slicing are used to facilitate
reverse engineering.
Software Re-Engineering Activities
4. Code Restructuring
▪ 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.
Software Re-Engineering Activities
5. Data Restructuring
▪ Data restructuring begins with a reverse engineering activity.
▪ Current data architecture is dissected, and the necessary data models are defined.
▪ Data objects and attributes are identified, and existing data structure are reviewed
for quality.
Software Re-Engineering Activities
6. Forward Engineering
▪ 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.