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.  SCM practices include revision control and the establishment of baselines.  If something goes wrong, SCM can determine the "what, when, why and who" of the change.  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.

Purposes

The goals of SCM are generally:

Configuration identification - Identifying configurations, configuration items and baselines.
Configuration control - Implementing a controlled change process. This is usually achieved by setting up a change control board whose primary function is to approve or reject all change requests that are sent against any baseline.
Configuration status accounting - Recording and reporting all the necessary information on the status of the development process.
Configuration auditing - Ensuring that configurations contain all their intended parts and are sound with respect to their specifying documents, including requirements, architectural specifications and user manuals.
Build management - Managing the process and tools used for builds.
Process management - Ensuring adherence to the organization's development process.
Environment management - Managing the software and hardware that host the system.
Teamwork - Facilitate team interactions related to the process.
Defect tracking - Making sure every defect has traceability back to the source.

With the introduction of cloud computing and DevOps 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.

History

The history of software configuration management (SCM) in computing can be traced back as early as the 1950s, when CM (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.

See also

 Application lifecycle management
 Comparison of open source configuration management software
 Comparison of version control software
 Continuous configuration automation
 List of revision control software
 Infrastructure as code

References

Further reading
 
 Aiello, R. (2010). Configuration Management Best Practices: Practical Methods that Work in the Real World (1st ed.). Addison-Wesley. .
 Babich, W.A. (1986). Software Configuration Management, Coordination for Team Productivity. 1st edition. Boston: Addison-Wesley
 Berczuk, Appleton; (2003). Software Configuration Management Patterns: Effective TeamWork, Practical Integration (1st ed.). Addison-Wesley. .
 Bersoff, E.H. (1997). Elements of Software Configuration Management. IEEE Computer Society Press, Los Alamitos, CA, 1-32
 Dennis, A., Wixom, B.H. & Tegarden, D. (2002). System Analysis & Design: An Object-Oriented Approach with UML. Hoboken, New York: John Wiley & Sons, Inc.
 Department of Defense, USA (2001). Military Handbook: Configuration management guidance (rev. A) (MIL-HDBK-61A). Retrieved January 5, 2010, from http://www.everyspec.com/MIL-HDBK/MIL-HDBK-0001-0099/MIL-HDBK-61_11531/
 Futrell, R.T. et al. (2002). Quality Software Project Management. 1st edition. Prentice-Hall.
 International Organization for Standardization (2003). ISO 10007: Quality management systems – Guidelines for configuration management.
 Saeki M. (2003). Embedding Metrics into Information Systems Development Methods: An Application of Method Engineering Technique. CAiSE 2003, 374–389.
 Scott, J.A. & Nisse, D. (2001). Software configuration management. In: Guide to Software Engineering Body of Knowledge. Retrieved January 5, 2010, from http://www.computer.org/portal/web/swebok/htmlformat
 Paul M. Duvall, Steve Matyas, and Andrew Glover (2007). Continuous Integration: Improving Software Quality and Reducing Risk. (1st ed.). Addison-Wesley Professional. .

External links
SCM and ISO 9001 by Robert Bamford and William Deibler, SSQC
Use Cases and Implementing Application Lifecycle Management 
Parallel Development Strategies for Software Configuration Management

Configuration management
Software engineering
IEEE standards
Types of tools used in software development
소프트웨어 공학에서 소프트웨어 구성 관리(software configuration management, SCM, S/W CM)는 더 범위가 큰 구성 관리의 학문간 분야의 일부인, 소프트웨어의 변경사항을 추적하고 통제하는 작업이다. SCM 행위에는 버전 관리, 베이스라인 확립이 포함된다. 무언가 잘못되는 경우 SCM은 변경사항과 변경한 사람을 특정할 수 있다. 구성이 잘 된 경우 SCM은 수많은 호스트에 걸쳐 이를 복제(replicate)하는 방법을 결정한다.

"SCM"이라는 약어는 "소스 구성 관리 프로세스"(source configuration management process), "소프트웨어 변경 및 구성 관리"(software change and configuration management)로도 언급된다. 그러나 "구성"은 일반적으로 시스템 관리자가 취한 변경사항을 커버하는 것으로 이해된다.

목적 
SCM의 목적은 대체적으로 다음과 같다:

 구성 식별 - 구성, 구성 항목, 베이스라인의 식별.
 구성 제어 - 통제된 변경 프로세스의 구현.
 구성 상태의 체계적 기록 - 개발 프로세스 상태에 필요한 모든 정보의 기록 및 보고.
 구성 감사(auditing) - 구성에 의도한 부분이 포함되었는지, 요구사항, 아키텍처 사양, 사용자 매뉴얼과 잘 조화되는지를 보증.
 소프트웨어 빌드 - 빌드에 사용되는 프로세스와 도구의 관리.
 비즈니스 성과 관리 - 조직 개발 프로세스 준수 보증.
 환경 관리 - 시스템을 호스팅하는 소프트웨어와 하드웨어의 관리.
 협동 - 프로세스와 관련한 팀 소통의 용이화.
 결점 추적 - 모든 결점의 원인 추적 가능.

클라우드 컴퓨팅이 도입과 함께 SCM 도구의 목적은 일부의 경우 하나로 합쳐지고 있다. SCM 도구들 그 자체는 가상 머신으로 인스턴스화할 수 있는, 또 상태와 버전으로 저장될 수 있는 가상 어플라이언스가 되고 있다. 이 도구들은 가상 어플라이언스, 스토리지 유닛, 소프트웨어 번들을 포함한 클라우드 기반 가상 자원들을 모델링하고 관리할 수 있다. 행위자의 역할과 책임은 현재 가상 서버와 관련 자원을 동적으로 인스턴스화할 수 있는 개발자들로 병합되고 있다.

역사 
컴퓨팅에서 소프트웨어 구성 관리(SCM)의 역사는 본래 하드웨어 개발 및 생산 제어를 위한 CM(구성 관리, 즉 Configuration Management)이 소프트웨어 개발에 적용된 1950년대 초로 거슬러 올라간다. 초기 소프트웨어는 카드, 테이프 등의 물리적인 매체에 담겼다. 최초의 소프트웨어 구성 관리는 수작업이었다. 언어와 복잡도가 늘어감에 따라 구성 관리와 기타 방식들이 수반되는 소프트웨어 공학은 스케줄, 예산, 품질과 같은 문제로 인해 주된 문제가 되었다. 실질적인 실례를 통해 수년에 걸쳐 절차와 도구들이 정의되고 확립되었다. 마침내 이 도구들은 소프트웨의 변경을 관리하는 시스템이 되었다. 산업 부문의 실례가 개방 방식 또는 사유 방식의 솔루션(예: 버전 관리 시스템)으로 제공되었다. 컴퓨터 이용률이 높아지면서 요구사항 관리, 디자인 변화, 품질 제어 등 더 넓은 범위를 관리하는 시스템들이 등장하였다. 나중에는 SEI(Software Engineering Institute)의 능력 성숙도 모델 등 조직의 가이드라인을 따르는 도구들이 생겨났다.

같이 보기 
 코드형 인프라스트럭처

각주

참고 문헌 
 
 Aiello, R. (2010). Configuration Management Best Practices: Practical Methods that Work in the Real World (1st ed.). Addison-Wesley. .
 Babich, W.A. (1986). Software Configuration Management, Coordination for Team Productivity. 1st edition. Boston: Addison-Wesley
 Berczuk, Appleton; (2003). Software Configuration Management Patterns: Effective TeamWork, Practical Integration (1st ed.). Addison-Wesley. .
 Bersoff, E.H. (1997). Elements of Software Configuration Management. IEEE Computer Society Press, Los Alamitos, CA, 1-32
 Dennis, A., Wixom, B.H. & Tegarden, D. (2002). System Analysis & Design: An Object-Oriented Approach with UML. Hoboken, New York: John Wiley & Sons, Inc.
 Department of Defense, USA (2001). Military Handbook: Configuration management guidance (rev. A) (MIL-HDBK-61A). Retrieved January 5, 2010, from http://www.everyspec.com/MIL-HDBK/MIL-HDBK-0001-0099/MIL-HDBK-61_11531/
 Futrell, R.T. et al. (2002). Quality Software Project Management. 1st edition. Prentice-Hall.
 International Organization for Standardization (2003). ISO 10007: Quality management systems – Guidelines for configuration management.
 Saeki M. (2003). Embedding Metrics into Information Systems Development Methods: An Application of Method Engineering Technique. CAiSE 2003, 374-389.
 Scott, J.A. & Nisse, D. (2001). Software configuration management. In: Guide to Software Engineering Body of Knowledge. Retrieved January 5, 2010, from https://web.archive.org/web/20121008233037/http://www.computer.org/portal/web/swebok/htmlformat
 Paul M. Duvall, Steve Matyas, and Andrew Glover (2007). Continuous Integration: Improving Software Quality and Reducing Risk. (1st ed.). Addison-Wesley Professional. .

외부 링크 
SCM and ISO 9001 by Robert Bamford and William Deibler, SSQC
Use Cases and Implementing Application Lifecycle Management 
Parallel Development Strategies for Software Configuration Management

소프트웨어 공학
IEEE 표준