Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 28

UNIT 5

SOFTWARE MAINTAINANCE AND SOFTWARE PROJECT MANAGEMENT


Topic: Software as an Evolutionary Entity, Need for Maintenance, Categories of
Software Maintenance
Software Evolution is a term which refers to the process of developing software initially, then
timely updating it for various reasons, i.e., to add new features or to remove obsolete
functionalities etc. The evolution process includes fundamental activities of change analysis,
release planning, system implementation and releasing a system to customers. The cost an
impact of these changes are accessed to see how much system is affected by the change and
how much it might cost to implement the change. If the proposed changes are accepted, a
new release of the software system is planned. During release planning, all the proposed
changes (fault repair, adaptation, and new functionality) are considered. A design is then
made on which changes to implement in the next version of the system. The process of
change implementation is an iteration of the development process where the revisions to the
system are designed, implemented, and tested.

Laws used for Software Evolution:


1. Law of continuing change:
This law states that any software system that represents some real-world reality undergoes
continuous change or become progressively less useful in that environment.
2. Law of increasing complexity:
As an evolving program changes, its structure becomes more complex unless effective
efforts are made to avoid this phenomenon
Law of conservation of organization stability:
Over the lifetime of a program, the rate of development of that program is approximately
constant and independent of the resource devoted to system development.
4. Law of conservation of familiarity:
This law states that during the active lifetime of the program, changes made in the
successive release are almost constant.
Software Maintenance is the process of modifying a software product after it has been
delivered
to the customer. The main purpose of software maintenance is to modify and update software
application after delivery to correct faults and to improve performance.
Need for Maintenance –
Software Maintenance must be performed in order to:
 Correct faults.
 ●Improve the design.
 Implement enhancements.
 Interface with other systems.
 Accommodate programs so that different hardware, software, system features, and
telecommunications facilities can be used.
 Migrate legacy software.
 Retire software
Categories of Software Maintenance –
Maintenance can be divided into the following:
1. Corrective maintenance: Corrective maintenance of a software product may be essential
either to rectify some bugs observed while the system is in use, or to enhance the
performance of the system.
2. Adaptive maintenance: This includes modifications and updating when the customers need
the product to run on new platforms, on new operating systems, or when they need the
product to interface with new hardware and software.
3. Perfective maintenance: A software product needs maintenance to support the new features
that the users want or to change different types of functionalities of the system according to
the customer demands.
4. Preventive maintenance: This type of maintenance includes modifications and updating 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.
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.
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.
Why Reverse Engineering?
1. Providing proper system documentation.
2. Recovery of lost information.
3. Assisting with maintenance.
4. Facility of software reuse.
5. Discovering unexpected flaws or faults.
Used of Software Reverse Engineering –
1. 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.
2. Reverse engineering is also useful in software testing, it helps the testers to study the
virus and other malware code
Topic: Software maintenance Cost, Software Re-Engineering
Software maintenance is widely accepted part of SDLC now a days. It stands for all the
modifications and updating done after the delivery of software product. There are number
of reasons, why modifications are required, some of them are briefly mentioned below:
1. 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.
2. Client Requirements - Over the time, customer may ask for new features or
functions in the software
3. 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.
4. 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
Types of maintenance
In a software lifetime, type of maintenance may vary based on its nature. It may be just a
routine maintenance tasks as some bug discovered by some user or it may be a large event
based on maintenance size or nature. Following are some types of maintenance based on their
characteristics
1. Corrective Maintenance - This includes modifications and updating done in order to
correct or fix problems, which are either discovered by user or concluded by user
error reports.
2. Adaptive Maintenance - This includes modifications and updating applied to keep
the software product up-to date and tuned to the ever-changing world of technology
and business environment.
3. Perfective Maintenance - This includes modifications and updates done in order to
keep the software usable over long period of time. It includes new features, new user
requirements for refining the software and improve its reliability and performance.
4. Preventive Maintenance - This includes modifications and updating to prevent
future problems of the software. It aims to attend problems, which are not significant
at this moment but may cause serious issues in future
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
1. The standard age of any software is considered up to 10 to 15 years.
2. Older software’s, which were meant to work on slow machines with less memory and
storage capacity cannot keep themselves challenging against newly coming enhanced
software’s on modern hardware.
3. As technology advances, it becomes costly to maintain old software.
4. Most maintenance engineers are newbie and use trial and error method to rectify
problem.
5. Often, changes made can easily hurt the original structure of the software, making it
hard for any subsequent changes.
6. Changes are often left undocumented which may cause more conflicts in future
Software-end factors affecting Maintenance Cost
 Structure of Software Program
 Programming Language
 Dependence on external environment
 Staff reliability and availability
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
These activities go together 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 analysed 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 analysed 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. Training facility is provided if
required, in addition to the hard copy of user manual.
8. 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.
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 grow sold 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 it?
 Perform Reverse Engineering, in order to obtain specifications of existing software
 Restructure Program if required. For example, changing function-oriented programs
