본문 바로가기

System & Software Engineering

소프트웨어 형상관리와 소프트웨어 개발

소프트웨어 형상관리 (Software Configuration Management)의 의미

소프트웨어 형상관리는 다양한 소프트웨어 개발 표준에서 중요하게 언급되며, 각 표준은 형상관리의 정의와 목적을 명확히 하고 있습니다. 다음은 대표적인 소프트웨어 관련 표준에서 언급한 소프트웨어 형상관리의 정의입니다.

ISO/IEC/IEEE 12207

ISO/IEC/IEEE 12207은 소프트웨어 생명 주기 프로세스를 정의하는 국제 표준으로 소프트웨어의 일관성, 무결성, 추적성을 유지하고, 변경사항을 효과적으로 관리하여 소프트웨어 품질을 보장하기 위한 방안으로 소프트웨어 형상관리를 다음과 같이 정의하고 있습니다.

"형상관리는 소프트웨어 제품의 구성 요소와 관련 문서의 상태를 식별하고, 변경을 제어하며, 상태와 변경 이력을 기록하는 활동을 포함합니다."

 

ISO/IEC 90003

ISO/IEC 90003은 소프트웨어 엔지니어링에 ISO 9001 품질 경영 시스템을 적용하는 지침을 제공합니다. 이 표준에서도 소프트웨어 개발 및 유지보수 과정에서  일관된 품질을 유지하고, 변경사항을 체계적으로 관리하기 위한 방안으로 소프트웨어 형상관리를 다음과 같이 정의하고 있습니다.

 “형상관리는 제품의 특성과 상태를 확인하고, 변경을 제어하며, 기록과 보고를 통해 변경의 상태와 이력을 추적하는 프로세스입니다.”

 

CMMI (Capability Maturity Model Integration)

CMMI는 소프트웨어 개발 프로세스의 성숙도를 평가하고 개선하기 위한 모델로서 소프트웨어 품질과 프로젝트의 관리 효율성을 높이고, 변경사항을 명확히 추적할 수 있도록 지원하기 위한 방안으로 다음과 같이 형상관리를 정의합니다.

 “형상관리는 프로젝트의 산출물에 대한 일관성, 무결성, 추적성을 유지하기 위해 형상 항목을 식별하고, 통제하며, 상태를 기록하고, 감사를 수행하는 활동입니다.”

 

IEEE 828

IEEE 828은 소프트웨어 형상관리 계획을 위한 표준입니다. 이 표준에서는 형상 항목의 상태를 명확히 파악하고, 변경사항을 체계적으로 관리하여 소프트웨어 품질을 보장하기 위한 방안으로 다음과 같이 형상관리의 정의를 제시합니다:

“형상관리는 시스템의 형상 항목을 식별하고, 변경을 제어하며, 변경 이력을 기록하고, 형상 항목의 상태를 보고하여 소프트웨어의 일관성과 무결성을 유지하는 활동입니다.”

 

ASPICE (Automotive SPICE)

ASPICE는 자동차 소프트웨어 개발의 품질을 평가하기 위한 표준으로 다른 표준들과 마찬가지로 소프트웨어의 일관성을 유지하고, 추적성을 확보하며, 변경관리를 통해 소프트웨어의 품질을 보장하기 위한 방안으로 다음과 같이 형상관리를 정의하고 있습니다.

“형상관리는 소프트웨어 제품의 형상 항목을 정의하고, 식별하며, 통제하고, 변경 사항을 기록하며, 형상 항목의 상태를 유지하고 보고하는 프로세스입니다.”

 


소프트웨어 형상(Configuration)의 의미

소프트웨어 형상(Configuration)은 소프트웨어 개발 및 유지보수 과정에서 관리해야 할 모든 산출물과 그들의 관계를 의미합니다. 형상은 소프트웨어 제품의 상태를 나타내며, 이는 시간에 따라 변경될 수 있는 다양한 구성 요소로 구성됩니다. 소프트웨어 형상의 주요 요소는 다음과 같습니다:

 소스 코드(Source Code)

소스코드는 소프트웨어 형상관리에서 가장 중요한 형상 항목 중 하나입니다. 소스코드는 소프트웨어의 핵심 기능을 구현하는 코드 파일들로 구성되며, 이들의 일관성과 무결성을 유지하는 것은 성공적인 소프트웨어 개발의 필수 요소입니다. 이러한 소스코드를 효과적으로 관리하기 기 위한 도구로 대표적인 예는 Git, SVN 등이 있으며 이를 통해 소스코드의 버전관리, 변경이력추적, 협업 등을 원활하게 진행할 수 있습니다.

