Software Maintenance: Market Conditions Client Requirements Host Modifications Organization Changes
Software Maintenance: Market Conditions Client Requirements Host Modifications Organization Changes
Software maintenance is a part of the Software Development Life Cycle. Its primary goal is to modify and update
software application after delivery to correct errors and to improve performance. Software is a model of the real
world. When the real world changes, the software require alteration wherever possible.
Software Maintenance is an inclusive activity that includes error corrections, enhancement of capabilities,
deletion of obsolete capabilities, and optimization.
There are number of reasons, why modifications are required, some of them are briefly mentioned below:
• Market Conditions - Policies, which changes over the time, such as taxation and newly introduced
constraints like, how to maintain bookkeeping, may trigger need for modification.
• Client Requirements - Over the time, customer may ask for new features or functions in the software.
• Host Modifications - If any of the hardware and/or platform (such as operating system) of the target host
changes, software changes are needed to keep adaptability.
• Organization Changes - If there is any business level change at client end, such as reduction of organization
strength, acquiring another company, organization venturing into new business, need to modify in the original
software may arise.
IMSEC
Need for Maintenance Adaptive
Maintenance
Software Maintenance is needed for:-
• Correct errors
• Change in user requirement with time
• Changing hardware/software requirements
• To improve system efficiency Classification
Corrective
• To optimize the code to run faster Maintenance Of Software
Preventive
Maintenance
• To modify the components Maintenance
• To reduce any unwanted side effects.
Perfective
Types of Software Maintenance Maintenance
1. Corrective Maintenance
Corrective maintenance aims to correct any remaining errors regardless of where they may cause specifications,
design, coding, testing, and documentation, etc.
2. Adaptive Maintenance
It contains modifying the software to match changes in the ever-changing environment.
3. Preventive Maintenance
It 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.
4. Perfective Maintenance
It 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.
Maintenance Activities
IEEE provides a framework for sequential maintenance Identification Analysis
Design
& Tracing
process activities. It can be used in iterative manner and
can be extended so that customized items and processes
can be included. Maintenance
Management
Maintenance Implementations
Activities
Delivery
System
Acceptance Testing
Testing
These activities go hand-in-hand with each of the following phase:
1. Identification & Tracing - It involves activities pertaining to identification of requirement of modification or
maintenance. It is generated by user or system may itself report via logs or error messages.Here, the maintenance type is
classified also.
2. Analysis - The modification is analyzed for its impact on the system including safety and security implications. If probable
impact is severe, alternative solution is looked for. A set of required modifications is then materialized into requirement
specifications. The cost of modification/maintenance is analyzed and estimation is concluded.
3. Design - New modules, which need to be replaced or modified, are designed against requirement specifications set in the
previous stage. Test cases are created for validation and verification.
4. Implementation - The new modules are coded with the help of structured design created in the design step.Every
programmer is expected to do unit testing in parallel.
5. System Testing - Integration testing is done among newly created modules. Integration testing is also carried out between
new modules and the system. Finally the system is tested as a whole, following regressive testing procedures.
6. Acceptance Testing - After testing the system internally, it is tested for acceptance with the help of users. If at this state,
user complaints some issues they are addressed or noted to address in next iteration.
7. Delivery - After acceptance test, the system is deployed all over the organization either by small update package or fresh
installation of the system. The final testing takes place at client end after the software is delivered.
8. Training facility is provided if required, in addition to the hard copy of user manual.
9. Maintenance management - Configuration management is an essential part of system maintenance. It is aided with
version control tools to control versions, semi-version or patch management.
Cost of Maintenance
Reports suggest that the cost of maintenance is high. A study on estimating software maintenance found that the cost
of maintenance is as high as 67% of the cost of entire software process cycle.
On an average, the cost of software maintenance is more
than 50% of all SDLC phases. There are various factors,
Designing Implementation
which trigger maintenance cost go high, such as: Requirement
There are two types of cost factors involved in
Testing
software maintenance. 3%
8% 7%
Module
Maintenance
Application Independance 67
Programming
Domain
Language
Staff Stability Programming
Program Style
Non-Technical Technical Program Validation
Lifetime and Testing
Dependency on
External Environment Documentation
Hardware Configuration
Stability Management
1. Application Domain
If the application of the program is defined and well understood, the system requirements may be definitive and maintenance due to
changing needs minimized.
If the form is entirely new, it is likely that the initial conditions will be modified frequently, as user gain experience with the system.
2. Staff Stability
It is simple for the original writer of a program to understand and change an application rather than some other person who must understand
the program by the study of the reports and code listing.
If the implementation of a system also maintains that systems, maintenance costs will reduce.
In practice, the feature of the programming profession is such that persons change jobs regularly. It is unusual for one user to develop and
maintain an application throughout its useful life.
3. Program Lifetime
Programs become obsolete when the program becomes obsolete, or their original hardware is replaced, and conversion costs exceed
rewriting costs.
4. Dependence on External Environment
If an application is dependent on its external environment, it must be modified as the climate changes.
For example:
Changes in a taxation system might need payroll, accounting, and stock control programs to be modified.
Taxation changes are nearly frequent, and maintenance costs for these programs are associated with the frequency of these changes.
A program used in mathematical applications does not typically depend on humans changing the assumptions on which the program is
based.
5. Hardware Stability
If an application is designed to operate on a specific hardware configuration and that configuration does not changes during the program's
lifetime, no maintenance costs due to hardware changes will be incurred.
Hardware developments are so increased that this situation is rare.
The application must be changed to use new hardware that replaces obsolete equipment.
Technical Factors 14/07/21 Absent
Technical Factors include the following: 2,6,7,8,9,11,13,14,15,17,18,19,20,21
Module Independence 22,26,28,29,32,36,38,39,46,48,50,51
It should be possible to change one program unit of a system without affecting any other unit. 54,57,59,
Programming Language
Programs written in a high-level programming language are generally easier to understand than programs written in a low-level language.
Programming Style
The method in which a program is written contributes to its understandability and hence, the ease with which it can be modified.
Program Validation and Testing
•Generally, more the time and effort are spent on design validation and program testing, the fewer bugs in the program and, consequently,
maintenance costs resulting from bugs correction are lower.
•Maintenance costs due to bug's correction are governed by the type of fault to be repaired.
•Coding errors are generally relatively cheap to correct, design errors are more expensive as they may include the rewriting of one or more
program units.
•Bugs in the software requirements are usually the most expensive to correct because of the drastic design which is generally involved.
Documentation
•If a program is supported by clear, complete yet concise documentation, the functions of understanding the application can be
associatively straight-forward.
•Program maintenance costs tends to be less for well-reported systems than for the system supplied with inadequate or incomplete
documentation.
Configuration Management Techniques
•One of the essential costs of maintenance is keeping track of all system documents and ensuring that these are kept consistent.
•Effective configuration management can help control these costs.
Software Re-engineering
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.
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.
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 they also need re-engineering.
Re-Engineering Process
• Decide what to re-engineer. Is it whole software or a part of
Existing Reverse it?
• Perform Reverse Engineering, in order to obtain
Engineering
Software
specifications of existing software.
Re- • Restructure Program if required. For example, changing
Structuring
function-oriented programs into object-oriented programs.
• Re-structure data as required.
Forward
Re-engineered
• Apply Forward engineering concepts in order to get re-
Engineering
Software engineered software.
How is Software Re-engineering Done?
The Software Reengineering process basically undergoes three main phases.
These are
(1) reverse engineering,
(2) restructuring, and
(3) forward engineering.
Reverse Engineering
A simple Google search would tell us that reverse engineering is “the reproduction of another manufacturer’s
product following a detailed examination of its construction or composition”. However, it is not only limited to
applying this process to another manufacturer’s product but also to your own.
This is done by thoroughly analyzing and inspecting the system specifications and understanding the
existing processes. Systematically, reversing the software development life cycle of software implementation
best fits this procedure as it ordinally unravels each layer from a higher level to lower-level views of the system
Forward Engineering
The flow ends with forward engineering. This is the process of integrating the latest specifications based on the
results of the evaluations from reverse engineering and restructuring. In relation to the entirety of the process, this
is defined relative to reverse engineering, where there is an effort to build backward, from a coded set to a model,
or to break down the process of how software was integrated. There is no specific SDLC model to follow in
software reengineering. The model will always depend on what fits best with the environment and implementation
of your product. However, like software engineering, this is a systematic development that involves processes
within processes and requires thorough inspection for seamless results.
Forward engineering is same as software engineering process with only one difference – it is carried out always
after reverse engineering.
Software Configuration Management in Software Engineering
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:
• Identification of objects in the software configuration Identification
• Version Control
• Change Control
• Configuration Audit
SCM
• Status Reporting
Process
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."
The interrelationships between configuration objects can be
described with a Module Interconnection Language (MIL).
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 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.
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
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.
Project Manager:
Participant of SCM process: • Ensure that the product is developed within a certain time
Following are the key participants in frame
SCM • Monitors the progress of development and recognizes
issues in the SCM process
Configuration
Manager Developer • Generate reports about the status of the software system
• Make sure that processes and policies are followed for
creating, changing, and testing
Configuration Manager
SCM Operational • Configuration Manager is the head who is Responsible
Scenario for identifying configuration items.
• CM ensures team follows the SCM process
Project Manager User • He/She needs to approve or reject change requests
Developer
• The developer needs to change the code as per standard development activities or change requests. He is responsible for
maintaining configuration of code.
• The developer should check the changes and resolves conflicts
User
The end user should understand the key SCM terms to ensure he has the latest version of the software
Concurrency Management:
When two or more tasks are happening at the same time, it is known as concurrent operation. Concurrency in
context to SCM means that the same file being edited by multiple persons at the same time.
If concurrency is not managed correctly with SCM tools, then it may create many pressing issues.
Version Control:
SCM uses archiving method or saves every change made to file. With the help of archiving or save feature, it is
possible to roll back to the previous version in case of issues.
Synchronization:
Users can checkout more than one files or an entire copy of the repository. The user then works on the needed file and checks
in the changes back to the repository. They can synchronize their local copy to stay updated with the changes made by other
team members.
COCOMO is useful in calculating effort, time and cost of a
software project.
COCOMO Model
Barry Boehm proposed COCOMO (Constructive Cost Estimation Model) in 1981and is based on the study of 63
projects. COCOMO is one of the most generally used software estimation models in the world.
COCOMO is useful to predicts the efforts, time and Cost of a software product based on the size of the software.
Cocomo (Constructive Cost Model) is a regression model based on LOC, i.e number of Lines of Code. It is a
procedural cost estimate model for software projects and often used as a process of reliably predicting the various
parameters associated with making a project such as size, effort, cost, time and quality
The key parameters which define the quality of any software products, which are also an outcome of the Cocomo
are primarily Effort & Schedule:
•Effort: Amount of labor that will be required to complete a task. It is measured in person-months units.
•Schedule: Simply means the amount of time required for the completion of the job, which is, of course,
proportional to the effort put. It is measured in the units of time such as weeks, months.
The necessary steps in this model are:
1. Get an initial estimate of the development effort from evaluation of thousands of delivered lines of source code (KDLOC).
2. Determine a set of 15 multiplying factors from various attributes of the project.
3. Calculate the effort estimate by multiplying the initial estimate with all the multiplying factors i.e., multiply the values in
step1 and step2.
The initial estimate (also called nominal estimate) is determined by an equation of the form used in the static single variable
models, using KDLOC as the measure of the size. To determine the initial effort Ei in person-months the equation used is of the
type is shown below
Ei=a*(KDLOC)b
The value of the constant a and b are depends on the project type.
Boehm’s definition of organic, semidetached, and embedded systems. In COCOMO, projects are categorized
into three types:
1. Organic
2. Semidetached
3. Embedded
1. Organic: A development project can be treated of the organic type, if the project deals with developing a
well-understood application program, the size of the development team is reasonably small, and the team
members are experienced in developing similar methods of projects. Examples of this type of projects
are simple business systems, simple inventory management systems, and data processing systems.
2. Semidetached: A development project can be treated with semidetached type if the development consists of
a mixture of experienced and inexperienced staff. Team members may have finite experience in related
systems but may be unfamiliar with some aspects of the order being developed. Example of Semidetached
system includes developing a new operating system (OS), a Database Management System (DBMS), and
complex inventory management system.
3. Embedded: A development project is treated to be of an embedded type, if the software being developed is
strongly coupled to complex hardware, or if the stringent regulations on the operational method exist. For
Example: ATM, Air Traffic control.
Model Project size Nature Of
Project
Organic < = 50 Small size
Semi-Detached 50-300 Medium
Embedded >300 Large
Note: One Person-month (PM) is the effort an individual can typically put in a month.
According to Boehm the unit for effort is Person-month (PM) and for development time the unit is month.
Effort = a*(KLOC) b PM
Tdev = c*(efforts)d Months
Where
KLOC is the estimated size of the software product indicate in Kilo Lines of Code,
a,b,c,d are constants for each group of software products,
Tdev is the estimated time to develop the software, expressed in months,
Effort is the total effort required to develop the software product, expressed in person months (PMs).
Estimation of development effort
Software Project a b c d
Organic 2.4 1,05 2.5 0.38
Semi-Detached 3.0 1.12 2.5 0.35
Embedded 3.6 1.20 2.5 0.32
In Basic COCOMO, only one factor “Size of software in KLOC” is considered while calculating Effort,
Development time and cost of project.
Solution
The basic COCOMO equation take the form:
E = a (KLOC)b
D = c (KLOC)d
Estimated size of the project = 400 KLOC
Note-2: The multiplication of all 15 Cost drivers is called as Cost Driver Multiplier (CDM) or Effort Adjustment Factor (EAF).
Organic:
Effort= 3.2*(KLOC)1.05 *EAF PM
Semidetached:
Effort= 3.0*(KLOC)1.12 *EAF PM
Embedded:
Effort= 2.8*(KLOC)1.20 *EAF PM
Estimation of Development Time in “Intermediate COCOMO”:
Tdev = c*(E)d Months
Organic:
Tdev =2.5*(Effort)0.38 Months
Semidetached:
Tdev =2.5*(Effort)0.35 Months
Embedded:
Tdev =2.5*(Effort)0.32 Months
3-Complete or Detailed COCOMO Model: -
The Basic and Intermediate COCOMO models consider a software product as a single homogeneous
entity. But large systems are made up of several smaller sub-systems and these smaller sub-systems some
may be considered as organic, some may be considered as semidetached and some may be considered as
embedded.
In Complete COCOMO, the effort and time are calculated for a System by taking the total Sum of the
effort and time of the each and every Sub-system.
Note: - This approach reduces the margin of error in the final estimation.
For Example: -
A distributed Management Information System for an organization having offices at several places across
the country can have the following sub-systems:
1. GUI part (considered as organic software)
2. Database part (considered as semidetached software)
3. Communication part (considered as embedded software)
Then according to Detailed COCOMO Model the Total Effort and Total Cost required for the
development of complete system are calculated by adding (i.e. summing) the effort and total cost
required for the development of these three components individually.
What is Risk?
"Tomorrow problems are today's risk." Hence, a clear definition of a "risk" is a “problem that could cause some
loss or threaten the progress of the project, but which has not happened yet”.
These potential issues might harm cost, schedule or technical success of the project and the quality of our
software device, or project team morale.
Risk Management is the system of identifying addressing and eliminating these problems before they can damage
the project.
We need to differentiate risks, as potential issues, from the current problems of the project.
Different methods are required to address these two kinds of issues.
For example, staff storage, because we have not been able to select people with the right technical skills is a
current problem, but the threat of our technical persons being hired away by the competition is a risk.
Risk Management
A software project can be concerned with a large variety of risks. In order to be adept to systematically identify
the significant risks which might affect a software project, it is essential to classify risks into different classes.
The project manager can then check which risks from each class are relevant to the project.
There are three main classifications of risks which can affect a software project:
1.Project risks
2.Technical risks
3.Business risks
1. Project risks: Project risks concern differ forms of budgetary, schedule, personnel, resource, and customer-related
problems. A vital project risk is schedule slippage. Since the software is intangible, it is very tough to monitor and control a
software project. It is very tough to control something which cannot be identified. For any manufacturing program, such as
the manufacturing of cars, the plan executive can recognize the product taking shape.
2. Technical risks: Technical risks concern potential method, implementation, interfacing, testing, and maintenance issue. It
also consists of an ambiguous specification, incomplete specification, changing specification, technical uncertainty, and
technical obsolescence. Most technical risks appear due to the development team's insufficient knowledge about the
project.
3. Business risks: This type of risks contain risks of building an excellent product that no one need, losing budgetary or
personnel commitments, etc.
Risk Prioritization
Risk Monitoring
Risk Control
Risk Resolution
Risk Assessment
The objective of risk assessment is to division the risks in the condition of their loss, causing potential. For risk
assessment, first, every risk should be rated in two methods:
•The possibility of a risk coming true (denoted as r).
•The consequence of the issues relates to that risk (denoted as s).
Based on these two methods, the priority of each risk can be estimated:
p=r*s
Where p is the priority with which the risk must be controlled, r is the probability of the risk becoming true, and s
is the severity of loss caused due to the risk becoming true. If all identified risks are set up, then the most likely
and damaging risks can be controlled first, and more comprehensive risk abatement methods can be designed for
these risks.
1. Risk Identification: The project organizer needs to anticipate the risk in the project as early as possible so that
the impact of risk can be reduced by making effective risk management planning.
A project can be of use by a large variety of risk. To identify the significant risk, this might affect a project. It is
necessary to categories into the different risk of classes.
There are different types of risks which can affect a software project:
1.Technology risks: Risks that assume from the software or hardware technologies that are used to develop the system.
2.People risks: Risks that are connected with the person in the development team.
3.Organizational risks: Risks that assume from the organizational environment where the software is being developed.
4.Tools risks: Risks that assume from the software tools and other support software used to create the system.
5.Requirement risks: Risks that assume from the changes to the customer requirement and the process of managing the
requirements change.
6.Estimation risks: Risks that assume from the management estimates of the resources required to build the system
Risk Analysis: During the risk analysis process, you have to consider every identified risk and make a
perception of the probability and seriousness of that risk.
There is no simple way to do this. You have to rely on your perception and experience of previous projects
and the problems that arise in them.
It is not possible to make an exact, the numerical estimate of the probability and seriousness of each risk.
Instead, you should authorize the risk to one of several bands:
1. The probability of the risk might be determined as very low (0-10%), low (10-25%), moderate (25-
50%), high (50-75%) or very high (+75%).
2. The effect of the risk might be determined as catastrophic (threaten the survival of the plan), serious
(would cause significant delays), tolerable (delays are within allowed contingency), or insignificant.
2. Risk Control
It is the process of managing risks to achieve desired outcomes. After all, the identified risks of a plan are
determined; the project must be made to include the most harmful and the most likely risks. Different risks need
different containment methods. In fact, most risks need ingenuity on the part of the project manager in tackling
the risk.
16/07/21 Absent
2,6,9,11,13,16,17,18,21,25,26,28,30,32,33,35,36,37,39,
44,45,46,51,53,56,57,59,63,