Classic Movies and Books

Learn Software Development

All about the processes involved in software development

Search this site
Google
 

Software Configuration Management: Best Practices

Filed Under Document, Benefits, Design, Techniques, Development, Process, Software | Posted on November 27, 2007




Software Configuration Management can be a complex science. Given that SCM requires setting up of a number of processes, and procurement of expensive software and hardware, optimization is necessary. Towards that end, defining some Best Practices for Software Configuration Management is always a good idea.

* Identify and store artifacts in a secure repository: To do configuration management, you must identify which artifacts should be placed under version control. These artifacts should include both those used to manage and design a system (such as project plans and design models) and those that instantiate the system design itself (such as source files, libraries, and executables and the mechanisms used to build them).
* Control and audit changes to artifacts / Validate and Audit Standards: Configuration management performance indicators provide a mechanism to validate and audit network configuration standards and critical success factors. By implementing a process improvement program for configuration management, you can use the performance indicators to identify consistency issues and improve overall configuration management.
* Organize versioned artifacts into versioned components: When there are a large number of directories and files in a system, it becomes necessary to group these files and directories into objects representing a larger granularity, to ease management and organization problems.
* Organize versioned components and subsystems into versioned subsystems: To allow management of highly complex software systems, you must be able to step beyond the management of individual components and group those components into subsystems. Beyond that, you must also be able to include other subsystems in the definition of a subsystem.
* Create baselines at project milestones: You should record the versions of all the artifacts and components that make up a system or subsystem at specific times in the project. At a minimum, artifacts should be baselined at each major project milestone.
* Configuration Upgrade Procedures: Upgrade procedures help ensure that software and hardware upgrades occur smoothly with minimal downtime. You should create or update upgrade procedures in conjunction with any new software deployment or identified standard release. The procedures should define all steps for the upgrade, reference vendor documentation related to updating the device, and provide testing procedures for validating the device after the upgrade.
* Record and track requests for change: Change management is essential for maintaining the integrity, and for determining the reasons for change long after the change has been made.
* Maintain stable and consistent workspaces: The developer requires tools and automation to create and maintain a stable working environment. This maintenance involves periodically synchronizing changes with other team members in a way that results in a consistent set of shared changes that are of a known level of stability.
* Don’t work outside of managed workspaces: Your SCM system can only track work in progress when it takes place within managed workspaces.
* Stay in sync with the codeline. As a developer, the quality of your work depends on how well it meshes with other peoples’ work. In other words, as changes are checked into the codeline, you should update your workspace and integrate those changes with yours
* Support concurrent changes to artifacts and components: One of the key things an SCM tool must support is the capability to modify the same files concurrently and to integrate or merge the changes made in parallel at the appropriate time. There is a need to allow a single developer to work on two or more activities simultaneously, or allow multiple developers to work in isolation on a single feature before that feature is incorporated into the project.
* Integrate early and often: Integrating your development work with other peoples’ work also requires you to check in your changes as soon as they are ready. Once you’ve finished a development task, check in your changed files so that your work is available to others.
* Iteration: Maintain an iteration schedule, the shorter the better
* Have a mainline. A “mainline,” or “trunk,” is the branch of a codeline that evolves forever. A mainline provides an ultimate destination for almost all changes - both maintenance fixes and new features - and represents the primary, linear evolution of a software product. Release codelines and development codelines are branched from the mainline, and work that occurs in branches is propagated back to the mainline.
* Ensure reproducibility of software builds: Backup plans such as the ability to reproduce a specific build for audit or bug fixing purposes are crucial. Companies often overlook the needs for these plans; it is critical to be able to find such builds.


Leave a Reply