into object-oriented programs.
 Re-structure data as required
 Apply Forward engineering concepts in order to get re-engineered software

Topic:Software Configuration
Management; Change Control
Process
In Software Engineering,
Software Configuration
Management(SCM) is a
process to
systematically manage,
organize, and control the
changes in the documents,
codes, and other
entities during the Software
Development Life Cycle. The
primary goal is to increase
productivity with minimal
mistakes. SCM is part of
cross-disciplinary field of
configuration
management and it can
accurately determine who
made which revision.
Topic: Software Configuration Management, Change Control Process
Software Engineering, Software Configuration Management (SCM) is a process to
systematically manage, organize, and control the changes in the documents, codes, and other
entities during the Software Development Life Cycle. The primary goal is to increase
productivity with minimal mistakes. SCM is part of cross-disciplinary field of configuration
management and it can accurately determine who made which revision.
Why do we need Configuration management?
The primary reasons for Implementing Technical Software Configuration Management
System are:
1. There are multiple people working on software which is continually updating
2. It may be a case where multiple versions, branches, authors are involved in a software
config project, and the team is geographically distributed and works concurrently
3. Changes in user requirement, policy, budget, schedule need to be accommodated.
4. Software should able to run on various machines and Operating Systems
5. Helps to develop coordination among stakeholders
6. SCM process is also beneficial to control the costs involved in making changes to a
system

Any change in the software configuration Items will affect the final product. Therefore,
changes to configuration items need to be controlled and managed.
Tasks in SCM process
1. Configuration Identification
2. Baselines
3. Change Control
4. Configuration Status Accounting
5. Configuration Audits and Reviews
Configuration Identification:
Configuration identification is a method of determining the scope of the software system.
With the help of this step, you can manage or control something even if you don't know
what it is. It isa description that contains the CSCI type (Computer Software
Configuration Item), a project identifier and version information
Activities during this process
1. Identification of configuration Items like source code modules, test case, and
requirements specification.
2. Identification of each CSCI in the SCM repository, by using an object-oriented
approach
3. The process starts with basic objects which are grouped into aggregate objects.
Details of what, why, when and by whom changes in the test are made
4. Every object has its own features that identify its name that is explicit to all other
objects
5. List of resources required such as the document, the file, tools, etc
Baseline:
A baseline is a formally accepted version of a software configuration item. It is designated
and fixed at a specific time while conducting the SCM process. It can only be changed
through formal change control procedures.
Activities during this process:
1. Facilitate construction of various versions of an application
2. Defining and determining mechanisms for managing various versions of these work
products
3. The functional baseline corresponds to the reviewed system requirements
4. Widely used baselines include functional, developmental, and product baselines
In simple words, baseline means ready for release.
Change Control:
Change control is a procedural method which ensures quality and consistency when changes
are made in the configuration object. In this step, the change request is submitted to software
configuration manager.
Activities during this process:
1. Control ad-hoc change to build stable software development environment. Changes
are committed to the repository
2. The request will be checked based on the technical merit, possible side effects and
overall impact on other configuration objects.
3. It manages changes and making configuration items available during the software
lifecycle
Configuration Status
Accounting:
Configuration status
accounting tracks each release
during the SCM process. This
stage involves
tracking what each version has
and the changes that lead to
this version.
Configuration Status Accounting:
Configuration status accounting tracks each release during the SCM process. This stage
involves tracking what each version has and the changes that lead to this version.
Activities during this process:
1. Keeps a record of all the changes made to the previous baseline to reach a new
baseline
2. Identify all items to define the software configuration
3. Monitor status of change requests
4. Complete listing of all changes since the last baseline
5. Allows tracking of progress to next baseline
6. Allows to check previous releases/versions to be extracted for testing

