Software CM is a discipline
for controlling the evolution of software systems.
Identification: an identification scheme is needed to reflect the
structure of the product. This involves identifying the structure and kinds
of components, making them unique and accessible in some form by giving each
component a name, a version identification, and a configuration
identification.
Control: controlling the release of a product and changes to it
throughout the lifecycle by having controls in place that ensure consistent
software via the creation of a baseline product.
Status Accounting: recording and reporting the status of
components and change requests, and gathering vital statistics about
components in the product.
Audit and review: validating the completeness of a product and
maintaining consistency among the components by ensuring that components are
in an appropriate state throughout the entire project life cycle and that
the product is a well-defined collection of components.
The definition
includes terminology such as configuration item, baseline, release and version,
etc. At a high level, most designers of CM systems incorporate functionality of
varying degrees to support these aspects. But at the implementation level, from
the user's viewpoint, most CM systems have different functionality. Among the
many reasons for these differences are: disparate hardware platforms, operating
system, and programming languages. But an interesting reason is due to the
different kinds of users of a CM system. This stems from the role the user plays
in the organization. In particular, a manager, a software engineer developing an
application, an application customer, and an environment builder tend to see CM
differently. As a result, they may want differing (albeit complementary)
functionality from their CM system. For example, to a manager the term "CM"
conjures up the image of a Configuration Control Board. To a software engineer,
the image of baselines arise. To a customer, versions of the application arise.
And to the environment builder, mechanisms such as libraries and data
compression arise. All these images obviously result in different requirements
for a CM system and hence possibly different functionality.