Posted on 2010-11-15 11:15
幻海藍(lán)夢 閱讀(283)
評論(0) 編輯 收藏 所屬分類:
版本管理 、
項(xiàng)目管理 、
配置管理
SCM學(xué)習(xí)第二周,了解到軟件工程的危機(jī)---------大量的代碼無法統(tǒng)一,沒有統(tǒng)一的
管理 變更帶來的大量的問題(費(fèi)時(shí) 成本高 質(zhì)量差),隨著軟件的發(fā)展,代碼在
失控,這時(shí)配置管理開始挽救整個(gè)軟件業(yè)。
WHAT-----早在七十年代初期加利福利亞大學(xué)的Leon
Presser教授就撰寫了一篇論文,提出控制變更和配置的概念,之后在1975年,他成立了一家名為Soft Tool的公司,開發(fā)了自己的配置管理工
具:CCC,這也是最早的配置管理工具之一。之后,隨著軟件開發(fā)規(guī)模的逐漸增大,越來越多的公司和團(tuán)隊(duì)意識到了
軟件配置管理的重要性,而相應(yīng)的軟件配置管理工具也如雨后春筍一般,紛紛涌現(xiàn),比較有代表性的有:Marc Rocking的SCCS(Source
Code ControlSystem)和Walter Itchy的RCS(RevisionControl
System),這兩種工具對日后的配置管理工具的發(fā)展做出了重大的貢獻(xiàn),目前絕大多數(shù)廣泛使用的配置管理工具基本上都是基于這兩者的設(shè)計(jì)思想和體系架構(gòu)。什
么是軟件配置管理呢?軟件配置管理有多種定義,在1986年出版的Wayne Babyis《SoftwareConfigurationManagement:Coordinating
for Team Productivity》一書中把軟件配置管理描述為"對軟件開發(fā)組所建立的軟件的修改
進(jìn)行標(biāo)識、組織和控制的藝術(shù),其目標(biāo)是減少錯(cuò)誤,提高生產(chǎn)力"。這個(gè)定義比較簡單,而在1993年出版的Steve
McConnell的《Code Complete》一書中,從另一個(gè)角度對軟件配置管理進(jìn)行了定義:"配置管理能夠系統(tǒng)地處理變更,從
而使得軟件系統(tǒng)可以隨時(shí)保持其完整性。配置管理又可稱為'變更控制',可以用來評估提出的變更請求,
跟蹤變更,并保存系統(tǒng)在不同時(shí)間的狀態(tài)。" 軟件配置管理是一套規(guī)范、高效的軟件開發(fā)基礎(chǔ)結(jié)構(gòu)。作為管理軟件開發(fā)過程
有效的方法,SCM早已被發(fā)達(dá)國家軟件產(chǎn)業(yè)的發(fā)展和實(shí)踐所證明。SCM可以系統(tǒng)地管理軟件系統(tǒng)中的多重
版本;全面記載系統(tǒng)開發(fā)的歷史過程,包括為什么修改,誰作了修改,修改了什么;管理和追蹤開發(fā)過程中危害軟件質(zhì)量以及影響開發(fā)周期的缺陷和變化。SCM對開發(fā)過程進(jìn)行有效地管理和控
制,完整、明確地記載開發(fā)過程中的歷史變更,形成規(guī)范化的文檔,不僅使日后的維護(hù)和升級得到保證,而且更重要的是,這還會保護(hù)寶貴的代碼資源,積累軟件財(cái)
富,提高軟件重用率,加快投資回報(bào)。SCM是通往ISO9000和SEI CMM標(biāo)準(zhǔn)的一塊基石。在軟件開發(fā)團(tuán)隊(duì)
中,正確地采用、實(shí)施軟件配置管理系統(tǒng),必將提高生產(chǎn)力,增強(qiáng)對整個(gè)項(xiàng)目的控制,改善軟件產(chǎn)品的質(zhì)量,從容面對快速面市和產(chǎn)品質(zhì)量的雙重壓力。軟件配置管
理系統(tǒng)的實(shí)施,一般來講要考慮兩個(gè)方面的因素:流程和工具。流程和工具是相輔相成的,流程起決定性作用,它確定了管理的規(guī)則和方法,工具用來將變更存儲在
一個(gè)中央存儲庫中,可以重現(xiàn)任一時(shí)期的歷史版本,一個(gè)好的工具可以提高效率,是貫徹實(shí)施流程的必要手段。因此,在一個(gè)開發(fā)團(tuán)隊(duì)中,實(shí)施配置管理流程比采用
配置管理工具更重要,我們需要充分考慮,制定出適合自己企業(yè)的配置管理流程,該流程必須與公司的開發(fā)規(guī)范、質(zhì)量系統(tǒng)等完全結(jié)合。
在軟件開發(fā)中,變更是不可避免的。從某種角度上講,軟件開發(fā)過程就是一個(gè)變更的過程。有些變更是有益的,是具有創(chuàng)造性的,但是,也有些變更是有害的,導(dǎo)致
混亂的。正像James Bach
總結(jié)的那樣:我們?yōu)樽兏_,因?yàn)榇a中的一個(gè)極小的混亂可能帶來產(chǎn)品的大的故障,但是,他也能夠修復(fù)大的故障或啟用奇妙的新能力。我們?yōu)樽兏_,
因?yàn)槟硞€(gè)喜歡惡作劇的單個(gè)開發(fā)者可能破壞掉項(xiàng)目,但是,一些奇妙的思想也源自那些喜歡惡作劇的人員。
因此,如何管理這些變更是一個(gè)軟件開發(fā)能否成
功的關(guān)鍵。簡言之,
軟件配置管理就是管理變更的過程,它貫穿著幾乎軟件的整個(gè)生命周
期。成功的配置管理系統(tǒng)可以提高產(chǎn)品的質(zhì)量、項(xiàng)目開發(fā)
效率,而且最大限度的減少對個(gè)別“英雄”式人員的依賴。
軟件開發(fā)過程的輸出信息可以分為三個(gè)主要的類型:(1)計(jì)算機(jī)程序(源代碼、中間代碼和可執(zhí)行程序),(2)描述計(jì)算機(jī)程序的文檔(針對技術(shù)開發(fā)者和用
戶),(3)數(shù)據(jù)(包含在程序內(nèi)部或在程序的外部)。這些項(xiàng)包含了所有的在軟件過程中產(chǎn)生的信息,總稱為軟件配置。該集合中每一個(gè)元素稱為該軟件產(chǎn)品軟件
配置中的一個(gè)配置項(xiàng)(CI,Configuration Item)。盡管配置管理(Configuration Management
)這個(gè)概念被提出有幾十年了,但是,業(yè)內(nèi)還沒有一個(gè)全面而權(quán)威的定義。Configuration 的
意思是“使成形”,它來源于拉丁語的
com-(表示“與”或者“一起”)和figurate
(形成)。它還有一個(gè)意思是“組成部件或元素的相對排列”。因此,配置管理(Configuration Management
)指的是管理組成部件或者元素的相對排列。配置管理的概念來自于硬件領(lǐng)域,美國國防部最早使用了配置管理的概念。
我們知道一架飛機(jī)的構(gòu)成非常復(fù)
雜,比如機(jī)頭、機(jī)身、機(jī)翼和機(jī)尾
等。不同型號飛機(jī)的各個(gè)部分是不能隨便組裝的。因此,我們只有把相匹配的部件組裝在一起,才能構(gòu)成了一個(gè)功能完備
的飛機(jī)整體。隨著技術(shù)的提高,各個(gè)部件可能還要進(jìn)行功能改善,我們還要使得不同版本的部件能夠正確無誤組合在一起。
準(zhǔn)確地說:配置管理是對產(chǎn)品進(jìn)行標(biāo)識、存儲和控制,以維護(hù)其完整性、可追溯性以及正確性的學(xué)科。
WHY----在團(tuán)隊(duì)開發(fā)的模式中,軟件開發(fā)管理就顯得更加重要,其管
理的好壞將直接影響到軟件產(chǎn)品的質(zhì)量。如果缺乏對軟件開發(fā)的統(tǒng)一管理,勢必造成以下問題的出現(xiàn):
●
由于開發(fā)經(jīng)費(fèi)及開發(fā)時(shí)間的限制,不可能一次開發(fā)就解決
所有問題,許多問題有待維護(hù)階段解決,因此帶來的是軟件產(chǎn)品的不斷
升級,而維護(hù)和升
級所必需的文檔往往非常混亂;
● 開發(fā)商開發(fā)過程缺乏規(guī)范化的管理,即使有源程序文檔也由
于說明不詳細(xì)而不能對產(chǎn)品進(jìn)行進(jìn)一步的功能擴(kuò)
充,用戶不得不再投入
大量的經(jīng)費(fèi)去開發(fā)新產(chǎn)品,浪費(fèi)大量的人力、物力和時(shí)間;
● 在軟件的團(tuán)隊(duì)式開發(fā)中,人員流動(dòng)在所難免,如管理不善,
有
些人員的流動(dòng)將對開發(fā)產(chǎn)生致命的影響。特別是軟件開發(fā)管理人員或
核心成員的流失,有可能造成無法確定軟件產(chǎn)品中各模塊所處的狀態(tài)及
階段,
使軟件產(chǎn)品的版本出現(xiàn)混亂,甚至可能泄漏公司的核心機(jī)密;
● 管理不善致使沒經(jīng)測試的軟件加入到產(chǎn)品中,不但影響產(chǎn)品
的質(zhì)量,有時(shí)還會導(dǎo)
致致命的錯(cuò)誤,造成不可挽回的損失;
PDF 文件使用 "pdfFactory Pro" 試用版本創(chuàng)建
●
用戶與開發(fā)商沒有有效的溝通手段,用戶投入了開發(fā)費(fèi)用
后,得到的是有關(guān)可執(zhí)行程序以及一堆雜亂無章的文檔,即使是較好的
文檔,對不熟悉開
發(fā)過程的專業(yè)人員來說也無從下手,更談不上日后的
維護(hù)和升級,用戶的利益無法保證;
●
軟件生產(chǎn)達(dá)不到規(guī)模化,無法生產(chǎn)出軟件企業(yè)內(nèi)部的軟件
標(biāo)準(zhǔn)構(gòu)件倉庫,使應(yīng)用軟件產(chǎn)品總處于一種低水平、重復(fù)開發(fā)的狀態(tài),不但時(shí)間得不到保證,而且
成本也無法降低,使產(chǎn)品沒有市場競爭力。這些問題在實(shí)際開發(fā)中表現(xiàn)為,項(xiàng)目組成員溝通困難,軟件重用率低下,開發(fā)人員各自為政,代碼冗余度高,文檔不健全
等;造成的結(jié)果是:數(shù)據(jù)丟失,開發(fā)周期漫長,產(chǎn)品可靠性差,質(zhì)量低劣,軟件維護(hù)困難,用戶抱怨使用不便,項(xiàng)目風(fēng)險(xiǎn)增加等。
HOW----配置標(biāo)識就是識別產(chǎn)品的結(jié)構(gòu)、產(chǎn)品的構(gòu)件及其類型,為其分配唯一
的標(biāo)識符,也就是說,每一個(gè)配置項(xiàng)要有一個(gè)唯一標(biāo)識。一般說來,標(biāo)識包括兩個(gè)方面:一是文件名,二是版本,可用如下一個(gè)二元組來標(biāo)識:<文件名,版
本>。每個(gè)項(xiàng)目首先要確定一套命名規(guī)則,例如,采用“系統(tǒng).子系統(tǒng).模塊.文件”的方式,</videoConference
/audio/compressing /main.c , 2.1>就是一個(gè)唯一.標(biāo)識。
版本控制
版本控制就是對在軟件開發(fā)過程中所創(chuàng)建的配置對象的不同版本
進(jìn)行管理,
保證任何時(shí)候都能取到正確的版本以及版本的組合。
軟件配置管理基線管理 變更請求管理 發(fā)布管理 構(gòu)建管理
配置標(biāo)識 版本控制 變更控制
配置狀態(tài)統(tǒng)配置審核當(dāng)前,這方面典型的工具有如VSS 和CVS。
變更控制
在軟件開發(fā)過程,要產(chǎn)生許多變更,比如,配置項(xiàng)、配置、基線、
構(gòu)建的版本、發(fā)布版本等。對于所有的
變更,都要有一個(gè)控制機(jī)制,以保證所有變更都是可控的、可跟蹤的、可重現(xiàn)的。對變更進(jìn)行控制的機(jī)構(gòu)稱為變更控制委員會(Change Control
Board,簡稱CCB)。變更控制委員會要定期召開會議,對近期所產(chǎn)生的變更請求進(jìn)行分析、整理,并做出決定。而且要遵循一定的變更機(jī)制。
下面
是一個(gè)典型的變更機(jī)制:
接受 拒絕提交變更請求管理變更請求管理就是對變更請求(Change
Request,簡稱CR)進(jìn)行分類、追蹤和管理的過程來實(shí)現(xiàn)的。
變更的起源有兩種:功能變更和缺陷修補(bǔ)(Bug-Fix)。功能變更
是
為了增加或者刪除某些功能。缺陷修補(bǔ)則是對已存在的缺陷進(jìn)行修
修改測試或驗(yàn)證對變更請求的有效管理可以提高產(chǎn)品管理的透明度,經(jīng)理可以清楚的知道
當(dāng)前產(chǎn)品的進(jìn)展情況,比如有多少個(gè)新產(chǎn)生的CR,已經(jīng)解決了多少CR 等等,有利于經(jīng)理做出正確的決策。
基線管理
基線是指經(jīng)過正式評審和批準(zhǔn),可作為下一步工作的基準(zhǔn)的一個(gè)配
置。軟
件開發(fā)過程中,無論是需求分析、設(shè)計(jì)、測試都需要在完成時(shí)建立基線,以作為下一步工作的基礎(chǔ)。通過基線管理可以使用戶能夠通過對
適當(dāng)版本的選擇來組成特定屬性(配置)的軟件系統(tǒng),這種靈活的“組裝”策略使得配置管理系統(tǒng)像搭積木似的使用已有的積(版本)組裝成各種各樣、不同功能的
模型。基線的變更需要一個(gè)嚴(yán)格的流程,需要提出申請,經(jīng)過審批,然后才能進(jìn)行。
構(gòu)建管理
在做構(gòu)建時(shí),我們需要首先取出正確的配置,然后再做構(gòu)建。我們
可以利用基線,可以取出某
個(gè)基線的所有配置項(xiàng),也可以利用配置管理系統(tǒng)的構(gòu)建功能直接在工作空間內(nèi)做構(gòu)建。構(gòu)建管理需要配置管理工具的支持。
發(fā)布管理
軟件產(chǎn)品的每個(gè)版本都是一組配置項(xiàng)(源代碼、文
檔、數(shù)據(jù))的集
合。舉個(gè)例子來說,我們要發(fā)布軟件的32.6 版本,那么我們就要把源
代碼、文檔、數(shù)據(jù)中所有應(yīng)該包含到這個(gè)版本中的正確
配置項(xiàng)檢出。
所以如何管理每個(gè)版本中包含哪些配置項(xiàng)是非常重要的。
狀態(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),通過量化的
數(shù)據(jù)和報(bào)表反映項(xiàng)目開發(fā)進(jìn)度的狀態(tài)。
配置審核
配置審核要審查整個(gè)配置管理過程是否符合規(guī)范,配置項(xiàng)是否與需
求一致,記錄正確,配置的組成是否具
有一致性等等。比如,需求分析文檔提交后,需要由一個(gè)由相關(guān)人組成的小組進(jìn)行正式評審,只有通過了評審才能基線化。對于源代碼也一樣,一般說來,每行代碼
都要進(jìn)行評審(Review),只有通過評審才能交由測試人員進(jìn)行測試。
實(shí)施配置管理的好處我們知道軟件有三個(gè)要素:時(shí)間、預(yù)算和質(zhì)量。一個(gè)成功
的軟件就是要在限定的時(shí)間內(nèi),不超過預(yù)算,交付符合質(zhì)量要求的產(chǎn)品。真正實(shí)施配置管理后,我們會對產(chǎn)品的開發(fā)過程進(jìn)行有效的控制,可以加快開發(fā)進(jìn)度,降低
開發(fā)成本,保證產(chǎn)品的質(zhì)量。
產(chǎn)品經(jīng)理可以得到什么好處呢?
準(zhǔn)確掌握項(xiàng)目的開發(fā)進(jìn)度。配置管理系統(tǒng)可以提供詳盡的狀態(tài)報(bào)告,例如
當(dāng)前系統(tǒng)有多少個(gè)Bug,所有Bug
的狀態(tài)如何?已經(jīng)解決了多少Bug?了解項(xiàng)目組成員的工作負(fù)荷、工作效率以及工作質(zhì)量。例如,我們可以知道當(dāng)前分配給每個(gè)成員的工作量,每個(gè)成員已完成的
工作量,每個(gè)成員未通過正式評審的工作比例等等。減少人員流動(dòng)所帶來的影響。每個(gè)成員的所有變更,包括文檔、代碼的增刪都是可追蹤的,而且對于變更的原
因、描述也都有記錄。樣,一旦成員離開,其它成員就可以在最短的時(shí)間里接手。有效提高過程管理,配置管理產(chǎn)生的許多數(shù)據(jù)可作為管理者度量項(xiàng)目的依據(jù)。