Chapter 25
Software Engineering Configuration Management
Overview
Configuration Management (CM): Concerned with the policies, processes, and tools for managing changing software systems throughout development and use.
Importance of CM:
Required to keep track of changes and component versions in systems.
Essential for team projects to control changes made by different developers.
Learning Objectives
25.1 Version management
25.2 System building
25.3 Change management
25.4 Release management
CM Activities
Key Activities in Configuration Management
Version Management:
Track multiple versions of system components.
Ensure changes by different developers do not interfere with each other.
System Building:
Assemble program components, data, libraries, and compile them into an executable system.
Change Management:
Track change requests from customers and developers.
Analyze costs, impacts, and decide on implementations.
Release Management:
Prepare software for external release.
Keep track of released system versions available to customers.
CI Activities Overview
Involves controlling versions, managing release cycles, and handling change proposals.
Agile Development and CM
Agile development involves frequent changes which necessitate robust CM tools.
Developers maintain definitive versions in a shared project repository, modifying code in personal workspaces before committing changes back to the repository.
Development Phases
Development Phase:
Team manages software configuration while adding functionalities.
Testing Phase:
Internal release for testing; no new functionality; only bug fixes and performance improvements.
Release Phase:
Software released to customers with new versions for bug fixes and new features.
Multi-Version Systems
Large systems typically have multiple ‘working’ versions at different stages of development.
Involvement of several teams in developing different system versions simultaneously.
Configuration Management Terminology
Key Terms Explained
Baseline:
A controlled collection of component versions forming a system.
Branching:
Creation of new codeline from an existing version allowing independent development.
Codeline:
A sequence of versions of a software component.
Configuration Control:
The process of maintaining and ensuring proper versioning of systems and components.
Version Control Systems (VCS):
Centralized Systems (e.g., Subversion) and Distributed Systems (e.g., Git).
Version Management
Overview of Version Management
Tracks different versions of software components and ensures changes by developers do not conflict.
Process entails managing codelines and baselines to maintain order in component versions.
Codelines and Baselines
Codelines are sequences of source code versions.
Baselines define specific system configurations based on component versions and dependent libraries.
Storage Management
Managing Storage in Version Control Systems
Early VCS aimed to minimize disk space utilized by storing deltas (differences) rather than complete copies of files.
Modern tools leverage compression and indexed files for efficiency (e.g., Git).
System Building
Definition and Process
System Building: Creating complete, executable systems by compiling and linking components, libraries, and configurations, ensuring integration with version management tools.
Automated Build Systems
Functionality includes script generation, version management system integration, and automated testing and documentation generation.
Agile Building Process
Checkout mainline system and run tests.
Make changes, rebuild in private workspace, retest.
Check-in changes upon successful tests.
Change Management
Purpose and Process
Adapts to changing organizational needs and manages system evolution.
Involves evaluating costs/benefits of proposed changes.
Change Management Flow
Submitting change requests, implementing analysis and decision-making on whether to approve changes based on assessment.
Release Management
Overview of System Releases
Defines versions of software for distribution to customers, focusing on both major and minor releases.
Components of a Release
Executable code, configuration files, installation programs, documentation, and packaging for distribution.
Factors Influencing Release Planning
Market competition, customer needs, technical requirements, and system quality.
Continuous Integration
Definition
Frequent integration of changes into a shared system to identify issues early and ensure the operational quality of the latest build.
Process
Checkouts, builds, tests and check-ins on the build server, ensuring that all components are functioning before commits.