Chapter 8. Maintenance
Chapter 8. Maintenance
Software Maintenance
What is 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.
And to keep the software system working
correctly, efficiently, and securely, and to
ensure that it continues to meet the needs
of the users.
Software
Maintenance(Continued)
Software maintenance is a continuous
process that occurs throughout the
entire life cycle of the software system.
The IEEE Standard for Software
Maintenance (IEEE 1219) gave the
definition for software maintenance as
“The process of modifying a software
system or component after delivery to
correct faults, improves performance or
other attributes, or adapt to a changed
environment.”
Software
Maintenance(Continued)
Several Key Aspects of Software
Maintenance
1. Bug Fixing: The process of finding and
fixing errors and problems in the
software.
2. Enhancements: The process of adding
new features or improving existing
features to meet the evolving needs of
the users.
3. Performance Optimization: The process of
improving the speed, efficiency, and
reliability of the software.
Software
Maintenance(Continued)
4. Porting and Migration: The process of
adapting the software to run on new
hardware or software platforms.
5. Re-Engineering: The process of
improving the design and architecture of
the software to make it more
maintainable and scalable.
6. Documentation: The process of creating,
updating, and maintaining the
documentation for the software,
including user manuals, technical
specifications, and design documents.
Software
Maintenance(Continued)
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.
5. Accommodate programs so that different
hardware, software, system features, and
telecommunications facilities can be used.
6. Migrate legacy software.
7. Retire software.
8. Requirement of user changes.
9. Run the code fast
Software
Maintenance(Continued)
Types of Software Maintenance
1. Corrective maintenance
2. Patching
3. Adaptive Maintenance
4. Perfective Maintenance
5. Preventive Maintenance
Software
Maintenance(Continued)
Types of Software Maintenance
1. Corrective Maintenance: This involves
fixing errors and bugs in the software
system.
2. Patching: It is an emergency fix
implemented mainly due to pressure
from management.
Patching is done for corrective
maintenance but it gives rise to
unforeseen future errors due to lack of
proper impact analysis.
Software
Maintenance(Continued)
3. Adaptive Maintenance: This involves modifying
the software system to adapt it to changes in the
environment, such as changes in hardware or
software, government policies, and business
rules.
4. Perfective Maintenance: This involves improving
functionality, performance, and reliability, and
restructuring the software system to improve
changeability.
5. Preventive Maintenance: This involves taking
measures to prevent future problems, such as
optimization, updating documentation, reviewing
and testing the system, and implementing
preventive measures such as backups.
Software
Maintenance(Continued)
Challenges in Software Maintenance
The various challenges in software maintenance are given
below:
1. The popular age of any software program is taken into
consideration up to ten to fifteen years. As software
program renovation is open ended and might maintain
for decades making it very expensive.
2. Lack of documentation: Poorly documented systems
can make it difficult to understand how the system
works, making it difficult to identify and fix problems.
3. Lack of test coverage: Systems that have not been
thoroughly tested can be difficult to maintain as it can
be hard to identify and fix problems without knowing
how the system behaves in different scenarios.
Software
Maintenance(Continued)
4. Lack of personnel: A lack of personnel with
the necessary skills and knowledge to
maintain the system can make it difficult to
keep the system up-to-date and running
smoothly.
5. High-Cost: The cost of maintenance can be
high, especially for large and complex
systems, which can be difficult to budget for
and manage.
6. Legacy code: Maintaining older systems with
outdated technologies can be difficult, as it
may require specialized knowledge and skills
7. There is a lack of Code Comments.
Software
Maintenance(Continued)
8. Interoperability issues: Systems that need
to work with other systems or software can
be difficult to maintain, as changes to one
system can affect the other systems.
9. Complexity: Large and complex systems can
be difficult to understand and modify,
making it difficult to identify and fix
problems.
10. Changing requirements: As user
requirements change over time, the
software system may need to be modified
to meet these new requirements, which can
be difficult and time-consuming.
Software
Maintenance(Continued)
Categories of Software Maintenance
Maintenance can be divided into the following
categories.
1. 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.
2. Adaptive maintenance: This includes
modifications and updations 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.
Software
Maintenance(Continued)
3. 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’s
demands.
4. Preventive maintenance: This type of
maintenance includes modifications and
updations to prevent future problems with
the software.
Its goal is to attend to problems, which are
not significant at this moment but may cause
serious issues in the future.
Software Maintenance
Activities
Maintenance Process 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.
Software Maintenance
Activities(Continued)
6. Forward Engineering
Apply Forward engineering concepts in
order to get re-engineered software.
Software re-
engineering(Continued)
Diagram representation
Software re-
engineering(Continued)
Advantages of Re-engineering:
1. Reduced Risk: As the software is already
existing, the risk is less as compared to
new software development.
Development problems, staffing
problems and specification problems are
the lots of problems which may arise in
new software development.
2. Reduced Cost: The cost of re-engineering
is less than the costs of developing new
software.
Software re-
engineering(Continued)
Software engineering is an engineering
branch associated with development of
software product using well-defined scientific
principles, methods and procedures.
The outcome of software engineering is an
efficient and reliable software product
Reengineering is just Restructuring or
rewriting part or all of a system without
changing its functionality
Reengineering is used when some (but not
all) subsystems of a larger system require
frequent maintenance
Software re-
engineering(Continued)
Why software Reengineering
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.
Software re-
engineering(Continued)
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.
Software re-
engineering(Continued)
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
Software re-
engineering(Continued)
Re-Engineering Process
Reverse Engineering
Reverse Engineering is the process of
extracting knowledge or design information
from anything man-made and reproducing it
based on the extracted information.
It is a process to achieve system
specification by thoroughly analyzing,
understanding the existing system.
This process can be seen as reverse SDLC
model,
It is also called back engineering.
The main objective of reverse engineering is
to check out how the system works
Reverse
Engineering(Continued)
Why Reverse Engineering?
1. Providing proper system
documentation.
2. Recovery of lost information.
3. Assisting with maintenance.
4. Facility of software reuse.
5. Discovering unexpected flaws or
faults.
Reverse
Engineering(Continued)
Used of Software Reverse Engineering
Software Reverse Engineering is used in
software design
Reverse engineering enables the
developer or programmer to add new
features to the existing software with or
without knowing the source code.
Reverse engineering is also useful in
software testing, it helps the testers to
study the virus and other malware code
.
Reverse
Engineering(Continued)
Reverse Engineering
Software
Maintenance(Continued)
Program 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.
Software
Maintenance(Continued)
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
Software
Maintenance(Continued)
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.
Forward engineering is same as software
engineering process with only one
difference – it is carried out always after
reverse engineering.
Assuming that there was some software
engineering already done in the past.
Software
Maintenance(Continued)
Forward Engineering
Software
Maintenance(Continued)
Difference between Forward Engineering and
Reverse Engineering
FORWARD ENGINEERING REVERSE ENGINEERING