0% found this document useful (0 votes)
18 views6 pages

Software Maintenance Lecture 3

Software maintenance is a critical phase in the Software Development Life Cycle aimed at correcting errors and enhancing performance post-delivery. It encompasses four types: corrective, adaptive, preventive, and perfective maintenance, each addressing different aspects of software updates and modifications. Challenges such as understanding legacy code, high maintenance costs, and complexity can hinder effective maintenance, necessitating techniques like reverse engineering and re-engineering to improve software longevity and functionality.

Uploaded by

emlyntyler99
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views6 pages

Software Maintenance Lecture 3

Software maintenance is a critical phase in the Software Development Life Cycle aimed at correcting errors and enhancing performance post-delivery. It encompasses four types: corrective, adaptive, preventive, and perfective maintenance, each addressing different aspects of software updates and modifications. Challenges such as understanding legacy code, high maintenance costs, and complexity can hinder effective maintenance, necessitating techniques like reverse engineering and re-engineering to improve software longevity and functionality.

Uploaded by

emlyntyler99
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

SOFTWARE MAINTENANCE

Software maintenance is a part of the Software Development Life Cycle. Its primary goal is to modify
and update software applications after delivery to correct errors and improve performance. Software
Maintenance is an inclusive activity that includes error corrections, enhancement of capabilities, deletion
of obsolete capabilities, and optimization.

Software maintenance is the process of changing, modifying, and updating software to keep up with
customer needs.

Types of Software Maintenance


The four types of software maintenance are important for ensuring that software applications continue to
operate effectively and efficiently throughout their lifecycle. These include:

Corrective Maintenance: This refers to modification initiated by defects in the software. A defect can
result from design errors, logic errors as well as code errors. Coding errors are caused by incorrect
implementation of detailed logic, design and incorrect use of the source code logic. Defects are also
caused by data processing errors and system performance errors. Design errors occur when changes made
to the software are incorrect, incomplete, wrongly communicated or the change request is misunderstood.
Logic errors result from invalid tests and conclusions, incorrect implementation of design specifications,
faulty logic flow or incomplete test data. This aims to correct any remaining errors regardless of where
they may cause specifications, design, coding, testing, and documentation, etc.

Adaptive Maintenance: It contains modifying the software to match changes in the ever- changing
environment. The environment in this context refers to the totality of all conditions and influences which
act from outside upon the software, for example, business rules, government policies, work patterns,
software and hardware operating platforms. A change to the whole or part of this environment will
require a corresponding modification of the software. Examples of adaptive software maintenance
activities include making changes to the operating system, converting spread sheet into web Apps, adding
support for new hardware, turning legacy systems into modern web apps etc.

1
Preventive Maintenance: This is the process by which we prevent our system from being obsolete. It
involves the concept of reengineering & reverse engineering in which an old system with old technology
is re-engineered using new technology. This maintenance prevents the system from dying out.

Perfective Maintenance: This defines improving processing efficiency or performance or restricting the
software to enhance changeability. This may contain enhancement of existing system functionality,
improvement in computational efficiency, etc.

Problems During Maintenance

The most important problem during maintenance is that before correcting or modifying a program, the
programmer must first understand it. Then the programmer must understand the impact of the intended
change. Few problems are given below:

• Often the program is written by another person or group of persons working over the years in
isolation from each other.
• Often programs are changed by persons who did not understand it clearly, resulting in a
deterioration of the program’s original organization.
• Program listings, even those that are well organized, are not structured to support reading for
comprehension. We normally read an article or book straight through, but with listings,
programmer rummages back and forth.
• There is a high staff turnover within information technology industry. Due to these many systems
are maintained by persons who are not the original author. These persons may not have the
adequate knowledge about the system.
• Some problems only become clearer when a system is in use. Many users know what they need
but lack the ability to express it in a form understandable to the programmer/analysts. This is
primarily due to information gap.
• Systems are not designed for change
• Codes are rarely traceable to the requirements and design specifications. It makes it very difficult
for a programmer to detect and correct a critical defect affecting customer operations Life Cycle
documents are not always produced even as part of a development project:

2
Lack of Code Comments: Most of the software system codes lack adequate comments. Lesser comments
may not be helpful in certain situations. If there is hardly any scope for change, maintenance will be very
difficult.

Obsolete Legacy Systems: Code supporting obsolete legacy systems is devoid of traceability to the
requirements, compliance to design and programming standards and often includes dead, extra,
uncommented code, which all make the maintenance task next to impossible.
A number of possible solutions to maintenance problems have been suggested. They Include: Budget and
effort Reallocation, Complete replacement of the system and enhancement of the existing system

Software Maintenance Cost


Software maintenance costs include keeping a software system up-to-date, functional, and secure. It
includes bug fixing, software updates, and technical support. Maintenance costs can vary depending on
the complexity of the software, the frequency of updates, and the level of support required.
1. Non-Technical Factors

Technical factors do not solely determine software maintenance cost but are also influenced by non-
technical factors such as project management, team composition, and communication. These factors can
significantly impact the overall cost and effectiveness of software maintenance.
• Software Domain
• Team Stability
• Software Lifecycle
• External Environment Dependency
• Hardware Stability

2. Technical Factors
Various technical factors, such as poorly structured code, outdated technology, lack of modular design,
code complexity, and inadequate documentation, can influence software maintenance costs. These
factors can increase the effort and time required to maintain software, increasing the cost.
• Module Independence
• Programming Language
• Programming Style
• Program Testing and Validation
• Documentation

3
• Configuration Management Techniques

Estimation of Software Cost


it is clear that maintenance effort is very significant and consumes about 40-70% of the cost of the
entire life cycle. However, this cost may vary from one application domain to another. It is advisable
to invest more effort in the early phase of software life cycle to reduce the maintenance cost.

Software Maintenance Process


Software maintenance is modifying and updating software after it has been deployed. It includes fixing
bugs, improving performance, adding new features, and ensuring new hardware and software
compatibility. Software maintenance aims to ensure that software remains functional, reliable, and
secure throughout its lifecycle.
Step 1- Identification & Tracing
Identification and tracing are the first steps in the software maintenance process. They involve
identifying the problem, tracing it to its source, and understanding its impact on the system.
Step 2 – Analysis
In the software maintenance process, analysis involves identifying and understanding the problem,
determining the cause and potential solutions, evaluating the impact of each solution, and selecting the
best one to implement.
Step 3 – Design
Design plays a crucial role in software maintenance. It helps identify areas that require maintenance and
enables the development of efficient maintenance processes to ensure the software’s longevity.
Step 4 – Implementation
In software maintenance, implementation involves deploying the software system’s changes, updates,
or fixes. This step ensures that the software is up-to-date and functioning optimally.
Step 5 – System Testing
System testing is a crucial step in the software maintenance process since it helps identify and fix any
issues with the system, ensuring that it functions as expected and meets user requirements.
Step 6 – Acceptance Testing
In software maintenance, acceptance testing involves testing the modified system to ensure it meets the
user’s requirements and is ready for deployment. This step helps to ensure that the changes made to the
software are effective and valuable.
Step 7 – Delivery

4
Delivery is the final step in the software maintenance process. It involves deploying the updated
software to the production environment and ensuring it works as expected.

Software Maintenance Challenges


Software maintenance poses several challenges, such as the need for regular updates, fixing bugs and
security vulnerabilities, ensuring compatibility with new systems, and keeping up with changing user
requirements. These challenges can be time-consuming and costly but are necessary for the smooth
functioning of software.
Cost: Software maintenance costs can be a significant challenge for companies. As software ages, the
cost of maintaining it can often exceed the cost of developing it in the first place.
Time: As software systems age, maintaining them becomes increasingly challenging. Time is one of the
most significant contributors to this challenge, as code becomes more complicated to understand and
modify over time.
Complexity: Software maintenance can be challenging due to the complexity of modern software
systems. As software grows in size and complexity, it becomes increasingly difficult to maintain and
update.
Fatigue: Software maintenance can be challenging, and one of the biggest challenges is fatigue.
Continuously working on the same codebase can lead to burnout, making it challenging to stay focused
and productive.

Techniques for software Maintenance


Reverse Engineering: This is the process of extracting knowledge or design information from anything
man-made and reproducing it based on the extracted information. It is also called back engineering. The
main objective of reverse engineering is to check out how the system works. There are many reasons to
perform reverse engineering. Reverse engineering is used to know how the thing works. Also, reverse
engineering is to recreate the object by adding some enhancements.

Software Reverse Engineering


Software Reverse Engineering is the process of recovering the design and the requirements specification
of a product from an analysis of its code. Reverse Engineering is becoming important, since several
existing software products, lack proper documentation, are highly unstructured, or their structure has
degraded through a series of maintenance efforts.
In other words, Software reverse engineering is the process of analysing and understanding the internal
structure and design of a software system. It is often used to improve the understanding of a software

5
system, to recover lost or inaccessible source code, and to analyse the behaviour of a system for security
or compliance purposes.

Why Reverse Engineering?


• Providing proper system documentation.
• Recovery of lost information.
• Assisting with maintenance.
• The facility of software reuse.
• Discovering unexpected flaws or faults.
• Implements innovative processes for specific use.
• Easy to document the things how efficiency and power can be improved.

Program Comprehension is the process of gaining new or regaining lost knowledge about a computer program.
Due to the generic nature of program understanding and the fact that some level of program understanding is
a prerequisite for virtually every software-development activity, we will further refine it into more specific
activities. Program comprehension starts at the level of code (Program-Code Understanding) and then
attempts to raise the level of abstraction to design (Design Recovery) and application domain (Domain
Analysis). Program-Code Understanding subsumes tasks such as Program-Concept Assignment or Feature
Location
Software Re-engineering: This involves systematically restructuring parts of the system which are costly
to maintain. It is cost effective when changes are mostly confined to an identifiable segment of a system.
The following types of components may be selected for re-engineering:

(a) Component which exhibit the highest failure rate.


(b) Component which have had the highest annual change traffic
(c) Components with the highest complexity
(d) Components which do not meet current company standards

You might also like