This chapter is from the book

This chapter is from the book

Software engineers usually find coding to be the most satisfying aspect of
their job. This is easy to understand because programming is a challenging,
creative activity requiring extensive technical skills. It can mean getting to
"play" with state-of-the-art tools, and it provides almost instant
gratification in the form of immediate feedback. Programming is the development
task that most readily comes to mind when the profession of software engineering
is mentioned.

That said, seasoned engineers and project managers realize that programmers
are part of a larger team. All of the integral tasks, such as quality assurance
and verification and validation, are behind-the-scenes activities necessary to
turn standalone software into a useful and usable commodity. Software
configuration management (SCM) falls into this categoryit can't
achieve star status, like the latest "killer app," but it is essential
to project success. The smart software project manager highly values the
individuals and tools that provide this service.

This chapter will answer the following questions about software configuration
management.

What Is Software Configuration Management?

Software configuration management (SCM) is the organization of the components
of a software system so that they fit together in a working order, never out of
synch with each other. Those who have studied the best way to manage the
configuration of software parts have more elegant responses.

Roger Pressman says that SCM is a "set of activities designed to control
change by identifying the work products that are likely to change, establishing
relationships among them, defining mechanisms for managing different versions of
these work products, controlling the changes imposed, and auditing and reporting
on the changes made."1

We think that Pressman's description is a better description because we
often view SCM as meaning software change management.

Wayne Babich describes SCM as "the art of identifying, organizing, and
controlling modifications to the software being built by a programming team. It
maximizes productivity by minimizing mistakes."2

The Software Engineering Institute says that it is necessary to establish and
maintain the integrity of the products of the software project throughout the
software life cycle. Activities necessary to accomplish this include identifying
configuration items/units, systematically controlling changes, and maintaining
the integrity and the traceability of the configuration throughout the software
life cycle.

Military standards view configuration as the functional and/or
physical characteristics of hardware/software as set forth in technical
documentation and archives in a product. In identifying the items that need to
be configured, we must remember that all project artifacts are
candidatesdocuments, graphical models, prototypes, code, and any internal
or external deliverable that can undergo change. In SW PM terminology, a
configuration item might be a proposal/estimate or bid, project plan, risk
management plan, quality assurance plan, CM plan itself, test plan, system
requirements specification, system design document, review metric, code, test
result, tool (editors, compilers, CASE), and so on. There are basic objects and
aggregate objects to be configured. The number of relationships among them
reflects the complexity of the configuration task.

Why Is SCM Important?

Software project managers pay attention to the planning and execution of
configuration management, an integral task, because it facilitates the ability
to communicate status of documents and code as well as changes that have been
made to them. High-quality released software has been tested and used, making it
a reusable asset and saving development costs. Reused components aren't
free, thoughthey require integration into new products, a difficult task
without knowing exactly what they are and where they are.

CM enhances the ability to provide maintenance support necessary once the
software is deployed. If software didn't change, maintenance wouldn't
exist. Of course, changes do occur. The National Institute of Standards and
Technology (NIST) says that software will be changed to adapt, perfect, or
correct it. Pressman points out that new business, new customer needs,
reorganizations, and budgetary or scheduling constraints may lead to software
revision.

CM works for the project and the organization in other ways as well. It helps
to eliminate confusion, chaos, double maintenance, the shared data problem, and
the simultaneous update problem, to name but a few issues to be discussed in
this chapter.

Who Is Involved in SCM?

Virtually everyone on a software project is affected by SCM. From the framers
of the project plan to the final tester, we rely on it to tell us how to find
the object with the latest changes. During development, when iterations are
informal and frequent, little needs to be known about a change except what it
is, who did it, and where it is. In deployment and baselining, changes must be
prioritized, and the impact of a change upon all customers must be considered. A
change control board (CCB) is the governing body for modifications after
implementation.

How Can Software Configuration Be Implemented in Your Organization?

We used to say, "Make a plan and stick with itnever waffle,"
and "Requirements must be frozenhow else will we know what to
code?" Now, we say, "Plans are living documentsthey will be in a
continual state of change as project knowledge increases." We now know that
requirements are never frozenthey merge, morph, and evolve and become
expanded, enhanced, and extended. As long as artifacts of software development
can undergo change, we will need some method of managing the change.

Because SCM is such a key tool in improving the quality of delivered
products, understanding it and how to implement it in your organization and on
your projects is a critical success factor. This chapter will review SCM plan
templates and provide you with a composite SCM plan template for use in any of
your projects. We will cover the issues and basics for a sound software project
CM system, including these:

SCM principles

The four basic requirements for an SCM system

Planning and organizing for SCM

SCM tools

Benefits of SCM

Path to SCM implementation

The concept of configuration is analogous to a bill of materials to assemble
any product. Think of the product of an SCM as a system parts list, as in FIGURE 311.