Sunday, June 23, 2013

Software Configuration Management

SCM consist three domains and eight disciplines. Each discipline has a lot of tools that support the purpose itself.  Version Identification with syntactically and semantically strong scheme is primary requirement and initial part of  SCM. Selection of tools depends upon SDLC that a project follows. Not mandatory, however best practice is to  use advanced tools with advanced process. Trend shows that project use DVCS instead of VCS in Agile SDLC. However legacy Water Fall SDLC still prefers SVN. Consider Version Controlling discipline where Git continues to take-over developer's primary source code management system and at the expense of Subversion. Interestingly, Subversion continues to be the #1 SCM but just barely. If you combine Git and GitHub usage, Subversion leads by only 1.5% points. eclipse-community-survey-results-for-2013 predicts that next year Git and GitHub will be #1. The survey also sows decline of Ant usage, strongly indicates that Maven dominating Build and Deployment Management discipline. Another two disciplines - Artifact Version and Issue Tracking, that are tightly coupled with configuration management. Managing all input artifacts in build process is required a robust tool like Artifactory or Nexus.
Dependencies management is an important part of building source code. History of version control and history of Issue tracking both contain important information. Many popular issue tracking tools comes with VCS plug-in that helps to have a clear picture of committed changes in respect of a particular issue ID. To be facilitated by the feature of issue tracking tool changes should be committed to VCS with issue ID. Finally Change Control and Release Management put the final touch of product delivery process. Project and product gets change in every release. Customer change management in enterprise policy impacts on project delivery. To add a high value to the customer project change-control and customer change-management should go together. For example, in Agile software development process customer interaction is an important and prime part for having more clarity of the requirement. Release management can be divided in three sub category namely Release Engineering, Release management and Product management. A stable software product release follows 5+1 distinct Release Engineering  phases. Simply consider the five steps like Inception, Integration, Quality-Control and last-minute issue fixing. last (+1) phase of release engineering is to rebuild and delivery final release candidate version as the final release version. Maintaining all eight disciplines with proper documentation will provide real value in software development.