Software Project Management Overview
Software Project Management Overview
UNIT-II
CHAPTER-I
SOFTWARE PROJECT MANAGEMENT
Software project management is a very vast topic. In fact, a full semester teaching can be
conducted on effective techniques for software project management.
The main goal of software project management is to enable a group of developers to work
effectively towards the successful completion of a project.
SOFTWARE PROJECT MANAGEMENT COMPLEXITIES
Invisibility: Invisibility of software makes it difficult to assess the progress of a project
and is a major cause for the complexity of managing a software project.
Changeability: Frequent changes to the requirements and the invisibility of software
are possibly the two major factors making software project management a complex
task.
Complexity: Even a moderate sized software has millions of parts (functions) that
interact with each other in many ways—data coupling, serial and concurrent runs, state
transitions, control dependency, file sharing, etc.
Uniqueness: Every software project is usually associated with many unique features or
situations. This makes every project much different from the others. This is unlike
projects in other domains, such as car manufacturing or steel manufacturing where the
projects are more predictable. Due to the uniqueness of the software projects, a project
manager in the course of a project faces many issues that are quite unlike the ones
he/she might have encountered in the past.
Exactness of the solution: Mechanical components such as nuts and bolts typically
work satisfactorily as long as they are within a tolerance of 1 per cent or so of their
specified sizes. However, the parameters of a function call in a program are required to
be in complete conformity with the function definition.
Team-oriented and intellect-intensive work: Software development projects are akin
to research projects in the sense that they both involve team-oriented, intellect-intensive
work. In contrast, projects in many domains are labor-intensive and each member works
in a high degree of autonomy. Examples of such projects are planting rice, laying roads,
assembly line manufacturing, constructing a multistoried building, etc.
RESPONSIBILITIES OF A SOFTWARE PROJECT MANAGER
Job Responsibilities for Managing Software Projects
A software project manager takes the overall responsibility of steering a project to
success. This surely is a very hazy job description. In fact, it is very difficult to
objectively describe the precise job responsibilities of a project manager. The job
responsibilities of a project manager range from invisible activities like building up of
team morale to highly visible customer presentations.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
We can broadly classify a project manager’s varied responsibilities into the following
two major categories:
Project planning, and
Project monitoring and control.
Project planning: Project planning is undertaken immediately after the feasibility
study phase and before the starting of the requirements analysis and specification phase.
The initial project plans are revised from time to time as the project progresses andmore
project data become available.
Project monitoring and control: Project monitoring and control activities are
undertaken once the development activities start. As the project gets underway, the
details of the project that were unclear earlier at the start of the project emerge and
situations that were not visualized earlier arise. While carrying out project monitoring
and control activities, a project manager usually needs to change the plan to cope up
with specific situations at hand.
Skills Necessary for Managing Software Projects
A theoretical knowledge of various project management techniques is certainly important to
become a successful project manager. However, a purely theoretical knowledge of various
project management techniques would hardly make one a successful project manager. Effective
software project management calls for good qualitative judgment and decision taking
capabilities.
In addition to having a good grasp of the latest software project management techniques such
as cost estimation, risk management, and configuration management, etc., project managers
need good communication skills and the ability to get work done. Some skills such as tracking
and controlling the progress of the project, customer interaction, managerial presentations, and
team building are largely acquired through experience. Never the less, the importance of a
sound knowledge of the prevalent project management techniques cannot be overemphasized.
Three skills that are most critical to successful project management
are the following:
Knowledge of project management techniques.
Decision taking capabilities
Previous experience in managing similar projects
PROJECT PLANNING
Project managers undertake project planning. Project planning requires utmost care and
attention since commitment to unrealistic time and resource estimates result in schedule
slippage. Schedule delays can cause customer dissatisfaction and adversely affect team
morale.
It can even cause project failure. For this reason, project planning is undertaken by the
project managers with utmost care and attention. However, for effective project
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
It is usually very difficult to make accurate plans for large projects at project initiation.
A part of the difficulty arises from the fact that large projects may take several years to
complete.
As a result, during the span of the project, the project parameters, scope of the project,
project staff, etc., often change drastically resulting in the initial plans going haywire.
In order to overcome this problem, sometimes project managers undertake project
planning over several stages.
That is, after the initial project plans have been made, these are revised at frequent
intervals. Planning a project over a number of stages protects managers from making
big commitments at the start of the project. This technique of staggered planning known
as sliding window planning.
At the start of a project, the project manager has incomplete knowledge about the nitty-
gritty of the project. His information base gradually improves as the project progresses
through different development phases. The complexities of different project activities
become clear, some of the anticipated risks get resolved, and new risks appear. The
project parameters are re-estimated periodically as understanding grows and also a
periodically as project parameters change.
The SPMP Document of Project Planning
Once project planning is complete, project managers document their plans in a
software project management plan (SPMP) document. Listed below are the different
items that the SPMP document should discuss. This list can be used as a possible
organization of the SPMP document.
Organization of the software project management plan (SPMP) document
1. Introduction
(a) Objectives
(b) Major Functions
(c) Performance Issues
(d) Management and Technical Constraints
2. Project estimates
(a) Historical Data Used
(b) Estimation Techniques Used
(c) Effort, Resource, Cost, and Project Duration Estimates
3. Schedule
(a) Work Breakdown Structure
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Currently, two metrics are popularly being used to measure size—lines of code (LOC)
and function point (FP). Each of these metrics has its own advantages and
disadvantages.
Based on their relative advantages, one metric may be more appropriate than the other
in a particular situation.
Lines of Code (LOC)
LOC is possibly the simplest among all metrics available to measure project size.
Consequently, this metric is extremely popular. This metric measures the size of a
project by counting the number of source instructions in the developed program.
Obviously, while counting the number of source instructions, comment lines, and
header lines are ignored.
Determining the LOC count at the end of a project is very simple. However, accurate
estimation of LOC count at the beginning of a project is a very difficult task. One can
possibly estimate the LOC count at the starting of a project, only by using some form
of systematic guess work. Systematic guessing typically involves the following. The
project manager divides the problem into modules, and each module into sub-modules
and
LOC is a measure of coding activity alone. The implicit assumption made by the
LOC metric that the overall product development effort is solely determined from the
coding effort alone is flawed.
LOC count depends on the choice of specific instructions: LOC gives a numerical
value of problem size that can vary widely with coding styles of individual
programmers.
Even for the same programming problem, different programmers might come up with
programs having very different LOC counts. This situation does not improve, even if
language tokens are counted instead of lines of cod
LOC measure correlates poorly with the quality and efficiency of the code:
Larger code size does not necessarily imply better quality of code or higher efficiency.
Some programmers produce lengthy and complicated code as they do not make
effective use of the available instruction set or use improper algorithms.
LOC metric penalizes use of higher-level programming languages and code
reuse: A paradox is that if a programmer consciously uses several library routines,
then the LOC count will be lower. This would show up as smaller program size, and
in turn, would indicate lower effort!
LOC metric measures the lexical complexity of a program and does not address
the more important issues of logical and structural complexities: Between two
programs with equal LOC counts, a program incorporating complex logic would
require much more effort to develop than a program with very simple logic.
It is very difficult to accurately estimate LOC of the final program from problem
specification: As already discussed, at the project initiation time, it is a very difficult
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
task to accurately estimate the number of lines of code (LOC) that the program would
have after development. The LOC count can accurately be computed only after the
code has fully been developed. Since project planning is carried out even before any
development activity starts, the LOC metric is of little use to the project managers
during project planning.
Function Point (FP) Metric
Function point metric was proposed by Albrecht and Gaffney in 1983. This metric
overcomes many of the shortcomings of the LOC metric. Since its inception, function
point metric has steadily gained popularity. Function point metric has several
advantages over LOC metric.
One of the important advantages of the function point metric over the LOC metric is
that it can easily be computed from the problem specification itself.
Using the LOC metric, on the other hand, the size can accurately be determined only
after the code has been fully written.
The conceptual idea behind the function point metric is the following. The size of a
software product is directly dependent on the number of different high-level functions
or features it supports. This assumption is reasonable, since each feature would take
additional effort to implement.
Though each feature takes some effort to develop, different features may take very
different amounts of efforts to develop. For example, in a banking software, a function
to display a help message may be much easier to develop compared to say the function
that carries out the actual banking transactions. Therefore, just determining the number
of functions to be supported (with adjustments for number of fi les and interfaces) may
not yield very accurate results.
This has been considered by the function point metric by counting the number of input
and output data items and the number of files accessed by the function. The implicit
assumption made is that the more the number of data items that a function reads from
the user and outputs and the more the number of files accessed, the higher is the
complexity of the function.
Now let us analyze why this assumption must be intuitively correct. Each feature when
invoked typically reads some input data and then transforms those to the required output
data. For example, the query book feature (see Figure 3.2) of a Library Automation
Software takes the name of the book as input and displays its location in the library and
the total number of copies available. Similarly, the issue book and the return book
features produce their output based on the corresponding
input data. It can therefore be argued that the computation of the number of input and
output data items would give a more accurate indication of the code size compared to
simply counting the number of high-level functions supported by the system.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
considered as a single input. For example, while entering the data concerning an
employee to an employee pay roll software; the data items name, age, sex, address,
phone number, etc. are together considered as a single input. All these data items can
be considered to be related, since they describe a single employee.
2. Number of outputs: The outputs considered include reports printed, screen outputs,
error messages produced, etc. While computing the number of outputs, the individual
data items within a report are not considered; but a set of related data items is counted
as just a single output.
3. Number of inquiries: An inquiry is a user command (without any data input) and
only requires some actions to be performed by the system. Thus, the total number of
inquiries is essentially the number of distinct interactive queries (without data input)
which can be made by the users. Examples of such inquiries are print account balance,
print all student grades, display rank holders’ names, etc.
4. Number of files: The files referred to here are logical files. A logical file represents
a group of logically related data. Logical files include data structures as well as physical
files.
5. Number of interfaces: Here the interfaces denote the different mechanisms that are
used to exchange information with other systems. Examples of such interfaces are data
files on tapes, disks, communication links with other systems, etc.
Step 2: Refine parameters
UFP computed at the end of step 1 is a gross indicator of the problem size. This UFP
needs to be refined by taking into account various peculiarities of the project. This is
possible, since each parameter (input, output, etc.) has been implicitly assumed to be of
average complexity. However, this is rarely true. For example, some input values may
be extremely complex, some very simple, etc. In order to take this issue into account,
UFP is refined by taking into account the complexities of the parameters of UFP
computation (Eq. 3.1). The complexity of each parameter is graded into three broad
categories—simple, average, or complex.
The weights for the different parameters are determined based on the numerical values
shown in Table 3.1. Based on these weights of the parameters, the parameter values in
the UFP are refined. For example, rather than each input being computed as four FPs,
very simple inputs are computed as three FPs and very complex inputs as six FPs.
Step 3: Refine UFP based on complexity of the overall project
In the final step, several factors that can impact the overall project size are considered
to refine the UFP computed in step 2. Examples of such project parameters that can
influence the project sizes include high transaction rates, response time requirements,
scope for reuse, etc. Albrecht identified 14 parameters that can influence the
development effort.
The list of these parameters has been shown in Table 3.2. Each of these 14 parameters
is assigned a value from 0 (not present or no influence) to 6 (strong influence). The
resulting numbers are summed, yielding the total degree of influence (DI). A technical
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
complexity factor (TCF) for the project is computed and the TCF is multiplied with
UFP to yield FP. The TCF expresses the overall impact of the corresponding project
parameters on the development effort. TCF is computed as (0.65 + 0.01 × DI).
As DIcan vary from 0 to 84, TCF can vary from 0.65 to 1.49. Finally, FP is given as the
product of UFP and TCF. That is, FP = UFP × TCF.
3 4 6
Input (I)
4 5 7
Output (O)
3 4 6
Inquiry (E)
7 10 15
Number of files (F)
5 7 10
Number of interfaces
TABLE 3.1 Refinement of Function Point Entities
TABLE 3.2 Function Point Relative Complexity Adjustment Factors
Feature point metric shortcomings: A major shortcoming of the function point measure is
that it does not take into account the algorithmic complexity of a function. That is, the function
point metric implicitly assumes that the effort required to design and develop any two different
functionalities of the system is the same.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
But we know that this is highly unlikely to be true. The effort required to develop any two
functionalities may vary widely.
For example, in a library automation software, the create-member feature would be much
simpler compared to the loan-from-remote-library feature. FP only considers the number of
functions that the system supports, without distinguishing the difficulty levels of developing
the various functionalities. To overcome this problem, an extension to the function point metric
called feature point metric has been proposed.
Feature point metric incorporates algorithm complexity as an extra parameter. This parameter
ensures that the computed size using the feature point metric reflects the fact that higher the
complexity of a function, the greater the effort required to develop it— therefore, it should have
larger size compared to a simpler function.
Critical comments on the function point and feature point metrics
Proponents of function point and feature point metrics claim that these two metrics are
language-independent and can be easily computed from the SRS document during project
planning stage itself. On the other hand, opponents claim that these metrics are subjective and
require a sleight of hand.
An example of the subjective nature of the function point metric can be that the way one groups
input and output data items into logically related groups can be very subjective. For example,
consider that certain functionality requires the employee’s name and employee address to be
input. It is possible that one can consider both these items as a single unit of data, since after
all, these describe a single employee.
It is also possible for someone else to consider an employee’s address as a single unit of input
data and name as another. Such ambiguities leave sufficient scope for debate and keep open the
possibility for different project managers to arrive at different function point measures for
essentially the same problem.
PROBLEM 3.1 Determine the function point measure of the size of the following supermarket
software. A supermarket needs to develop the following software to encourage regular
customers. For this, the customer needs to supply his/her residence address, telephone number,
and the driving license number. Each customer who registers for this scheme is assigned a
unique customer number (CN) by the computer. Based on the generated CN, a clerk manually
prepares a customer identity card after getting the market manager’s signature on it. A customer
can present his customer identity card to the check out staff when he makes any purchase. In
this case, the value of his purchase is credited against his CN. At the end of each year, the
supermarket intends to award surprise gifts to 10 customers who make the highest total
purchase over the year. Also, it intends to award a 22 caret gold coin to every customer whose
purchase exceeded `10,000. The entries against the CN are reset on the last day of every year
after the prize winners’ lists are generated. Assume that various project characteristics
determining the complexity of software development to be average.
Solution:
Step 1: From an examination of the problem description, we find that there are two inputs,
three outputs, two files, and no interfaces. Two files would be required, one for storing the
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
customer details and another for storing the daily purchase records. Now, using equation
3.1, we get:
UFP = 2 × 4 + 3 × 5 + 1 × 4 + 10 × 2 + 0 × 10 = 47
Step 2: All the parameters are of moderate complexity, except the output parameter
of customer registration, in which the only output is the CN value. Consequently, the
complexity of the output parameter of the customer registration function can be categorized
as simple. By consulting Table 3.1, we find that the value for simple output is given to be
4. The UFP can be refined as follows:
UFP = 3 × 4 + 2 × 5 + 1 × 4 + 10 × 2 + 0 × 10 = 46
Therefore, the UFP will be 46.
Step 3: Since the complexity adjustment factors have average values, therefore the total
degrees of influence would be: DI = 14 × 4 = 56
TCF = 0.65 + 0.01 + 56 = 1.21
Therefore, the adjusted FP = 46 × 1.21 = 55.66
PROJECT ESTIMATION TECHNIQUES
Estimation of various project parameters is an important project planning activity. The different
parameters of a project that need to be estimated include—project size, effort required to
complete the project, project duration, and cost. Accurate estimation of these parameters is
important, since these not only help in quoting an appropriate project cost to the customer, but
also form the basis for resource planning and scheduling.
A large number of estimation techniques have been proposed by researchers. These can broadly
be classified into three main categories:
Empirical estimation techniques
Heuristic techniques
Analytical estimation techniques
In the following subsections, we provide an overview of the different categories of estimation
techniques.
Empirical Estimation Techniques
Empirical estimation techniques are essentially based on making an educated guess of
the project parameters. While using this technique, prior experience with development
of similar products is helpful. Although empirical estimation techniques are based on
common sense and subjective decisions, over the years, the different activities involved
in estimation have been formalized to a large extent. We shall discuss two such
formalizations of the basic empirical estimation techniques known as expert judgement
and the Delphi techniques in Sections
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Heuristic Techniques
Heuristic techniques assume that the relationships that exist among the different project
parameters can be satisfactorily modelled using suitable mathematical expressions.
Once the basic (independent) parameters are known, the other (dependent) parameters
can be easily determined by substituting the values of the independent parameters in
the corresponding mathematical expression. Different heuristic estimation models can
be divided into the following two broad categories—single variable and multivariable
models.
Single variable estimation models assume that various project characteristic can be
predicted based on a single previously estimated basic (independent) characteristic of
the software such as its size. A single variable estimation model assumes that the
relationship between a parameter to be estimated and the corresponding independent
parameter can be characterized by an expression of the following form:
Estimated Parameter = c1 × ed1
In the above expression, e represents a characteristic of the software that has already
been estimated (independent variable).
Estimated Parameter is the dependent parameter (to be estimated). The dependent
parameter to be estimated could be effort, project duration, staff size, etc., c1 and d1 are
constants. The values of the constants c1 and d1 are usually determined using data
collected from past projects (historical data). The COCOMO model discussed in
Section 3.7.1, is an example of a single variable cost estimation model.
A multivariable cost estimation model assumes that a parameter can be predicted based
on the values of more than one independent parameter. It takes the following form:
Estimated Resource = c1 × pd1 + c2 × pd2 + L
where, p1, p2, ... are the basic (independent) characteristics of the software already
estimated, and c1, c2, d1, d2, .... are constants. Multivariable estimation models are
expected to give more accurate estimates compared to the single variable models, since
a project parameter is typically influenced by several independent parameters. The
independent parameters influence the dependent parameter to different extents. This is
modelled by the different sets of constants c1, d1, c2, d2, .... Values of these constants
are usually determined from an analysis of historical data. The intermediate COCOMO
model discussed in Section 3.7.2 can be considered to be an example of a multivariable
estimation model
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
outperforms both empirical and heuristic techniques as far as estimating software maintenance
efforts is concerned.
EMPIRICAL ESTIMATION TECHNIQUES
We have already pointed out that empirical estimation techniques have, over the years,
been formalized to a certain extent. Yet, these are still essentially euphemisms for pure
guess work. These techniques are easy to use and give reasonably accurate estimates.
Two popular empirical estimation techniques are—Expert judgement and Delphi
estimation techniques. We discuss these two techniques in the following subsection.
Expert Judgement
Expert judgement is a widely used size estimation technique. In this technique, an
expert makes an educated guess about the problem size after analyzing the problem
thoroughly. Usually, the expert estimates the cost of the different components (i.e.
modules or subsystems) that would make up the system and then combines the
estimates for then individual modules to arrive at the overall estimate. However, this
technique suffers from several shortcomings. The outcome of the expert judgement
technique is subject to human errors and individual bias. Also, it is possible that an
expert may overlook some factors inadvertently. Further, an expert making an estimate
may not have relevant experience and knowledge of all aspects of a project. For
example, he may be conversant with the database and user interface parts, but may not
be very knowledgeable about the computer communication part. Due to these factors,
the size estimation arrived at by the judgement of a single expert may be far from being
accurate.
A more refined form of expert judgement is the estimation made by a group of experts.
Chances of errors arising out of issues such as individual oversight, lack of familiarity
with a particular aspect of a project, personal bias, and the desire to win contract through
overly optimistic estimates is minimized when the estimation is done by a group of
experts.
However, the estimate made by a group of experts may still exhibit bias. For example,
on certain issues the entire group of experts may be biased due to reasons such as those
arising out of political or social considerations. Another important shortcoming of the
expert judgement technique is that the decision made by a group may be dominated by
overly assertive members.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
estimators, and also includes any unusual rationale noted by any of the estimators. The
prepared summary information is distributed to the estimators. Based on this summary,
the estimators re-estimate. This process is iterated for several rounds. However, no
discussions among the estimators is allowed during the entire estimation process.
The purpose behind this restriction is that if any discussion is allowed among the
estimators, then many estimators may easily get influenced by the rationale of an
estimator who may be more experienced or senior. After the completion of several
iterations of estimations, the coordinator takes the responsibility of compiling the
results and preparing the final estimate. The Delphi estimation, though consumes more
time and effort, overcomes an important shortcoming of the expert judgement technique
in that the results cannot unjustly be influenced by overly assertive and senior members.
COCOMO—A HEURISTIC ESTIMATION TECHNIQUE
Constructive Cost estimation Model (COCOMO) was proposed by Boehm [1981].
COCOMO prescribes a three-stage process for project estimation. In the first stage, an
initial estimate is arrived at. Over the next two stages, the initial estimate is refined to
arrive at a more accurate estimate. COCOMO uses both single and multivariable
estimation models at different stages of estimation.
The three stages of COCOMO estimation technique are—basic COCOMO,
intermediate COCOMO, and complete COCOMO. We discuss these three stages of
estimation in the following subsection.
Basic COCOMO Model
Boehm postulated that any software development project can be classified into one of
the following three categories based on the development complexity—organic,
semidetached, and embedded. Based on the category of a software development project,
he gave different sets of formulas to estimate the effort and duration from the size
estimate.
Three basic classes of software development projects
In order to classify a project into the identified categories, Boehm requires us to
consider not only the characteristics of the product but also those of the development
team and development environment. Roughly speaking, the three product development
classes correspond to development of application, utility and system software.
Normally, data= processing programs2 are considered to be application programs.
Compilers, linkers, etc., are utility programs. Operating systems and real-time system
programs, etc. are system programs. System programs interact directly with the
hardware and programming complexities also arise out of the requirement for meeting
timing constraints and concurrent processing of tasks.
Brooks [1975] states that utility programs are roughly three times as difficult to write
as application programs and system programs are roughly three times as difficult as
utility programs. Thus, according to Brooks, the relative levels of product development
complexity for the three categories (application, utility and system programs) of
products are 1:3:9.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
From Figure 3.5 we can observe that for a project of any given size, the development
time is roughly the same for all the three categories of products. For example, a 60
KLOC program can be developed in approximately 18 months, regardless of whether
it is of organic, semi-detached, or embedded type. (Please verify this using the basic
COCOMO formulas discussed in this section). However, according to the COCOMO
formulas, embedded programs require much higher effort than either application or
utility programs. We can interpret it to mean that there is more scope for parallel
activities for system programs than those in utility or application programs.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Cost estimation
From the effort estimation, project cost can be obtained by multiplying the estimated
effort (in man-month) by the manpower cost per month. Implicit in this project cost
computation is the assumption that the entire project cost is incurred on account of the
manpower cost alone. However, in addition to manpower cost, a project would incur
several other types of costs which we shall refer to as the overhead costs. The overhead
costs would include the costs due to hardware and software required for the project and
the company overheads for administration, office space, electricity, etc. Depending on
the expected values of the overhead costs, the project manager has to suitably scale up
the cost arrived by using the COCOMO formula.
Implications of effort and duration estimate
The effort and duration values computed by COCOMO are the values for completing
the work in the shortest time without unduly increasing manpower cost.
Staff-size estimation
Given the estimations for the project development effort and the nominal development
time, can the required staffing level be determined by a simple division of the effort
estimation by the duration estimation? The answer is “No”. It will be a perfect recipe
for project delays and cost overshoot. We examine the staffing problem in more detail
in Section 3.9. From the discussions in Section 3.9, it would become clear that the
simple division approach to obtain the staff size would be highly improper.
Development environment: Development environment attributes capture the
development facilities available to the developers. An important parameter that is
considered is the sophistication of the automation (CASE) tools used for software
development.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
RISK MANAGEMENT
Every project is susceptible to a large number of risks. Without effective management
of the risks, even the most meticulously planned project may go haywire. We need to
distinguish between a risk which might occur from the risks that have already become
real and are currently being faced by a project.
If a risk becomes real, the anticipated problem becomes a reality and is no more a risk.
If a risk becomes real, it can adversely affect the project and hamper the successful and
timely completion of the project. Therefore, it is necessary for the project manager to
anticipate and identify different risks that a project is susceptible to, so that contingency
plans can be prepared beforehand to contain each risk. In this context, risk management
aims at reducing the chances of a risk becoming real as well as reducing the impact of
a risks that becomes real. Risk management consists of three essential activities—
Risk identification,
Risk assessment, and
Risk mitigation
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
more preferred by teams. However, when some risks cannot be anticipated, a reactive approach
is usually followed.
Risk Identification
Risk identification is somewhat similar to the project manager listing down his nightmares.
For example, project manager might be worried whether the vendors whom you have asked
to develop certain modules might not complete their work in time, whether they would turn in
poor quality work, whether some of your key personnel might leave the organization, etc.
Project risks: Project risks concern various forms of budgetary, schedule, personnel,
resource, and customer-related problems. An important project risk is schedule
slippage. Since, software is intangible, it is very difficult to monitor and control a
software project. It is very difficult to control something which cannot be seen. For
any manufacturing project, such as manufacturing of cars, the project manager can see
the product taking shape. He can for instance, see that the engine is fitted, after that
the doors are fitted, the car is getting painted, etc.
Technical risks: Technical risks concern potential design, implementation,
interfacing, testing, and maintenance problems. Technical risks also include
ambiguous specification, incomplete specification, changing specification, technical
uncertainty, and technical obsolescence. Most technical risks occur due the
development team’s insufficient knowledge about the product.
Business risks: This type of risks includes the risk of building an excellent product
that no one wants, losing budgetary commitments, etc.
Risk Assessment
The objective of risk assessment is to rank the risks in terms of their damage causing
potential. For risk assessment, first each risk should be rated in two ways:
The likelihood of a risk becoming real (r).
The consequence of the problems associated with that risk (s).
Based on these two factors, the priority of each risk can be computed as follows:
p=r×s
where, p is the priority with which the risk must be handled, r is the probability of the
risk becoming real, and s is the severity of damage caused due to the risk becoming
real. If all identified risks are prioritized, then the most likely and damaging risks can
be handled first and more comprehensive risk abatement procedures can be designed
for those risks.
Risk Mitigation
After all the identified risks of a project have been assessed, plans are made to contain the most
damaging and the most likely risks first. Different types of risks require different containment
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
procedures. In fact, most risks require considerable ingenuity on the part of the project manager
in tackling the risks.
There are three main strategies for risk containment:
Avoid the risk: Risks can be avoided in several ways. Risks often arise due to project
constraints and can be avoided by suitably modifying the constraints. The different
categories of constraints that usually give rise to risks are:
Process-related risk: These risks arise due to aggressive work schedule, budget, and
resource utilisation.
Product-related risks: These risks arise due to commitment to challenging product
features (e.g. response time of one second, etc.), quality, reliability, etc.
Technology-related risks: These risks arise due to commitment to use certain
technology (e.g., satellite communication).
A few examples of risk avoidance can be the following: Discussing with the customer
to change the requirements to reduce the scope of the work, giving incentives to the
developers to avoid the risk of manpower turnover, etc.
Transfer the risk: This strategy involves getting the risky components developed by a
third party, buying insurance cover, etc.
Risk reduction: This involves planning ways to contain the damage due to a risk. For
example, if there is risk that some key personnel might leave, new recruitment may be
planned. The most important risk reduction techniques for technical risks is to build a
prototype that tries out the technology that you are trying to use.
For example, if you are using a compiler for recognizing user commands, you would
have to construct a compiler for a small and very primitive command language first.
There can be several strategies to cope up with a risk. To choose the most appropriate
strategy for handling a risk, the project manager must consider the cost of handling the
risk and the corresponding reduction of risk. risk leverage = cost of reduction
Even though we identified three broad ways to handle any risk, effective risk handling
cannot be achieved by mechanically following a set procedure, but requires a lot of
ingenuity on the part of the project manager. As an example, let us consider the options
available to contain an important type of risk that occurs in many software projects—
that of schedule slippage.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
UNIT-II
CHAPTER-II
Requirements Analysis and Specification
The requirements analysis and specification phase start after the feasibility study
stage is complete and the project has been found to be financially viable and technically
feasible.
The requirements analysis and specification phase ends when the requirements specification
document has been developed and reviewed. The requirements specification document is
usually called as the software requirements specification (SRS) document. The goal of the
requirements analysis and specification phase can be stated in a nutshell as follows.
The goal of the requirements analysis and specification phase is to clearly understand the
customer requirements and to systematically organise the requirements into a document called
the Software Requirements Specification (SRS) document.
REQUIREMENTS GATHERING AND ANALYSIS
The complete set of requirements are almost never available in the form of a single document
from the customer. In fact, it would be unrealistic to expect the customers to produce a
comprehensive document containing a precise description of what they want. Further, the
complete requirements are rarely obtainable from any single customer representative.
Therefore, the requirements have to be systematically gathered by the analyst from several
sources in bits and pieces.
These gathered requirements need to be analyzed to remove several types of problems that
frequently occur in the requirements that have been gathered piecemeal from different
sources. We can conceptually divide the requirements gathering and analysis activity into two
separate tasks:
Requirements gathering
Requirements analysis
Requirements Gathering
Requirements gathering activity is also popularly known as requirements elicitation. The
primary objective of the requirement’s gathering task is to collect the requirements from the
stakeholders.
Requirements gathering may sound like a simple task. However, in practice it is very difficult
to gather all the necessary information from a large number of stakeholders and from
information scattered across several pieces of documents. Gathering requirements turns out to
be especially challenging if there is no working model of the software being developed.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Suppose a customer wants to automate some activity in his organisation that is currently being
carried out manually. In this case, a working model of the system (that is, a manual system)
exists. Availability of a working model is usually of great help in requirements gathering.
For example, if the project involves automating the existing accounting activities of an
organisation, then the task of the system analyst becomes a lot easier as he can immediately
obtain the input and output forms and the details of the operational procedures. In this context,
consider that it is required to develop a software to automate the book-keeping activities
involved in the operation of a certain office. In this case, the analyst would have to study the
input and output forms and then understand how the outputs are produced from the input data.
However, if a project involves developing something new for which no working model exists,
then the requirements gathering activity becomes all the more difficult. In the absence of a
working system, much more imagination and creativity is required on the part of the system
analyst.
Typically, even before visiting the customer site, requirements gathering activity is started by
studying the existing documents to collect all possible information about the system to be
developed. During visit to the customer site, the analysts normally interview the end-users
and customer representatives,1 carry out requirements gathering activities such as
questionnaire surveys, task analysis, scenario analysis, and form analysis.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
The maximum number of books that can be issued to the member is already reached,
and no more books can be issued to the member.
5. Form analysis: Form analysis is an important and effective requirement gathering
activity that is undertaken by the analyst, when the project involves automating an existing
manual system. During the operation of a manual system, normally several forms are
required to be filled up by the stakeholders, and in turn they receive several notifications
(usually manually filled forms). In form analysis, the exiting forms and the formats of the
notifications produced are analyzed to determine the data input to the system and the data
that are output from the system. For the different sets of data input to the system, how the
input data would be used by the system to produce the corresponding output data is
determined from the users.
Requirements Analysis
The main purpose of the requirements analysis activity is to analyze the gathered requirements
to remove all ambiguities, incompleteness, and inconsistencies from the gathered customer
requirements and to obtain a clear understanding of the software to be developed.
For carrying out requirements analysis effectively, the analyst first needs to develop a clear
grasp of the problem. The following basic questions pertaining to the project should be clearly
understood by the analyst before carrying out analysis:
What is the problem?
Why is it important to solve the problem?
What exactly are the data input to the system and what exactly are the data output by
the system?
What are the possible procedures that need to be followed to solve the problem?
What are the likely complexities that might arise while solving the problem?
If there are external software or hardware with which the developed software has\ to interface,
then what should be the data interchange formats with the external systems?
During requirements analysis, the analyst needs to identify\ and resolve three main types of
problems in the requirements:
Anomaly
Inconsistency
Incompleteness
Anomaly: It is an anomaly is an ambiguity in a requirement. When a requirement is anomalous,
several interpretations of that requirement are possible. Any anomaly in any of the requirements
can lead to the development of an incorrect system, since an anomalous requirement can be
interpreted in the several ways during development. The following are two examples of
anomalous requirements:
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Example:
While gathering the requirements for a process control application, the following
requirement was expressed by a certain stakeholder: When the temperature becomes
high, the heater should be switched off. Please note that words such as “high”, “low”,
“good”, “bad”, etc. are indications of ambiguous requirements as these lack
quantification and can be subjectively interpreted. If the threshold above which the
temperature can be considered to be high is not specified, then it may get interpreted
differently by different developers.
Inconsistency: Two requirements are said to be inconsistent, if one of the requirements
contradicts the other. The following are two examples of inconsistent requirements:
Example:
Consider the following partial requirements that were collected from two different
stakeholders in a process control application development project.
The furnace should be switched-off when the temperature of the furnace rises above
500C
When the temperature of the furnace rises above 500C, the water shower should be
switched- on and the furnace should remain on.
The requirements expressed by the two stakeholders are clearly inconsistent.
Incompleteness: An incomplete set of requirements is one in which some requirements
have been overlooked. The lack of these features would be felt by the customer much
later, possibly while using the software. Often, incompleteness is caused by the inability
of the customer to visualize the system that is to be developed and to anticipate all the
features that would be required. An experienced analyst can detect most of these
missing features and suggest them to the customer for his consideration and approval
for incorporation in the requirements.
Example:
In a chemical plant automation software, suppose one of the requirements is that if the
internal temperature of the reactor exceeds 200°C then an alarm bell must be sounded.
However, on an examination of all requirements, it was found that there is no provision
for resetting the alarm bell after the temperature has been brought down in any of the
requirements. This is clearly an incomplete requirement.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Contract document
Reference document
Definition for implementation
After the analyst has gathered all the required information regarding the software to be
developed, and has removed all incompleteness, inconsistencies, and anomalies from
the specification, he starts to systematically organize the requirements in the form of an
SRS document. The SRS document usually contains all the user requirements in a
structured though an informal form.
Among all the documents produced during a software development life cycle, SRS
document is probably the most important document and is the toughest to write. One
reason for this difficulty is that the SRS document is expected to cater to the needs of a
wide variety of audience. In the following subsection, we discuss the different
categories of users of an SRS document and their needs from it.
Users of SRS Document
Usually, a large number of different people need the SRS document for very different purposes.
Some of the important categories of users of the SRS document and their needs for use are as
follows:
Users, customers, and marketing personnel: These stakeholders need to refer to the
SRS document to ensure that the system as described in the document will meet their
needs. Remember that the customer may not be the user of the software, but may be
some one employed or designated by the user. For generic products, the marketing
personnel need to understand the requirements that they can explain to the customers.
Software developers: The software developers refer to the SRS document to make sure
that they are developing exactly what is required by the customer.
Test engineers: The test engineers use the SRS document to understand the
functionalities, and based on this write the test cases to validate its working. They need
that the required functionality should be clearly described, and the input and output data
should have been identified precisely.
User documentation writers: The user documentation writers need to read the SRS
document to ensure that they understand the features of the product well enough to be
able to write the users’ manuals.
Project managers: The project managers refer to the SRS document to ensure that they
can estimate the cost of the project easily by referring to the SRS document and that it
contains all the information required to plan the project.
Maintenance engineers: The SRS document helps the maintenance engineers to
understand the functionalities supported by the system. A clear knowledge of the
functionalities can help them to understand the design and code. Also, a proper
understanding of the functionalities supported enables them to determine the specific
modifications to the system’s functionalities would be needed for a specific purpose.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Verifiable: All requirements of the system as documented in the SRS document should
be verifiable. This means that it should be possible to design test cases based on the
description of the functionality as to whether or not requirements have been met in an
implementation. A requirement such as “the system should be user friendly” is not
verifiable. On the other hand, the requirement—“When the name of a book is entered,
the software should display whether the book is available for issue or it has been loaned
out” is verifiable. Any feature of the required system that is not verifiable should be
listed separately in the goals of the implementation section of the SRS document.
Attributes of Bad SRS Documents
SRS documents written by novices frequently suffer from a variety of problems the most
damaging problems are incompleteness, ambiguity, and contradictions.
There are many other types of problems that a specification document might suffer from. By
knowing these problems, one can try to avoid them while writing an SRS document. Some of
the important categories of problems that many SRS documents suffer from are as follows:
Over-specification: It occurs when the analyst tries to address the “how to” aspects in
the SRS document. For example, in the library automation problem, one should not
specify whether the library membership records need to be stored indexed on the
member’s first name or on the library member’s identification (ID) number. Over-
specification restricts the freedom of the designers in arriving at a good design solution.
Forward references: One should not refer to aspects that are discussed much later in
the SRS document. Forward referencing seriously reduces readability of the
specification.
Wishful thinking: This type of problems concern description of aspects which would
be difficult to implement.
Noise: The term noise refers to presence of material not directly relevant to the software
development process. For example, in the register customer function, suppose the
analyst writes that customer registration department is manned by clerks who report for
work between 8 am and 5 pm, 7 days a week. This information can be called noise as
it would hardly be of any use to the software developers and would unnecessarily clutter
the SRS document, diverting the attention from the crucial points.
Several other “sins” of SRS documents can be listed and used to guard against writing
a bad SRS document and is also used as a checklist to review an SRS document.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
Each function fi of the system can be considered as reading certain data ii, and then
transforming a set of input data (ii) to the corresponding set of output data (oi). The
functional requirements of the system should clearly describe each functionality that
the system would support along with the corresponding input and output data set.
Considering that the functional requirements are a crucial part of the SRS document,
we discuss functional requirements how the functional requirements can be identified
from a problem description. how the functional requirements can be documented
effectively.
Non-functional requirements
The IEEE 830 standard recommends that out of the various non-functional
requirements, the external interfaces, and the design and implementation constraints
should be documented in two different sections. The remaining non-functional
requirements should be documented later in a section and these should include the
performance and security requirements.
Design and implementation constraints: Design and implementation constraints are an
important category of non-functional requirements describe any items or issues that will
limit the options available to the developers.
Some of the example constraints can be—corporate or regulatory policies that needs to
be honored; hardware limitations; interfaces with other applications; specific
technologies, tools, and databases to be used; specific communications protocols to be
used; security considerations; design conventions or programming standards to be
followed, etc.
External interfaces required: Examples of external interfaces are—hardware, software
and communication interfaces, user interfaces, report formats, etc. To specify the user
interfaces, each interface between the software and the users must be described.
The description may include sample screen images, any GUI standards or style guides
that are to be followed, screen layout constraints, standard buttons and functions (e.g.,
help) that will appear on every screen, keyboard shortcuts, error message display
standards, and so on.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
name that would accurately describe both the input data. However, the input data for
the subfunctions can be more accurately described
How to Identify the Functional Requirements?
The high-level functional requirements often need to be identified either from an
informal problem description document or from a conceptual understanding of the
problem.
Remember that there can be many types of users of a system and their requirements
from the system may be very different. So, it is often useful to first identify the different
types of users who might use the system and then try to identify the different services
expected from the software by different types of users.
The decision regarding which functionality of the system can be taken to be a high-
level functional requirement and the one that can be considered as part of another
function (that is, a subfunction) leaves scope for some subjectivity. For example,
consider the issue-book function in a Library Automation System. Suppose, when a
user invokes the issue-book function, the system would require the user to enter the
details of each book to be issued. Should the entry of the book details be considered as
a high-level function, or as only a part of the issue-book function? Many times, the
choice is obvious. But sometimes it requires making non-trivial decisions.
How to Document the Functional Requirements
Once all the high-level functional requirements have been identified and the
requirements problems have been eliminated, these are documented. A function can be
documented by identifying the state at which the data is to be input to the system, its
input data domain, the output data domain, and the type of processing to be carried on
the input data to obtain the output data.
We now illustrate the specification of the functional requirements through two
examples. Let us first try to document the withdraw-cash function of an automated
teller machine (ATM) system in the following. The withdraw-cash is a high level
requirement. It has several sub-requirements corresponding to the different user
interactions.
These user interaction sequences may vary from one invocation from another
depending on some conditions. These different interaction sequences capture the
different scenarios. To accurately describe a functional requirement, we must document
all the different scenarios that may occur.
Example: Withdraw cash from ATM
R.1: Withdraw cash
Description: The withdraw-cash function first determines the type of account that the user has
and the account number from which the user wishes to withdraw cash. It checks the balance to
determine whether the requested amount is available in the account. If enough balance is
available, it outputs the required cash, otherwise it generates an error message.
R.1.1: Select withdraw amount option
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
However, if the interaction sequence is specified in too much detail, then it becomes an
unnecessary constraint on the developers and restricts their choice in solution. On the
other hand, if the interaction sequence is not sufficiently detailed, it may lead to
ambiguities and result in improper implementation.
Traceability
Traceability means that it would be possible to identify (trace) the specific design
component which implements a given requirement, the code part that corresponds to a
given design component, and test cases that test a given requirement. Thus, any given
code component can be traced to the corresponding design component, and a design
component can be traced to a specific requirement that it implements and vice versa.
Traceability analysis is an important concept and is frequently used during software
development. For example, by doing a traceability analysis, we can tell whether all the
requirements have been satisfactorily addressed in all phases. It can also be used to
assess the impact of a requirements change. That is, traceability makes it easy to identify
which parts of the design and code would be affected, when certain requirement change
occurs. It can also be used to study the impact of a bug that is known to exist in a code
part on various requirements, etc.
To achieve traceability, it is necessary that each functional requirement should be
numbered uniquely and consistently. Proper numbering of the requirements makes it
possible for different documents to uniquely refer to specific requirements.
An example scheme of numbering the functional requirements is shown in Examples
4.7 and 4.8, where the functional requirements have been numbered R.1, R.2, etc. and
the sub requirements for the requirement R.1 have been numbered R.1.1, R.1.2, etc.
Organization of the SRS Document
The organization of an SRS document as prescribed by the IEEE 830 standard [IEEE
830]. Please note that IEEE 830 standard has been intended to serve only as a guideline
for organizing a requirements specification document into sections and allows the
flexibility of tailoring it, as may be required for specific projects.
Depending on the type of project being handled, some sections can be omitted,
introduced, or interchanged as may be considered prudent by the analyst. However,
organization of the SRS document to a large extent depends on the preferences of the
system analyst himself, and he is often guided in this by the policies and standards being
followed by the development company.
Also, the organization of the document and the issues discussed in it to a large extent
depend on the type of the product being developed. However, irrespective of the
company’s principles and product type, the three basic issues that any SRS document
should discuss are—functional requirements, non-functional requirements, and
guidelines for system implementation.
The introduction section should describe the context in which the system is being
developed, and provide an overall description of the system, and the environmental
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
characteristics. The introduction section may include the hardware that the system will
run on, the devices that the system will interact with and the user skill-levels.
Description of the user skill-level is important, since the command language design and
the presentation styles of the various documents depend to a large extent on the types
of the users it is targeted for. For example, if the skill-levels of the users is “novice”, it
would mean that the user interface has to be very simple and rugged, whereas if the
user-level is “advanced”, several short cut techniques and advanced features may be
provided in the user interface.
It is desirable to describe the formats for the input commands, input data, output reports,
and if necessary, the modes of interaction. We have already discussed how the contents
of the Sections on the functional requirements, the non-functional requirements, and
the goals of implementation should be written. In the following subsections, we outline
the important sections that an SRS document should contain as suggested by the IEEE
830 standard, for each section of the document, we also briefly discuss the aspects that
should be discussed in it.
Introduction
Purpose: This section should describe where the software would be deployed and how
the software would be used.
Project scope: This section should briefly describe the overall context within which
the software is being developed. For example, the parts of a problem that are being
automated and the parts that would need to be automated during future evolution of the
software.
Environmental characteristics: This section should briefly outline the environment
(hardware and other software) with which the software will interact.
Overall description of organization of SRS document
Product perspective: This section needs to briefly state as to whether the software is
intended to be a replacement for a certain existing system, or it is a new software. If the
software being developed would be used as a component of a larger system, a simple
schematic diagram can be given to show the major components of the overall system,
subsystem interconnections, and external interfaces can be helpful.
Product features: This section should summarize the major ways in which the software
would be used. Details should be provided in Section 3 of the document. So, only a
brief summary should be presented here.
User classes: Various user classes that are expected to use this software are identified
and described here. The different classes of users are identified by the types of
functionalities that they are expected to invoke, or their levels of expertise in using
computers.
Operating environment: This section should discuss in some detail the hardware
platform on which the software would run, the operating system, and other application
software with which the developed software would interact.
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA
DEPARTMENT OF CSE SOFTWARE ENGINEERING
PREPARED BY A. DIVYA