Software Maintenance
UNIT VII
Software Maintenance
Software Maintenance is the process of modifying a
software product after it has been delivered to the
customer.
The main purpose of software maintenance is to
modify and update software application after
delivery to correct faults and to improve
performance.
Need for Maintenance
Software Maintenance must be performed in
order to:
1. Correct faults.
2. Improve the design.
3. Implement enhancements.
4. Interface with other systems.
Types of Software Maintenance
1. Corrective maintenance
2. Adaptive maintenance
3. Perfective maintenance
4. Preventive maintenance:
Corrective maintenance
Corrective maintenance of a
software product may be
essential either to rectify some
bugs observed while the system
is in use, or to enhance the
performance of the system.
Adaptive maintenance:
This includes modifications and
updates when the customers need
the product to run on new
platforms, on new operating
systems, or when they need the
product to interface with new
hardware and software.
Perfective maintenance
A software product needs maintenance
to support the new features that the
users want or to change different types
of functionalities of the system
according to the customer demands.
Preventive maintenance
This type of maintenance includes
modifications and updations to
prevent future problems of the
software.
It goals to attend problems, which are
not significant at this moment but
may cause serious issues in future.
Cost of Maintenance
Reports suggest that the cost of maintenance is high. A study on
estimating software maintenance found that the cost of
maintenance is as high as 67% of the cost of entire software
process cycle.
On an average, the cost of software maintenance is more than
50% of all SDLC phases. There are various factors, which trigger
maintenance cost go high, such as:
Cost of Maintenance
Real-world factors affecting Maintenance Cost
The standard age of any software is considered up to 10
to 15 years.
Older softwares, which were meant to work on slow
machines with less memory and storage capacity cannot
keep themselves challenging against newly coming
enhanced softwares on modern hardware.
As technology advances, it becomes costly to maintain
old software.
Real-world factors affecting Maintenance Cost
Most maintenance engineers are newbie and use trial
and error method to rectify problem.
Often, changes made can easily hurt the original
structure of the software, making it hard for any
subsequent changes.
Changes are often left undocumented which may
cause more conflicts in future.
Software-end factors affecting Maintenance Cost
Structure of Software Program
Programming Language
Dependence on external environment
Staff reliability and availability
Maintenance Activities
IEEE provides a framework for sequential
maintenance process activities. It can be used in
iterative manner and can be extended so that
customized items and processes can be included.
The activities go hand-in-hand with some of the phases
Maintenance Activities
Maintenance Activities
Identification & Tracing - It involves activities
pertaining to identification of requirement of
modification or maintenance. It is generated by user or
system may itself report via logs or error messages.Here,
the maintenance type is classified also.
Analysis - The modification is analyzed for its impact on
the system including safety and security implications. If
probable impact is severe, alternative solution is looked
for. A set of required modifications is then materialized
into requirement specifications. The cost of
modification/maintenance is analyzed and estimation is
concluded.
Maintenance Activities
Design - New modules, which need to be replaced
or modified, are designed against requirement
specifications set in the previous stage. Test cases are
created for validation and verification.
Implementation - The new modules are coded
with the help of structured design created in the
design step. Every programmer is expected to do unit
testing in parallel.
Maintenance Activities
System Testing - Integration testing is done
among newly created modules. Integration testing is
also carried out between new modules and the
system. Finally the system is tested as a whole,
following regressive testing procedures.
Acceptance Testing - After testing the system
internally, it is tested for acceptance with the help of
users. If at this state, user complaints some issues
they are addressed or noted to address in next
iteration.
Maintenance Activities
Delivery - After acceptance test, the system is
deployed all over the organization either by small
update package or fresh installation of the system.
The final testing takes place at client end after the
software is delivered.
Training facility is provided if required, in addition
to the hard copy of user manual.
Maintenance management - Configuration
management is an essential part of system
maintenance. It is aided with version control tools to
control versions, semi-version or patch management.
Software Re-Engineering
Software Re-Engineering is the examination and
alteration of a system to reconstitute it in a new form.
It is a process of software development which is
done to improve the maintainability of a software
system.
Software Re-Engineering
Software Re-engineering : Re-engineering is the
examination and alteration of a system to reconstitute
it in a new form.
This process encompasses a combination of sub-
processes like reverse engineering, forward
engineering, reconstructing etc.
Objectives of Re-engineering
To describe a cost-effective option for system
evolution.
To describe the activities involved in the software
maintenance process.
To distinguish between software and data re-
engineering and to explain the problems of data re-
engineering.
The need of 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.
The need of software Re-engineering
1. Boost up productivity: Software reengineering
increase productivity by optimizing the code and
database so that processing gets faster.
2. Processes in continuity: The functionality of
older software product can be still used while the
testing or development of software.
The need of software Re-engineering
3. Improvement opportunity:
During process of software reengineering, not only
software qualities, features and functionality but
also skills are refined, new ideas hit in person’s
mind.
This makes the developers mind accustomed to
capturing new opportunities so that more and more
new features can be developed.
The need of software Re-engineering
4. Reduction in risks:
Instead of developing the software product from
scratch here developers develop the product from its
existing stage
This enhance some specific features that are brought
in concern by stakeholders or its users.
Its reduces the chances of faults.
The need of software Re-engineering
5. Saves time: Here the product is developed from
the existing stage rather than the beginning stage
so the it takes very less time in software
engineering.
6. Optimization: This process refines the system
features, functionalities and reduces the complexity
of the product by consistent optimization as
maximum as possible.
Steps involved in Re-engineering
Inventory Analysis
Document Reconstruction
Reverse Engineering
Code Reconstruction
Data Reconstruction
Forward Engineering
Steps involved in Re-engineering
Image Reference https://media.geeksforgeeks.org/wp-
content/uploads/20190429164218/Capture9999.jpg :
Step 1: Inventory Analysis
Every software organisation should have an inventory
of all the applications:
It is like a spreadsheet model containing
information which gives the detailed idea of every
active application.
According to business requirements it gets sorted.
The resource can then be allocated to a candidate
application for re-engineering work.
Step 2: Document reconstructing:
This explains how system operates or how to use
it.
Documentation must be updated.
If system is business-critical then must be fully re-
documented.
Step 3 : Reverse Engineering:
Reverse engineering is a process of design
recovery.
Reverse engineering tools extract data,
architectural and procedural design information
from an existing program.
Step 4 : Code Reconstructing:
To accomplish code reconstructing, the source code
is analysed using a reconstructing tool.
Violations of structured programming construct are
noted and code is then reconstructed.
The resultant restructured code is reviewed and
tested to ensure that no anomalies have been
introduced.
Step 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.
Step 6 : Forward Engineering:
Also known as : Renovation or Reclamation
This recovers design information from existing
software and uses this information to alter or
reconstitute the existing system to improve its
overall quality.
Change Management
Change Management in software development
refers to transition from an existing state of software
product to another improved state of product.
It controls, supports and manages changes to
artifacts, such as code changes, process changes or
documentation changes.
It mainly identifies, documents and authorizes
changes to a software application.
Change Management
Change Management does not comes under any
phases of SDLC still it has a great importance in the
entire software development process.
There are various types of change management tools
are used for various purposes like to adopt, control,
represent and effect the change required.
For example Change management tool for Flow
Charting, Project Planning, Data collection etc.
Process of Change Management
When any software application/product goes for any changes in an
IT environment, it undergoes a series of sequential processes as
follows:
1. Creating a request for change
2. Reviewing and assessing a request for change
3. Planning the change
4. Testing the change
5. Creating a change proposal
6. Implementing changes
7. Reviewing change performance
8. Closing the process
Importance of Change Management
For improving performance
For increasing engagement
For enhancing innovation
For including new technologies
For implementing new requirements
For reducing cost
Configuration Management
When we develop software, the product (software)
undergoes many changes in their maintenance
phase; we need to handle these changes effectively.
Several individuals (programs) works together to
achieve these common goals.
This individual produces several work product (SC
Items) e.g., Intermediate version of modules or test
data used during debugging, parts of the final
product.
Configuration Management
The elements that comprise all information
produced as a part of the software process are
collectively called a software configuration.
Need Configuration Management
Multiple people are working on software which is
consistently updating.
It may be a method where multiple version,
branches, authors are involved in a software project,
and the team is geographically distributed and works
concurrently.
It changes in user requirements, and policy, budget,
schedules need to be accommodated.
It is practical in controlling and managing the access to
various SCIs e.g., by preventing the two members of a
team for checking out the same component for
modification at the same time.
It provides the tool to ensure that changes are being
properly implemented.
It has the capability of describing and storing the various
constituent of software.
Maintenance tools and techniques.
Software maintenance involves modifying the
existing software system and recording all the
modifications made to it.
For this, various maintenance tools are used.
One of the commonly used maintenance tool is text
editor.
Maintenance tools and techniques.
This tool creates a copy of the documentation or the
code.
The key feature of this tool is that it provides a
medium to roll back (when required) from the
current version of a file to the previous one.
Several other tools used in software maintenance are
as follows.
Maintenance tools and techniques.
Maintenance tools and techniques.
References
https://www.tutorialspoint.com/software_engineeri
ng/software_maintenance_overview.html
https://www.geeksforgeeks.org/software-
engineering-re-engineering/
https://www.javatpoint.com/software-
configuration-management
https://ecomputernotes.com/software-
engineering/tools-for-software-maintenance