문서화(Documentation)

소프트웨어 개발과 유지보수에 필요한 모든 문서를 의미합니다. 문서는 소프트웨어의 요구사항, 설계, 구현, 테스트, 배포 및 유지보수 과정에서 발생하는 모든 정보를 체계적으로 기록한 것입니다. 대표적인 예로 요구사항 명세서, 설계 문서, 사용자 매뉴얼, 테스트 계획서 등이 있습니다.

빌드 파일(Build Files)

프트웨어 빌드 프로세스를 자동화하는 데 사용되는 스크립트 및 설정 파일입니다. 이는 컴파일, 링크, 패키징, 테스트 실행 등의 작업을 정의하며, 빌드 도구에 의해 실행됩니다. 이를 통해 소프트웨어 일관성과 재현성을 보장할 수 있습니다. (예, Makefile, Ant build.xml, Maven pom.xml 등)

라이브러리 및 의존성(Libraries and Dependencies)

라이브러리 및 의존성 또한 소프트웨어 개발에서 중요한 형상 항목 중 하나입니다. 소프트웨어 프로젝트는 종종 외부 라이브러리 및 모듈에 의존하며, 이러한 의존성을 관리하는 것은 소프트웨어의 일관성과 안정성을 유지하는 데 필수적입니다.  "라이브러리(Library)"는 재사용 가능한 코드 모듈을 의미하며, 특정 기능을 구현한 코드 집합이며, "의존성(Dependency)"은 소프트웨어가 정상적으로 동작하기 위해 필요한 외부 라이브러리나 모듈을 말합니다.

실행 파일(Executable Files)

말그대로 컴퓨터 또는 특정 하드웨어에서 실행 가능한 형태로 컴파일되고, 빌드된 실행 가능한 수준의 파일을 의미합니다. 이는 소스코드가 빌드 프로세스를 거쳐 완성된 최종 결과물을 의미합니다. 실행파일 또한 소프트웨어에서 중요한 형상항목 중 하나입니다.

테스트 스크립트 및 데이터(Test Scripts and Data)

테스트 스크립트와 데이터 또한 중요한 형상 항목 중 하나로, 소프트웨어의 기능과 성능을 검증하는 데 사용되며, 체계적으로 관리되어야 소프트웨어 품질을 유지하고 향상시킬 수 있습니다.

  • 테스트 스크립트(Test Script): 소프트웨어의 특정 기능을 자동으로 테스트하는 코드 또는 스크립트입니다. 이는 반복 가능한 테스트를 자동화하여 효율성을 높입니다.
  • 테스트 데이터(Test Data): 테스트를 수행하는 동안 사용되는 데이터로, 테스트 스크립트의 입력값 및 예상 결과값 등을 포함합니다.

설정 파일(Configuration Files)

설정 파일은 소프트웨어의 동작을 정의하고 제어하는 데 사용되며, 다양한 환경에서 소프트웨어가 일관되게 동작하도록 지원합니다. "설정 파일(Configuration File)"은 소프트웨어의 동작을 제어하는 다양한 설정값을 포함하는 파일입니다. 이는 소프트웨어의 구성 요소들이 어떻게 상호작용하는지, 환경 설정, 사용자 정의 옵션 등을 정의합니다.

 

그 밖에도 산업 도메인별 특성에 따른 부가적인 형상항목들이 존재할 수 있습니다.


소프트웨어 형상관리 메타데이터(Configuration Management Metadata)

소프트웨어 형상관리 메타데이터는 엄밀히 말해 형상 항목에 대한 메타데이터라고 표현하는 것이 정확하다는 생각입니다.  따라서 소프트웨어 형상관리를 위해 이들 메타데이터는 형상 항목에 대한 추가 정보를 제공하는 데이터로, 각 형상 항목을 체계적으로 관리하고 추적하는 데 중요한 역할을 합니다. 메타데이터를 통해 형상 항목의 속성을 명확히 하고, 변경 이력을 추적하며, 프로젝트 관리 효율성을 높일 수 있습니다. 다음은 소프트웨어 형상관리에서 일반적으로 사용되는 메타데이터 요소와 그 예시입니다.

형상항목 메타데이터 설명
식별자(ID) 형상 항목을 고유하게 식별하는 코드 또는 번호
예: OnlineShopping-UserManagement-UserLogin.java-1.0.0
이름(Name) 형상 항목의 이름
예: UserLogin.java
유형(Type) 형상 항목의 유형
예: 소스 코드, 문서, 테스트 스크립트, 설정 파일 등
버전(Version) 형상 항목의 버전 번호
상태(Status) 형상 항목의 현재 상태
예: 초안, 검토중, 승인됨
작성자(Author) 형상 항목을 작성한 사람
생성일자(Creation Date) 형상 항목이 생성된 날짜
최종 수정일자(Last Modified Date) 형상 항목이 최종 수정된 날짜
설명(Description) 형상 항목에 대한 설명
연관 항목(Related Items) 형상 항목과 연관된 다른 항목들
변경 이력(Change History) 형상 항목의 변경 내역

 


형상관리 프로세스와 개발 프로세스의 관계

소프트웨어 개발 프로세스와 형상관리 프로세스는 서로 밀접하게 연결되어 있으며, 형상관리는 소프트웨어 개발의 모든 단계에서 중요한 역할을 합니다. 형상관리 프로세스는 소프트웨어 산출물을 체계적으로 관리하여 일관성과 무결성을 유지하며, 변경 사항을 추적하고 통제함으로써 개발 프로세스의 효율성을 높이고 품질을 보장합니다. 따라서 형상관리 프로세스와 개발 프로세스는 상호 보완적인 관계를 가지며, 개발 프로세스의 모든 단계에서 형상관리 프로세스가 동작할 수 있어야 합니다.

개발 프로세스 단계와 형상관리

1. 요구사항 분석 단계의 형상관리

요구사항 분석 단계는 소프트웨어 개발의 초기 단계로, 사용자와 시스템의 요구사항을 수집하고 분석하여 명확하게 정의하는 과정입니다. 이 단계에서의 형상관리는 매우 중요하며, 요구사항 문서를 체계적으로 관리하고 변경 사항을 추적함으로써 프로젝트의 일관성을 유지하고 성공 가능성을 높입니다.

요구사항 분석 단계에서 형상관리는 다음과 같은 활동을 포함합니다:

  • 형상 식별(Configuration Identification)
    • 요구사항 문서, 사용자 스토리, 인터뷰 기록 등 모든 요구사항 관련 산출물을 형상 항목으로 정의합니다.
    • 각 형상 항목에 고유 식별자를 부여하여 체계적으로 관리합니다.
  • 형상 통제(Configuration Control)
    • 요구사항의 변경 요청을 관리하고 통제합니다. 모든 변경 요청은 평가, 승인, 기록되는 절차를 거칩니다.
    • 변경 제어 위원회(CCB, Change Control Board)를 구성하여 변경 요청을 검토하고 승인합니다.
  • 형상 상태 기록(Configuration Status Accounting)
    • 요구사항 문서의 상태와 변경 이력을 기록하고 보고합니다.
    • 모든 요구사항 항목의 상태(초안, 검토 중, 승인됨 등)를 명확히 기록합니다.
  • 형상 감사(Configuration Audit)
    • 요구사항 문서가 정의된 기준과 일치하는지, 승인된 변경 사항이 올바르게 반영되었는지 검토합니다.
    • 정기적인 형상 감사를 통해 요구사항 문서의 정확성과 완전성을 확인합니다.

2. 설계 단계의 형상관리

설계 단계는 소프트웨어 개발 과정에서 요구사항을 바탕으로 시스템 및 소프트웨어 아키텍처를 구체화하는 중요한 단계입니다. 이 단계에서 형상관리는 설계 산출물을 체계적으로 관리하고, 변경 사항을 통제하여 프로젝트의 일관성과 무결성을 유지하는 데 필수적입니다. 설계 단계에서의 형상관리는 다음과 같은 활동을 포함합니다.

  • 형상 식별(Configuration Identification)
    • 설계 산출물(시스템 아키텍처, 상세 설계 문서, 데이터베이스 설계, 인터페이스 정의 등)을 형상 항목으로 정의합니다.
    • 각 설계 산출물에 고유 식별자를 부여하여 관리합니다.
  • 형상 통제(Configuration Control)
    • 설계 변경 요청을 접수, 평가, 승인 및 기록합니다.
    • 변경 제어 위원회(CCB)를 운영하여 변경 요청을 검토하고 승인합니다.
  • 형상 상태 기록(Configuration Status Accounting)
    • 설계 산출물의 현재 상태와 변경 이력을 기록하고 보고합니다.
    • 각 설계 항목의 상태(초안, 검토 중, 승인됨)를 기록합니다.
  • 형상 감사(Configuration Audit)
    • 설계 산출물이 요구사항과 일치하는지, 승인된 변경 사항이 정확히 반영되었는지 감사합니다.
    • 형상 감사를 통해 설계 문서의 정확성과 일관성을 확인합니다.