Configuration Audits and


Reviews:
Software Configuration audits
verify that all the software
product satisfies the baseline
needs. It
ensures that what is built is
what is delivered.
Activities during this process:
● Configuration auditing is
conducted by auditors by
checking that defined
processes are
being followed and ensuring
that the SCM goals are
satisfied.
● To verify compliance with
configuration control
standards. auditing and
reporting the
changes made
● SCM audits also ensure
that traceability is maintained
during the process.
● Ensures that changes made
to a baseline comply with the
configuration status reports
● Validation of completeness
and consistency
Configuration Audits and Reviews:
Software Configuration audits verify that all the software product satisfies the baseline needs.
It ensures that what is built is what is delivered.
Activities during this process:
1. Configuration auditing is conducted by auditors by checking that defined processes
are being followed and ensuring that the SCM goals are satisfied.
2. To verify compliance with configuration control standards. auditing and reporting the
changes made
3. SCM audits also ensure that traceability is maintained during the process.
4. Ensures that changes made to a baseline comply with the configuration status reports
5. Validation of completeness and consistency
Participant of SCM process:
Following are the key participants in SCM
1. Configuration Manager
 Configuration Manager is the head who is Responsible for identifying configuration
items.
 CM ensures team follows the SCM process
 He/she needs to approve or reject change requests

2. 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
3. Auditor
● The auditor is responsible
for SCM audits and reviews.
● Need to ensure the
consistency and completeness
of release.
4. Project Manager:
● Ensure that the product is
developed within a certain
time frame
● Monitors the progress of
development and recognizes
issues in the SCM process
● Generate reports about the
status of the software system
2. 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
3. Auditor
 The auditor is responsible for SCM audits and reviews.
 Need to ensure the consistency and completeness of release.
4. Project Manager:
 Ensure that the product is developed within a certain time frame
 Monitors the progress of development and recognizes issues in the SCM process
 Generate reports about the status of the software system

 Make sure that processes


and policies are followed for
creating, changing, and
testing
User
 Make sure that processes and policies are followed for creating, changing, and testing

5. User
The end user should understand the key SCM terms to ensure he has the latest version of the
software
Software Configuration Management Plan
The SCMP (Software Configuration management planning) process planning begins at the
early coding phases of a project. The outcome of the planning phase is the SCM plan which
might be stretched or revised during the project.
1. The SCMP can follow a public standard like the IEEE 828 or organization specific
standard
2. It defines the types of documents to be management and a document naming.
Example Test_v1
3. SCMP defines the person who will be responsible for the entire SCM process and
creation of baselines.
4. Fix policies for version management & change control
5. Define tools which can be used during the SCM process
6. Configuration management database for recording configuration information.

