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

  1. Version Management:

    • Track multiple versions of system components.

    • Ensure changes by different developers do not interfere with each other.

  2. System Building:

    • Assemble program components, data, libraries, and compile them into an executable system.

  3. Change Management:

    • Track change requests from customers and developers.

    • Analyze costs, impacts, and decide on implementations.

  4. 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

  1. Development Phase:

    • Team manages software configuration while adding functionalities.

  2. Testing Phase:

    • Internal release for testing; no new functionality; only bug fixes and performance improvements.

  3. 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

  1. Checkout mainline system and run tests.

  2. Make changes, rebuild in private workspace, retest.

  3. 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.