SEPM Unit-5
SEPM Unit-5
SEPM Unit-5
Software Maintenance
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.
o Correct errors
o Change in user requirement with time
o Changing hardware/software requirements
o To improve system efficiency
o To optimize the code to run faster
o To modify the components
o To reduce any unwanted side effects.
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.
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:
Version Control
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
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.
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.
It is a branch of Computer Science which deals with the design, development, testing,
deployment and maintenance of a software application. Software engineering enables to build
real world software solutions for the end users or customers.
Re — Engineering
and adaptability
4. It is a cost effective method as a part of the software is altered instead of the entire product
6. This practice is generally followed for safety issues or to update a new feature into the
2. To improve quality of software: Re engineering can help identify and rectify errors and
important to keep the software updated which can be achieved via the process of re-
engineering
Reverse Engineering –
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, are highly unstructured, or their structure has degraded through a series of
maintenance efforts.
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, which trigger maintenance cost go high, such as:
Real-world factors affecting Maintenance Cost.
The standard age of any software is considered up to 10 to 15 years.
Older softwares, which were meant to work on slow machines with less memory and
storage capacity cannot keep themselves challenging against newly coming enhanced
softwares on modern hardware.
As technology advances, it becomes costly to maintain old software.
Most maintenance engineers are newbie and use trial and error method to rectify
problem.
Often, changes made can easily hurt the original structure of the software, making it hard
for any subsequent changes.
Changes are often left undocumented which may cause more conflicts in future.
Maintenance Activities
IEEE provides a framework for sequential maintenance process activities. It can be used
in iterative manner and can be extended so that customized items and processes can be
included.
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.
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.
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.
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.
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.
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. Training facility is provided if required, in
addition to the hard copy of user manual.
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
Reverse Engineering
Re-structuring does not impact the functionality of the software but enhance
reliability and maintainability. Program components, which cause errors very
frequently can be changed, or updated with re-structuring.
Forward Engineering
Component reusability
Example The login procedures used on the web can be considered as components,
printing system in software can be seen as a component of the software.
Components have high cohesion of functionality and lower rate of coupling, i.e.
they work independently and can perform tasks without depending on other
modules.
In OOP, the objects are designed are very specific to their concern and have
fewer chances to be used in some other software.
In modular programming, the modules are coded to perform specific tasks which
can be used across number of other software programs.
There is a whole new vertical, which is based on re-use of software component,
and is known as Component Based Software Engineering (CBSE).
Reuse Process
Two kinds of method can be adopted: either by keeping requirements same and
adjusting components or by keeping components same and modifying
requirements.
Also CCB notifies the developer in case the change is rejected with proper reason. The ECR
describes the change to be made, the constraints that must be respected, and the criteria for
review and audit. The object to be changed is ―checked out‖ of the project database, the
change is made, and then the object is tested again. The object is then ―checked in‖ to the
database and appropriate version control mechanisms are used to create the next version of the
software.
Configuration auditing –
A software configuration audit complements the formal technical review of the process and
product. It focuses on the technical correctness of the configuration object that has been
modified. The audit confirms the completeness, correctness and consistency of items in the
SCM system and track action items from the audit to closure.
Reporting –
Providing accurate status and current configuration data to developers, tester, end users,
customers and stakeholders through admin guides, user guides, FAQs, Release notes, Memos,
Installation Guide, Configuration guide etc .
SCM Tools –
Different tools are available in market for SCM like: CFEngine, Bcfg2 server, Vagrant,
SmartFrog, CLEAR CASETOOL (CC), SaltStack, CLEAR QUEST TOOL, Puppet,
SVNSubversion, Perforce, TortoiseSVN, IBM Rational team concert, IBM Configuration
management version management, Razor, Ansible, etc. There are many more in the list. It is
recommended that before selecting any configuration management tool, have a proper
understanding of the features and select the tool which best suits your project needs and be
clear with the benefits and drawbacks of each before you choose one to use.
Forward Engineering:
Forward Engineering is a method of creating or making an application with the help of the
given requirements. Forward engineering is also known as Renovation and Reclamation.
Forward engineering is required high proficiency skill. It takes more time to construct or
develop an application.
Reverse Engineering:
Reverse Engineering is also known as backward engineering, is the process of forward engineering in
reverse. In this, the information are collected from the given or exist application. It takes less time than
forward engineering to develop an application. In reverse engineering the application are broken to
extract knowledge or its architecture.
Difference between Forward Engineering and Reverse Engineering:
.
Software Re-engineering
Objectives of Re-engineering:
Diagrammatic Representation:
Re-engineering Cost Factors:
Advantages of Re-engineering:
Reduced Risk: As the software is already existing, the risk is less as compared to new
software development. Development problems, staffing problems and specification problems
are the lots of problems which may arise in new software development.
Reduced Cost: The cost of re-engineering is less than the costs of developing new software.
Software Engineering:
Software engineering covers not only the technical aspects of building software systems, but
also management issues, such as directing programming teams, scheduling, and budgeting.
Software project management has wider scope than software engineering process as it involves
communication, pre and post-delivery support etc.
The need of software engineering arises because of higher rate of change in user requirements
and environment on which the software is working.
Large software- It is easier to build a wall than to a house or building, likewise, as the
size of software become large engineering has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering
concepts, it would be easier to re-create new software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower
down the price of computer and electronic hardware. But the cost of software remains
high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends
upon the environment in which user works. If the nature of software is always changing,
new enhancements need to be done in the existing one. This is where software
engineering plays a good role.
Quality Management- Better process of software development provides better and
quality software product.
RE Engineering:
• When system changes are confined to one subsystem, the subsystem needs to be reengineered
• When hardware or software support becomes obsolete
• When tools to support restructuring are readily available
Economics of Reengineering:
• Cost of maintenance: cost annual of operation and maintenance over application lifetime
• Cost of reengineering: predicted return on investment reduced by cost of implementing
changes and engineering risk factors
• Cost benefit: Cost of re engineering - Cost of maintenance
Re-engineering advantages:
Reduced risk
There is a high risk in new software development. There may be development problems,
staffing problems and specification problems.
Reduced cost :The cost of re-engineering is often significantly less than the costs of
developing new software
The complete Software Re-Engineering lifecycle includes:
Product Management: Risks analysis, root cause analysis, business analysis, requirements
elicitation and management, product planning and scoping, competitive analysis.
Research and Innovation: Definition of a problem, data gathering and analysis, identifying a
solution and developing best-of-breed or innovative algorithms, verification of quality for data
and results, patent preparation .
Product Development: Technology analysis and selection, software architecture and design,
data architecture, deployment architecture, prototyping and production code development,
comprehensive software testing, data quality testing, and product packaging and deployment
preparation.
Product Delivery and Support: Hardware/Platform analysis and selection, deployment and
release procedures definition, installations and upgrades, tracking support issues, organizing
maintenance releases.
Reverse Engineering:
Reverse engineering is taking apart an object to see how it works in order to duplicate or
enhance the object. The practice, taken from older industries, is now frequently used on
computer hardware and software. Software reverse engineering involves reversing a program's
machine code (the string of 0s and 1s that are sent to the logic processor) back into the source
code that it was written in, using program language statements. Reverse-engineering is used for
many purposes: as a learning tool; as a way to make new, compatible products that are cheaper
than what's currently on the market; for making software interoperate more effectively or to
bridge data between different operating systems or databases; and to uncover the
undocumented features of commercial products.
Software Project Management (SPM) is a proper way of planning and leading software
projects. It is a part of project management in which software projects are planned,
implemented, monitored and controlled.
It is necessary for an organization to deliver quality product, keeping the cost within client’s
budget constrain and deliver the project as per scheduled. Hence in order, software project
management is necessary to incorporate user requirements along with budget and time
constraints.
1. Conflict Management: Conflict management is the process to restrict the negative features
of conflict while increasing the positive features of conflict. The goal of conflict management is
to improve learning and group results including efficacy or performance in an organizational
setting. Properly managed conflict can enhance group results.
2. Risk Management: Risk management is the analysis and identification of risks that is
followed by synchronized and economical implementation of resources to minimize, operate
and control the possibility or effect of unfortunate events or to maximize the realization of
opportunities.
3. Requirement Management: It is the process of analyzing, prioritizing, tracing and
documenting on requirements and then supervising change and communicating to pertinent
stakeholders. It is a continuous process during a project.
4. Change Management: Change management is a systematic approach for dealing with the
transition or transformation of an organization’s goals, processes or technologies. The purpose
of change management is to execute strategies for effecting change, controlling change and
helping people to adapt to change.
5. Software Configuration Management: Software configuration management is the process
of controlling and tracing changes in the software, part of the larger cross-disciplinary field of
configuration management. Software configuration management include revision control and
the inauguration of baselines.
6. Release Management: Release Management is the task of planning, controlling and
scheduling the build in deploying releases. Release management ensures that organization
delivers new and enhanced services required by the customer, while protecting the integrity of
existing services.
Feasibility is defined as the practical extent to which a project can be performed successfully.
To evaluate feasibility, a feasibility study is performed, which determines whether the solution
considered to accomplish the requirements is practical and workable in the software.
Information such as resource availability, cost estimation for software development, benefits of
the software to the organization after it is developed and cost to be incurred on its maintenance
are considered during the feasibility study. The objective of the feasibility study is to establish
the reasons for developing the software that is acceptable to users, adaptable to change and
conformable to established standards.
Types of Feasibility
Various types of feasibility that are commonly considered include technical feasibility,
operational feasibility, and economic feasibility.
Technical feasibility assesses the current resources (such as hardware and software) and
technology, which are required to accomplish user requirements in the software within the
allocated time and budget. For this, the software development team ascertains whether the
current resources and technology can be upgraded or added in the software to accomplish
specified user requirements. Technical feasibility also performs the following tasks.
• Analyzes the technical skills and capabilities of the software development team members.
• Determines whether the relevant technology is stable and established.
• Ascertains that the technology chosen for software development has a large number of users
so that they can be consulted when problems arise or improvements are required.
Operational feasibility assesses the extent to which the required software performs a series of
steps to solve business problems and user requirements. This feasibility is dependent on human
resources (software development team) and involves visualizing whether the software will
operate after it is developed and be operative once it is installed. Operational feasibility also
performs the following tasks.
• Determines whether the problems anticipated in user requirements are of high priority.
• Determines whether the solution suggested by the software development team is acceptable.
• Analyzes whether users will adapt to a new software.
• Determines whether the organization is satisfied by the alternative solutions proposed by the
software development team.
• Information assessment: Identifies information about whether the system helps in achieving
the objectives of the organization. It also verifies that the system can be implemented using
new technology and within the budget and whether the system can be integrated with the
existing system.
• Information collection: Specifies the sources from where information about software can be
obtained. Generally, these sources include users (who will operate the software), organization
(where the software will be used), and the software development team (which understands user
requirements and knows how to fulfill them in software).
• Report writing: Uses a feasibility report, which is the conclusion of the feasibility study by
the software development team. It includes the recommendations whether the software
development should continue. This report may also include information about changes in the
software scope, budget, and schedule and suggestions of any requirements in the system.
• General information: Describes the purpose and scope of feasibility study. It also describes
system overview, project references, acronyms and abbreviations, and points of contact to be
used. System overview provides description about the name of the organization responsible for
the software development, system name or title, system category, operational status, and so on.
Project references provide a list of the references used to prepare this document such as
documents relating to the project or previously developed documents that are related to the
project. Acronyms and abbreviations provide a list of the terms that are used in this document
along with their meanings. Points of contact provide a list of points of organizational contact
with users for information and coordination. For example, users require assistance to solve
problems (such as troubleshooting) and collect information such as contact number, e-mail
address, and so on.
• Security impacts: Describe security factors that may influence the development, design, and
continued operation of the proposed software.
Project Planning
Once a project is found to be possible, computer code project managers undertake project
designing. Project designing is undertaken and completed even before any development activity
starts. Project designing consists of subsequent essential activities:
The effectiveness of the following designing activities relies on the accuracy of those
estimations.
Project designing needs utmost care and a spotlight since commitment to unrealistic time and
resource estimates end in schedule slippage. Schedule delays will cause client discontent and
adversely have an effect on team morale. It will even cause project failure.
However, project designing could be a terribly difficult activity. particularly for giant comes,
it’s pretty much troublesome to create correct plans. A region of this issue is thanks to the
actual fact that the correct parameters, the scope of the project, project workers, etc. might
amendment throughout the span of the project. So as to beat this drawback, generally project
managers undertake project designing little by little. Designing a project over a variety of
stages protects managers from creating huge commitments too early. This method of staggered
designing is thought of as window designing. Within the window technique, beginning with
associate initial set up, the project is planned additional accurately in sequential development
stages.
At the beginning of a project, project managers have incomplete information concerning the
main points of the project. Their info base step by step improves because the project progresses
through completely different phases. When the completion of each section, the project
managers will set up every ulterior section additional accurately and with increasing levels of
confidence.
A software project manager is a person who undertakes the responsibility of executing the
software project. Software project manager is thoroughly aware of all the phases of SDLC that
the software would go through. Project manager may never directly involve in producing the
end product but he controls and manages the activities involved in production. A project
manager closely monitors the development process, prepares and executes various plans,
arranges necessary and adequate resources, maintains communication among all team members
in order to address issues of cost, budget, resources, time, quality and customer satisfaction.
- Managing People
Act as project leader
Liaison with stakeholders
Managing human resource
s Setting up reporting hierarchy etc
Managing Project
Project Planning
Software project planning is task, which is performed before the production of software
actually starts. It is there for the software production but involves no concrete activity that has
any direction connection with software production; rather it is a set of multiple processes,
which facilitates software production.
It defines the scope of project; this includes all the activities, process need to be done in order
to make a deliverable software product. Scope management is essential because it creates
boundaries of the project by clearly defining what would be done in the project and what would
not be done. This makes project to contain limited and quantifiable tasks, which can easily be
documented and in turn avoids cost and time overrun.
Project Estimation
For an effective management accurate estimation of various measures is a must. With correct
estimation managers can manage and control the project more efficiently and effectively.
Project estimation may involve the following:
Software size may be estimated either in terms of KLOC (Kilo Line of Code) or by calculating
number of function points in the software. Lines of code depend upon coding practices and
Function points vary according to the user or software requirement.
Effort estimation
The managers estimate efforts in terms of personnel requirement and man-hour required to
produce the software. For effort estimation software size should be known. This can either be
derived by managers’ experience, organization’s historical data or software size can be
converted into efforts by using some standard formulae.
Time estimation
Once size and efforts are estimated, the time required to produce the software can be
estimated. Efforts required is segregated into sub categories as per the requirement
specifications and interdependency of various components of software. Software tasks are
divided into smaller tasks, activities or events by Work Breakthrough Structure (WBS). The
tasks are scheduled on day-to-day basis or in calendar months. The sum of time required to
complete all tasks in hours or days is the total time invested to complete the project
Cost estimation
This might be considered as the most difficult of all because it depends on more elements
than any of the previous ones. For estimating project cost, it is required to consider –
o Size of software
o Software quality
o Hardware
o Additional software or tools, licenses etc.
o Skilled personnel with task-specific skills
o Travel involved
o Communication
o Training and support
We discussed various parameters involving project estimation such as size, effort, time and cost.
Project manager can estimate the listed factors using two broadly recognized techniques –
Decomposition Technique
Line of Code Estimation is done on behalf of number of line of codes in the software product.
Function Points Estimation is done on behalf of number of function points in the software product
.
Putnam Model
This model is made by Lawrence H. Putnam, which is based on Norden’s frequency distribution
(Rayleigh curve). Putnam model maps time and efforts required with software size.
COCOMO COCOMO stands for COnstructive COst MOdel, developed by Barry W. Boehm. It
divides the software product into three categories of software: organic, semi-detached and embedded.
Project Scheduling
Project Scheduling in a project refers to roadmap of all activities to be done with specified order and
within time slot allotted to each activity. Project managers tend to define various tasks, and project
milestones and arrange them keeping various factors in mind. They look for tasks lie in critical path in
the schedule, which are necessary to complete in specific manner (because of task interdependency) and
strictly within the time allocated. Arrangement of tasks which lies out of critical path are less likely to
impact over all schedule of the project. For scheduling a project, it is necessary to - Break down the
project tasks into smaller, manageable form
Find out various tasks and correlate them
Estimate time frame required for each task Divide time into work-units
Assign adequate number of work-units for each task
Calculate total time required for the project from start to finish
Resource management
All elements used to develop a software product may be assumed as resource for that project. This may
include human resource, productive tools and software libraries. The resources are available in limited
quantity and stay in the organization as a pool of assets. The shortage of resources hampers the
development of project and it can lag behind the schedule. Allocating extra resources increases
development cost in the end. It is therefore necessary to estimate and allocate adequate resources for the
project.
Resource management includes - Defining proper organization project by creating a project team and
allocating responsibilities to each team member
Determining resources required at a particular stage and their availability
Manage Resources by generating resource request when they are required and de-allocating them
when they are no more needed.
Project Risk Management Risk management involves all activities pertaining to identification, analyzing
and making provision for predictable and non-predictable risks in the project. Risk may include the
following: Experienced staff leaving the project and new staff coming in.
Change in organizational management.
Requirement change or misinterpreting requirement
. Under-estimation of required time and resources.
Technological changes, environmental changes, business competition.
Risk Management Process