Software Configuration
Management Tools
Any Change management
software should have the
following 3 Key features:
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
Software Configuration Management Tools
Any Change management software should have the following 3 Key features:
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 check out 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.
Following are popular tools
1. Git: Git is a free and open-source tool which helps version control. It is designed to handle
all types of projects with speed and efficiency.
2. Team Foundation Server: Team Foundation is a group of tools and technologies that
enable the team to collaborate and coordinate for building a product.
3. Ansible: It is an open-source Software configuration management tool. Apart from
configuration management it also offers application deployment & task automation
version control
Benefits of version control
Version control systems are a category of software tools that help a software team manage
changes to source code over time. Version control software keeps track of every modification
to the code in a special kind of database. If a mistake is made, developers can turn back the
clock and compare earlier versions of the code to help fix the mistake while minimizing
disruption to all team members.
For almost all software projects, the source code is like the crown jewels - a precious asset
whose value must be protected. For most software teams, the source code is a repository of
the invaluable knowledge and understanding about the problem domain that the developers
have collected and refined through careful effort. Version control protects source code from
both catastrophe and the casual degradation of human error and unintended consequences.
Software developers working in teams are continually writing new source code and changing
existing source code. The code for a project, app or software component is typically
organized in a folder structure or "file tree". One developer on the team may be working on a
new feature while another developer fixes an unrelated bug by changing code, each developer
may make their changes in several parts of the file tree.
Version control helps teams solve these kinds of problems, tracking every individual change
by each contributor and helping prevent concurrent work from conflicting. Changes made in
one part of the software can be incompatible with those made by another developer working
at the same time. This problem should be discovered and solved in an orderly manner without
blocking the work of the rest of the team. Further, in all software development, any change
can introduce new bugs on its own and new software can't be trusted until it's tested. So,
testing and development proceed together until a new version is ready
The primary benefits you should expect from version control are as follows:
1. A complete long-term change history of every file. This means every change made by
many individuals over the years. Changes include the creation and deletion of files as well as
edits to their contents. Different VCS tools differ on how well they handle renaming and
moving of files. This history should also include the author, date and written notes on the
purpose of each change. Having the complete history enables going back to previous versions
to help in root cause analysis for bugs and it is crucial when needing to fix problems in older
versions of software. If the software is being actively worked on, almost everything can be
considered an "older version" of the software.
2. Branching and merging. Having team members work concurrently is a no-brainer, but
even individuals working on their own can benefit from the ability to work on independent
streams of changes. Creating a "branch" in VCS tools keeps multiple streams of work
independent from each other while also providing the facility to merge that work back
together, enabling developers to verify that the changes on each branch do not conflict. Many
software teams adopt a practice of branching for each feature or perhaps branching for each
release, or both. There are many different workflows that teams can choose from when they
decide how to make use of branching and merging facilities in VCS.
3. Traceability. Being able to trace each change made to the software and connect it to
project management and bug tracking software such as Jira, and being able to annotate each
change with a message describing the purpose and intent of the change can help not only with
root cause analysis and other forensics. Having the annotated history of the code at your
fingertips when you are reading the code, trying to understand what it is doing and why it is
so designed can enable developers to make correct and harmonious changes that are in accord
with the intended long-term design of the system. This can be especially important for
working effectively with legacy code and is crucial in enabling developers to estimate future
work with any accuracy
Topic: CASE Tools
CASE stands for Computer Aided Software Engineering. It means, development and
maintenance of software projects with help of various automated software tools.
CASE Tools
CASE tools are set of software application programs, which are used to automate SDLC
activities. CASE tools are used by software project managers, analysts and engineers to
develop software system.
There are number of CASE tools available to simplify various stages of Software
Development Life Cycle such as Analysis tools, Design tools, Project management tools,
Database Management tools, Documentation tools are to name a few.
Use of CASE tools accelerates the development of project to produce desired result and helps
to uncover flaws before moving ahead with next stage in software development
Components of CASE Tools
CASE tools can be broadly divided into the following parts based on their use at a particular
SDLC stage:
 Central Repository - CASE tools require a central repository, which can serve as a
source of common, integrated, and consistent information. Central repository is a
central place of storage where product specifications, requirement documents, related
reports and diagrams, other useful information regarding management is stored.
Central repository also serves as data dictionary
 Upper Case Tools - Upper CASE tools are used in planning, analysis and design
