Unit 4 Notes Software Engg
Unit 4 Notes Software Engg
Software Maintenance
Software maintenance refers to the process of modifying and updating a software system
after it has been delivered to the customer. This can include fixing bugs, adding new features,
improving performance, or updating the software to work with new hardware or software
systems. The goal of software maintenance is to keep the software system working
correctly, efficiently, and securely, and to ensure that it continues to meet the needs of the
users.
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.
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.
1|Pa ge
Challenges in Software Maintenance:
• Lack of documentation: Poorly documented systems can make it difficult to
understand how the system works, making it difficult to identify and fix problems.
• Legacy code: Maintaining older systems with outdated technologies can be
difficult, as it may require specialized knowledge and skills.
• Complexity: Large and complex systems can be difficult to understand and
modify, making it difficult to identify and fix problems.
• 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.
• 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.
• 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.
• 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.
• High-Cost: The cost of maintenance can be high, especially for large and complex
systems, which can be difficult to budget for and manage.
2|Pa ge
1. Change Request –
In the maintenance process initially, the request for change is made.
2. Change Management –
In this place, the status of all the change requests is identified and described.
3. Impact Analysis –
Following activities are performed in this place:
• Identify all the systems and the system products affected by a change request.
• Make an estimate of the resources needed to effect the change.
• Analyze the benefits of the change.
4. System Release Planning –
In this phase, the schedule and the contents of the software release are planned. The
changes can be made to all types of software maintenance.
5. Change Implementation –
The implement of changes can be by first designing the changes, then coding for these
changes, and finally testing the changes. Preferably the regression testing must be
performed while testing the changes.
6. System Release –
During software release, following points should be described:
• Documentation
• Software
• Training
• Hardware Changes
• Data Conversion
3|Pa ge
4. 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.
Boehm Model
Boehm's theory is models and principles of economics can not only improve maintenance productivity
but also helps to understand the maintenance process.
4|Pa ge
It represents the maintenance process in a closed-loop cycle, wherein changes are suggested and
approved first and then are executed.
Iterative Enhancement Model
• The iterative model is used for small-scale application modernization and scheduled maintenance.
• The biggest risk here is that it doesn't include business justifications, i.e., the software team won't
know if more significant changes are needed in the future. The iterative enhancement model treats
the application target as a known quantity.
• This model incorporates changes in the software based on the analysis of the existing system.
5|Pa ge
Maintenance is an essential phase in the software development life cycle (SDLC) and involves modifying, updating, or
improving existing software to meet new requirements or fix defects. To measure the effectiveness of maintenance
activities, software engineers use various metrics. Some of the commonly used metrics for maintenance in software
engineering are:
1. Mean Time Between Failures (MTBF): This metric measures the average time between the occurrence of
software failures. A high MTBF value indicates that the software is reliable and requires minimal maintenance.
2. Mean Time to Repair (MTTR): This metric measures the average time taken to fix software failures. A low MTTR
value indicates that the software is easy to maintain and repair.
3. Defect Density: This metric measures the number of defects present in the software per unit of code size. A high
defect density value indicates poor software quality, which requires more maintenance efforts.
4. Change Request (CR) Rate: This metric measures the number of change requests received by the maintenance
team per unit of time. A high CR rate value indicates that the software requires frequent modifications, which
could increase maintenance efforts.
5. Maintenance Effort: This metric measures the resources and time spent on maintaining the software. A high
maintenance effort value indicates that the software requires significant maintenance efforts.
6. Mean Time Between Critical Failures (MTBCF): This metric measures the average time between critical failures in
the software. A high MTBCF value indicates that the software is highly reliable and requires minimal
maintenance.
7. Mean Time to Failure (MTTF): This metric measures the average time taken for a software component to fail. A
high MTTF value indicates that the software component is highly reliable and requires minimal maintenance.
Reverse Engineering –
Reverse Engineering is processes of extracting knowledge or design information from
anything man-made and reproducing it based on extracted information. It is also called back
Engineering. The main objective of reverse-engineering is to check out how the system
works. There are a 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 it’s code. Reverse Engineering is
becoming important, since several existing software products, lack proper documentation,
6|Pa ge
are highly unstructured, or their structure has degraded through a series of maintenance
efforts.
Why Reverse Engineering?
• Providing proper system documentation.
• Recovery of lost information.
• Assisting with maintenance.
• Facility of software reuse.
• Discovering unexpected flaws or faults.
• Implements the innovative processes for specific use.
• Easy to document the things how the efficiency and power can be improved.
Uses 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
or detect the virus and other malware code .
• Software reverse engineering is the process of analyzing and understanding the
internal structure and design of a software system. It is often used to improve the
understanding of a software system, to recover lost or inaccessible source code,
and to analyze the behavior of a system for security or compliance purposes.
• Malware analysis: Reverse engineering is used to understand how malware
works and to identify the vulnerabilities it exploits, in order to develop
countermeasures.
• Legacy systems: Reverse engineering can be used to understand and maintain
legacy systems that are no longer supported by the original developer.
• Intellectual property protection: Reverse engineering can be used to detect and
prevent intellectual property theft by identifying and preventing the unauthorized
use of code or other assets.
• Security: Reverse engineering is used to identify security vulnerabilities in a
system, such as backdoors, weak encryption, and other weaknesses.
• Compliance: Reverse engineering is used to ensure that a system meets
compliance standards, such as those for accessibility, security, and privacy.
• Reverse-engineering of proprietary software: To understand how a software
works, to improve the software or to create a new software with similar features.
• Reverse-engineering of a software to create a competing product: To create a
product that functions similarly or to identify the features that are missing in a
product and create a new product that incorporates those features.
• It’s important to note that reverse engineering can be a complex and time-
consuming process, and it is important to have the necessary skills, tools, and
7|Pa ge
knowledge to perform it effectively. Additionally, it is important to consider the
legal and ethical implications of reverse engineering, as it may be illegal or
restricted in some jurisdictions.
Advantages Or Disadvantages:
1. Improved software quality: Regular software maintenance helps to ensure that the
software is functioning correctly and efficiently, and that it continues to meet the
needs of the users.
2. Enhanced security: Maintenance can include security updates and patches, helping
to ensure that the software is protected against potential threats and attacks.
3. Increased user satisfaction: Regular software maintenance helps to keep the
software up-to-date and relevant, leading to increased user satisfaction and
adoption.
4. Extended software life: Proper software maintenance can extend the life of the
software, allowing it to be used for longer periods of time and reducing the need
for costly replacements.
5. Cost savings: Regular software maintenance can help to prevent larger, more
expensive problems from occurring, reducing the overall cost of software
ownership.
SCM Process
It uses the tools which keep that the necessary change has been implemented adequately to the
appropriate component. The SCM process defines a number of tasks:
8|Pa ge
o Identification of objects in the software configuration also the needs
o Version Control
o Change Control
o Configuration Audit
o Status Reporting
Identification
Basic Object: Unit of Text created by a software engineer during analysis, design, code, or test.
Aggregate Object: A collection of essential objects and other aggregate objects. Design Specification
is an aggregate object.
Each object has a set of distinct characteristics that identify it uniquely: a name, a description, a list of
resources, and a "realization."
Version Control
Version Control combines procedures and tools to handle different version of configuration objects
that are generated during the software process.
Clemm defines version control in the context of SCM: Configuration management allows a user to
specify the alternative configuration of the software system through the selection of appropriate
9|Pa ge
versions. This is supported by associating attributes with each software version, and then allowing a
configuration to be specified [and constructed] by describing the set of desired attributes.
Change Control
James Bach describes change control in the context of SCM is: Change Control is Vital. But the forces
that make it essential also make it annoying.
We worry about change because a small confusion in the code can create a big failure in the product.
But it can also fix a significant failure or enable incredible new capabilities.
We worry about change because a single rogue developer could sink the project, yet brilliant ideas
originate in the mind of those rogues, and
A burdensome change control process could effectively discourage them from doing creative work.
A change request is submitted and calculated to assess technical merit; potential side effects, the overall
impact on other configuration objects and system functions, and projected cost of the change.
The results of the evaluations are presented as a change report, which is used by a change control
authority (CCA) - a person or a group who makes a final decision on the status and priority of the
change.
The "check-in" and "check-out" process implements two necessary elements of change control-access
control and synchronization control.
Access Control governs which software engineers have the authority to access and modify a particular
configuration object.
Synchronization Control helps to ensure that parallel changes, performed by two different people,
don't overwrite one another.
Configuration Audit
SCM audits to verify that the software product satisfies the baselines requirements and ensures that
what is built and what is delivered.
SCM audits also ensure that traceability is maintained between all CIs and that all work requests are
associated with one or more CI modification.SCM audits are the "watchdogs" that ensures that the
integrity of the project's scope is preserved.
Status Reporting
10 | P a g e
Configuration Status reporting (sometimes also called status accounting) providing accurate status and
current configuration data to developers, testers, end users, customers and stakeholders through admin
guides, user guides, FAQs, Release Notes, Installation Guide, Configuration Guide, etc.
1. Improved productivity and efficiency by reducing the time and effort required to
manage software changes.
2. Reduced risk of errors and defects by ensuring that all changes are properly
tested and validated.
3. Increased collaboration and communication among team members by providing a
central repository for software artifacts.
4. Improved quality and stability of software systems by ensuring that all changes
are properly controlled and managed.
13 | P a g e
maintained in a system database. Alternatively, attribute identification system
may be built as a layer on top of a hidden version-numbering scheme.
• Change Oriented Identification : Each component is known as in attribute-based
identification but is additionally related to one or more change requests. That is, it
is assumed that each version of component has been created in response to one
or more change requests. Component version is identified by set of change
requests that apply to components.
Software configuration management can be used effectively while maintaining a system as it keeps
track of changes and their effects on the system components. Many changes occur when the software
is delivered to the users such as failure or users’ request for enhancement in the software. For this,
configuration control board (CCB) oversees the entire change process. Note that the representatives
of CCB along with the users and developers manage changes collectively. These changes are
managed in the following steps.
▪ When the user encounters a problem such as failure report, he requests for change on a formal
change request form. The problem can also be an enhancement to a function, variation in the older
function, or deleting an existing function. The procedure for request of change remains the same.
The change reqest form should include information about how the system works, nature of the
problem, and how the new (expected) system should work.
▪ The request for change is reported to CCB.
▪ The representative of CCB meets the user to discuss the problem (That is, to determine that the
request is for failure report or for enhancement).
▪ If the user requests for a reported failure, the CCB discusses the source of the problem. If the
requested change is an enhancement, the CCB discusses the parts or the components that will be
affected by the change. In both the cases, developers describe the scope of changes and the
expected time to implement them.
▪ The developers determine the source of the problem or the components which will be affected
when the changes will be implemented. For this, they use a test copy instead of the operational
system and implement the requested changes to see whether it (test copy) performs according to
the requested changes.
▪ Finally, after the changes have been made, all the relevant documentation is updated according to
the requested change.
▪ The developers then record all the changes made to the operational system in a change report to
keep track of the next release or version of the software system.
Impact Analysis
Impact analysis is used to evaluate the overall effect of the requested change. This includes identifying
the components that will be affected with the change, the extent to which each of the components will
14 | P a g e
be affected, and the consequences of change on the estimated effort and schedule. There are various
advantages of performing impact analysis, which are listed below.
▪ It is used to understand the situations when the modifications required in the software system affect
large segments of software code or several components of the software.
▪ It helps identifying the relationship among the components that are affected with the change and
thereby helping to understand the overall software structure.
▪ It is used to record the history of modification, which helps in maintaining quality in the software
system.
Software Rejuvenation
Sometimes, organizations have to take difficult decisions about how to make their systems more
maintainable. The choices may include enhancing or completely replacing a software system. Note
that each choice has the same objective, that is, to preserve or increase the software quality while
keeping the costs low. Software rejuvenation is a maintenance technique which helps in taking
appropriate decisions.
Software rejuvenation checks the system’s work products in order to extract additional information or
to reformat them in order to make these work products more understandable. Generally, four types of
software rejuvenation exist, namely, re-documentation, restructuring, reverse engineering, and
reengineering.
Re-documentation uses static analysis of the source code to produce additional information, which
helps the software maintenance team to understand and refer to the code. In source code, component
size, component calls, calling parameters, and control paths are examined to understand what and
how code does it. The output of static code analysis is either graphical or textual, which can be used
to assess whether the re-documentation is required.
15 | P a g e
Restructuring
Restructuring involves the transformation of unstructured code into structured code thereby making it
easier to understand and change. Restructuring involves the following steps.
▪ Static analysis is performed, which provides information that is used to represent code as a directed
graph or associative (semantic) network. The representation mayor may not be in a human
readable form; thus, an automated tool is used.
▪ Transformational techniques are used to refine (simplify) the representation.
▪ Refined representation is interpreted and used to generate the structured code.
Reverse Engineering
Reverse engineering like re-documentation, focuses on providing information about the specification
and design information using the software code. The information extracted from specification and
design is stored in a format that can be easily modified. Reverse engineering is a useful technique
when the software maintenance team is unable to understand the processes involved in the software
system. Reverse engineering involves the following steps.
16 | P a g e
▪ Source code is collected with the help of an automated tool used for reverse engineering. This tool
is used to represent the structure and the naming information of variables, functions and other
components in the software code.
▪ Static analysis is performed.
▪ Some methods such as standards structured analysis and design methods are used. These
methods are used to extract information such as data dictionaries, data-flow, control flow, and entity
relationship (ER) diagrams for the reverse engineering technique.
Re-engineering
17 | P a g e
Reduced cost
Reduced risk
Better use of existing staff
Incremental development
18 | P a g e