Software Maintenance Lecture 3
Software Maintenance Lecture 3
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.
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.
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
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
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.
5
system, to recover lost or inaccessible source code, and to analyse the behaviour of a system for security
or compliance purposes.
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: