如果你從事軟件開發相關工作,一定聽說過軟件配置管理。
而對于多數人來說,軟件配置管理也可能隻是聽說過,感覺就在身邊,卻又讓人摸不到,也說不清楚。而有些即使在從事軟件配置管理的工作,也不能很好地理解它的作用和意義,有些也是在僵硬固化地模仿着做,不清楚軟件配置管理的真正内涵。
本文就試圖揭開軟件配置管理神秘的層層面紗,一探其究竟。
軟件配置管理(Software Configuration Management)
缺失配置管理帶來的問題在了解什麼是軟件配置管理之前,先讓我們看一下沒有它,或者沒有做好它的時候,軟件開發過程會發生哪些事情。
你一定聽說過或者經曆過以下問題:
軟件配置管理不足帶來的問題
類似的問題還有很多,這些軟件開發過程的混亂和無序,都是軟件配置管理工作缺失或沒有做好所導緻的。
軟件配置管理的意義我們已經知道缺失軟件配置管理後,軟件開發活動是多麼混亂和無序,這是因為根據軟件項目的特點,軟件必須進行配置管理。
軟件項目日趨龐雜,需要很多人協作,需要在多種平台上運行,需要支持若幹版本,又處于不斷演化和變更狀态,容易拷貝,等等這些特點,決定了軟件配置管理的必要性。
軟件項目特點要求軟件進行配置管理
什麼是軟件配置管理配置管理最初來自于制造行業,用于規範設備的設計與制造,始終交付有效的産品。
之所以叫“配置管理“,是因為成品基本都是由具備不同功能特性的零件配置起來的,随着成品的革新,零件也可能升級換代,配置管理需要把它們的版本和關系清楚記錄和管控。
為了便于理解,可以舉個比較生活化的例子。就拿餐館來說,為了讓每位客人最終享用到滿意的飯菜,避免發生做錯菜、上錯菜等錯誤,就需要将備料、點菜、加菜、制作、留樣、上菜、退菜等環節中的影響菜品制成的要素有效地管控起來,如菜品對原料要求,客人對菜品的口味要求等,做好記錄和管控。
餐廳菜品配置管理示意(局部)
我們将以上場景平移到軟件開發過程中,客戶點的菜品就相當于軟件需求,客戶加菜、退菜相當于需求的變更,廚房做菜的過程就相當于設計、編碼,做成的菜品就是最終編譯打包後的軟件産品,整個過程如果沒有有效地記錄和控制,可想而知是多麼的混亂、無序和錯漏百出,結果也絕不會令人滿意。
所以,我們也可以把軟件也看成是逐步演化和裝配起來的,軟件開發也需要一種可以将形成和影響軟件中間或最終形态的各種“成份”加以識别,并管控其版本和變更,實現軟件每個狀态的可追溯,使整個過程能夠有條不紊地進行,而這就是所謂的軟件配置管理。
為便于從多個角度理解軟件配置管理,下面給出一些較為學術的描述:
[微風]CMM-CMMI 軟件能力成熟度模型與模型集成:
軟件配置管理是“軟件過程的關鍵要素,是開發和維護各個階段管理軟件演進過程的方法和規程”。
[微風]ISO 9000-3:1997 質量管理和質量保證标準 :
配置管理是一個管理學科,它對配置項(包括軟件項)的開發和支持生存期給予技術上的和管理上的指導。配置管理的應用取決于項目的規模、複雜程度和風險大小。
[微風]GB/T 11457:1995 《軟件工程術語》:
A.表示和确定系統中配置項的過程,在系統整個生存期内控制這些配置項的投放和更動,記錄并報告配置的狀态和更動要求,驗證配置項的完整性和正确性。
B.對下列工作進行技術和行動指導與監督的一套規範:
——對配置項的功能特性和物理特性進行标識和文件編制工作;
——控制這些特性的更動情況;
——記錄并報告這些更動進行的處理和實現的狀态。
[微風]IEEE 828-1998 配置管理技術标準:
軟件配置管理是軟件工程中用來管理軟件資産變更的一項規程,包括它所使用的相關工具和應用技術(流程和方法)。
軟件配置管理的原理我們知道,軟件是一個形成和演化的過程,在其生命周期中,它的形态和組成不斷地變化。最初,它的形态表現為業務需求文檔,接着又演化為系統需求的形态,進而被描述為概要設計和詳細設計,再接下來表現為代碼、依賴包、測試代碼等,後來又演變為部署包和安裝文檔,再後來是運行的産品和用戶手冊。
軟件形态演進簡單示意
可以将軟件演進比作一棵小樹逐漸成長為大樹的過程,這棵樹就是我們的軟件,樹的樹根、樹幹、枝條、樹葉、花、果實等就是形成軟件的文檔、代碼等,我們隻要完整記錄樹根、枝條、樹葉等的每次變化,就能随時“還原”出樹在某個時刻的模樣。我們再對枝條修剪、果實采摘等行為進行規範管理,就可以使這棵樹按照預定的目标健康有序成長。
樹木有序成長
所以,軟件配置管理的原理就是:通過對軟件的各配置項各版本進行有效記錄,并對它們的變更進行管控,來維護軟件的完整性、正确性和可追溯性,最終實現軟件的有序和高效演進。配置管理的核心就是對版本和變更的管理,就是在管理變化。
由此,我們也可以從另一個角度認識軟件配置:
軟件配置是軟件産品在生命周期各階段的不同形式和不同版本的程序、文檔和數據的集合,集合中的每個元素就是一個配置項。
下圖描述了包含階梯式、變更集、變化跟蹤、并行開發等多個配置管理的方法論,用于協調問題跟蹤和變更管理(見于徐曉春、李高健編寫的《軟件配置管理》)。
配置管理的若幹方法論
軟件配置管理的目标軟件配置管理應實現配置管理的計劃性、配置項的完整識别、配置項獲取和變更的受控、軟件狀态便于了解等目标和效果。
軟件配置管理的目标
軟件配置管理的任務為了做好軟件配置管理,達到其應有效果,除了做好對配置項的标識、版本管理、變更控制等核心任務外,還需要做好計劃、培訓、審計、報告等輔助工作。
軟件配置管理工作任務
配置管理工作任務順序關系
也可以将軟件配置管理活動劃分為版本控制、變更控制和過程控制三個方面。
軟件配置管理的三個方面
下圖體現了主要配置管理活動的層次關系。
配置管理的層次
軟件配置管理的組織和流程為了有序開展軟件配置管理的以上活動,需要建立一些組織和角色,以下是一種軟件配置管理組織和流程。
軟件配置管理角色和職責
軟件配置管理基本流程
軟件配置管理的模式在軟件配置管理中,有主分支、開發分支、本地工作空間、預發布分支、發布分支等模式可使用。
軟件配置管理常見模式
軟件配置管理的有效執行有成效的配置管理,需要形成人、規範和工具三方面有機結合的最佳實踐。
軟件配置管理最佳實踐
配置項軟件配置是一個集合,該集合中的每一個元素稱為該軟件産品軟件配置中的一個配置項(Software Configuration Item,SCI)。常見的軟件配置項有需求規格說明書、設計規格說明書、源代碼、測試計劃、測試用例、用戶手冊等
軟件配置項
标識配置項需要考慮配置項組名、配置項名稱、配置項文件名或命名規則、版本編号和變更規程等。
配置項标識考慮因素
配置庫一般将配置庫分為開發庫、受控庫和産品庫。
配置庫劃分
配置基線基線(Baseline)是指一個(或一組)配置項在項目生命周期的不同時間點上通過正式評審而進入正式受控的一種狀态,是軟件生命周期中各開發階段的一個特定點,它的作用是把開發各階段工作的劃分更加明确化,使本來連續的工作在這些點上斷開,以便于檢查與肯定階段成果。
配置基線
配置基線與開發階段
配置管理與DevOpsDevOps推崇”一切自動化“,而軟件配置管理則是“一切自動化”的基石。
要實現“一切自動化”,需要将需求、代碼、軟件包、部署包,乃至基礎設施,等等一切影響構建、測試、部署的元素都版本化,都納入配置管理中來,在各階段共享唯一受信源,實現可追溯、可重現。
一切版本化、一切自動化
結語随着軟件行業的發展,敏捷和DevOps的廣泛流行,軟件配置管理的實踐也一直在演化之中,一些舊的概念和做法逐漸限于在部分行業領域中使用,像基礎設施即代碼、不可變基礎設施等新興理念和實踐,也在大範圍應用之中,軟件配置管理的重要性将越來越高。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!