OOSE_Software_Configuration_Management_Lecture
OOSE_Software_Configuration_Management_Lecture
(SCM)
SCM ensures:
- Traceability of changes.
- Consistency across the software lifecycle.
- Accountability of modifications.
- Easier maintenance and troubleshooting.
Example:
Imagine a software product like a word processor with multiple teams working on
features like text formatting, spellcheck, and user interface. SCM would manage different
versions of each feature and ensure consistency when integrating them.
- Configuration Item (CI): Any artifact in the software project that needs to be managed
(source code, documents, scripts, etc.).
- Baseline: A set of CIs that are formally reviewed and agreed upon. Baselines can only
be changed through formal procedures.
- Versioning: Assigning unique identifiers to different states of CIs as they evolve over
time.
- Branching: Creating independent lines of development (e.g., working on a new feature
without disrupting the main codebase).
- Merging: Combining changes from different branches.
This involves identifying the components that need to be managed (e.g., source code
files, libraries, documents). Every CI should have a unique identifier, such as a version
number.
Example:
A project might have the following CIs:
- `app_v1.0.py` (source code)
- `database_schema_v1.2.sql` (database schema)
- `user_guide_v1.0.docx` (documentation)
Changes in CIs must be controlled through a formal process. A Change Request (CR) is
submitted, reviewed, and either accepted or rejected.
Steps:
1. Submit a CR.
2. Evaluate the CR (impact analysis, risk assessment).
3. Implement the change if approved.
4. Test and verify the change.
5. Update the baseline.
Example:
A developer submits a CR to fix a bug in `app_v1.0.py`. After approval, they create
`app_v1.1.py`, integrate and test it, and update the baseline.
Version control tracks changes to files over time. Developers can check in/out files,
maintain a history of changes, and restore older versions when needed.
Example:
In Git, a developer works on a bug fix in their branch (`bugfix-branch`). Once complete,
they commit their changes and merge it into the `main` branch.
Audits ensure that all configuration items conform to their specifications and that all
changes have been properly tracked and approved. Audits are typically performed before
major releases or deployments.
Example:
Before releasing a new version of a software application, an auditor ensures that:
- All changes are documented.
- All files have version numbers.
- There are no unauthorized modifications.
SCM Tools facilitate automation and management of SCM activities. Popular tools
include:
- Git: For version control.
- Jenkins: For continuous integration.
- Subversion (SVN): A centralized version control system.
Automation in SCM helps streamline tasks such as builds, testing, and deployments,
ensuring consistency across environments.
Example:
Using Jenkins, a developer’s commit in Git triggers an automated pipeline that builds the
software, runs tests, and deploys to a staging environment.
6. SCM in Agile Environments
In Agile, SCM becomes even more critical due to the rapid iteration and continuous
integration/deployment (CI/CD) practices. Agile teams use SCM to ensure:
- Changes are small, incremental, and reversible.
- Continuous integration allows for early detection of integration issues.
Example:
In an Agile team, developers push code daily to the repository. Each push triggers an
automated CI process that integrates and tests the changes to ensure they work alongside
the existing codebase.
Conclusion
Software Configuration Management is essential in ensuring that software development remains
structured, traceable, and maintainable. It supports collaboration, prevents conflicts, and allows
teams to build robust, reliable software. From version control to automated pipelines, SCM
ensures that every component of a project is carefully managed.