Software Configuration Management or SCM in short is one of those terms which either you know or you dont. Most of the folks who know it would actually believe it to be a source code control system or just a set of processes and documents or worse a change control procedure. While all of this is true, I am not sure how many of us have actually tried to think about its true meaning, its need and why its called SCM.
The truth is that I never thought about SCM as well and in my all test plans, I would invariably have a section on SCM and that in turn would mean that how we would keep code, documents, how the revisions would be stored but it never bothered me to brood on why its called ‘Software Configuration Management”. So after reading about it at places like http://en.wikipedia.org/wiki/Software_configuration_management and thinking about it for a while, here’s my take on this.
Lets separate the words, so we have “Software”, then we have “Configuration” and finally “Mangement”. I thought that if I could somehow understand “Configuration” well enough and then if I could link that with first and last word, then I am done.
So what is configuration. Well, in normal parlance, we would assume “Configuration” to be something as “constituents” of a system and at times the relationship between those “constituents” (the act of configuring a system). So when we configure a TV to watch our fav programs, we essentially tune to various frequencies and adjust our receiver. When we configure a computer, we assemble parts like disk, memory and then install necessary software, tweak settings. So the basic act is that when we ‘Configure’ then we might be dealing with disparate small modules and we change them so that they work together and make sense as a whole.
Read it again.
Now whats is ‘Software Configuration”, well it could be that when we develop a piece of software, we develop small small modules which may or may not work in isolation. When I say we develop, I mean we design, we code and we test these modules. So there is this login module, search module, RSS module, display module, style sheet module for a website and then we configure these modules so that they work together. So far so good. Now whats “Management”. Well, when we develop these modules , we are changing things. We develop, we configure then we again develop, we again configure and so on. This needs to happen till the time we reach a state when we have devloped and configured the desired system. For a software, it would take a while to reach that and to ‘Manage’ it, we would need to put in mechanisms.
Lets take a small example of a website with a login screen. So there is a DB Schema module and there is a login module. When some one attempts to login, it would read the relevant fields from DB and take necessary action. So you develop, you configure. Wow. It works. You again go back, you develop further, you configure and now it doesn’t work. Shooot.
The first question which you would like to know is :::::::::::: “What Changed”
So to manage it well, you would need to put in a mechanism to track changes and hence the need for SCCS or “Source Code Control System”, like MS Visual Source Safe or Perforce or CVS and so on. Now a SCCS is not a SCM but its a tool to achieve one aspect of SCM.
Take another example, you develop, it works, you develop further and you see new things, say a new UI which is doing some cool thing. You figure out that something was changed. Why it was changed. Most likely because a change was asked. Well, who asked. Most probably the software Architect. Why. Well, because it would increase the performance of Module X. But was it needed. So going back to what we discussed, we need to manage the configuration and hence a need to put in a “Change Request” or “Change Control” system. So if someone wants to know, what changed then go and find out more details and probably a ‘Change Control’ system would have the right details.
And so on.
So to summarize, SCM is nothing but a set of methods and processes which help you to manage the configuration of a software. Write back if you have any questions and I would be glad to answer them.
This post is actually in response to a query from a friend who wanted to know that whats a SCM plan going to be in a testing project. I would write another post on that later this week.