配置管理 - 通過技術(shù)對軟件產(chǎn)品進(jìn)行控制的措施
配置管理(ConfigurationManagement,CM)是通過技術(shù)或行政手段對軟件產(chǎn)品及其開發(fā)過程和生命周期進(jìn)行控制、規(guī)范的一系列措施。配置管理必須緊扣軟件開發(fā)過程的各個(gè)環(huán)節(jié):管理用戶所提出的需求,監(jiān)控其實(shí)施,確保用戶需求最終落實(shí)到產(chǎn)品的各個(gè)版本中去,并在產(chǎn)品發(fā)行和用戶支持等方面提供幫助,響應(yīng)用戶新的需求,推動新的開發(fā)周期。

功能
并行開發(fā)支持
因開發(fā)和維護(hù)的原因,要求能夠?qū)崿F(xiàn)開發(fā)人員同時(shí)在同一個(gè)軟件模塊上工作,同時(shí)對同一個(gè)代碼部分作不同的修改,即使是跨地域分布的開發(fā)團(tuán)隊(duì)也能互不干擾,協(xié)同工作,而又不失去控制。
修訂版管理
跟蹤每一個(gè)變更的創(chuàng)造者、時(shí)間和原因,從而加快問題和缺陷的確定。
版本控制
能夠簡單、明確地重現(xiàn)軟件系統(tǒng)的任何一個(gè)歷史版本。
產(chǎn)品發(fā)布管理:管理、計(jì)劃軟件的變更,與軟件的發(fā)布計(jì)劃、預(yù)先定制好的生命周期或相關(guān)的質(zhì)量過程保持一致。項(xiàng)目經(jīng)理能夠隨時(shí)清晰地了解項(xiàng)目的狀態(tài)。
管理過程
建立管理
基于軟件存儲庫的版本控制功能,實(shí)現(xiàn)建立(build)過程自動化。
過程控制
貫徹實(shí)施開發(fā)規(guī)范,包括訪問權(quán)限控制、開發(fā)規(guī)則的實(shí)施等。
變更請求管理:跟蹤、管理開發(fā)過程中出現(xiàn)的缺陷(Defect)、功能增強(qiáng)請求(RFE)或任務(wù)(Task),加強(qiáng)溝通和協(xié)作,能夠隨時(shí)了解變更的狀態(tài)。
代碼共享
提供良好的存儲和訪問機(jī)制,開發(fā)人員可以共享各自的開發(fā)資源。
實(shí)施
實(shí)施配置管理系統(tǒng),一般的步驟和需要考慮的問題如下:
規(guī)劃、調(diào)整網(wǎng)絡(luò)開發(fā)環(huán)境
一個(gè)規(guī)劃良好的開發(fā)環(huán)境,是實(shí)施配置管理系統(tǒng)的前提。在此階段我們要對配置管理系統(tǒng)做出規(guī)劃,主要考慮以下問題:
網(wǎng)絡(luò)的帶寬、拓?fù)浣Y(jié)構(gòu)
服務(wù)器的選擇、命名規(guī)范
存儲區(qū)的定位
開發(fā)人員及組的命名規(guī)約等
設(shè)計(jì)配置管理庫
根據(jù)項(xiàng)目開發(fā)的要求,設(shè)計(jì)開發(fā)資源的存儲模式,良好的存儲模式有利于減輕管理上的負(fù)擔(dān),增強(qiáng)配置管理庫的訪問性能,同時(shí)便于控制訪問權(quán)限,保護(hù)軟件資產(chǎn)。
定義配置管理系統(tǒng)的角色
在此階段,我們需要確定與配置管理相關(guān)的所有角色,包括他們的相應(yīng)的活動。在開發(fā)過程中,一個(gè)開發(fā)人員可能兼任多種角色,但一項(xiàng)任務(wù)在同一時(shí)刻只能由一個(gè)角色來執(zhí)行。
一般配置管理中的角色主要包括:
項(xiàng)目經(jīng)理:項(xiàng)目經(jīng)理在配置管理方面的職責(zé)是依靠配置管理員、系統(tǒng)管理員和系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)人員的幫助,制定項(xiàng)目的組織結(jié)構(gòu)和配置管理策略。這些工作包括:定制開發(fā)子系統(tǒng),定制訪問控制,制定常用策略,制定集成里程碑,以及進(jìn)行系統(tǒng)集成。
配置管理員:配置管理員的職責(zé)是根據(jù)項(xiàng)目經(jīng)理制定的開發(fā)組織結(jié)構(gòu)和策略,實(shí)施、維護(hù)配置管理的環(huán)境。其主要職責(zé)如下:創(chuàng)建配置管理庫,對存儲庫進(jìn)行日常備份和恢復(fù),維護(hù)配置管理環(huán)境,及管理配置管理相關(guān)的用戶。
軟件開發(fā)人員:軟件開發(fā)人員依據(jù)項(xiàng)目的開發(fā)和配置管理策略,創(chuàng)建、修改和測試開發(fā)工件。
集成人員:對軟件進(jìn)行歸并,形成相應(yīng)的基線或發(fā)布版本。
QA人員:需要對軟件配置管理有較深的認(rèn)識,其主要工作是跟蹤當(dāng)前項(xiàng)目的狀態(tài),測試,報(bào)告錯(cuò)誤,并驗(yàn)證其修復(fù)結(jié)果。
制定配置管理流程
這是配置管理實(shí)施的一個(gè)重要階段,其主要目的是根據(jù)項(xiàng)目開發(fā)的需要,制定相應(yīng)的配置管理流程,以更好地支持開發(fā),主要活動包括:
定制并行開發(fā)策略:合理的并行開發(fā)策略應(yīng)該具有以下特點(diǎn):協(xié)調(diào)項(xiàng)目的復(fù)雜性和需求,統(tǒng)一創(chuàng)建分支類型和元數(shù)據(jù),為開發(fā)過程中的變更集成制定有效的規(guī)范,適時(shí)反映開發(fā)過程中方法和需求的變化。
發(fā)布版本管理:軟件開發(fā)過程中的一個(gè)關(guān)鍵活動是提取工件的相關(guān)版本,以形成軟件系統(tǒng)的階段版本或發(fā)布版本,我們一般將其稱為穩(wěn)定基線。一個(gè)穩(wěn)定基線代表新開發(fā)活動的開始,而一系列定制良好的活動之后又會產(chǎn)生一個(gè)新的穩(wěn)定基線。有效地利用此項(xiàng)功能,在項(xiàng)目開發(fā)過程中可以自始至終管理、跟蹤工件版本間的關(guān)聯(lián)。
一般來講,實(shí)施配置管理系統(tǒng),相關(guān)人員需要接受以下培訓(xùn):
管理員培訓(xùn):針對配置管理員,主要學(xué)習(xí)配置管理工具管理相關(guān)內(nèi)容。
開發(fā)人員培訓(xùn):針對開發(fā)人員,主要學(xué)習(xí)配置管理工具與開發(fā)相關(guān)的常用操作。
管理流程培訓(xùn):針對全體人員,目的是了解配置管理策略和流程,以及如何與開發(fā)管理、項(xiàng)目管理相結(jié)合。
經(jīng)驗(yàn)
圍繞配置管理,世界一些致力于軟件工程研究的公司在深入理解ISO9000的基礎(chǔ)上,推出了各種符合ISO9000配置管理標(biāo)準(zhǔn)的工具軟件,如INTERSOLV公司的PVCS,Rational公司的ClearCase等。這些配置管理工具面向軟件規(guī)范化、工程化、自動化的需要,幫助開發(fā)團(tuán)隊(duì)提高科學(xué)管理水平,從而提高工程效率,降低工程成本。
現(xiàn)以PVCS為例,結(jié)合我們的實(shí)際經(jīng)驗(yàn),談?wù)勎覀儗?shí)施配置管理的益處:
節(jié)約費(fèi)用
- 1縮短開發(fā)周期
利用PVCS的VersionManager對程序資源進(jìn)行版本管理和跟蹤,建立公司的代碼知識庫,保存開發(fā)過程中每一過程版本,這樣大大提高了代碼的重用率,還便于同時(shí)維護(hù)多個(gè)版本和進(jìn)行新版本的開發(fā),防止系統(tǒng)崩潰,最大限度地共享代碼。同時(shí)項(xiàng)目管理人員可以通過VersionManager查看項(xiàng)目開發(fā)日志,測試人員可以根據(jù)開發(fā)日志和不同版本對軟件進(jìn)行測試,工程人員可以從VersionManager上得到不同的運(yùn)行版本,并且VersionManager可以安裝在WebServer供外地施工人員存取最新版本,無需開發(fā)人員親臨現(xiàn)場。
利用Tracker組建開發(fā)團(tuán)體之間的問題跟蹤及消息通迅,通過其Notify模塊與電子郵件結(jié)合起來大大加強(qiáng)了開發(fā)團(tuán)體之間的溝通,Reporter模塊可對發(fā)現(xiàn)的問題進(jìn)行整理、以報(bào)表方式分類報(bào)出,作為開發(fā)的指導(dǎo)。
以上為PVCS的兩個(gè)主要模塊,科學(xué)地應(yīng)用可以大大提高開發(fā)效率,避免了代碼復(fù)蓋、溝通不夠、開發(fā)無序的混亂局面,如果利用了公司原有的知識庫,則更能提高工作效率,縮短開發(fā)周期。
- 2減少施工費(fèi)用
利用PVCS進(jìn)行軟件配置管理后,建立開發(fā)管理規(guī)范,把版本管理檔案掛接在公司內(nèi)部的Web服務(wù)器上,內(nèi)部直接通過Netscape訪問VersionManager,工程人員通過遠(yuǎn)程進(jìn)入內(nèi)部網(wǎng),獲取所需的最新版本。開發(fā)人員無需下現(xiàn)場,現(xiàn)場工程人員通過對方系統(tǒng)管理員收集反饋意見,書面提交到公司內(nèi)部開發(fā)組項(xiàng)目經(jīng)理,開發(fā)組內(nèi)部討論決定是否修改,并作出書面答復(fù)。這樣做,可以同時(shí)響應(yīng)多個(gè)項(xiàng)目點(diǎn),防止開發(fā)人員分配到各個(gè)項(xiàng)目點(diǎn)、分散力量、人員不夠的毛病,同時(shí)節(jié)約大量的旅差費(fèi)用。
有利于知識庫的建立
- 1代碼對象庫
軟件代碼是軟件開發(fā)人員腦力勞動的結(jié)晶,也是軟件公司的寶貴財(cái)富,長期開發(fā)過程中形成的各種代碼對象就像一個(gè)個(gè)零件坯一樣,是快速生成系統(tǒng)的組成部分。長期的一個(gè)事實(shí)是:一旦某個(gè)開發(fā)人員離開工作崗位,其原來所作的代碼便基本成為垃圾,無人過問。究其原因,就是沒有專門對各人的有用對象進(jìn)行管理,把其使用范圍擴(kuò)大到公司一級,進(jìn)行規(guī)范化,加以說明和普及。VersionManager為對象管理提供了一個(gè)平臺和倉庫,有利于建立公司級的代碼對象庫。
- 2業(yè)務(wù)及經(jīng)驗(yàn)庫
通過PVCSVersionManager的注釋及Tracker,可形成完整的開發(fā)日志及問題集合,以文字方式伴隨開發(fā)的整個(gè)過程,不依某個(gè)人的轉(zhuǎn)移而消失,有利于公司積累業(yè)務(wù)經(jīng)驗(yàn),無論對版本整改或版本升級,都具有重要的指導(dǎo)作用。
規(guī)范管理
- 1量化工作量考核
傳統(tǒng)的開發(fā)管理中,工作量一直是難以估量的指標(biāo),靠開發(fā)人員自己把握,隨意性相當(dāng)大;靠管理人員把握,主觀性又太強(qiáng)。采用PVCS管理后,開發(fā)人員每天下班前對修改的文件CheckIn,其中記述當(dāng)天修改細(xì)節(jié)描述,這些描述可以作為工作量的衡量指標(biāo)。
- 2規(guī)范測試
采用PVCS以后,測試有了實(shí)實(shí)在在的工作,測試工作人員根據(jù)每天的修改細(xì)節(jié)描述對每一天的工作做具體的測試,對測試人員也具有可考核性,這樣環(huán)環(huán)相扣,大大減少了其工作的隨意性。
- 3加強(qiáng)協(xié)調(diào)與溝通
采用PVCS后,通過VersionManager文檔共享及其特定鎖機(jī)制、Tracker與電子郵件的集成,大大加強(qiáng)了項(xiàng)目成員之間的溝通,做到有問題及時(shí)發(fā)現(xiàn)、及時(shí)修改、及時(shí)通知,但又不額外增加很多的工作量。
精髓
具體來講,配置管理包含如下內(nèi)容:
?標(biāo)識:識別產(chǎn)品的結(jié)構(gòu)、產(chǎn)品的構(gòu)件及其類型,為其分配唯一的標(biāo)識符,并以某種形式提供對它們的存取。
?控制:通過一定的機(jī)制控制對配置項(xiàng)的修改。
?狀態(tài)報(bào)告:記錄并報(bào)告配置項(xiàng)以及元數(shù)據(jù)的狀態(tài)。
?配置審計(jì):確認(rèn)產(chǎn)品的完整性并維護(hù)配置項(xiàng)間的一致性。
從上面的描述,我們知道,配置管理的基本單位是配置項(xiàng)。
從“哲學(xué)”意義上講,它記錄配置項(xiàng)的三個(gè)方面:
?從哪里來?此項(xiàng)可歸結(jié)為WWW的問題,(Who)誰創(chuàng)建的?(When)什么時(shí)間創(chuàng)建的?(Why)為什么創(chuàng)建此配置項(xiàng)?
?當(dāng)前在哪里?此項(xiàng)紀(jì)錄配置項(xiàng)當(dāng)前的存儲位置以及狀態(tài)。
?將到哪里去?通過配置控制來把配置項(xiàng)“組裝”到正確的版本中去。
配置項(xiàng)可以是大粒度的,也可以是小粒度的。如果跟蹤個(gè)別需求,那么不必要把整個(gè)需求規(guī)格說明文檔定義為一個(gè)配置項(xiàng),可以把每個(gè)需求定義為配置項(xiàng)。如果把軟件開發(fā)工具也放入配置管理系統(tǒng),那么把配置項(xiàng)定義為文件級就不合適了,只需要跟蹤開發(fā)工具的版本,即把整個(gè)配置工具定義為一個(gè)配置項(xiàng)就足夠了。
簡而言之,配置項(xiàng)可以是文件級粒度的,也可以是文件版本級粒度的。當(dāng)然,粒度越小管理的成本越高,但是配置的精度也就越高。
一個(gè)完整的SCM系統(tǒng)要具有三個(gè)核心功能:版本控制、變更控制、配置控制以及兩個(gè)支持功能:狀態(tài)統(tǒng)計(jì)和配置審計(jì)。
版本控制
版本,亦稱配置標(biāo)識,是指某一特定對象的具體實(shí)例的潛在存在。這里的某一特定對象是指版本維護(hù)工具管理的軟件組成單元,一般是指源文件。具體實(shí)例則是指軟件開發(fā)人員從軟件庫中恢復(fù)出來的某軟件組成單元的具有一定內(nèi)容和屬性的一個(gè)真實(shí)拷貝。例如,對源文件的每一次修改都生成一個(gè)新版本。
版本控制就是對在軟件開發(fā)過程中所創(chuàng)建的配置對象的不同版本進(jìn)行管理,保證任何時(shí)候都能取到正確的版本以及版本的組合。
當(dāng)前,這方面典型的工具有如VSS和CVS。
變更控制
變更控制是通過對變更請求(ChangeRequest,簡稱CR)進(jìn)行分類、追蹤和管理的過程來實(shí)現(xiàn)的。
變更的起源有兩種:功能變更和缺陷修補(bǔ)(Bug-Fix)。功能變更是為了增加或者刪除某些功能。缺陷修補(bǔ)則是對已存在的缺陷進(jìn)行修補(bǔ)。
對變更進(jìn)行控制的機(jī)構(gòu)稱為變更控制委員會(ChangeControlBoard,簡稱CCB)。變更控制委員會要定期召開會議,對近期所產(chǎn)生的變更請求進(jìn)行分析、整理,并做出決定。而且要遵循一定的變更機(jī)制。
下面是一個(gè)典型的變更機(jī)制:
我們可以隨著變更過程的推進(jìn),提升配置項(xiàng)的狀態(tài)。這方面的工具有Bugzilla。
配置控制
配置控制使用戶能夠通過對適當(dāng)版本的選擇來組成特定屬性(配置)的軟件系統(tǒng),這種靈活的“組裝”策略使得配置管理系統(tǒng)象搭積木似的使用已有的積木(版本)組裝成各種各樣、不同功能的模型。
軟件產(chǎn)品的每個(gè)版本都是一組配置項(xiàng)(源代碼、文檔、數(shù)據(jù))的集合。配置控制就是要保證每個(gè)配置的完整性和精確性。
舉個(gè)例子來說,我們要發(fā)布軟件的32.6版本,那么我們就要把源代碼、文檔、數(shù)據(jù)中所有這個(gè)應(yīng)該包含到這個(gè)版本中的正確配置項(xiàng)檢出。
在開發(fā)過程中,我們在不同階段要建立各種基線?;€的建立是配置控制功能的典型應(yīng)用。所以說,基線是具有里程碑意義的一個(gè)配置。
一般的商業(yè)軟件配置管理工具都具有配置控制的功能,只是靈活性和精確性有差別。
狀態(tài)報(bào)告
狀態(tài)報(bào)告要回答所謂4W的問題:
What:發(fā)生了什么事?
Who:誰做的此事?
When:此事是什么時(shí)候發(fā)生的?
Why:為什么做此事?
狀態(tài)報(bào)告還要能夠報(bào)告所有配置項(xiàng)以及變更請求的狀態(tài)。
配置審計(jì)
配置審計(jì)要審查整個(gè)配置管理過程是否符合規(guī)范,配置項(xiàng)是否與需求一致,記錄正確,配置的組成是否具有一致性等等。
由于現(xiàn)在軟件行業(yè)越來越重視質(zhì)量,許多項(xiàng)目專門成立質(zhì)量保證部門專門來進(jìn)行配置審計(jì)。所以現(xiàn)在也可以說,配置審計(jì)是一個(gè)SQA(軟件質(zhì)量保證)活動。
配置管理的商業(yè)模型
配置管理的實(shí)施包括兩部分:工具和規(guī)范。
在軟件開發(fā)過程自動化的今天,沒有工具的支持而實(shí)施配置完整的配置管理是不能想象的。因此選擇一個(gè)符合公司或項(xiàng)目的工具至關(guān)重要。在配置管理系統(tǒng)中,我們可歸納出四種模型。當(dāng)前商業(yè)工具一般采用其中一種或幾種模型。
我們通過對商業(yè)模型的理解可以幫助我們了解某種工具是否適合我們公司或項(xiàng)目。
CICO模型
CICO模型主要關(guān)注的是單個(gè)文件的版本控制。圖顯示了一個(gè)支持CICO模型的CM系統(tǒng)的工作過程。用戶利用庫和文件系統(tǒng)來進(jìn)行工作。文件被版本化并存儲到庫中,新版本的產(chǎn)生是由庫工具控制的。然而,文件在庫中不是可以直接存取的,用戶必須去檢出(即CheckOut)一個(gè)文件的版本到工作空間中以便讀取它的內(nèi)容。更改后的文件可以被檢入庫中(即Checkin),產(chǎn)生文件的一個(gè)新版本。
此模型的代表工具是SCCS和CVS。
組織模型
組織模型由CICO模型自然導(dǎo)出,建立于構(gòu)件版本圖的基礎(chǔ)之上,同時(shí)依賴于存儲庫和工作空間的概念,可以通過對構(gòu)件加鎖進(jìn)行并發(fā)控制。組織模型的重點(diǎn)是在CM系統(tǒng)支撐下加強(qiáng)了對創(chuàng)建配置、對有關(guān)的歷史信息的管理和使用他們作為工作環(huán)境的支持。
組織模型中的配置由系統(tǒng)模型和版本選擇規(guī)則組成。系統(tǒng)模型列出了組成系統(tǒng)的所有的構(gòu)件。版本選擇規(guī)則指出了組成配置的每一個(gè)構(gòu)件選擇版本。選擇規(guī)則用于系統(tǒng)模型,選擇構(gòu)件版本,即綁定一構(gòu)件到某一版本。這個(gè)模型的操作方式是:開發(fā)員根據(jù)模型的構(gòu)件定義整個(gè)系統(tǒng),并在每一步驟中給每個(gè)構(gòu)件選擇合適的版本。版本操作的工作方式如圖所示。
CM支持主要關(guān)心的是維護(hù)系統(tǒng)和其構(gòu)件的版本歷史,并選擇符合一致性配置的構(gòu)件版本。只有在所選構(gòu)件的版本與所選其它構(gòu)件版本一致時(shí)才認(rèn)為一個(gè)配置版本。
此模型的代表工具是CCC。
長事務(wù)模型
長事務(wù)模型主要支持包括一系列原子變更的全系統(tǒng)演變和由團(tuán)隊(duì)開發(fā)員對系統(tǒng)變更的協(xié)調(diào)。開發(fā)員主要操作配置而非單獨(dú)的構(gòu)件。事務(wù)提交的結(jié)果是新配置版本,一系列連續(xù)的變更結(jié)果生成一系列的配置版本,稱為開發(fā)路徑。
在長事務(wù)模型中,開發(fā)員主要的工作對象時(shí)配置,開發(fā)員首先選擇系統(tǒng)配置版本,接下來把關(guān)注重點(diǎn)放在系統(tǒng)結(jié)構(gòu)上。構(gòu)件的版本由配置隱式?jīng)Q定。長事務(wù)由兩個(gè)概念組成:工作空間和并發(fā)控制方案。工作空間來源于存儲庫或一個(gè)封閉工作空間中的一個(gè)固定配置。工作空間由工作配置和一系列已保存的配置組成。工作配置代表構(gòu)件和系統(tǒng)結(jié)構(gòu)能夠被動態(tài)更改的配置。提供通過工作空間進(jìn)行的透明庫訪問、將高效的庫存儲技術(shù)應(yīng)用于工作空間和管理派生構(gòu)件的版本。
此模型的代表系統(tǒng)是NSE。
變更集模型
主要集中于對系統(tǒng)配置的邏輯變更的支持。在這個(gè)模型中引入的變更集表示組成邏輯變更的對不同構(gòu)件修改的集合,它是創(chuàng)建變更的活動完成后對邏輯變更的記錄。支持這個(gè)模型的CM系統(tǒng)用戶可以直接操作變更集。在變更集模型中,配置可描述為由基線和一組變更集組成。
變更傳播給其它配置可通過包含各自變更集來進(jìn)行。開發(fā)員使用不同的集成策略將邏輯變更集包含到一個(gè)新的系統(tǒng)發(fā)行中。這樣的好處非常明顯,例如,我們現(xiàn)在維護(hù)10個(gè)不同版本的產(chǎn)品,現(xiàn)在要對所有的版本修改一個(gè)缺陷(Bug)。如果相同的工具簡單的重復(fù)10次顯然是不可接受的。而通過變更集把這個(gè)邏輯變更從一個(gè)版本自由的傳到另外一個(gè)版本。
開發(fā)員可跟蹤邏輯變更和確定這些變更是否屬于特定配置。這種配置管理的方法,因?yàn)槠鋵⒅攸c(diǎn)放于邏輯變更上,所以被稱作面向變更的配置管理。它不同于現(xiàn)在的其他3種CM模型,因?yàn)槠渌?種CM模型使用的面向版本的方法把重點(diǎn)放在構(gòu)件和配置版本上。
在單一構(gòu)件的情況下,變更集是兩個(gè)文件版本之間區(qū)別的集合,通常指的是增量內(nèi)容。對配置來說,變更集就是兩個(gè)配置版本之間區(qū)別的集合。這組區(qū)別就是兩個(gè)配置版本間的修改構(gòu)件增量集合,即變更構(gòu)件集的增量。
面向變更的觀點(diǎn)不同于面向版本的觀點(diǎn)。這有兩點(diǎn)不同,一是邏輯變更的顯式表示允許對與單個(gè)構(gòu)件和配置有關(guān)的變更集進(jìn)行跟蹤。二是引用單個(gè)變更集并有選擇地將它們納入配置管理中的這種能力提供了對系統(tǒng)演化管理的支持,這種演化是基于將邏輯變更傳播到維護(hù)的系統(tǒng)配置進(jìn)行的。
此模型的代表工具是UCM和SABLIME。