stages of SDLC.
 Lower Case Tools - Lower CASE tools are used in implementation, testing and
maintenance.
 Integrated Case Tools - Integrated CASE tools are helpful in all the stages of SDLC,
from Requirement gathering to Testing and documentation

CASE tools can be grouped


together if they have similar
functionality, process activities
and
capability of getting integrated
with other tools.
Scope of Case Tools
The scope of CASE tools goes
throughout the SDLC.
Case Tools Types
Now we briefly go through
various CASE tools
Diagram tools
These tools are used to
represent system components,
data and control flow among
various
software components and
system structure in a graphical
form. For example, Flow Chart
Maker
tool for creating state-of-the-
art flowcharts.
CASE tools can be grouped together if they have similar functionality, process activities and
capability of getting integrated with other tools.
Scope of Case Tools
The scope of CASE tools goes throughout the SDLC.
Case Tools Types
Now we briefly go through various CASE tools Diagram tools These tools are used to
represent system components, data and control flow among various software components and
system structure in a graphical form. For example, Flow Chart Maker tool for creating state-
of-the-art flowcharts.
Process Modelling Tools
Process modelling is method to create software process model, which is used to develop the
software. Process modelling tools help the managers to choose a process model or modify it
as per the requirement of software product. For example, EPF Composer
Project Management Tools
These tools are used for project planning, cost and effort estimation, project scheduling and
resource planning. Managers have to strictly comply project execution with every mentioned
step in software project management. Project management tools help in storing and sharing
project information in real-time throughout the organization. For example, Creative Pro
Office, Trac Project, Basecamp
Documentation Tools
Documentation in a software project starts prior to the software process, goes throughout all
phases of SDLC and after the completion of the project.
Documentation tools generate documents for technical users and end users. Technical users
are mostly in-house professionals of the development team who refer to system manual,
reference manual, training manual, installation manuals etc. The end user documents describe
the functioning and how-to of the system such as user manual. For example, Doxygen,
DrExplain, Adobe RoboHelp for documentation
Analysis Tools
These tools help to gather requirements, automatically check for any inconsistency,
inaccuracy in the diagrams, data redundancies or erroneous omissions. For example, Accept
360, Accompa, Case Complete for requirement analysis, Visible Analyst for total analysis.
Design Tools
These tools help software designers to design the block structure of the software, which may
further be broken down in smaller modules using refinement techniques. These tools provide
detailing of each module and interconnections among modules. For example, Animated
Software Design
Configuration Management Tools
An instance of software is released under one version. Configuration Management tools deal
with –
 Version and revision management
 Baseline configuration management
 Change control management
CASE tools help in this by automatic tracking, version management and release management.
For example, Fossil, Git, Accu REV.
Change Control Tools
These tools are considered as a part of configuration management tools. They deal with
changes made to the software after its baseline is fixed or when the software is first released.
CASE tools automate change tracking, file management, code management and more. It also
helps in enforcing change policy of the organizations
Programming Tools
These tools consist of programming environments like IDE (Integrated Development
Environment), in-built modules library and simulation tools. These tools provide
comprehensive aid in building software product and include features for simulation and
testing. For example, Cscope to search code in C, Eclipse.
Prototyping Tools
Software prototype is simulated version of the intended software product. Prototype provides
initial look and feel of the product and simulates few aspect of actual product. Prototyping
CASE tools essentially come with graphical libraries. They can create hardware independent
user interfaces and design. These tools help us to build rapid prototypes based on existing
information. In addition, they provide simulation of software prototype. For example, Serena
prototype composer, Mockup Builder
Web Development Tools
These tools assist in designing web pages with all allied elements like forms, text, script,
graphic and so on. Web tools also provide live preview of what is being developed and how
will it look after completion. For example, Fontello, Adobe Edge Inspect, Foundation 3,
Brackets.
Quality Assurance Tools
Quality assurance in a software organization is monitoring the engineering process and
methods adopted to develop the software product in order to ensure conformance of quality
as per organization standards. QA tools consist of configuration and change control tools and
software testing tools. For example, SoapTest, AppsWatch, JMeter.
Maintenance Tools
Software maintenance includes modifications in the software product after it is delivered.
Automatic logging and error reporting techniques, automatic error ticket generation and root
cause Analysis are few CASE tools, which help software organization in maintenance phase
of SDLC. For example, Bugzilla for defect tracking, HP Quality Centre

