缺乏真正的風(fēng)險(xiǎn)管理與控制是導(dǎo)致軟件項(xiàng)目失敗的最重要原因。實(shí)施有效的風(fēng)險(xiǎn)管理,做到真正風(fēng)險(xiǎn)驅(qū)動(dòng)的迭代式開發(fā),盡早排除架構(gòu)(性能上)的風(fēng)險(xiǎn)也是最重要的。因此,風(fēng)險(xiǎn)管理是軟件項(xiàng)目管理的第一管理要點(diǎn)。

軟件項(xiàng)目失敗的種種問題
當(dāng)筆者三年前讀到《漫談企業(yè)應(yīng)用項(xiàng)目的軟件開發(fā)過程:一個(gè)PRM系統(tǒng)實(shí)施的經(jīng)驗(yàn)與教訓(xùn)》時(shí),就發(fā)現(xiàn)它是一篇非常難得的好文章。
國內(nèi)類似這樣的軟件工程案例分析太少了,很多人沒有時(shí)間寫或舍不得與旁人分享其中的美妙,何況這篇文章還是專門針對XP、RUP并涉及到敏捷統(tǒng)一過程實(shí)踐的。
除了這篇PRM(伙伴關(guān)系管理)案例外,Johnson其實(shí)早在2002年7 月還發(fā)表過一篇《從一個(gè)項(xiàng)目談XP在國內(nèi)的應(yīng)用》,該文在網(wǎng)絡(luò)上流傳甚廣。
這兩篇文章好像是國內(nèi)互聯(lián)網(wǎng)上最早公開的XP(極限編程)實(shí)踐案例,還是嘗試XP、RUP整合的案例。姑且不論它們是否真正做到了敏捷,整合是否成功,但這兩個(gè)應(yīng)用案例的結(jié)果恰好一個(gè)成功,一個(gè)失敗,其價(jià)值就在于真實(shí)性和典型性,具有很好的說服力和教育意義。
不管結(jié)果如何,PRM原文的篇幅不長,卻有很多值得我們借鑒和學(xué)習(xí)的地方。筆者認(rèn)為這個(gè)項(xiàng)目無論從商務(wù)角度,還是從工程技術(shù)的角度來看,都是比較失敗的。
PRM系統(tǒng)雖然通過2個(gè)月緊張的敏捷、迭代開發(fā)并準(zhǔn)時(shí)交付使用,但卻后來出現(xiàn)性能問題,大半年之后仍然沒有通過客戶驗(yàn)收,不但有幾十萬尾款沒有收到,而且還影響了開發(fā)商其它項(xiàng)目的投標(biāo)。
為什么一個(gè)曾一度成功按時(shí)交付的系統(tǒng),在新舊系統(tǒng)數(shù)據(jù)集成、上線運(yùn)行的幾個(gè)月后會出現(xiàn)嚴(yán)重的性能問題,并暴露出系統(tǒng)架構(gòu)設(shè)計(jì)上的缺陷,導(dǎo)致遲遲無法獲得客戶的信任,讓項(xiàng)目各方都陷于被動(dòng)和尷尬呢?
是XP、RUP不行?還是敏捷過程、方法不行?有沒有可能事先避免這種典型的風(fēng)險(xiǎn)呢?以上所有這些有趣的問題,都值得我們深入探究。
敏捷開發(fā)的基礎(chǔ)是首先做到迭代式(Iterative)開發(fā)。迭代不僅僅是把整個(gè)系統(tǒng)開發(fā)任務(wù)逐一分解、按階段分步驟來實(shí)現(xiàn)的。
如果迭代的含義僅僅停留在這個(gè)層面上,那么提出用迭代演進(jìn)式過程取代瀑布型開發(fā)模型也就毫無意義,因?yàn)槲覀冏鋈魏喂ぷ鞅緛砭褪且惶煲惶?、一塊一塊地來完成,不管瀑布型還是演進(jìn)式皆如此。
迭代真正的目的是為了通過加速客戶反饋,顯著地消除開發(fā)風(fēng)險(xiǎn),這就要求每次迭代結(jié)束必須有一個(gè)可運(yùn)行、可演示的系統(tǒng)。這時(shí)的系統(tǒng)可能功能上還不完整,僅僅是一個(gè)骨架,但它總是系統(tǒng)開發(fā)中最難、最重要同時(shí)是風(fēng)險(xiǎn)最大的部分。
RUP核心之一:風(fēng)險(xiǎn)驅(qū)動(dòng)的迭代
風(fēng)險(xiǎn)驅(qū)動(dòng)的迭代是RUP的核心特征之一,XP對此強(qiáng)調(diào)的不夠,在早期的XP項(xiàng)目中主要是客戶驅(qū)動(dòng)的。所以,真正的迭代式開發(fā)在項(xiàng)目早期就允許客戶對可運(yùn)行的系統(tǒng)進(jìn)行驗(yàn)證,從而使項(xiàng)目的風(fēng)險(xiǎn)減到最小。
開發(fā)工作也應(yīng)該根據(jù)風(fēng)險(xiǎn)的大小來安排,通過迭代及時(shí)調(diào)整優(yōu)先級,風(fēng)險(xiǎn)越大的任務(wù)越應(yīng)該及早設(shè)計(jì)、實(shí)現(xiàn)、測試和反饋。
我們知道,RUP從風(fēng)險(xiǎn)驅(qū)動(dòng)出發(fā)把一個(gè)軟件項(xiàng)目分為四個(gè)階段:起始階段、細(xì)化階段、構(gòu)造階段和移交階段,這四個(gè)階段分別對應(yīng)著項(xiàng)目的四個(gè)里程碑。起始階段主要消除項(xiàng)目的業(yè)務(wù)風(fēng)險(xiǎn),細(xì)化階段應(yīng)該盡力消除項(xiàng)目的主要技術(shù)風(fēng)險(xiǎn):架構(gòu)風(fēng)險(xiǎn)(同時(shí)包括功能和非功能兩方面)。
很遺憾,PRM項(xiàng)目是在到了項(xiàng)目最后一個(gè)階段:移交階段。在系統(tǒng)運(yùn)行了幾個(gè)月、數(shù)據(jù)遷移完成之后才發(fā)現(xiàn)架構(gòu)設(shè)計(jì)上存在著嚴(yán)重的性能缺陷需要修補(bǔ)。重要的是:在項(xiàng)目之初的合同上其實(shí)就已經(jīng)對數(shù)據(jù)遷移、上線運(yùn)行的要求作出了規(guī)定。
這導(dǎo)致了最大架構(gòu)級風(fēng)險(xiǎn):系統(tǒng)性能滿足用戶的真實(shí)需要嗎?直到臨近項(xiàng)目結(jié)束也未能被消除。實(shí)際上PRM項(xiàng)目的“細(xì)化階段”并未真正完成