Every project has huge data of its products codebase, documents, software, and other project management related artifacts. With time, this entire data changes due to several reasons like requirement changes, enhancements, defects, and updates. Tracking and maintaining this huge amount of data without proper streamlined process is a challenging task. Hence, organizations use configuration management to help them manage and control their product’s code base and documents.
Software Configuration management (SCM) is the process of managing, organizing and controlling the changes into the codebase, documents and all the other artifacts of the software products. The configuration management aims at identifying and maintaining the baselines versions of the product’s configurable items. It also tracks and streamlines the change and version control process. Moreover, it provides audit reviews and reporting apparatus for all the configurable items.
Configuration management helps with the following
- Identifies all configurable items like code, documents, and software of the project.
- Baselines the configurable items by making them a base standard for future development.
- Manages the version control process.
- Helps to streamline the change control process.
- Reduces the time and effort of manual maintenance of artifacts.
- Helps to maintain consistency as all team members can retrieve the latest version of the work item.
- Helps to reduce the effort and cost of artifact maintenance.
- Improves coordination between the team.
Configuration management is the process of managing and organizing the changes into software artifacts. The entire activity consists of the following tasks.
Identification of items:
To start with the process of configuration management, the first step is to identify the configurable items of the project. These are the artifacts which require proper storage and management and will undergo updates in the future. For instance, they can be the code base of the product, test suites, requirement documents, specifications, product manual, etc.
The configurable items are baselined which implies a base version of the item undergoes reviews and quality tests. Therefore, it becomes a standard version of the item conforming to all functional and quality requirements. The source code repository stores this and all the forthcoming versions of the baseline item. It thereafter forms the basis for future reference and development. The next set of changes into the item is always done by referencing the baseline version of the artifact.
Version control is the process of managing and organizing the different versions of the configurable items. For instance, a product can have version 1.0 and the next version 1.01. So the version control mechanism will provide with all the functions to track, organize and manage these different versions.
The configurable items are updated with time for several reasons. The reasons for updates are further development, the addition of new features, defect fixes or changes in the platform, etc. The change control provides the mechanism of inculcating changes into the configurable items. Usually, a change request from authorized stakeholders undergoing formal reviews and tracking drives the changes into the artifacts.
Reviews and auditing:
Reviewing and auditing are important to maintain the correctness and conformance to the quality standard. This is a formal process leading to verification of the configurable items by reviewers and recording their feedback. The developer incorporates the review comments into the artifact. The closure of the process happens after the re-verification of comments.
At any point in time, configuration management should be able to cater to the reporting needs of the product and the project in terms of the current status, changes tracking, reviews status and provide relevant graphs.
SCM is the activity of managing and tracking the changes in the product. The important features of any configuration management system are:
Version Control: Version control allows users to manage and organize the versions of their work. Apart from this, it maintains the older versions of the work so that the user can roll back to the previous stage at any point of time.
Concurrency management: This feature enables multiple users to work on the same file without losing anyone’s work. Usually, the development team consists of several developers and there can be a situation that more than one developer is working on the same file. So this attribute allows merging the changes from both the developers.
Synchronization: This feature allows team members to be in sync with each other’s work. While working developers can update the common repository with their local ones so that other developers can have the updated changes. Similarly, they can update the local changes with common repository frequently. Thus, this activity is called synchronization.
Configuration owner drives the configuration management process by identifying the requirements and items. Further, he streamlines the process and ensures that the entire team is educated about it. With this, he is the ultimate leader of the configuration management process.
The project manager is responsible for the timely and quality delivery of the product. Meanwhile, to accomplish this he monitors and maintains that the team follows the principles and procedure of configuration management. Apart from this, he provides status reporting to different stakeholders.
Developer and Testers:
Team members are the ones who abide by the process of configuration management by updating and merging code in code repositories, taking updates frequently from repositories and raising and resolving reviews.
Reviewers or Auditors perform regular reviews of artifacts to ensure the artifacts conform to the standards and are as per the requirements.
Product Users should be aware of the configuration management tools and processes. Moreover, they should be able to download, update and rollback the versions as per the business needs.
There are numerous configuration management tools available either free and open source or are licensed. The selection of the tool is based on the team’s comfort level with a particular tool, learning curve, budget and integration with tools and IDEs of the project. Some of the popular SCM tools are:
- GitHub: GitHub is an excellent tool which provides version control, code integration, teamwork collaboration mechanism, and helps with reviews as well. It is very popular hence most of the projects are present on it for reference. It provides an easy and seamless UI for the entire process.
- BitBucket: BitBucket is Altassian’s secured distributed control management system enabling good user coordination. Moreover, it provides infinite private as well as public repositories.
- Team Foundation Server(TFS): Microsoft‘s Team Foundation Server accommodates both Agile and waterfall projects development methodologies. Also, it has advanced utilities like build, test and release management.
- Helix Core: It provides a version control system for the development projects. Its clients can connect to code repositories using Git, GUI, command, web, and plugin. It also provides a remote work environment and is very user-friendly.
- Mercurial: It is a distributed control system which provides user-friendly change tracking utility and rollback feature. It is easily customizable as per the needs of the projects. Moreover, easy integration with many new age IDEs makes it desirable among developers.
In this tutorial, we learned about software configuration management. Configuration management is an important aspect of any project and is crucial to organize, track and control all the changes to the code and documents. Without configuration management, managing the changes will be difficult resulting in poor coordination and slower speed. Selecting the right tool as per the project’s needs is also critical. Therefore, it improves the overall productivity of the team by baselining the configurable items and establishing a version control mechanism.