User:Gmkhande/sandbox

In software engineering, software configuration management (SCM or S/W CM) is the task of tracking and controlling changes in the software, part of the larger cross-disciplinary field of configuration management. Software configuration management facilitates the debugging process by monitoring the different revisions of the software, and thereby helps in reverting changes that likely caused errors. If something goes wrong, SCM can determine what was changed and who changed it. If a configuration is working well, SCM can determine how to replicate it across many hosts.

The acronym "SCM" is also expanded as source configuration management process and software change and configuration management. However, 'configuration' is generally understood to cover changes typically made by a system administrator.

History
The history of software configuration management (SCM) in computing can be traced back as early as the 1950s, when CM (for Configuration Management), originally for hardware development and production control, was being applied to software development. Early software had a physical footprint, such as cards, tapes and other media. The first software configuration management was a manual operation. With the advances in language and complexity, software engineering, involving configuration management and other methods, became a major concern due to issues like schedule, budget, and quality. Practical lessons, over the years, had led to the definition, and establishment, of procedures and tools. Eventually, the tools became systems to manage software changes. Industry-wide practices were offered as solutions, either in an open or proprietary manner (such as Revision Control System). With the growing use of computers, systems emerged that handled a broader scope, including requirements management, design alternatives, quality control, and more; later tools followed the guidelines of organizations, such as the Capability Maturity Model of the Software Engineering Institute.

Purposes
Software configuration management (SCM) is a part of software quality assurance and is used to deliver quality software services and enable the dynamic changes in software products to assimilate properly. Lack of SCM leads to bug prone software and result in consequences, such as loss of source code, reduced visibility of the software changes, increased redundancy and re-work and security threats to the user data. SCM helps in comparing the periodic product builds and releases to back track software updates and identify the actual point of failure as well as ensuring the reliability of the software products.

With the introduction of cloud computing the purposes of SCM tools have become merged in some cases. The SCM tools themselves have become virtual appliances that can be instantiated as virtual machines and saved with state and version. The tools can model and manage cloud-based virtual resources, including virtual appliances, storage units, and software bundles. The roles and responsibilities of the actors have become merged as well with developers now being able to dynamically instantiate virtual servers and related resources.

Configuration identification
Baseline is the approved software configuration description of a software that facilitates the identification of the software changes made in the subsequent versions. Configuration Identification is responsible for the detailed description of the configurations, configuration items and baselines for the software. Version controlling is performed as a part of configuration identification to monitor the different builds and releases of the software product and enable comparison between the different versions for defect analysis.

Configuration control
Based on the norms set for defining software configurations, and depending on the current software version, it is decided whether or not the changes made to the software are to be retained or discarded. Configuration control monitors the updates during software development to cater the new feature requirements and handle existing defects. Change control board approves or rejects the software change requests.

Status accounting
Status accounting involves status report on the evolution of any software. It keeps the track of different software changes with respect to the baselines and also documents information on who committed the changes and the respective changes to the code base.

Defect tracking
Development of large software systems entails tracking of defects in a systematic manner so that an issue can be traced in time from its origin to closure. It is crucial to identify parts of code that caused or fixed a particular bug in the past when the bug resurfaces. Defect tracking software plays an important role in the debugging process when this happens. Typically, defect tracking is embedded in software project management and source control applications.

Configuration auditing
Configuration audit checks the correctness of the software in accordance with the physical and functional attributes specified during requirement gathering or in user manual. If the software meets the criterion, then the changes are committed into the final code base or else they are reverted back to the previous stable version.

Release management and delivery
Release Management involves build management and process management. It involves building, testing and implementation of software right from the planning phase to the release phase of software development cycle. This also takes care of the maintenance activities, documentation and the packaging of deliverable to the customer.

Teamwork
Concurrent access to the software repository enables multi-tasking and at the same time ensures that there is no conflict during the read and write operations. Individuals check in their code patches to the source code and check out the merged code branch to work on. SCM enables team members to interact with each other regarding the software changes required.

Configuration management roles
In Software configuration management system, various roles are assigned to people with respective expertise to help complete the process. The roles are:

Configuration manager
Configuration manager is responsible for the management of the build and release process. (S)He works with both the development team and operations team. In order to reduce the risk during production release, (S)he always try to remove any manual processes from both build and release processes. He is also responsible for identifying the configuration items.

Change control board member
The Change control board member is mostly a technical or administrative representative who is responsible for approving/disapproving any change request s to a configuration item or baseline. The board members may ask to discuss the change request with the initiator,if they have any queries.

Developer
Developer is responsible for creating promotions which may be triggered by change requests or during the normal activities of development. Most of the times, the developer resolves conflicts and checks in changes.

Auditor
There are two types of audits which an auditor has to do:
 * 1) Functional configuration audit (FCA): It verifies that a configuration Item’s actual performance agrees with its software requirement.
 * 2) Physical configuration audit (PCA): It verifies that the design and product specification and referenced documents represent the software that was coded and tested for a specified configuration item.

Software configuration management tools
Software configuration management tools are the tools and utilities that are used to monitor source code, develop software, install packages, track defects and management of changes.

Tools are listed below.

Revision control system (RCS)
Revision control system was first released by Walter F. Tichy in 1982. It is used to implement revision control in SCM. It automates the storing, retrieval, logging, identification, and merging of revisions. RCS is mainly used when we have some form of written document which is frequently revised. Since RCS operates only on single files, it cannot work on entire projects.

Concurrent version control (CVS)
Concurrent versions system (CVS) is a software which enable the user to save and retrieve the existing and previous versions of code. It helps the users to share control of different versions of code in a common repository of files. Using CVS, clients can compare versions, get the full history of changes made to the code or get the code at a particular time in past.

Subversion
Subversion is an open source system used in SCM. It can operate across several networks so different clients on various machines at the same time can access and modify code. It maintains the respective changes made to the code and can always retrieve the previous versions of the data. Subversion is actually based on concurrent version control.

Perforce
Penforce is a repository server which is developed by Perforce Software. Initial release was in 1995. It keeps track of all the activities of the developer. It can provide full revision history of branched, copied and deleted files. It supports the compression of files for repository storage. Metadata helps to support backup and improve performance.

ClearCase
ClearCase, developed by Atria Software, was first released in 1992.This SCM tool was designed with an objective to improve collaboration and automation. In addition, it helps businesses by lowering business costs and mitigating risk.It also reduces time to market for high-quality solutions.