軟件開(kāi)發(fā)過(guò)程學(xué)習(xí)總結(jié)
目的:初步理解CMM、RUP、XP分別是怎樣的過(guò)程,弄懂其關(guān)鍵步驟,分析其優(yōu)劣及適應(yīng)情況。最后綜各家之長(zhǎng),給出一個(gè)可能較實(shí)用可行的軟件開(kāi)發(fā)過(guò)程體系X Process,以用在項(xiàng)目(或產(chǎn)品)開(kāi)發(fā)中。
By Robin Zhang. http://robinzhang.cnblogs.com/ MSN:Robinsz@hotmail.com
一、 CMM
1. 綜述
CMM2-CMM3,可以看作是一個(gè)嚴(yán)謹(jǐn)?shù)模瑐鹘y(tǒng)瀑布式的開(kāi)發(fā)體系。
CMM并未提供具體的過(guò)程體系,它只是一個(gè)評(píng)價(jià)標(biāo)準(zhǔn)(“軟件能力成熟度”)。
但它提供了一個(gè)目標(biāo):一個(gè)可重復(fù)賦值成功經(jīng)驗(yàn)的開(kāi)發(fā)體系應(yīng)該是怎樣的。
知識(shí)點(diǎn):
1).通常應(yīng)該從CMM2開(kāi)始實(shí)現(xiàn),一般做到CMM3的已經(jīng)難得了。
2).CMM2是一套已定義的項(xiàng)目管理過(guò)程,CMM3是總結(jié)不同項(xiàng)目的經(jīng)驗(yàn),最終形成組織(公司)的一套過(guò)程標(biāo)準(zhǔn)。
3).可以考慮交叉引用,即上CMM2及CMM3的培訓(xùn)、同行評(píng)審。
4).CMM與CMMI的區(qū)別:前者僅限于軟件工程,后者還包括其他學(xué)科的CMM,如系統(tǒng)工程等;前者一般意味著瀑布過(guò)程,后者支持迭代方法。
參考:
CMM2:“定義了項(xiàng)目管理過(guò)程,將項(xiàng)目劃分成幾個(gè)明確定義的階段,每個(gè)階段結(jié)束都是控制點(diǎn),增加了軟件開(kāi)發(fā)過(guò)程的透明度和可控性。項(xiàng)目執(zhí)行中好的經(jīng)驗(yàn)可以在別的項(xiàng)目中重復(fù),軟件開(kāi)發(fā)有了一定的保證。”
CMM3: “是對(duì)CMM 2 項(xiàng)目管理的全面整合和提高,綜合公司所有類(lèi)型項(xiàng)目的過(guò)程經(jīng)驗(yàn),制定公司統(tǒng)一的最佳過(guò)程,增加了對(duì)項(xiàng)目每個(gè)階段的內(nèi)部過(guò)程規(guī)定和檢查點(diǎn),使得軟件開(kāi)發(fā)工程更加透明和可控。”
2. 關(guān)鍵過(guò)程
包括:
CMM2:項(xiàng)目計(jì)劃、需求管理、配置管理、質(zhì)量管理、項(xiàng)目過(guò)程控制。
CMM3:同行評(píng)審(需求、設(shè)計(jì)、代碼評(píng)審)、培訓(xùn)計(jì)劃、體系規(guī)范
注:能做到上面8項(xiàng)就可以了。
|
CMM等級(jí)
|
關(guān)鍵域 KPA
|
對(duì)應(yīng)產(chǎn)出、流程操作
|
相關(guān)產(chǎn)出、過(guò)程(參考)
|
|
CMM2
|
需求管理
|
需求基線
|
項(xiàng)目建議書(shū),概要需求,需求評(píng)審,需求規(guī)格書(shū)
|
|
軟件項(xiàng)目計(jì)劃
|
建立一個(gè)合理有效的軟件項(xiàng)目計(jì)劃
|
軟件項(xiàng)目立項(xiàng)書(shū)、風(fēng)險(xiǎn)分析控制報(bào)告等
|
|
軟件項(xiàng)目跟蹤和監(jiān)督
|
項(xiàng)目管理,過(guò)程管理
|
任務(wù)分解、下達(dá),每日耗費(fèi),每周例會(huì),單元測(cè)試報(bào)告,里程碑等
|
|
軟件配置管理
|
標(biāo)識(shí)軟件配置項(xiàng),建立產(chǎn)品基線庫(kù),對(duì)配置項(xiàng)的修改加以系統(tǒng)的控制
|
配置管理計(jì)劃,VSS代碼庫(kù),版本,代碼同步,演示帳套
|
|
軟件質(zhì)量管理
|
單元測(cè)試、功能測(cè)試、繼承測(cè)試等
|
質(zhì)量保證計(jì)劃,測(cè)試計(jì)劃,測(cè)試用例,產(chǎn)品質(zhì)量報(bào)告,單元測(cè)試、功能測(cè)試、繼承測(cè)試等
|
|
子合同管理
|
外包管理
|
|
|
CMM3
|
同行評(píng)審
|
|
需求評(píng)審,設(shè)計(jì)評(píng)審,代碼評(píng)審
|
|
培訓(xùn)計(jì)劃
|
|
知識(shí)共享,內(nèi)部培訓(xùn),VSS共享,創(chuàng)新獎(jiǎng)等
|
|
組織級(jí)過(guò)程焦點(diǎn),組織級(jí)過(guò)程定義,集成軟件管理,軟件產(chǎn)品工程,組間協(xié)調(diào),
|
|
1.各種規(guī)范:需求、分析設(shè)計(jì)、編碼、
數(shù)據(jù)庫(kù)規(guī)范。
2.體系規(guī)定文檔
|
3. 適用情況
1).中大型軟件企業(yè),同時(shí)進(jìn)行多個(gè)項(xiàng)目、產(chǎn)品的研發(fā)(必須有一套體系以便管理、控制)。
2).需求比較明確,并已經(jīng)定義凍結(jié)的情況,如產(chǎn)品項(xiàng)目。
3)適合用瀑布式過(guò)程開(kāi)發(fā)的項(xiàng)目。
4. 優(yōu)劣
優(yōu)點(diǎn):體系嚴(yán)謹(jǐn),提高了軟件開(kāi)發(fā)過(guò)程的透明度和可控性,令項(xiàng)目成功經(jīng)驗(yàn)可以重復(fù)復(fù)制。
缺點(diǎn):因瀑布過(guò)程需要,要求需求凍結(jié),導(dǎo)致需求過(guò)程要求非常高。而在項(xiàng)目中,需求變更是不可避免的。
5. 其他
企業(yè)上到一定規(guī)模,偏重產(chǎn)品開(kāi)發(fā)時(shí),可以考慮上CMM。中小軟件企業(yè)可借鑒并精簡(jiǎn)地實(shí)現(xiàn)它的關(guān)鍵過(guò)程,如項(xiàng)目計(jì)劃、需求管理、配置管理、質(zhì)量管理、項(xiàng)目過(guò)程控制、同行評(píng)審、培訓(xùn)計(jì)劃。
二、 RUP
1. 綜述
RUP是一個(gè)由用例驅(qū)動(dòng)、以架構(gòu)為中心的、迭代增量的開(kāi)發(fā)過(guò)程框架。
2. 關(guān)鍵過(guò)程
迭代開(kāi)發(fā)過(guò)程及產(chǎn)出:見(jiàn):《UML和設(shè)計(jì)模式》第一頁(yè)。
|
流程
|
工件
|
初始
|
精化
|
構(gòu)造
|
交付
|
|
項(xiàng)目管理
|
軟件開(kāi)發(fā)計(jì)劃等
|
S:1)定義項(xiàng)目目的,范圍、約束。
2)第一個(gè)迭代計(jì)劃
|
1) 分析需求用例,確定迭代計(jì)劃(任務(wù)時(shí)間表)。
2) 確定編碼等規(guī)范
3) 需求基線
|
1)按迭代計(jì)劃進(jìn)行開(kāi)發(fā)
2)每個(gè)迭代都實(shí)現(xiàn)一個(gè)用例集,包含一個(gè)設(shè)計(jì)編碼測(cè)試過(guò)程。
|
客戶測(cè)試評(píng)估
上線運(yùn)行
|
|
業(yè)務(wù)建模
|
領(lǐng)域模型
|
|
S 細(xì)化建模
|
|
|
|
需求
|
用例模型、需求規(guī)格說(shuō)明書(shū)、補(bǔ)充需求文檔
|
S:1)確定Actor及其需要。2)確定最重要的用例
|
R 1)編寫(xiě)詳細(xì)用例需求規(guī)格書(shū) 2)確定更多用戶需要、產(chǎn)品特性、用例集合并確定其優(yōu)先級(jí)重要性風(fēng)險(xiǎn)。需求初步基線。
|
r迭代過(guò)程中允許需求變更,但必須受控,分析對(duì)目前需求的影響,再?zèng)Q定是否在下一個(gè)迭代基線進(jìn)去。
|
|
|
設(shè)計(jì)
|
設(shè)計(jì)模型、軟件架構(gòu)文檔
|
|
R挑選部分重要用例,開(kāi)始建設(shè)計(jì)模型
|
R對(duì)迭代內(nèi)的用例進(jìn)行更詳細(xì)的設(shè)計(jì)
|
|
|
實(shí)現(xiàn)
|
實(shí)現(xiàn)代碼
|
|
S 1)實(shí)現(xiàn)部分重要且風(fēng)險(xiǎn)大的用例,以驗(yàn)證并確定架構(gòu)設(shè)計(jì)。
|
R 全力編碼,按時(shí)完成迭代內(nèi)的用例實(shí)現(xiàn)。
|
|
|
測(cè)試
|
測(cè)試用例
|
|
S根據(jù)用例編寫(xiě)測(cè)試用例
|
測(cè)試已實(shí)現(xiàn)迭代功能,編寫(xiě)新迭代的測(cè)試用例
|
|
|
文檔等
|
使用文檔等
|
|
s
|
|
產(chǎn)品文檔,用戶培訓(xùn)
|
|
產(chǎn)出
|
|
項(xiàng)目計(jì)劃書(shū)(前景文檔)、高層用例模型、最重要用例規(guī)格說(shuō)明書(shū)、(概要設(shè)計(jì)說(shuō)明書(shū)?)、開(kāi)發(fā)環(huán)境(總體軟件架構(gòu)、開(kāi)發(fā)規(guī)范)
|
80%詳細(xì)需求規(guī)格書(shū)(用例集及補(bǔ)充說(shuō)明書(shū))、用例模型、領(lǐng)域模型及設(shè)計(jì)模型,部分詳細(xì)設(shè)計(jì)文檔,部分測(cè)試用例,產(chǎn)生一個(gè)可執(zhí)行的原型(實(shí)現(xiàn)部分重要用例)
|
內(nèi)部發(fā)版,可用于測(cè)試的完整產(chǎn)品。詳細(xì)設(shè)計(jì)說(shuō)明書(shū)
|
|
|
產(chǎn)出2
|
|
項(xiàng)目計(jì)劃、概要需求列表、初步架構(gòu)說(shuō)明、重要用例需求規(guī)格書(shū)、編碼規(guī)范
|
需求規(guī)格說(shuō)明書(shū)(80%),概要設(shè)計(jì)文檔(?)、項(xiàng)目迭代計(jì)劃、重要用例的設(shè)計(jì)及實(shí)現(xiàn),
|
設(shè)計(jì)模型,詳細(xì)設(shè)計(jì)說(shuō)明書(shū),代碼實(shí)現(xiàn),測(cè)試用例(迭代)
|
產(chǎn)品、說(shuō)明文檔,用戶培訓(xùn)
|
s開(kāi)始,r精化提煉
3. 適用情況
4. 優(yōu)劣
5. 其他
參考:
三、 XP
Xp注重人的因數(shù),提倡盡量敏捷輕量級(jí)的過(guò)程。
重要過(guò)程:測(cè)試驅(qū)動(dòng)、迭代開(kāi)發(fā)、持續(xù)集成構(gòu)建、客戶現(xiàn)場(chǎng)參與(確定迭代內(nèi)的功能集,提供業(yè)務(wù)邏輯的確認(rèn),驗(yàn)證程序等)、只在必要時(shí)做簡(jiǎn)單設(shè)計(jì)
一)、Xp的缺點(diǎn):
1. 要求客戶現(xiàn)場(chǎng)參與。通常國(guó)內(nèi)項(xiàng)目都是前期作需求確認(rèn),無(wú)法提供整個(gè)開(kāi)發(fā)過(guò)程的需求確認(rèn)支持。除非是分段來(lái)確認(rèn)(如迭代結(jié)束時(shí))。
2. 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。目前還很難做到,因?yàn)榫帉?xiě)測(cè)試腳本需要花費(fèi)不少精力,一般項(xiàng)目無(wú)法做到。由此也無(wú)法作重構(gòu),無(wú)法保證能有靈活的設(shè)計(jì)來(lái)支持因前期不明確的需求而導(dǎo)致的變更。
3. 缺少文檔、設(shè)計(jì)支持。Xp只在必要時(shí)才寫(xiě)文檔及設(shè)計(jì),這樣可能導(dǎo)致xp新手缺乏良好的設(shè)計(jì)指引,項(xiàng)目開(kāi)發(fā)過(guò)程透明度不夠,可能會(huì)失控。
二)、xp可借鑒的地方
1. 對(duì)整個(gè)開(kāi)發(fā)過(guò)程:迭代開(kāi)發(fā)、持續(xù)集成
2. 對(duì)特定迭代:編碼規(guī)范、保持設(shè)計(jì)靈活(允許需求改動(dòng))
3. 設(shè)計(jì)編碼過(guò)程:測(cè)試驅(qū)動(dòng)、重構(gòu)(用在編碼過(guò)程中,以客戶端來(lái)“測(cè)試驅(qū)動(dòng)”業(yè)務(wù)邏輯層、以重構(gòu)減少重復(fù)代碼)
參考:
四、實(shí)用過(guò)程X Process:RUP+XP,并達(dá)到CMM2-3
考慮目前國(guó)內(nèi)項(xiàng)目現(xiàn)況:需求調(diào)研先行,但需求不明確導(dǎo)致需求變更。中小公司缺乏過(guò)程規(guī)范指導(dǎo),基本在CMM1即混亂狀態(tài)。
X Process = CMM的體系+RUP的過(guò)程+XP的最佳實(shí)踐
參考文檔:xp_vs_cmm.pdf, RUPvsXP.pdf, RUP and XP.pdf,dX Process
1. 過(guò)程:取RUP的過(guò)程
過(guò)程還是取項(xiàng)目啟動(dòng)、細(xì)化、構(gòu)建、交付四個(gè)過(guò)程。
啟動(dòng)階段:
定義項(xiàng)目計(jì)劃、風(fēng)險(xiǎn)分析、項(xiàng)目前景、范圍、約束;確定Actor、涉眾及收益;確定概要需求;作一個(gè)原型,實(shí)現(xiàn)關(guān)鍵用例。
細(xì)化階段:
確定用戶需要、產(chǎn)品特性并確認(rèn)優(yōu)先級(jí)、風(fēng)險(xiǎn);確定80%需求,編寫(xiě)需求規(guī)格書(shū)。制定迭代計(jì)劃,需求基線;完成重要用例的設(shè)計(jì)及實(shí)現(xiàn),由此確定系統(tǒng)架構(gòu)及第三方組件。已制定迭代計(jì)劃。同時(shí)編寫(xiě)對(duì)應(yīng)用例的測(cè)試用例。
構(gòu)建階段:
按計(jì)劃迭代開(kāi)發(fā)。在每個(gè)迭代里采用小瀑布的方式,應(yīng)用部分XP的最佳實(shí)踐(見(jiàn)下2),每個(gè)迭代為一個(gè)里程碑,提交給客戶確認(rèn),由此得到需求變更,分析后調(diào)整迭代計(jì)劃。
交付階段:
提交客戶測(cè)試,作小的修改。編寫(xiě)產(chǎn)品說(shuō)明,用戶培訓(xùn),上線運(yùn)行。項(xiàng)目總結(jié)、關(guān)閉報(bào)告。
2. 迭代內(nèi)的步驟:取xp的最佳實(shí)踐
合并細(xì)化的后期+構(gòu)造期,為“設(shè)計(jì)編程期”,在這期間,啟用“保持設(shè)計(jì)靈活”、編碼規(guī)范、代碼審核(結(jié)隊(duì)編程)、持續(xù)集成、測(cè)試驅(qū)動(dòng)、重構(gòu)的最佳實(shí)踐。
3. 使用CMM的關(guān)鍵域的規(guī)范流程,,以達(dá)到CMM2-3的效果
在RUP的四個(gè)階段中,應(yīng)用CMM的關(guān)鍵域,來(lái)保證各種產(chǎn)出的質(zhì)量。如下:
先啟階段:項(xiàng)目計(jì)劃、項(xiàng)目過(guò)程控制、配置管理、培訓(xùn)計(jì)劃(設(shè)計(jì)、編碼規(guī)范)
細(xì)化階段:體系規(guī)范、同行評(píng)審(需求、設(shè)計(jì)、代碼評(píng)審)、需求管理、質(zhì)量管理
構(gòu)建階段:編碼規(guī)范、設(shè)計(jì)、代碼評(píng)審、需求變更管理
交付階段:體系規(guī)范
三者的關(guān)系如下:
1. RUP:是由用例驅(qū)動(dòng)、迭代增量開(kāi)發(fā)的過(guò)程,主要定義了各個(gè)階段應(yīng)該做什么,做到什么程度。
2. CMM:是一套評(píng)估標(biāo)準(zhǔn),提供了一些關(guān)鍵實(shí)現(xiàn)域(需求管理等),對(duì)每一個(gè)產(chǎn)出提出了質(zhì)量要求。
3. XP:主要關(guān)注編碼階段的一些最佳實(shí)踐。是一個(gè)提倡敏捷的輕量級(jí)軟件開(kāi)發(fā)方法。強(qiáng)調(diào)“交流;簡(jiǎn)單;反饋;實(shí)事求是”。強(qiáng)調(diào)客戶參與,簡(jiǎn)單設(shè)計(jì)(靈活設(shè)計(jì))、允許需求變更等。
4. 下面是按傳統(tǒng)瀑布式的過(guò)程,來(lái)考察三種過(guò)程方法在各個(gè)階段的活動(dòng)及產(chǎn)出。
|
過(guò)程
|
RUP
|
CMM
|
XP
|
|
項(xiàng)目啟動(dòng)
|
先啟
|
項(xiàng)目計(jì)劃、風(fēng)險(xiǎn)列表、過(guò)程控制、配置計(jì)劃、概要需求列表等
|
客戶盡可能參與
|
|
需求調(diào)研
|
先啟、精化(用例模型)
|
需求管理、需求評(píng)審、需求基線
|
客戶盡可能參與
|
|
分析設(shè)計(jì)
|
精化、構(gòu)建(領(lǐng)域模型、設(shè)計(jì)模型)
|
設(shè)計(jì)評(píng)審、軟件配置、培訓(xùn)計(jì)劃
|
靈活設(shè)計(jì)、需求變更
|
|
編碼實(shí)現(xiàn)
|
構(gòu)建、啟動(dòng)、精華(代碼)
|
代碼評(píng)審、需求變更控制
|
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、重構(gòu)、編碼規(guī)范、日構(gòu)建、小版本發(fā)布、簡(jiǎn)單實(shí)現(xiàn)
|
|
測(cè)試
|
構(gòu)建、精化
|
質(zhì)量管理
|
Unit Test
|
|
文檔及實(shí)施等
|
交付
|
|
|