1、標(biāo)識(shí)需要進(jìn)行存儲(chǔ)的工件(Artifact)并保障安全存儲(chǔ);
2、控制并且審計(jì)(Audit)對(duì)于工件的修改;
3、設(shè)立并管理基線(Baseline);
4、記錄并跟蹤變更請(qǐng)求;
5、維護(hù)穩(wěn)定、一致的工作空間;
6、支持對(duì)于工件和控件的并發(fā)修改;
7、盡早集成、持續(xù)集成;
8、保證軟件構(gòu)建的重現(xiàn)能力;
9、以控件(Component)為單位實(shí)施版本控制;
10、使用“活動(dòng)”(Activity)來(lái)組織和整合版本集。
下文將介紹前5條最佳實(shí)踐。
1、標(biāo)識(shí)需要進(jìn)行存儲(chǔ)的工件(Artifact)并保障安全存儲(chǔ)
在軟件開(kāi)發(fā)過(guò)程中,我們會(huì)得到各種各樣的產(chǎn)出,比如各種文檔、模型、源代碼以及測(cè)試腳本等,我們把這些大家勞動(dòng)的成果統(tǒng)稱為工件(Artifact)。對(duì)于一個(gè)軟件開(kāi)發(fā)組織來(lái)說(shuō),這些工件就構(gòu)成了組織的核心資產(chǎn)。對(duì)于如現(xiàn)金、有價(jià)證券之類的資產(chǎn),我們都會(huì)準(zhǔn)備一個(gè)保險(xiǎn)箱,好好地保存;對(duì)于軟件資產(chǎn),我們也需要相似的措施。所以,軟件配置管理工作的第一步就是建立一個(gè)安全、可靠的存儲(chǔ)庫(kù)(Repository),用于保存組織的核心軟件資產(chǎn)。
這個(gè)庫(kù)對(duì)于開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō),就像是財(cái)務(wù)室里的保險(xiǎn)箱。因此,容錯(cuò)能力和高可靠性是這個(gè)庫(kù)最重要的屬性。除此之外,隨著組織的增長(zhǎng),置于庫(kù)中的數(shù)據(jù)會(huì)越來(lái)越多,為保證運(yùn)行效率,庫(kù)的可擴(kuò)展性也是非常重要的一個(gè)屬性。
對(duì)于存儲(chǔ)庫(kù)來(lái)說(shuō),良好規(guī)劃的備份和災(zāi)難恢復(fù)過(guò)程是必不可少的。令人驚訝的是,很多軟件組織在這方面都沒(méi)有給予必要的重視,因而也給組織的發(fā)展留下了嚴(yán)重的隱患,一旦災(zāi)難發(fā)生,后果不堪設(shè)想。
在建立好存儲(chǔ)庫(kù)以后,需要做的工作就是確定將哪些工件置于庫(kù)中。根據(jù)實(shí)際需要,組織可能會(huì)決定只將正式文檔、模型文件、源代碼、發(fā)布版本等文件放入庫(kù)中,而對(duì)于臨時(shí)文檔、編譯時(shí)產(chǎn)生的中間文件等,則不將它們放入庫(kù)中。我們把放入庫(kù)中的文件稱之為配置項(xiàng)(Configuration Item)。
2、控制并且審計(jì)(Audit)對(duì)于工件的修改
在標(biāo)識(shí)相關(guān)的工件并將它們置于存儲(chǔ)庫(kù)中以后,我們需要建立對(duì)于這些工件的修改控制機(jī)制以及審計(jì)機(jī)制。
庫(kù)里的工件不是誰(shuí)想修改就可以修改的??刂茩C(jī)制必須保證只有拿到授權(quán)的人員才能對(duì)相關(guān)工件進(jìn)行修改,而審計(jì)機(jī)制則保證修改的動(dòng)作被完整地記錄,也就是說(shuō),誰(shuí)修改了這個(gè)工件,什么時(shí)候做的修改,為什么原因做出這個(gè)改動(dòng),以及修改了哪些地方(Who、When、Why、What)。
審計(jì)機(jī)制通常通過(guò)“檢出/檢入”(Check out/Check in)模式得到實(shí)現(xiàn)。在這種模式下,工件一旦入庫(kù),讀寫權(quán)限就變成只讀(read only),如果要對(duì)該工件進(jìn)行修改,則需要通過(guò)“檢出”這個(gè)步驟;在修改結(jié)束以后,如果希望將修改的成果入庫(kù),則需要通過(guò)“檢入”這個(gè)步驟。在經(jīng)過(guò)一次“檢出/檢入”步驟以后,會(huì)形成該工件新的版本,因此也有人把上邊的過(guò)程稱之為“版本控制”(Version Control)。在版本控制過(guò)程中,如果利用一些配置管理工具(或者版本控制工具)的支持,則可以自動(dòng)地記錄審計(jì)工作所需的四個(gè)“W”(Who、When、Why、What)。
3、設(shè)立并管理基線
通過(guò)審計(jì)機(jī)制我們可以保存一個(gè)工件完整的變更歷史;但是一個(gè)項(xiàng)目通常是由成百上千個(gè)工件構(gòu)成的,每個(gè)工件在變更過(guò)程中都會(huì)形成一系列的版本,如何確認(rèn)系統(tǒng)在某個(gè)時(shí)刻分別由哪些工件的哪些版本構(gòu)成?這就需要引入一個(gè)概念:配置(Configuration)。對(duì)于軟件系統(tǒng)來(lái)說(shuō),在開(kāi)發(fā)過(guò)程中某個(gè)時(shí)刻存儲(chǔ)庫(kù)中所有工件的一個(gè)“快照”(snapshot),就形成一個(gè)“配置”。對(duì)于一些重要時(shí)刻的系統(tǒng)配置,我們可以使用基線(Baseline)來(lái)進(jìn)行標(biāo)志。
IEEE對(duì)于基線的定義是:已經(jīng)通過(guò)正式復(fù)審和批準(zhǔn)的某規(guī)約或產(chǎn)品,它因此可以作為進(jìn)一步開(kāi)發(fā)的基礎(chǔ),并且只能通過(guò)正式的變更控制過(guò)程進(jìn)行改變.簡(jiǎn)單地說(shuō),基線就是項(xiàng)目?jī)?chǔ)存庫(kù)中每個(gè)工件版本在特定時(shí)期的一個(gè)“快照”。它提供一個(gè)正式標(biāo)準(zhǔn),隨后的工作基于這個(gè)標(biāo)準(zhǔn)進(jìn)行,并且只有經(jīng)過(guò)授權(quán)后才能變更這個(gè)標(biāo)準(zhǔn)。建立一個(gè)初始基線后,以后每次對(duì)它進(jìn)行的變更都將記錄為一個(gè)差值,直到建成下一個(gè)基線。
建立基線的主要原因是:重現(xiàn)能力、可追蹤性和報(bào)告能力。
重現(xiàn)能力是指返回并重新生成軟件系統(tǒng)給定發(fā)布版本的能力。可追蹤性建立項(xiàng)目各種類型工件(需求、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試等)之間的橫行依賴關(guān)系,其目的在于確保設(shè)計(jì)滿足需求、代碼實(shí)施設(shè)計(jì)以及使用正確代碼編譯生成可執(zhí)行文件。報(bào)告能力來(lái)源于一個(gè)基線內(nèi)容同另一個(gè)基線內(nèi)容的比較,基線比較有助于程序調(diào)試并生成發(fā)布說(shuō)明(Release notes)。
建立基線有以下幾個(gè)好處:
(1) 基線為開(kāi)發(fā)工件提供了一個(gè)定點(diǎn)和快照。新項(xiàng)目可以從基線提供的定點(diǎn)之中建立。
(2) 當(dāng)認(rèn)為更新不穩(wěn)定或不可信時(shí),基線為團(tuán)隊(duì)提供一種取消變更的方法。
(3) 可以利用基線重新建立基于某個(gè)特定發(fā)布版本的配置,這樣也可以重現(xiàn)被報(bào)告的錯(cuò)誤。
在開(kāi)發(fā)過(guò)程中,需要定期建立基線以確保團(tuán)隊(duì)開(kāi)發(fā)人員的工作保持同步,通常,在項(xiàng)目生命周期中的里程碑處定期建立基線。
4、記錄并跟蹤變更請(qǐng)求
以上我們談?wù)摰亩际菍?duì)于工件的變更活動(dòng)的實(shí)施,下面我們要談到的是軟件配置管理的另一個(gè)方面:對(duì)于變更請(qǐng)求的管理。這是變更活動(dòng)的源頭。
著名的軟件大師Brooks曾經(jīng)談到導(dǎo)致軟件開(kāi)發(fā)困難的一個(gè)原因就是軟件的可變性。大家都知道,各種要素,如市場(chǎng)的變化、技術(shù)的進(jìn)步、客戶對(duì)于項(xiàng)目認(rèn)識(shí)的深入等等,都可能導(dǎo)致軟件開(kāi)發(fā)過(guò)程中的變更請(qǐng)求的提出,而且承認(rèn)這種變更請(qǐng)求的合理性也已經(jīng)是工業(yè)界的共識(shí)。
但是,如果缺乏對(duì)于變更請(qǐng)求的有效的管理能力,紛至沓來(lái)的變更就會(huì)成為開(kāi)發(fā)團(tuán)隊(duì)的噩夢(mèng)。缺乏有效的變更請(qǐng)求管理會(huì)導(dǎo)致以下一些問(wèn)題:
(1) 軟件產(chǎn)品質(zhì)量低下,對(duì)一些缺陷的修正被遺漏;
(2) 項(xiàng)目經(jīng)理不了解開(kāi)發(fā)人員的工作進(jìn)展,缺乏對(duì)項(xiàng)目現(xiàn)狀進(jìn)行客觀評(píng)估的能力;
(3) 開(kāi)發(fā)人員不了解手頭工作的優(yōu)先級(jí)別,可能出現(xiàn)將緊急的事情放在一邊、而工作在一般優(yōu)先級(jí)任務(wù)上的情況。
變更請(qǐng)求管理的復(fù)雜程度與變更的具體類型有關(guān)。簡(jiǎn)單地說(shuō),變更請(qǐng)求管理會(huì)涉及到變更請(qǐng)求的提交、變更請(qǐng)求的復(fù)審、變更任務(wù)分配、變更結(jié)果的驗(yàn)證等一系列活動(dòng)。通常,變更請(qǐng)求管理的流程是:由請(qǐng)求者提交變更請(qǐng)求,變更控制委員會(huì)(Change Control Board,CCB)召開(kāi)CCB復(fù)審會(huì)議對(duì)變更請(qǐng)求進(jìn)行復(fù)審,以確定該請(qǐng)求是否為有效請(qǐng)求。如果是,則基于項(xiàng)目團(tuán)隊(duì)所確定的優(yōu)先級(jí)、時(shí)間表、資源、變更難度、風(fēng)險(xiǎn)、嚴(yán)重性以及其他相關(guān)標(biāo)準(zhǔn),判定對(duì)該變更的修改程序,并分配實(shí)施變更任務(wù)的人力資源和時(shí)間資源;變更任務(wù)實(shí)施人員負(fù)責(zé)實(shí)施該變更;實(shí)施結(jié)束以后提交驗(yàn)證人員,由驗(yàn)證人員負(fù)責(zé)對(duì)變更結(jié)果進(jìn)行驗(yàn)證,如果變更成功則通知相關(guān)人員,否則由變更實(shí)施人員返工。
典型的變更請(qǐng)求管理如需求變更管理、缺陷追蹤等。實(shí)施有效的變更請(qǐng)求管理有以下好處:
(1) 提高軟件產(chǎn)品質(zhì)量;
(2) 提高開(kāi)發(fā)團(tuán)隊(duì)溝通效率;
(3) 幫助項(xiàng)目管理人員對(duì)產(chǎn)品狀態(tài)進(jìn)行客觀的評(píng)估。
關(guān)于變更請(qǐng)求管理的詳細(xì)過(guò)程以及相關(guān)準(zhǔn)則PMT將在相關(guān)報(bào)告中闡述。
5、維護(hù)穩(wěn)定、一致的工作空間
在我們把相關(guān)工件納入集中的存儲(chǔ)庫(kù)、大家也都遵照“檢出/檢入”的工作模式對(duì)工件進(jìn)行修改以后,下一步的工作就是要為每位開(kāi)發(fā)人員設(shè)定“私有”的工作區(qū),或者叫做工作空間。 工作空間通常以特定的基線為基礎(chǔ)創(chuàng)建,要求能夠做到為指定的任務(wù)方便地取出正確的工作版本建立私有工作空間;開(kāi)發(fā)人員根據(jù)項(xiàng)目要求在自己的私有空間中對(duì)工件進(jìn)行修改和測(cè)試活動(dòng),而與其他開(kāi)發(fā)人員相對(duì)保持隔離,也就是說(shuō),自己的修改活動(dòng)不會(huì)受到他人的影響,也不會(huì)影響到其他開(kāi)發(fā)人員。但是,在保持隔離的同時(shí),又應(yīng)該提供相應(yīng)的機(jī)制,當(dāng)開(kāi)發(fā)人員希望共享工作成果的時(shí)候,能夠很方便地實(shí)現(xiàn)共享。
開(kāi)發(fā)人員日常的開(kāi)發(fā)工作都是在工作空間里進(jìn)行的,因此,穩(wěn)定性應(yīng)該是工作空間首要的特性,只有高度穩(wěn)定的工作空間才能保證開(kāi)發(fā)人員的工作效率。
聯(lián)系客服