Topic: Estimation of Various Parameters such as Cost, Efforts, Schedule/Duration


Cost estimation of software development project focuses on how associating estimates of
effort and time with the project activities. Estimation involves answering the following
questions
1. How much effort is required to complete each activity?
2. How much calendar time is needed to complete each activity?
3. What is the total cost of each activity?
Project cost estimation and project scheduling are usually carried out together. The costs of
development are primarily the costs of the effort involved, so the effort computation is used
in both the cost and the schedule estimate. The initial cost estimates may be used to establish
a budget for the project and to set a price for the software for a customer. The total cost of a
software development project is the sum of following costs:
1. Hardware and software costs including maintenance.
2. Travel and training costs.
3. Effort costs of paying software developers
For most projects, the dominant cost is the effort cost. Effort costs are not just the salaries of
the software engineers who are involved in the project. The following overhead costs are all
part of the total effort cost:
1. Costs of heating and lighting offices
2. Costs of support staff (accountants, administrators, system managers, cleaners, technicians
etc.).
3. Costs of networking and communications.
4. Costs of central facilities (library, recreational facilities, etc.).
5. Costs of social security and employee benefits such as pensions and health insurance.
Software productivity estimation
Productivity estimates help to define the project cost and schedule. In a software development
project managers may be faced with the problem of estimating the productivity of software
engineers. For any software problem, there may be many different solutions, each of which
has different attributes. One solution may execute more efficiently while another may be
more readable and easier to maintain and comparing their production rates is very difficult.
Productivity estimates are usually based on measuring attributes of the software and dividing
this by the total effort required for development. Software metrics have two main types:
1. Size-related software metrics. These metrics are related to the size of software. The most
frequently used size-related metric is lines of delivered source code.
2. Function-related software metrics. These are related to the overall functionality of the
software. For example, function points and object points are metrics of this type
The productivity estimation defined as lines of source code per programmer month is widely
used software productivity metric. It is computed by counting the total number of lines of
source code divided by the total development time in programmer-months required to
complete the project.
In other cases, the total number of function points in a program measures or estimates the
following program features:
1. external inputs and outputs,
2. user interactions,
3. external interfaces,
4. files used by the system
Development cost estimation techniques
In the early stage in a project, it is very difficult to accurately estimate system development
costs. There is no simple way to make an accurate estimate of the effort required to develop
software. Techniques listed in Table 13.1. may be used to make software effort and cost
estimates. All of these techniques based on the experience of project managers who use their
knowledge of previous projects to estimate of the resources required for the project
Cost estimation techniques.
Technique Description
Algorithmic cost modelling Relating some software metric a
mathematical model is developed to
estimate the project cost.
Expert judgement Several experts on the proposed software
development techniques and the
application domain are asked to estimate the
project cost. The estimation
process iterates until an agreed estimate is
reached.

Estimation by previous projects The cost of a new project is estimated by a


completed project in the same application
domain.
Application of Parkinson’s Law Parkinson’s Law states that work expands to
fill the time available and the cost is
determined by the resources used.
Pricing to win The software cost is estimated by the price
what the customer has available to spend on
the project

Topic: Software Risk Analysis And Risk Management