3. 구현 단계

구현 단계는 소프트웨어 개발 과정에서 설계된 내용을 바탕으로 실제 소스 코드를 작성하고 기능을 구현하는 단계입니다. 이 단계에서의 형상관리는 소스 코드 및 관련 산출물을 체계적으로 관리하고, 변경 사항을 추적하여 소프트웨어의 일관성과 무결성을 유지하는 데 중요합니다. 구현 단계에서의 형상관리는 다음과 같은 활동을 포함합니다.

  • 형상 식별(Configuration Identification)
    • 소스 코드 파일, 빌드 스크립트, 라이브러리 등을 형상 항목으로 정의하고 고유 식별자를 부여합니다.
  • 형상 통제(Configuration Control)
    • 소스 코드 및 관련 산출물의 변경 요청을 접수, 평가, 승인 및 기록합니다.
    • 변경 제어 위원회(CCB)를 운영하여 코드 변경 요청을 검토하고 승인합니다.
  • 형상 상태 기록(Configuration Status Accounting)
    • 소스 코드 및 관련 산출물의 현재 상태와 변경 이력을 기록하고 보고합니다.
  • 형상 감사(Configuration Audit)
    • 소스 코드 및 관련 산출물이 설계 문서와 일치하는지, 승인된 변경 사항이 정확히 반영되었는지 감사합니다.
    • 형상 감사를 통해 코드의 정확성과 일관성을 확인합니다.

4. 테스트 단계

테스트 단계는 소프트웨어 개발 과정에서 구현된 기능이 요구사항을 만족하고, 예상한 대로 동작하는지 검증하는 중요한 단계입니다. 이 단계에서의 형상관리는 테스트 산출물(테스트 계획, 테스트 케이스, 테스트 스크립트, 테스트 데이터 등)을 체계적으로 관리하고, 변경 사항을 추적하여 소프트웨어의 일관성과 무결성을 유지하는 데 필수적입니다. 테스트 단계에서 형상관리는 다음과 같은 활동을 포함합니다.

  • 형상 식별(Configuration Identification)
    • 테스트 계획, 테스트 케이스, 테스트 스크립트, 테스트 데이터 등을 형상 항목으로 정의하고 고유 식별자를 부여합니다.
  • 형상 통제(Configuration Control)
    • 테스트 산출물의 변경 요청을 접수, 평가, 승인 및 기록합니다.
    • 변경 제어 위원회(CCB)를 운영하여 테스트 변경 요청을 검토하고 승인합니다.
  • 형상 상태 기록(Configuration Status Accounting)
    • 테스트 산출물의 현재 상태와 변경 이력을 기록하고 보고합니다.
  • 형상 감사(Configuration Audit)
    • 테스트 산출물이 요구사항과 일치하는지, 승인된 변경 사항이 정확히 반영되었는지 감사합니다.
    • 형상 감사를 통해 테스트 산출물의 정확성과 일관성을 확인합니다.

5. 배포 단계

배포 단계는 소프트웨어 개발 과정에서 최종 사용자에게 소프트웨어를 제공하는 중요한 단계입니다. 이 단계에서의 형상관리는 배포된 소프트웨어의 일관성과 무결성을 유지하고, 배포 과정에서 발생할 수 있는 문제를 최소화하는 데 필수적입니다. 배포 단계에서는 배포된 소프트웨어 버전, 릴리즈 노트, 배포 스크립트 등을 체계적으로 관리하고 추적해야 합니다. 배포 단계에서의 형상관리는 다음과 같은 활동을 포함합니다.

  • 형상 식별(Configuration Identification)
    • 배포된 소프트웨어의 버전, 릴리즈 노트, 배포 스크립트 등을 형상 항목으로 정의하고 고유 식별자를 부여합니다.
  • 형상 통제(Configuration Control)
    • 배포 과정에서 발생하는 변경 요청을 접수, 평가, 승인 및 기록합니다.
    • 변경 제어 위원회(CCB)를 운영하여 배포 관련 변경 요청을 검토하고 승인합니다.
  • 형상 상태 기록(Configuration Status Accounting)
    • 배포된 소프트웨어와 관련 산출물의 현재 상태와 변경 이력을 기록하고 보고합니다.
  • 형상 감사(Configuration Audit)
    • 배포된 소프트웨어가 정의된 요구사항과 일치하는지, 승인된 변경 사항이 정확히 반영되었는지 감사합니다.
    • 형상 감사를 통해 배포된 소프트웨어의 정확성과 일관성을 확인합니다.

