소프트웨어 구성 관리

소프트웨어 공학에서 **소프트웨어 구성 관리**(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 표준