<<PREV.
4. Project Management Process
Proper management is an integral part of software development. A large
software development project involves many people working for a long period
of time. We have seen that a development process typically partitions the
problem of developing software into a set of phases. To meet the cost, quality,
and schedule objectives, resources have to be properly allocated to each
activity for the project, and progress of different activities has to be
monitored and corrective actions taken, if needed.
All these activities are part of the project management process.
The project management process component of the software process specifies
all activities that need to be done by the project management to ensure
that cost and quality objectives are met. Its basic task is to ensure that,
once a development process is chosen, it is implemented optimally. The focus
of the management process is on issues like planning a project, estimating
resource and schedule, and monitoring and controlling the project. In other
words, the basic task is to plan the detailed implementation of the process
for the particular project and then ensure that the plan is followed. For
a large project, a proper management process is essential for success
4.1 Phases of Management Process
The activities in the management process for a project can be grouped broadly
into three phases: planning, monitoring and control, and termination analysis.
Project management begins with planning, which is perhaps the single largest
responsibility of the project management. The goal of this phase is to develop
a plan for software development following which the objectives of the project
can be met successfully and efficiently. Proper planning is recognized as
a critical ingredient for a successful project. The project plan provides
the fundamental basis for project management. A software plan is usually
produced before the development activity begins and is updated as development
proceeds and data about progress of the project becomes available. During
planning, the major activities are cost estimation, schedule and milestone
determination, project staffing, quality control plans, and controlling
and monitoring plans.
In cost and schedule estimation, the total cost and time needed for successfully
completing the project are estimated. In addition, cost and schedule for
the different activities of the development process to be used are also
estimated, as the development process only specifies the activities, not
the cost and time requirement for them. In addition to estimating the effort
and schedule for various activities and components in the project, the project
plan plans for all the software quality assurance activities that need to
be performed in order to ensure that quality objectives are met. A plan
also provides methods for handling change and methods for monitoring a project.
Project planning is undoubtedly the single most important management activity,
and output of this forms the basis of monitoring and control.
We will devote one full section later in the guide to project planning.
Project monitoring and control phase of the management process is the longest
in terms of duration; it encompasses most of the development process. It
includes all activities the project management has to perform while the
development is going on to ensure that project objectives are met and the
development proceeds according to the developed plan (and update the plan,
if needed). As cost, schedule, and quality are the major driving forces,
most of the activity of this phase revolves around monitoring factors that
affect these. Monitoring potential risks for the project, which might prevent
the project from meeting its objectives, is another important activity during
this phase. And if the information obtained by monitoring suggests that
objectives may not be met, necessary actions are taken in this phase by
exerting suitable control on the development activities.
Monitoring a development process requires proper information about the
project.
Such information is typically obtained by the management process from the
development process. As shown earlier in FIG. 5, the implementation of a
development process model should be such that each step in the development
process produces information that the management process needs for that
step. That is, the development process provides the information the management
process needs.
However, interpretation of the information is part of monitoring and control.
For example, suppose that after the design is done, the development process
pro vides the information that the design took three times the effort that
was projected in the plan. The experience about the general distribution
of effort (as shown in Table 1) suggests that the total cost of the project
is likely to be much larger than was estimated earlier. When this situation
is observed during project monitoring as part of project control, corrective
action has to be exerted on the project, as without it the chances of meeting
the cost, schedule, and quality objectives are low. The corrective actions
could be to reduce the scope of the project, renegotiate the cost and schedule,
add more manpower, use better tools, etc.
Whereas monitoring and control lasts the entire duration of the project,
the last phase of the management process--termination analysis--is performed
when the development process is over. The basic reason for performing
termination analysis is to provide information about the development
process. Remember that a project is an instantiation of the process. To
understand the properties of the process, data from many projects that used
the process will be needed. Using the predictability property of the process,
this data about the process can be used to make predictions and estimations
about future projects. The data about the project is also needed to analyze
the process. For these reasons, the termination analysis phase is needed.
We will discuss the use of project data for predicting and process improvement
later in the section.
The temporal relationship between the management process and the development
process is shown in FIG. 10. This is an idealized relationship showing that
planning is done before development begins, and termination analysis is
done after development is over. As the figure shows, during the development,
from the various phases of the development process, quantitative information
flows to the monitoring and control phase of the management process, which
uses the information to exert control on the development process.
FIG. 10. Temporal relationship between development and management process.
4.2 Metrics, Measurement, and Models
For effective project monitoring, the information coming from the development
process to the management process should be objective and quantitative data
about the project. If the information obtained is not quantitative, then
subjective judgments will have to be used, which an engineering discipline
needs to minimize.
The need for quantitative data from the process requires that software
metrics be used.
Software metrics are quantifiable measures that could be used to measure
different characteristics of a software system or the software development
process. All engineering disciplines have metrics (such as metrics for weight,
density, wavelength, and temperature) to quantify various characteristics
of their products. Software metrics is an emerging area. Because the software
has no physical attributes, conventional metrics are not much help in designing
metrics for software. A number of metrics have been proposed to quantify
things like the size, complexity, and reliability of a software product.
Intricately tied to metrics is measurement. Metrics provide the scale for
quantifying qualities; actual measurement must be performed on a given software
system in order to use metrics for quantifying characteristics of the given
software. An analogy in the physical world is that centimeters is the metric
of length, but to determine the length of a given rod, one must measure
it using some means like a measuring tape. The measurement method must be
objective and should produce the same result independent of the measurer.
Values for some metrics can be directly measured; others might have to
be deduced by other measurement (an analogy could be that the distance between
two points can be deduced by measuring the speed of a vehicle and measuring
the time it takes to traverse the given distance). If a metric is not measured
directly, we call the metric indirect. Some factors, like many software
quality parameters, cannot be measured directly either because there are
no means to measure the metric directly, or because the final product whose
metric is of interest still does not exist.
For example, it is desirable to predict the quality of software during
the early phases of development, such as after design. Because the software
does not yet exist, the metric will have to be predicted from the factors
that can be measured after design. Similarly, the reliability of a software
cannot, in general, be measured directly, even though precise definition
and metrics for reliability exist. It has to be estimated from other measurements
that are possible.
For estimating, models are needed. A model is a relationship of the predicted
variable (the property of interest) that other variables that can be measured.
That is, if there is some metric of interest which cannot be measured directly,
then we build models to estimate the metric value based on the value of
some other metrics that we can measure. The model may be determined based
on empirical data or it may be analytic [CDS86]. As these models capture
the relationships whose exact nature depends on the process, building a
model is an issue that concerns process management; we will discuss it later
in this section.
It should be clear that metrics, measurement, and models go together. Metrics
provide a quantification of some property, measurements provide the actual
value for the metrics, and models are needed to get the value for the metrics
that cannot be measured directly (i.e., provide the measurement indirectly
by using a model). Let us now try to understand how metrics are used in
the project management process.
All metrics must have a purpose; otherwise why should we collect them?
Generally, the purpose in some way will be related to achieving the basic
objective of low cost and high quality. Any metric that does not help directly
or indirectly in improving the product quality or reducing its cost is of
academic interest only. For example, let's take a metric that gives for
code (or some other document) the total frequency of occurrence of different
alphabets. This is a bona-fide metric that quantifies something precisely,
and it can be measured easily. It may be of some use to linguists or people
involved in encryption, but it is of no practical use as far as software
engineering is concerned.
Let us consider a more commonly used metric. Many metrics have been proposed
for measuring the "complexity" of code, or design-it seems that
knowing the complexity of the code is interesting. However, "interestingness" is
not of much use to us-we are interested in cost, schedule, and quality.
Hence, unless we can relate complexity to these parameters, a complexity
metric is of little use (regardless of the claim of how "accurately" it
measures complexity). Fortunately, in this case, complexity is related to
some quality parameters, as a complex program is generally harder to modify
(hence has low modifiability) and is difficult to code and debug (and thus
requires more effort). However, this is not the complete picture. If we
are interested in measuring complexity, say, for the purpose of improving
the maintainability or the error-detection process, we must first establish
a clear relationship between the chosen metric and the property of interest,
because most of the quality properties cannot be directly measured and hence
have to be estimated from other measurements. Unless this relationship is
established, any metric is as good as any other (in fact, the frequency
metric mentioned earlier can also be claimed to be a complexity metric).
Hence, it is very important that relationships of a metric are established
with so me quality or cost parameter. For example, in the case of complexity,
if we choose the cyclomatic complexity (described later in the guide), some
correlation of the metric values and maintainability or number of errors
must first be established. If it is shown that there is a strong correlation
between the cyclomatic complexity of a module and the number of errors made
in that module, then the metric can be used to estimate the "error
proneness" of a module: a high-complexity module can be "highlighted" as
error prone, and then measures can be taken to improve the quality of that
module. In other words, once the relationship with a parameter of interest
is established the metric value for a project can be used to improve the
parameter with which the correlation is established.
Establishing a relationship with the property of interest with some metrics
that we can measure is essentially building models. The exact nature of
the model depends on the process and is discussed later in the section.
Once the models are known for the process being used, the value of some
measurable metrics can be used to estimate other values of interest that
have a direct bearing on cost and quality.
These can then be used by project management-at the very least they provide
objective means for project monitoring. In fact, all quantitative data flowing
from the development process to the management process is essentially some
metric values. Therefore, one can say that metrics (and measurement and
models for estimation) are essential for objective and data-based project
management. Without metrics, project management activities will have to
depend on subjective evaluation and information, which as we have said goes
against the fundamental goal of engineering.
It is important to understand this role of software metrics. Many metrics
have been proposed in literature, and most of them have been proposed without
any studies about their correlation with anything. However, now relationships
of many metrics have been established with some parameters that affect cost
or quality of the project. In this guide, for each major development activity,
we will define some metrics that can be used for that activity, but we will
focus primarily on the metrics for which some relationships have been established.
It should be pointed out that a relationship between a metric and some parameter
may be "local," i.e ., it holds for some type of processes and
some environments (which influence the actual process implementation) and
not for other types of processes. That is, the exact nature of the relationship
may not be "global" and is more likely to depend on local conditions.
5. Software Configuration Management Process
Throughout development, software consists of a collection of items (such
as programs. data. and documents) that can easily be changed. During software
development, the design, code, and even requirements are often changed,
and the changes occur at any time during the development. This easily changeable
nature of software and the fact that changes often take place require that
changes be done in a controlled manner. Software configuration management
is the discipline for systematically controlling the changes that take place
during development. The IEEE defines SCM as "SCM is the process of
identifying and defining the items in the system, controlling the change
of these items throughout their life cycle, recording and reporting the
status of items and change requests, and verifying the completeness and
correctness of items".
Software configuration management is a process independent of the development
process largely because most development models cannot accommodate changes
at any time during development. Development processes handle "normal" changes,
such as changes in code while the programmer is developing it, changes in
requirements during the requirements phase, etc. However, most cannot properly
handle changes like requirements changes while coding is being done, code
changes during system acceptance testing, etc. As such changes are a fact
of life (requirements do change after the requirements phase is over and
the requirements have been "finalized," and bugs are found in
a module even after it has been coded and "handed over"), they
are handled by the software configuration management activities. The changes
themselves are still performed by the development team, but approving the
change, evaluating the impact of the change, decide what needs to be done
to accommodate a change request, etc. are issues that are handled by SCM.
In a way, the development process is brought under the configuration control
process, so that changes are allowed in a controlled manner, as shown in
FIG. 11 for a waterfall type development process model. Note that SCM directly
controls only the products of a process (most products of phases are called
baselines, as discussed later) and only indirectly influences the activities
producing the product.
The basic reason for having SCM, as with any other activities for a project,
is that it has beneficial effects on cost, schedule, and quality of the
product being developed.
As we saw earlier, cost, schedule, and quality are the fundamental concerns
that drive a software project. Changes, and rework required for the changes,
can have an enormous adverse effect on the cost and quality of the product
being developed.
We saw earlier that changes and rework can consume up to 50% of the development
effort. If left uncontrolled, this can go much higher.) The fundamental
reason for having the SCM process is to control the changes so that they
have minimal effect on cost, schedule, and quality.
Though configuration management is more general than change management,
man aging changes is its primary task, and it is this aspect of it that
we will focus on here. Much of the material here is based on. We will only
briefly discuss the issues of system building, version management, etc.,
which sometimes also come under SCM; the user is referred to for discussion
of these topics.
With this, SCM can be considered as having three major components:
• Software configuration identification
• Change control
• Status accounting and auditing
These three components of SCM are directly derived from the IEEE definition
of SCM. In the rest of this section, we will discuss these three components.
FIG. 11. Configuration management and development process.
5.1 Configuration Identification
The first requirement for any change management is to have a clearly agreed-on
basis for change. That is, when a change is done, it should be clear to
what the change has been applied. This requires baselines to be established.
A baseline, once established, forms the basis of change [BHS80]. A baseline
change is the changing of the established baseline, which is controlled
by SCM. A baseline also forms a reference point in the development of a
system and is generally formally defined after the major phases in development.
At the time it is established, a software baseline represents the software
in the most recent state. After baseline changes (made through SCM), the
state of the software is defined by the most recent baseline and the changes
that were made. Some of the common baselines are functional or requirements
baseline, design baseline, and product or system baseline. Functional or
requirements baseline is generally the requirements document that specifies
the functional requirements for the software.
Design baseline consists of the different components in the software and
their designs. Product or system baseline represents the developed system.
It should be clear that a baseline is established only after the product
is relatively stable. For example, there is no point establishing the first
rough draft of the SRS (which has not yet been reviewed) as the baseline,
as it is still a "working" document. Only when the requirements
are "frozen," is the baseline established. We will discuss this
issue more later. Though other project-specific baselines can be established
(for example, documents like plans and test case specifications can be base-lined),
we will assume that only these baselines exist.
Though the goal of SCM is to control the establishment and changes to these
baselines, treating each baseline as a single unit for the purposes of change
is undesirable, as the change may be limited to a very small portion of
the baseline.
For example, suppose only one module in a large system is changed. If we
do not consider the product baseline for the system as consisting of many
modules (or module hierarchies), then this change will be viewed as changing
the product baseline, and a finer, module-level control cannot be established
on this change.
For this reason, a baseline can consist of many software configuration
items (SCIs), or items. An SCI is a document or an artifact that is explicitly
placed under configuration control and that can be regarded as a basic unit
for modification. A baseline essentially is an arrangement of a set of SCIs
[BHS80]. That is, a baseline is a set of SCIs and the relationship between
them. For example, a requirements baseline may consist of many requirement
SCIs (i.e., each requirement is an SCI) and how these SCIs are related in
the requirements baseline (e.g. in which order they appear). With a baseline
consisting of many SCIs, a new issue arises for SCM: how to "build" a
baseline from the SCIs. The basic problem of system building is how to get
a consistent system from the SCIs, particularly when the SCIs might be getting
changed and multiple versions of an SCI may exist (see the discussion later).
In other words, the system building procedure has to be such that it rebuilds
the system if an SCI changes to make sure that the changes are reflected
in the system and selects the proper version of SCIs. The first part of
this problem is sometimes handled by tools like the Makefile. Makefile requires
a definition of the system in terms of its components, dependencies between
components, and how the system is to be constructed from the components.
When a system build is done using the Makefile, it rebuilds the system if
any of the components it depends on has changed since the last time the
system was built. More advanced tools are needed to solve the issue of incorporating
versions in a flexible manner. We will not discuss this aspect of SCM further.
Because the baseline consists of the SCIs and SCI is the basic unit for
change control, the SCM process starts with identification of configuration
items. There are no hard and fast rules for SCI selection, except that SCI
should be a part of some baseline, and once identified, it is given an identifiable
name and becomes the unit of change control. Frequently, the requirements
or functional baseline has just one SCI-the requirements document. However,
if desired, different sections, sections, or even paragraphs can be treated
as SCIs (provided they are labeled properly for referencing). Similarly,
the design baseline frequently consists of a single SCI-the design document.
Again, if needed, different portions of the design can be designated SCIs.
At the code level, that is, for the product baseline, generally multiple
SCIs exist. Other approaches are also possible. Multiple SCIs are used at
the code level, because usually the change volume is the largest at the
code level (almost any change requires some changes in the code). Furthermore,
frequently a large number of developers are involved during the co ding
activity, with different developers responsible for different parts. By
having a finer granularity for SCI, assigning responsibility for change
becomes easier, making it easier to control and track changes. For defining
SCIs, one practice is to have each separately compilable module as an SCI,
with the name of the module being the name of the SCI. An other approach
is to have each file (consisting of some modules or definitions) treated
as an SCI, with the name of the file being the name of the SCI. It should
be dear that the SCIs being managed by SCM are not independent of one another
and there are dependencies between various SCIs. An SCI X is said to depend
on another SCI Y, if a change to Y might require a change to be made to
X for X to remain correct or for the baselines to remain consistent. A change
request, though, might require changes be made to some SCIs; the dependency
of other SCIs on the ones being changed might require that other SCIs also
need to be changed. Clearly, the dependency between the SCIs needs to be
properly understood when changes are being made. However, though it is possible
to specify the dependencies, they are frequently not explicitly documented
but are derived from the nature of the SCIs. For example, the SCI representing
the design document depends on the SCI representing the requirements document.
Frequently, in design documents, each design item specifies which requirements
it implements. If a design baseline is considered as composed of many SCIs,
this information can be used to understand the dependencies between different
items in requirements and in design. In code, an SCI representing a module
might depend on another module SCI, depending on the relationship between
them. This dependency can generally be obtained from the design specifications.
While doing change control, these dependencies are used to decide what needs
to be changed for a change request.
--------------
FIG. 12. SCM life cycle of an item.
---------------
5.2 Change Control
Once the SCIs are identified and their dependencies understood, the change
control procedures of SCM can be applied. Most of the decisions regarding
the change are generally taken by the configuration control board (CCB)
, which is a group of people responsible for configuration management, headed
by the configuration manager (CM). For smaller projects, the CCB might consist
of just one (full-time or part-time) person (the CM). Typically, for a project,
the constitution of the CCB and the procedures it will follow are specified
in the software configuration management plans. We will generally use CM
to refer to the CCB. Let us come back to the issue of what exact1y is under
the control of SCM. Typically, while an SCI is under development and is
not visible to other SCIs, it is considered being in the working state.
An SCI in the working state is not under SCM and can be changed freely.
Once the developer is satisfied that the SCI is stable enough for it to
be used by others, the SCI is given to the CM for review, and the item enters
the state "under review." Once an item is in this state, it is
considered as "frozen," and any changes made to a private copy
that the developer may have made are not recognized. The CM reviews the
SCI (or gets it reviewed), and if it is approved, enters it into a library,
after which the item is formally under SCM. The basic purpose of this review
is to make sure that the item is of satisfactory quality and is needed by
others, though the exact nature of review will depend on the nature of the
SCI and the actual practice of SCM. For example, the review might entail
checking if the item meets its specifications or if it has been properly
unit tested. If the item is not approved, the developer may be given the
item back and the SCI enters the working state again. This "life cycle" of
an item from the SCM perspective, which is an enhancement from the one described
is shown in FIG. 12.
Once an SCI is in the library, it cannot be modified, even by the author/developer,
without the permission of the CM. An SCI under SCM can be changed only if
the change has been approved by the CM. In such a case, the SCI is checked
out of the library, the change made to the SCI, and then the modified SCI
is given back to the CM, who reviews it again to ensure that the change
is properly done and then checks the item back in the library. This aspect
of SCM is sometimes called library management and can be done with the aid
of tools. Frequently, the changed SCI does not replace the old copy; instead
a new version of the SCI is created because the old version might be used
in some working system (frequently the older version of the system to which
the SCI belongs), and if the new version is not fully compatible with the
old version, we would not like to disturb the working of the systems that
use the old version. In other words, after implementing an approved change
to an SCI, both the old and new versions of the SCI may exist in the library.
The old version may be used in some older versions of the system, and the
new one may be used in some later versions of the system. Clearly, with
multiple versions of SCIs and multiple versions of systems using different
versions of SCIs, version management becomes extremely important. Even if
only one version of each SCI is maintained, it is desirable to know the
change history and the version number of the SCI. This is frequently done
by keeping a change log with the SCI and appropriately numbering the versions.
We do not discuss the version management aspect of SCM further in this guide;
the reader is referred to for further information.
A change is initiated by a change request (CR). The reason for change can
be anything. However, the most common reasons are requirement changes, changes
due to bugs, platform changes, and enhancement changes. The CR for a change
generally consists of three parts. The first part describes the change,
reason for change, the SCIs that are affected, the priority of the change,
etc. The second part, filled by the CM, describes the decision taken by
the CCB on this CR (approved, not approved), the actions the CM feels need
to be done to implement this change (no action, change of documentation,
change of software, etc.), and any other comments the CM may have. The third
part is filled by the implementor who later implements the change. The implementor
may also maintain a change log to facilitate the undoing of the change,
if needed. The CR is assigned a unique number by the CCB, which is used
to refer to it. A CR will contain the following information:
CRID
About the change request
Items to be changed
Description of change
Reasons for change
Priority of change
Originator
CCB comments
CR approved/rejected
Actions needed
Comments
Implementation information
Status of change implementation
Comments
The CM evaluates the CR primarily by considering the effect of change on
cost, schedule, and quality of the project and the benefits likely to come
due to this change. The cost-benefit analysis may require interaction with
the change originator and may require some negotiations. Once the CR is
accepted and the actions that need to be taken to maintain consistency of
the software are identified by the CM, the project manager will generally
take over and plan and schedule the change implementation. The cost and
schedule for implementing the CR is also sometimes recorded in the CR itself.
The CR is then generally implemented by the person responsible for the SCI,
generally the programmer if the SCI is a code module. Any comments regarding
the change implementation are also recorded in the CR. Hence, a CR form
not only contains the change request, but a summary of all the activities
related to the change. By looking at the CR form, the status of a change
request can be determined.
One of the most common reasons for a CR is the discovery of some bug or
problem in the software. Frequently, the change requests originating due
to faults are made on a different form called a fault report (FR). FRs are
generally treated as high priority CRs, especially if the fault being reported
is serious. An FR is also assigned a unique ID by the CM. Besides requesting
the change, FRs are used to track the status of known bugs in the system.
An FR form will generally contain:
FRID
Fault information
Description of the fault
Severity of the fault
Item suspected of being faulty
Effect of the fault
Circumstances and environment data that caused the fault to manifest itself
Possible fixes
Originator
CCB comments
Approved/rejected
Priority
Comments
Fault fixing information
Items changed
Comments
Some changes might effect the baselines, while others might not have any
effect on the baselines. If a CR affects the baseline, then the baseline
has to be updated.
This is generally done by the CM, who controls the baselines. Frequently,
changes to baselines are appended to the baselines, particularly if the
baseline is a paper document like the requirements document. If too many
baseline changes are made, then the baseline may be revised to create an
updated baseline incorporating all the changes.
5.3 Status Accounting and Auditing
Incorporating changes, after they have been approved, takes time. So the
changes to items occur over a period of time. Some mechanisms are needed
to record the current status of a CR/FR, which can be used by a manager
to determine the status of all the change requests. Though the role of status
accounting is more general, we will limit our discussion to status of CRs/FRs.
The aim of status accounting is to answer questions like what is the status
of a CR (approved or not), what is the status of an approved CR, what is
the frequency of CRs, what is the average time and effort for fixing a CR,
and what is the number of CRs per SCI. For status accounting, the main source
of information is the CRs and FRs them selves. Generally, a field in the
CR/FR is added that specifies its current status.
The status could be active (i.e., change is being performed), completed,
or not scheduled. Information about dates and efforts can also be added
to the CR. The information from the CRs/FRs can be used to prepare a summary
(e.g., all the CRs that are still pending, all the FRs that are still "not
closed"), which can be used by the project manager and the CCB to track
all the changes.
Auditing has a different role. In general, an audit for a process is performed
by auditors (who are different from the people implementing the process).
The main objective of an audit is to determine if the specified process
is being followed and whether the specified process satisfies the goals
of the process. The same is done for SCM auditing. Records of past changes
are evaluated by the auditor to determine if the SCM procedures are being
followed, and the procedures are evaluated to ensure that the SCM goals
are met. One impact of auditing is that while performing SCM, enough information
has to be recorded such that an SCM audit can be performed. Generally, a
periodic auditing is performed. The period of the audit may be small in
the start but may increase as the processes become well established and
institutionalized.
PREV. | NEXT
top of page | Article
Index | Home |