소프트웨어 형상관리와 변경관리의 차이점

소프트웨어 형상관리(Configuration Management, CM)와 변경관리(Change Management)는 모두 소프트웨어 개발 과정에서 중요한 역할을 하며, 종종 상호 연관되어 작동합니다. 그러나 이 둘은 각각의 목적과 활동에 차이가 있습니다.

 

소프트웨어 형상관리 (Configuration Management, CM)의 목적은 소프트웨어 제품의 일관성과 무결성을 유지하기 위해 모든 산출물을 체계적으로 관리하고 추적하는 것이며, 주요 활동으로 형상 식별, 형상 통제, 형상 상태 기록, 형상 감사가 있습니다. (예, 소스 코드 파일의 버전 관리, 설계 문서의 변경 이력 기록, 릴리즈 노트 작성 등)

그런데 소프트웨어 변경관리 (Change Management)는 소프트웨어 개발 및 유지보수 과정에서 발생하는 변경 요청을 체계적으로 관리하고, 변경이 성공적으로 이루어질 수 있도록 지원하는 것으로 주요 활동으로는 변경 요청 접수, 변경 평가, 변경 승인, 변경 구현, 그리고 변경 검토 및 종료가 있습니다. (예, 새로운 기능 추가 요청, 버그 수정 요청, 시스템 환경 변경 등)

소프트웨어 형상관리와 변경관리의 주요 차이점 및 관계

구분 소프트웨어 형상관리 (Configuration Management) 소프트웨어 변경 관리 (Change Management)
목적 소프트웨어 제품의 일관성과 무결성 유지 변경 요청을 체계적으로 관리하고, 성공적으로 변경을 구현
주요활동 형상식별, 형상통제, 형상상태기록, 형상감사 변경요청접수, 변경평가, 변경승인, 변경구현, 변경검토 및 종료
관리 대상 소스코드, 문서, 빌드 파일등 형상 항목 기능추가, 버그수정, 시스템 환경 변경 등 변경 요청
중점사항 산출물의 버전 관리와 추적 변경 요청의 처리와 효과적인 구현

 

소프트웨어 형상관리와 변경관리는 서로 보완적인 관계를 가집니다. 변경관리는 변경 요청을 처리하고 승인된 변경을 구현하는 반면, 형상관리는 이러한 변경 사항이 소프트웨어 산출물에 정확히 반영되고 추적될 수 있도록 합니다. 두 프로세스가 함께 작동하여 소프트웨어 개발의 일관성, 무결성, 품질을 보장합니다. 정리하면 다음과 같습니다.

 

변경관리는 변경 요청의 처리 과정에 중점을 두며, 형상관리 시스템을 활용하여 변경된 항목들을 체계적으로 관리합니다.

형상관리는 변경된 항목들을 포함한 모든 산출물을 일관되게 관리하고, 변경관리 프로세스를 통해 승인된 변경 사항을 추적합니다.

 


정리하며...

형상관리라는 주제를 정리하며, 프로세스 관점에서 정리된 자료들은 매우 많은 것을 알 수 있었지만, 실제 개발 과정에서 느끼고, 까다롭다고 생각되는 부분은 과연 형상관리가 언제 어떻게 적용되어야 하느냐를 알고 이를 실행하는 것이 중요하다고 생각했습니다. 또한 형상관리 하면 단순히 버전관리라고만 생각하는 사람들도 많다는 사실과 심지어 형상관리와 변경관리와의 차이점도 구분하지 못하는 경우도 많이 발견하게 되었습니다. 그래서 이번 기회에 기존에 많은 원로적인 정보들보다는 실제 느낀점 위주로 필요한 사항들을 최대한 객관적으로 정리해 보자는 마음으로 정리하게 되었습니다.

새롭거나 흥미로운 부분은 별로 없겠지만, 적어도 소프트웨어 개발 프로세스를 바라볼때 형상관리와 개발프로세스가 서로 별개의 프로세스로 관리되고 있는 현실을 바로 잡아 소프트웨어 품질을 개선하는데 도움이 될 수 있었으면 좋겠습니다.