軟件配置管理實(shí)施體會(huì)
陳越,fashi@etang.com
隨著軟件產(chǎn)業(yè)的崛起,軟件工程技術(shù)正吸引著越來(lái)越多關(guān)注的目光。作為軟件工程的一個(gè)重要的領(lǐng)域,軟件配置管理(Software Configuration Management)也日益受到人們的重視。在這里,筆者并不打算對(duì)軟件配置管理的細(xì)節(jié)進(jìn)行討論,幾乎任何一本關(guān)于軟件工程的教材中都有專門的章節(jié)對(duì)此進(jìn)行介紹,而是想從一個(gè)實(shí)踐者的角度來(lái)闡述關(guān)于軟件配置管理的一些想法。
一. 軟件配置管理的目的
對(duì)于任何一個(gè)軟件組織(企業(yè))來(lái)說(shuō),開(kāi)發(fā)出滿足用戶需求的、高質(zhì)量的軟件產(chǎn)品是其追求的目標(biāo)。而要實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵是建立起一個(gè)穩(wěn)定、可控、可重用的軟件流程(Software Process)。因?yàn)槟骋卉浖a(chǎn)品的成敗可能維系于關(guān)鍵技術(shù)的突破和創(chuàng)新;但對(duì)于軟件組織而言,要想永葆競(jìng)爭(zhēng)優(yōu)勢(shì)并不斷取得成功,那就必須不斷地改進(jìn)它的軟件流程。要進(jìn)行軟件流程改進(jìn)(Software Process Improvement)就需要有明確的、量化的對(duì)現(xiàn)狀的分析和對(duì)未來(lái)的預(yù)期,這些數(shù)據(jù)來(lái)源于對(duì)軟件過(guò)程的度量,而進(jìn)行度量的前提和基礎(chǔ)就是軟件配置管理。
與一般制造業(yè)相類似,軟件流程就像是一條流水線,在它的各個(gè)環(huán)節(jié)上都會(huì)有“零部件”產(chǎn)生,它們就是我們所熟悉的程序、相關(guān)文檔以及數(shù)據(jù)。這些正是軟件配置管理的對(duì)象——(軟件)配置項(xiàng)。它們不僅是大量人力物力投入的結(jié)晶,更是開(kāi)發(fā)經(jīng)驗(yàn)的積累,是軟件組織最寶貴的財(cái)富。軟件配置管理貫穿于軟件開(kāi)發(fā)活動(dòng)的始終,覆蓋了開(kāi)發(fā)活動(dòng)的各個(gè)環(huán)節(jié),它的重要作用之一就是要全面的管理保存各個(gè)配置項(xiàng),監(jiān)控各配置項(xiàng)的狀態(tài),并向項(xiàng)目經(jīng)理及相關(guān)的人員報(bào)告,從而實(shí)現(xiàn)對(duì)軟件過(guò)程的控制。
那么我們對(duì)這些配置項(xiàng)進(jìn)行管理只是為了保存這些信息嗎?眾所周知,人員的高流動(dòng)性和知識(shí)和技術(shù)的快速更新是軟件業(yè)的重要特點(diǎn)。應(yīng)對(duì)這樣的特點(diǎn)我們只有努力地把開(kāi)發(fā)人員個(gè)人的成功經(jīng)驗(yàn)轉(zhuǎn)化為團(tuán)隊(duì)的以及整個(gè)組織的經(jīng)驗(yàn)。在這樣的一個(gè)轉(zhuǎn)化過(guò)程中,軟件配置管理也起著極其重要的作用。因?yàn)閷?duì)于一個(gè)大型的軟件企業(yè)來(lái)說(shuō),它的配置庫(kù)有如一個(gè)巨大的圖書館,隨著產(chǎn)品版本的不斷演進(jìn),越來(lái)越多的配置項(xiàng)會(huì)充斥其間,以至于沒(méi)有任何一個(gè)人能了解其中的全部?jī)?nèi)容。當(dāng)我們需要在開(kāi)發(fā)組織內(nèi)部迅速的共享以往的成果時(shí),配置管理就能發(fā)揮作用了。它就像常見(jiàn)的圖書編目法那樣,幫助圖書管理員(配置管理員)迅速的找出所需的資料(配置項(xiàng)),而不必徹底了解其中的確切內(nèi)容。這樣工作效率大為提高,很多常見(jiàn)的容易引起混亂的問(wèn)題都能盡量得以避免。
所以,我們?cè)趶氖萝浖渲霉芾砉ぷ鲿r(shí)應(yīng)以整個(gè)軟件流程的改進(jìn)為目標(biāo),為軟件項(xiàng)目管理和軟件工程的其它領(lǐng)域打好基礎(chǔ),以便于穩(wěn)步推進(jìn)整個(gè)軟件組織的能力成熟度。
二. 工具的選擇
古語(yǔ)有云:“工欲善其事,必先利其器。”軟件配置管理是一項(xiàng)十分繁瑣的工作,同時(shí)又和整個(gè)軟件的開(kāi)發(fā)活動(dòng)緊密地聯(lián)系在一起,所以在實(shí)際工作中更需要有得力的工具輔助。目前常用的配置管理工具主要有MS SourceSafe、Rational ClearCase等,這些工具各有所長(zhǎng),因而只有根據(jù)項(xiàng)目的預(yù)算和開(kāi)發(fā)組織的些實(shí)際情況出發(fā)來(lái)選擇,正所謂“好用就好”。在這里,筆者提出一些個(gè)人的看法供大家參考。
首先,配置管理工具應(yīng)該提供完善的版本管理的功能。在該工具的所管理的配置庫(kù)中,所有的配置項(xiàng)都應(yīng)清晰、完整的得到保存,相應(yīng)的操作紀(jì)錄完備,使得開(kāi)發(fā)組織中的任何人員都能迅速的了解任一配置項(xiàng)的演進(jìn)過(guò)程,并快捷的找到所需的資源。
其次,配置管理工具應(yīng)具備一定的工作空間的管理功能。正如前文指出的那樣,一個(gè)軟件企業(yè)往往有多個(gè)項(xiàng)目同時(shí)進(jìn)行著開(kāi)發(fā),為了最大程度的利用組織的經(jīng)驗(yàn)、共享成果,我們有必要在一個(gè)共同的配置庫(kù)里提供多視角的觀察手段,在邏輯上按照不同的角色分工來(lái)組織信息的選取規(guī)則和顯示方式,從而能根據(jù)需要,在開(kāi)發(fā)人員間靈活的進(jìn)行分工合作。
由于我們把配置管理工作立足于軟件過(guò)程的改進(jìn),那么我們所選用的工具最好能具有一定的過(guò)程控制的能力,能利用它按照企業(yè)本身的開(kāi)發(fā)流程來(lái)靈活的建立相應(yīng)的電子流,并在此過(guò)程中記錄用于過(guò)程度量的相關(guān)數(shù)據(jù),整合軟件過(guò)程管理的各個(gè)環(huán)節(jié),以便于客觀的發(fā)現(xiàn)問(wèn)題,高效的解決問(wèn)題。
另外,我們選取得工具一定要操作簡(jiǎn)便,不能給開(kāi)發(fā)人員增加過(guò)多的負(fù)擔(dān),因?yàn)檫^(guò)多的形式化的約束往往帶來(lái)人們的反感,使得大家不約而同的選擇規(guī)避的措施,其結(jié)果只能是事倍功半,甚至和我們的目標(biāo)南轅北轍。
三. 實(shí)現(xiàn)的策略
筆者所在的軟件組織從事的通信軟件的研發(fā),我們把配置管理作為推進(jìn)軟件過(guò)程改進(jìn)的一個(gè)很重要的工作領(lǐng)域。我們明確定義了配置管理相關(guān)的角色、工作職責(zé)和工作流程,通過(guò)一段時(shí)間的努力,已經(jīng)取得了明顯的效果。
1. 配置庫(kù)的設(shè)置
決定配置庫(kù)的結(jié)構(gòu)是配置管理活動(dòng)的重要基礎(chǔ)。一般常用的是兩種組織形式:按配置項(xiàng)類型分類建庫(kù)和按任務(wù)建庫(kù)。
按配置項(xiàng)的類型分類建庫(kù)的方式經(jīng)常為一些咨詢服務(wù)公司所推薦,它適用于通用的應(yīng)用軟件開(kāi)發(fā)組織。這樣的組織一般產(chǎn)品的繼承性較強(qiáng),工具比較統(tǒng)一,對(duì)并行開(kāi)發(fā)有一定的需求。使用這樣的庫(kù)結(jié)構(gòu)有利于對(duì)配置項(xiàng)的統(tǒng)一管理和控制,同時(shí)也能提高編譯和發(fā)布的效率。但由于這樣的庫(kù)結(jié)構(gòu)并不是面向和各個(gè)開(kāi)發(fā)團(tuán)隊(duì)的開(kāi)發(fā)任務(wù)的,所以可能會(huì)造成開(kāi)發(fā)人員的工作目錄結(jié)構(gòu)過(guò)于復(fù)雜,帶來(lái)一些不必要的麻煩。
而按任務(wù)建立相應(yīng)的配置庫(kù)則適用于專業(yè)軟件的研發(fā)組織。在這樣的組織內(nèi),使用的開(kāi)發(fā)工具種類繁多,開(kāi)發(fā)模式以線性發(fā)展為主,所以就沒(méi)有必要把配置項(xiàng)嚴(yán)格的分類存儲(chǔ),人為增加目錄的復(fù)雜性。因此,筆者認(rèn)為特別是對(duì)于研發(fā)性的軟件組織來(lái)說(shuō),還是采用這種設(shè)置策略比較靈活。
2. 分支的劃分
在實(shí)際的開(kāi)發(fā)活動(dòng)中系統(tǒng)中,為了讓每個(gè)開(kāi)發(fā)人員和各個(gè)開(kāi)發(fā)團(tuán)隊(duì)能更好的分工合作,同時(shí)又互不干擾,我們基本上為每個(gè)配置項(xiàng)從建立開(kāi)始就劃分成3個(gè)不同的分支,讓它們分別對(duì)應(yīng)3類工作空間。
l 私有分支
私有分支對(duì)應(yīng)的是開(kāi)發(fā)人員的私有開(kāi)發(fā)空間。開(kāi)發(fā)人員根據(jù)任務(wù)分工獲得對(duì)相應(yīng)配置項(xiàng)的操作許可之后,他即在自己的私有開(kāi)發(fā)分支上工作,他的所有工作成果體現(xiàn)為在該配置項(xiàng)的私有分支上的版本的推進(jìn),除該開(kāi)發(fā)人員外,其他人員均無(wú)權(quán)操作該私有空間中的元素。
l 集成分支
集成分支對(duì)應(yīng)的是開(kāi)發(fā)團(tuán)隊(duì)的公共空間。凡是要為同組人員共享的配置項(xiàng)都從該分支獲得。即各開(kāi)發(fā)人員必須將私有工作空間中的開(kāi)發(fā)成果歸并(Merge)到該分支后才能進(jìn)入下一個(gè)開(kāi)發(fā)活動(dòng)。所有涉及多人協(xié)調(diào)的開(kāi)發(fā)工作(如集成測(cè)試等)都必須工作在這一空間中。該開(kāi)發(fā)團(tuán)隊(duì)擁有對(duì)該集成分支的讀寫權(quán)限,而其他成員只有只讀權(quán)限。該分支的管理工作由系統(tǒng)集成員及相關(guān)指定人員負(fù)責(zé)。
l 公共(主干)分支
公共分支對(duì)應(yīng)的是整個(gè)軟件開(kāi)發(fā)組織的公共空間。各個(gè)開(kāi)發(fā)小組在現(xiàn)階段的任務(wù)完成后,將可以發(fā)布的版本歸并到該分支上,將來(lái)需要查閱相關(guān)資料時(shí),以該分支上的版本為準(zhǔn)。該分支對(duì)組織內(nèi)的全體軟件人員開(kāi)放只讀權(quán)限。該分支的管理工作由系統(tǒng)集成員負(fù)責(zé)。
上面定義的3類工作空間(分支)由配置管理員統(tǒng)一管理,根據(jù)各開(kāi)發(fā)階段的實(shí)際情況定制相應(yīng)的版本選取規(guī)則,來(lái)保證開(kāi)發(fā)活動(dòng)的正常運(yùn)作。在變更發(fā)生時(shí),應(yīng)及時(shí)做好基線的推進(jìn)。
3. 變更控制
對(duì)于大型的軟件開(kāi)發(fā)項(xiàng)目,無(wú)控制的變更將迅速導(dǎo)致混亂,變更控制就是通過(guò)結(jié)合人的規(guī)程和自動(dòng)化工具,以提供一個(gè)變化控制的的機(jī)制。本文所涉及的變更控制的對(duì)象主要指配置庫(kù)中的各基線配置項(xiàng)。變更管理的一般流程是:
A) 由開(kāi)發(fā)人員或系統(tǒng)集成員提出變更需求;
B) 由SCCB(軟件變更控制委員會(huì))審核并決定是否批準(zhǔn);
C) 配置管理員根據(jù)SCCB的決定臨時(shí)開(kāi)放相應(yīng)的權(quán)限,并備案;
D) 系統(tǒng)集成員執(zhí)行相應(yīng)的變更。
在這里,將要涉及的變更控制分為兩類:一類是基線的變更控制,另一類是軟件版本的變更控制。
l 基線的變更控制
基線的變更是指在一個(gè)軟件版本的開(kāi)發(fā)周期內(nèi)對(duì)基線配置項(xiàng)的變更,主要包括基線的應(yīng)用和更新等活動(dòng)。
基線變更所涉及的操作主要包括基線標(biāo)簽的定義和標(biāo)簽的使用?;€標(biāo)簽屬于嚴(yán)格受控的配置項(xiàng),它的命名必須嚴(yán)格按照相關(guān)的命名規(guī)范來(lái)進(jìn)行?;€在建立時(shí),按照角色職責(zé)的分工,須經(jīng)SCCB同意并以正式的將該基線的標(biāo)識(shí)和作用范圍通知系統(tǒng)集成員,由后者負(fù)責(zé)執(zhí)行;基線一旦劃定,由該基線控制的各配置項(xiàng)的歷史版本均處于鎖定或嚴(yán)格受控狀態(tài),任何對(duì)基線位置的變更請(qǐng)求都必須按變更控制流程,提交SCCB批準(zhǔn),然后由系統(tǒng)集成員執(zhí)行。
l 軟件版本的變更
軟件版本的命名規(guī)范應(yīng)事先制定,并按照開(kāi)發(fā)計(jì)劃予以發(fā)布使用。在軟件版本的演進(jìn)過(guò)程中既需要從以前的版本中繼承,又需要相對(duì)的獨(dú)立性。所以在對(duì)于一個(gè)子版本(例如某特定用戶的定制版本)就需要對(duì)一系列配置項(xiàng)從統(tǒng)一的開(kāi)發(fā)起始基線所確定的版本上建立新的分支,然后在此分支上開(kāi)發(fā)新的版本。因此在這樣的變更控制流程中,受控的對(duì)象還應(yīng)包括特定的分支類型,以及工作視圖的選取規(guī)則,同時(shí)配置管理員將在這一過(guò)程中擔(dān)負(fù)更多的操作職責(zé)。
上述幾點(diǎn)是筆者在從事軟件配置管理過(guò)程中的一些心得體會(huì),在此拋磚引玉,供大家參考。
本文來(lái)自《PMT評(píng)論》總第23期
|