Risk is an expectation of loss, a potential problem that may or may not occur in the future. It
is generally caused due to lack of information, control, or time. A possibility of suffering
from loss in software development process is called a software risk. Loss can be anything,
increase in production cost, development of poor-quality software, not being able to complete
the project on time. Software risk exists because the future is uncertain and there are many
known and unknown things that cannot be incorporated in the project plan. A software risk
can be of two types (a) internal risks that are within the control of the project manager and (2)
external risks that are beyond the control of project manager. Risk management is carried out
to:
1. Identify the risk
2. Reduce the impact of risk
3. Reduce the probability or likelihood of risk
4. Risk monitoring
A project manager must deal with risks arising from three possible cases:
1. Known knowns are software risks that are facts known to the team as well as to the entire
project. For example, not having enough number of developers can delay the project delivery.
Such risks are described and included in the Project Management Plan.
2. Known unknowns are risks that the project team is aware of but it is unknown that such
risk exists in the project or not. For example, if the communication with the client is not of
good level, then it is not possible to capture the requirement properly. This is a fact known to
the project team however whether the client has communicated all the information properly
or not is unknown to the project.
3. Unknown Unknowns are those kind of risks about which the organization has no idea.
Such risks are generally related to technology such as working with technologies or tools that
you have no idea about because your client wants you to work that way suddenly exposes you
to unknown unknown risks
Software risk management is all about risk quantification of risk. This includes:
1. Giving a precise description of risk event that can occur in the project
2. Defining risk probability that would explain what are the chances for that risk to occur
3. Defining How much loss a particular risk can cause
4. Defining the liability potential of risk
Risk Management comprises of following processes
1. Software Risk Identification
2. Software Risk Analysis
3. Software Risk Planning
4. Software Risk Monitoring
These Processes are defined below.
Software Risk Identification
In order to identify the risks that your project may be subjected to, it is important to first
study the problems faced by previous projects. Study the project plan properly and check for
all the possible areas that are vulnerable to some or the other type of risks. The best ways of
analysing a project plan is by converting it to a flowchart and examine all essential areas. It is
important to conduct few brainstorming sessions to identify the known unknowns that can
affect the project. Any decision taken related to technical, operational, political, legal, social,
internal, or external factors should be evaluated properly

Software Risk Identification


In this phase of Risk management, you must define processes that are important for risk
identification. All the details of the risk such as unique Id, date on which it was identified,
description and so on should be clearly mentioned.
Software Risk Analysis
Software Risk analysisis a very important aspect of risk management. In this phase the risk is
identified and then categorized. After the categorization of risk, the level, likelihood
(percentage) and impact of the risk is analyzed. Likelihood is defined in percentage after
examining what are the chances of risk to occur due to various technical conditions. These
technical conditions can be:
1. Complexity of the technology
2. Technical knowledge possessed by the testing team
3. Conflicts within the team
4. Teams being distributed over a large geographical area
5. Usage of poor-quality testing tools
With impact we mean the consequence of a risk in case it happens. It is important to know
about the impact because it is necessary to know how a business can get affected:
1. What will be the loss to the customer
2. How would the business suffer
3. Loss of reputation or harm to society
4. Monetary losses
5. Legal actions against the company
6. Cancellation of business license
Level of risk is identified with the help of:
Qualitative Risk Analysis: Here you define risk as:
●High
●Low
●Medium
Quantitative Risk Analysis: can be used for software risk analysis but is considered
inappropriate because risk level is defined in % which does not give a very clear picture.
Software Risk Planning.
Software risk planning is all about:
1. Defining preventive measure that would lower down the likelihood or probability of
various risks.
2. Define measures that would reduce the impact in case a risk happens.
3. Constant monitoring of processes to identify risks as early as possible.
Software Risk Monitoring
Software risk monitoring is integrated into project activities and regular checks are conducted
on top risks. Software risk monitoring comprises of:
 Tracking of risk plans for any major changes in actual plan, attribute, etc.
 Preparation of status reports for project management.
 Review risks and risks whose impact or likelihood has reached the lowest possible
level should be closed.
 Regularly search for new risks

You might also like