Software Maintenance is a part of Software Development Life Cycle. It is the process of modifying and updating software applications after it has been delivered in order to fix bugs and improve system performance.
IEEE defines
maintenance as ‘a process of modifying a software system or component after
delivery to correct faults, to improve performance or other attributes or to
adapt the product to a changed environment.’
The primary goal of
software maintenance is to modify and continuously update software applications
after delivery to eliminate all possible errors, malfunctions, to improve work
efficiency and better system performance.
Software maintenance denotes any changes
made to a software product after it has been delivered to the customer. Over a period of time, the developed software system
may need modifications according to the changing user requirements. Change
will occur because errors have been encountered, because the software must be
adapted to accommodate changes in its external environment (e.g., a change
required because new operating system or peripheral device). Sometimes, maintenance also involves adding new
features and functionalities (using latest technology) to the existing software
system.
Software does not wear
out or get tired. However, it needs to be upgraded and enhanced to meet new
user requirements. For such modifications in the software system, software
maintenance is performed.
Software maintenance is becoming an
important activity of a large number of organizations. When the hardware
platform changes and a software product perform some low-level functions,
maintenance is necessary. Also, whenever the support environment of a software
product changes, the software product requires rework to cop up with the newer
interface. For instance, a software product may need to be maintained when the
operating system changes. Thus, every software product continues to evolve
after its development through maintenance efforts.
Maintaining software
is not less important than software development. Maintenance has
often taken a back seat where software development is concerned. However, once
software is delivered, it gets maintained for the rest of its useful life. The
maintenance of existing software can account for 70 percent of all effort
expended by a software organization.
Though maintenance is not considered a
part of software development, it is a very important activity in the life of a
software product. Usually, the total cost of maintenance phase is much higher
than the development cost of the software. Normally the maintenance-to-development
cost ratio is suggested as 80:20, 70:30 or 60:40.
Maintenance work is based on existing
software, as compared to development work that creates new software. In other
words, maintenance revolves around understanding the existing software and
maintainers spend most of their time trying to understand the software they
have to modify. Understanding the software means that understanding not only
the code but also the related documents. During the modification of the software,
the change has to be clearly understood by the maintainer. To test whether
those aspects of the system that are not supposed to be modified are operating
as they were before modification, regression
testing is done. In regression testing, we use old test cases to test
whether new errors have been introduced or not.
Thus maintenance involves understanding
the existing software, understanding the effect of change, making the changes
to both code and documents, testing the new parts and retesting the old parts
that were not changed. In order to make the maintainer job easier, it is
necessary to prepare some supporting documents during software development.
Maintainability Factors:
Maintainability of software refers to the degree to which software can:
- Correct defects and the causes of defects
- Repair the erroneous components without impacting the working components
- Prevent occurrence of failure conditions
- Maximize the useful life of software
- Maximize the efficiency, reliability and safety of the software
- Satisfy new requirements
- Make future maintenance easier
- Cope up with changes in the environment
Maintainability
also referred to as continuous improvement. IEEE Standard Glossary of Software Engineering Terminology defines maintainability as:
"The ease with which a software system or
component can be modified to correct faults, improve performance or other
attributes, or adapt to a changed environment."
Software
maintainability requires more developer effort than any other phase of the
development life cycle. The
maintainability of software depends on a few different factors. In
general, it must be easy to understand the software (how it works, what it
does, and the way it does), easy to find what needs to be change, easy to make
changes and easy to check that the changes have not introduced any bugs.
Generally there are a
lot of factors that affect the maintainability of any software. Some of these
factors are:
Usability: The extent to which a software product is convenient,
practical and easy to use. This refers to how convenient the software is to use
by the end user.
Reliability: The extent to which a software product will perform
without any failure. This refers to how durable the software is without likely
running into failures.
Efficiency: The extent to which a software product performs its
intended functions without wasting machine resources. This refers to how well a
system manages resources and gives the required output.
Understandability: The extent to which the purpose of a software product
is clear to a human observer. This refers to how the end users are able to
understand the systems function and its environment.
Testability:
The extent to which a software product facilitates the establishment of
acceptance criteria and supports evaluation of its performance.
Modifiability:
The extent to which a software product facilitates the incorporation of
changes.
Portability:
The extent to which a software product can be easily and effectively operated
in a variety of computing environments.
Importance of Software Maintenance:
Software maintenance enhances the growth
of the software. Maintaining software is not less important
than software development. It is as
important as the development itself.
Software maintenance involves advancement in the existing solution as there are
requirements of new software development as per the market shift. It enhances the software performance by
eliminating errors, removing unusable development, and implementing advanced
development strategies.
The long lifespan of software depends on its ability to be
upgraded to run smoothly on the system. Software maintenance is
needed for several reasons which are listed below:
Bug Fixing:
The most important part of the service is the correction of
errors or in other words 'bugs'. It is very important that the software works without
problems
In maintenance management, bug fixing comes at a priority
to run the software seamlessly. This process contains the search for errors in
code and correcting them. Problem can occur in hardware, operating systems, or
any part of the software. This must be done without hurting the rest of the
functionalities of existing software.
Capability Enhancement:
This
comprises an improvement in features and functions to make solutions compatible
with the varying market environment. It extends the capabilities
of programs, work patterns, hardware upgrades, compilers, and all other aspects
that affect the workflow of the system. Increase
the performance of system using a technically updated solution and regularly
using software maintenance services.
Removal of Outdated Function:
Functionalities that are no longer used and unnecessarily
occupy the space in the solution actually reduce the efficiency of the system.
Therefore, the removal of obsolete functions is necessary. These user interface and coding elements are removed and replaced with
new development using the latest tools and technologies. This elimination makes
the system adaptive to cope with changing circumstances.
Performance Improvement:
To improve system performance, developers detect issues
through testing and resolve them. Data and coding restricting as well as
reengineering are part of software maintenance. It prevents the solution from
vulnerabilities. This is not any functionality that performs in operations, but
it develops to stop harmful activities like hacking.
Types of Software Maintenance:
There are four
different types of software maintenance, which are defined for various reasons
and purposes. A software product may have to undergo one or more
types of maintenance throughout the software maintenance life cycle.
Corrective Maintenance:
Corrective
maintenance is the correction of faults when the system does not behave
according to its specification. It is concerned
with fixing errors that are observed when the software is in use.
Corrective maintenance of a software
product is necessary to identify errors in
the existing solution and correcting them to make it works more accurately.
This software maintenance activities aim to eliminate and fix bugs or issues in
the software. Corrective maintenance
deals with the repair of faults or defects found in day-today system functions.
Corrective maintenance accounts for 20% of all the maintenance
activities.
Adaptive
Maintenance:
Adaptive maintenance has to do with
adjusting the application to changes in the environment, that is, a new release
of the hardware or a new database system.
Adaptive software
maintenance is about changing software in response to changes in its
environment. A
software product might need maintenance when the customers need the product to
run on new platforms, on new operating systems, or when they require the product to work with new hardware or
software. Adaptive maintenance accounts
for 25% of all the maintenance activities.
Perfective
Maintenance:
Perfective maintenance
is concerned with the change in the software that occurs while adding new
functionalities in the software. A software
product needs maintenance to support the new features that users want it to
support, to change different functionalities of the system according to
customer demands, or to enhance the performance of the system.
Perfective maintenance involves changing
the software to improve some of its qualities. Here, changes are due to the
need to modify the functions offered by the application, add new functions,
improve the performance of the application, make it easier to use, etc. The
requests to perform perfective maintenance may come directly from the software
engineer to upgrade the status of the product on the market or they may come
from the customer to meet some new requirements.
Perfective software maintenance focuses on functional enhancements to
improve the user experience. The aim of perfective maintenance is
to adjust software by adding new features that can enhance user experience and
removing features that are not effective and functional. Perfective maintenance
mainly deals with implementing new or changed user requirements. Perfective
maintenance accounts for 50%, that is, the largest of all the maintenance
activities.
Preventive Maintenance:
Preventive maintenance involves implementing
changes to prevent the occurrence of errors. Preventive
maintenance defines improvements of the software, which is done to safeguard
the software for the future. It is carried out to prevent the product from any
potential software alteration.
Preventive software
maintenance service helps in preventing the system from any forthcoming vulnerabilities. The focus of this maintenance is to prevent the deterioration
of software as it continues to adapt and change. Preventative software
maintenance is looking into the future so that the software can keep working as
desired for as long as possible. Preventive maintenance accounts for only
5% of all the maintenance activities.
FAQ:
1. What is meant by Software maintenance in Software Engineering?
2. What are the 4 types of software maintenance?
3. What is the importance of software maintenance?
4. How many types of software maintenance are there?
5. What is maintenance in SDLC?
0 Comments
if you have any doubts plz let me know...