Software Project Management - Chapter 8 Software Configuration Management
Software Project Management - Chapter 8 Software Configuration Management
Chapter 8
1
Table of Contents
8.1 Configuration Management
8.2 Version management
8.3 System building
8.4 Change management
8.5 Release management
2
8.1 Configuration management
3
8.1 Configuration Management - Activities
• Version management
– Keeping track of the multiple versions of system components and
ensuring that changes made to components by different developers
do not interfere with each other.
• System building
– The process of assembling program components, data and libraries,
then compiling these to create an executable system.
• Change management
– Keeping track of requests for changes to the software from customers
and developers, working out the costs and impact of changes, and
deciding the changes should be implemented.
• Release management
– Preparing software for external release and keeping track of the
system versions that have been released for customer use.
4
Configuration management activities
5
8.1 Configuration
Management
Development phases
• Development phase: the development team is
responsible for managing the software configuration
and new functionality is being added to the software.
• System testing phase: a version of the system is released
internally for testing.
– No new system functionality is added. Changes made are bug
fixes, performance improvements and security vulnerability
repairs.
• Release phase: the software is released to customers for
use.
– New versions of the released system are developed to repair
bugs and vulnerabilities and to include new features.
6
8.1 Configuration Management
Multi-version systems
7
8.1 Configuration Management
8
8.1 Configuration Management
CM terminology (1/2)
Term Explanation
Baseline A baseline is a collection of component versions that make up a
system. Baselines are controlled, which means that the versions
of the components making up the system cannot be changed.
This means that it is always possible to recreate a baseline from
its constituent components.
Branching The creation of a new codeline from a version in an existing
codeline. The new codeline and the existing codeline may then
develop independently.
Codeline A codeline is a set of versions of a software component and
other configuration items on which that component depends.
Configuration The process of ensuring that versions of systems and
(version) control components are recorded and maintained so that changes are
managed and all versions of components are identified and
stored for the lifetime of the system.
Software Anything associated with a software project (design, code, test
configuration item data, document, etc.) that has been placed under configuration
(SCI) control. There are often different versions of a configuration item.
Configuration items have a unique name.
Mainline A sequence of baselines representing different versions of a
system.
9
8.1 Configuration Management
CM terminology (2/2)
Term Explanation
Merging The creation of a new version of a software component by
merging separate versions in different codelines. These
codelines may have been created by a previous branch of one
of the codelines involved.
Release A version of a system that has been released to customers (or
other users in an organization) for use.
Repository A shared database of versions of software components and
meta-information about changes to these components.
System building The creation of an executable system version by compiling and
linking the appropriate versions of the components and
libraries making up the system.
Version An instance of a configuration item that differs, in some way,
from other instances of that item. Versions always have a
unique identifier.
Workspace A private work area where software can be modified without
affecting other developers who may be using or modifying that
software.
10
8.2 Version management
11
8.2 Version Management
12
8.2 Version Management
Baselines
• Baselines may be specified using a configuration
language, which allows you to define what
components are included in a version of a particular
system.
• Baselines are important because you often have to
recreate a specific version of a complete system.
– For example, a product line may be instantiated so that
there are individual system versions for different
customers. You may have to recreate the version delivered
to a specific customer if, for example, that customer
reports bugs in their system that have to be repaired.
13
8.2 Version Management
14
8.2 Version Management
15
8.2 Version Management
16
8.2 Version Management
17
8.2 Version Management
18
8.2 Version Management
Repository Check-in/Check-out
19
8.2 Version Management
20
8.2 Version Management
Repository
cloning
21
8.2 Version Management
22
8.2 Version Management
23
8.2 Version Management
Open-source development
24
8.2 Version Management
25
8.2 Version Management
26
8.2 Version Management
Storage management
• When version control systems were first developed,
storage management was one of their most
important functions.
• Disk space was expensive and it was important to
minimize the disk space used by the different copies
of components.
• Instead of keeping a complete copy of each version,
the system stores a list of differences (deltas)
between one version and another.
– By applying these to a master version (usually the most
recent version), a target version can be recreated.
27
6.3 System Building
• System building is the process of creating a
complete, executable system by compiling and
linking the system components, external libraries,
configuration files, etc.
• System building tools and version management
tools must communicate as the build process
involves checking out component versions from the
repository managed by the version management
system.
• The configuration description used to identify a
baseline is also used by the system building tool.
28
8.3 System Building
Build platforms
• The development system, which includes development
tools such as compilers, source code editors, etc.
– Developers check out code from the version management
system into a private workspace before making changes to the
system.
• The build server, which is used to build definitive,
executable versions of the system.
– Developers check-in code to the version management system
before it is built. The system build may rely on external libraries
that are not included in the version management system.
• The target environment, which is the platform on which
the system executes.
29
8.3 System Building
System building
30
8.3 System Building
31
8.3 System Building
System platforms
• The development system, which includes
development tools such as compilers, source code
editors, etc.
• The build server, which is used to build definitive,
executable versions of the system. This server
maintains the definitive versions of a system.
• The target environment, which is the platform on
which the system executes.
– For real-time and embedded systems, the target
environment is often smaller and simpler than the
development environment (e.g. a cell phone)
32
8.3 System Building
33
8.3 System Building
Daily building
• The development organization sets a delivery time
(say 2 p.m.) for system components.
– If developers have new versions of the components that
they are writing, they must deliver them by that time.
– A new version of the system is built from these
components by compiling and linking them to form a
complete system.
– This system is then delivered to the testing team, which
carries out a set of predefined system tests
– Faults that are discovered during system testing are
documented and returned to the system developers. They
repair these faults in a subsequent version of the
component.
34
6.4 Change Management
35
8.4 Change Management
The change
management
process
36
8.4 Change Management
37
8.4 Change Management
38
8.4 Change Management
39
8.4 Change Management
Derivation history
40
6.5 Release Management
• A system release is a version of a software system that is
distributed to customers.
• For mass market software, it is usually possible to
identify two types of release: major releases which
deliver significant new functionality, and minor releases,
which repair bugs and fix customer problems that have
been reported.
• For custom software or software product lines, releases
of the system may have to be produced for each
customer and individual customers may be running
several different releases of the system at the same
time.
41
8.5 Release Management
Release components
• As well as the the executable code of the system, a
release may also include:
– configuration files defining how the release should be
configured for particular installations;
– data files, such as files of error messages, that are needed
for successful system operation;
– an installation program that is used to help install the
system on target hardware;
– electronic and paper documentation describing the
system;
– packaging and associated publicity that have been
designed for that release.
42
8.5 Release Management
43