very company has some form of Software Development Lifecycle (SDLC) processwhether it is formal or informal. An SDLC includes people, processes, and tools that span the design, build, and support of your information systems. Some components of an SDLC are requirements gathering, analysis, prototyping, software construction, estimating, time tracking, project management, ongoing support, standards, best practices, and software configuration management.
Typically, companies that we have engaged in our consulting practice have very weak SDLC implementations and in particular, even weaker software configuration management implementations. Our article will help you get a handle on what software configuration management is, why you need to have it, and how best to apply its principles to help you manage and develop your organization's software.
What Is Software Configuration Management?
Software Configuration Management (SCM) is the collection of processes and tools that are used to effectively manage the development, maintenance, and build processes of software. Tools alone will never get the job done. It is important to note that processes or "best practices" are a critical element in the total success of SCM for your organization.
Software Configuration Management Tools
There are many SCM tools on the market today and their capabilities and prices range significantly. Low end tools begin with open-source products that are simple version-control tools. High end tools offer a great array of features and are highly configurable. Based on your company's needs, you will need to find the right one to do the job. We didn't write this article to help you choose which tool to use. We wrote this article to convince you of the importance of picking an SCM tool and we want to offer some SCM best practices.
If you don't already have an SCM tool, Table 1
offers a starting point if you would like to do further research. Your SCM practice must use some tool. The entry point can be very low cost and more than pay for itself.
Table 1: You have several choices when selecting a software configuration management tool.
The Software Configuration Management Process
At some companies we've worked with, the SCM process is literally source code on the programmer's hard drive, or maybe a shared drive. Imagine a significant software project that doesn't let you keep track of the following:
- No product or process to keep track of who is working on which modules of code
- Nothing differentiates versions of software releases
- No ability to recreate a previous build or version
- No mechanism to easily compare lines of code
And the list goes on. The power and capability of your SCM tool will dictate what other additional management processes you will need to complete your implementation of SCM. Experienced, successful IT managers and leaders are wholehearted adopters of SCM implementations.
Benefits of Using SCM
The most important benefit of using an SCM is that you will be able to sleep better at night! Basically, you want to know the entire lifecycle of every line of code. You want to track who wrote it, what version it is of the larger product, and you must have the ability to recreate any build. As a software professional, you should strive to move software development from an art to a science. You want to imbed tools and processes into your SDLC process that will result in a more predictable software development and release cycle. Doing so will ensure a higher quality software product and reduce overall operating costs.
An SCM allows you to automate repetitive development tasks and manage the concurrent development process of multiple developers on the same project. SCMs enable you to develop software in a distributed environment regardless of the geographical location of your developers. Using an SCM helps you to create a more bug-free product, manage changes, manage bug fixes, and continue to build the next software release. Developer and manager productivity will increase when you use an SCM.
What Does an SCM Tool Do?
From a simplistic perspective, an SCM product is a central library of software source code. A good SCM lets you store any stream of bits such as project plans, estimate documents, specification documents, or any other artifact of your project. As a best practice, your SCM should contain all project artifacts in the SCM library for easy access, sharing, and version control.
|Some SCM products allow multiple developers to check out the same file. Do NOT ever choose to allow developers to check out the same file simultaneously.|
As in any library, you must "check out" a file to use or make changes to it. As a best practice, ensure that only ONE person can ever have a file checked out. In our research for this article, we reviewed some white papers that offered scenarios for using SCMs that recommended allowing multiple users to check out the same file. Good SCM software can merge all changes back together. In our opinion, however, this practice has several drawbacks:
- It takes longer to check items back in.
- It could lead to someone having to manually check conflicts in the merge process.
- Merging does not generally work with binary artifacts such as database schemas, Word documents, etc.
- The multiple merge scenario does not always reflect the accurate history of who updated what and when.
SCMs allow you to designate one person as administrator of the library to define its access control. Your administrator gives users access IDs and passwords, plus access rights. Access rights may be as simple as read or read/write capabilities, or as complicated as functional rights. A functional right may include the ability to make a build or delete files, for example.
Knowing what has happened to each and every file (source code, project plans, requirements, etc.) through its lifecycle is a very important feature. SCMs keep a history of all activity, such as when someone created a file, each revision to that file, notes or comments about that file, and other information that helps you track the lifecycle of that file.
Features mentioned above and many more allow you to effectively manage the development, build, and maintenance process in a structured, well-managed approach.
SCM Tools Are Not All Alike
SCM tools are as different as each user in the way they approach their SCM implementation. Some are more powerful, useful, and flexible than others. Some SCM tools look sophisticated because they have nice interfaces, but their GUIs are the most sophisticated thing about them. Some SCM tools fit into any process flow, while others force users to adapt their flow to fit the tool. For your organization, you need to determine your SCM implementation criteria and measure your criteria against the SCM products in the market. Where your SCM tool is inadequate you must "fill in" that gap with processes to ensure that your SCM satisfies your requirements.
We will not compare and contrast different SCM products or processes in this article. Instead, we'll show you how to use one SCM tool as an example, we'll recommend best practices, and we encourage you to use our example as a way to judge which SCM features and practices are best for your company. Our example will use Microsoft Visual SourceSafe (VSS for short) with Visual Studio .NET and we'll recommend best practices to make them all work well together.