邢晨光 錢嘉怡
(浙江大學(xué),浙江 杭州 310000)
軟件項(xiàng)目管理是一個(gè)技術(shù)密集型的復(fù)雜管理過程。軟件產(chǎn)品開發(fā)過程涉及范圍廣,需要不同專業(yè)的人員參與,因此軟件項(xiàng)目管理過程中需要綜合考慮,項(xiàng)目各干系人、資源直接的關(guān)系,才能把軟件項(xiàng)目順利成功落地交付。在采用敏捷項(xiàng)目管理方法之后,大多數(shù)企業(yè)只看到敏捷的快速交付,提高效率,往往忽略了敏捷項(xiàng)目管理過程的風(fēng)險(xiǎn),造成項(xiàng)目的失敗。本文著眼于敏捷項(xiàng)目管理過程中的風(fēng)險(xiǎn)管理問題,基于Scrum敏捷框架提出一套風(fēng)險(xiǎn)管理方法來解決敏捷項(xiàng)目管理過程風(fēng)險(xiǎn)管理的問題。
在軟件開發(fā)項(xiàng)目過程中,會面臨著不完整的需求、不可追蹤的需求、時(shí)間限制、不現(xiàn)實(shí)的時(shí)間表、通信和技術(shù)變化等風(fēng)險(xiǎn)。這些項(xiàng)目管理過程中的風(fēng)險(xiǎn),可以通過應(yīng)用有效的風(fēng)險(xiǎn)管理方法來解決。瀑布式項(xiàng)目中,風(fēng)險(xiǎn)管理具有完整的流程和理論,總體分為風(fēng)險(xiǎn)識別、風(fēng)險(xiǎn)評估、風(fēng)險(xiǎn)分析、風(fēng)險(xiǎn)應(yīng)對、風(fēng)險(xiǎn)監(jiān)控五個(gè)活動(dòng)。但是在敏捷項(xiàng)目中,并沒有特別強(qiáng)調(diào)風(fēng)險(xiǎn)管理的內(nèi)容,生搬硬套瀑布項(xiàng)目的風(fēng)險(xiǎn)管理方法應(yīng)用到敏捷項(xiàng)目中,并不合適,復(fù)雜且強(qiáng)調(diào)流出的風(fēng)險(xiǎn)管理方法與敏捷所倡導(dǎo)的價(jià)值觀也不相符。所以本文以Scrum敏捷項(xiàng)目管理過程中的風(fēng)險(xiǎn)管理為研究切入點(diǎn),研究適合敏捷項(xiàng)目的風(fēng)險(xiǎn)管理方法意義重大,可以補(bǔ)充完善敏捷項(xiàng)目風(fēng)險(xiǎn)管理領(lǐng)域相關(guān)方法與理論。
在互聯(lián)網(wǎng)用戶逐年增加的背后是無數(shù)個(gè)軟件產(chǎn)品在為其提供服務(wù),其中包含面向用戶的APP,也包含面向企業(yè)的軟件業(yè)務(wù)系統(tǒng)。這些軟件產(chǎn)品通過軟件開發(fā)項(xiàng)目交付上線運(yùn)行,在研究軟件開發(fā)管理過程,如何讓軟件產(chǎn)品提高質(zhì)量和用戶滿意度具有重要現(xiàn)實(shí)價(jià)值。
在面對瞬息萬變的市場競爭環(huán)境下,越來越多的公司在進(jìn)行敏捷轉(zhuǎn)型。2001年,軟件行業(yè)思想領(lǐng)袖共同發(fā)表《敏捷宣言》,正式宣告敏捷開發(fā)運(yùn)動(dòng)的開始,并提出敏捷價(jià)值觀和敏捷原則。如今流行的敏捷項(xiàng)目管理方法都源于敏捷思維模式、價(jià)值觀和原則。因此研究企業(yè)在使用敏捷項(xiàng)目管理方法過程中遇到的問題,具有重要的實(shí)踐意義。
1.2.1 Boehm風(fēng)險(xiǎn)管理模型
20世紀(jì)80年代,Boehm比較詳細(xì)地對軟件開發(fā)中的風(fēng)險(xiǎn)管理進(jìn)行了論述,并提出了軟件風(fēng)險(xiǎn)管理的方法。Boehm定義軟件風(fēng)險(xiǎn)管理為“試圖以一種可行的原則和實(shí)踐,規(guī)范化地控制影響項(xiàng)目成功的風(fēng)險(xiǎn),其目的是辨識、描述和消除風(fēng)險(xiǎn)因素,以免它們威脅軟件的成功運(yùn)作”[1],并在《Software Risk Management》比較詳細(xì)地闡述了軟件項(xiàng)目開發(fā)中的風(fēng)險(xiǎn),提出了著名的軟件項(xiàng)目風(fēng)險(xiǎn)管理Boehm模型。Boehm總結(jié)出軟件項(xiàng)目中常見的十大風(fēng)險(xiǎn),并給出應(yīng)對策略,如表1所示。
表1 Boehm十大風(fēng)險(xiǎn)
1.2.2 CRM風(fēng)險(xiǎn)管理模型
1999年前后美國軟件工程研究所(Software Engineering Institute)提出持續(xù)風(fēng)險(xiǎn)管理模型——CRM(Continuous Risk Management),該模型要求在項(xiàng)目生命期的所有階段都關(guān)注風(fēng)險(xiǎn)識別和管理,并將風(fēng)險(xiǎn)管理劃分為5個(gè)部分:風(fēng)險(xiǎn)識別、風(fēng)險(xiǎn)分析、風(fēng)險(xiǎn)計(jì)劃、風(fēng)險(xiǎn)跟蹤和風(fēng)險(xiǎn)控制[2]。該模型強(qiáng)調(diào)風(fēng)險(xiǎn)管理的各個(gè)部分之間的溝通,并將溝通視為風(fēng)險(xiǎn)管理的核心。通過持續(xù)的分析評估可能對項(xiàng)目造成負(fù)面影響的風(fēng)險(xiǎn)事件,篩選出需要最優(yōu)先處理的風(fēng)險(xiǎn)事件實(shí)施風(fēng)險(xiǎn)控制的策略,并持續(xù)評估風(fēng)險(xiǎn)控制策略的實(shí)施效果。
1.2.3 MSF風(fēng)險(xiǎn)管理模型
2006年微軟公司提出MSF4.0(Microsoft Solutions Framework)風(fēng)險(xiǎn)管理模型,該模型把項(xiàng)目風(fēng)險(xiǎn)定義為:任何可能對項(xiàng)目結(jié)果產(chǎn)生積極或消極影響的事件和因素[3]。MSF模型強(qiáng)調(diào)風(fēng)險(xiǎn)管理一定是主動(dòng)的、規(guī)范的,且不能缺少的管理過程。項(xiàng)目團(tuán)隊(duì)?wèi)?yīng)持續(xù)對風(fēng)險(xiǎn)進(jìn)行識別、分析評估、應(yīng)對和監(jiān)控,直至項(xiàng)目風(fēng)險(xiǎn)消除對項(xiàng)目的負(fù)面影響。在MSF風(fēng)險(xiǎn)管理模型中,持續(xù)地記錄風(fēng)險(xiǎn)并形成風(fēng)險(xiǎn)知識庫是十分重要的。
在MSF風(fēng)險(xiǎn)管理模型中,風(fēng)險(xiǎn)管理是盡早識別風(fēng)險(xiǎn)并進(jìn)行風(fēng)險(xiǎn)管理。風(fēng)險(xiǎn)管理的目標(biāo)是消除風(fēng)險(xiǎn)事件給項(xiàng)目帶來的負(fù)面影響,或盡可能降低風(fēng)險(xiǎn)事件的負(fù)面影響程度。有效的風(fēng)險(xiǎn)管理可以讓項(xiàng)目團(tuán)隊(duì)在項(xiàng)目交付過程中,盡可能保證風(fēng)險(xiǎn)和機(jī)會間的有效平衡。
MSF風(fēng)險(xiǎn)管理原則是風(fēng)險(xiǎn)必須被預(yù)先解決,它是系統(tǒng)過程的一部分,其將風(fēng)險(xiǎn)管理視為自主且積極的工作[4]。該風(fēng)險(xiǎn)管理模型具有如下4個(gè)特性:
(1)靈活性
項(xiàng)目管理過程中環(huán)境變化是項(xiàng)目風(fēng)險(xiǎn)的主要來源之一,不同項(xiàng)目階段的變化都可能帶來不同的風(fēng)險(xiǎn),MSF風(fēng)險(xiǎn)管理要求團(tuán)隊(duì)成員在應(yīng)對項(xiàng)目環(huán)境變化時(shí),要具有高度靈活性,只有這樣才能持續(xù)應(yīng)對項(xiàng)目環(huán)境變化帶來的風(fēng)險(xiǎn)。
(2)公開性
MSF模型針對風(fēng)險(xiǎn)提出了一個(gè)可以在團(tuán)隊(duì)內(nèi)部與外部都適用的公開方法。每個(gè)項(xiàng)目成員都應(yīng)該參與項(xiàng)目風(fēng)險(xiǎn)的識別和分析評估過程,項(xiàng)目成員之間通過公開且透明的討論來確定項(xiàng)目風(fēng)險(xiǎn),制定風(fēng)險(xiǎn)應(yīng)對策略,并對項(xiàng)目風(fēng)險(xiǎn)管理達(dá)成一致共識。
(3)知識性
在持續(xù)風(fēng)險(xiǎn)管理過程中,項(xiàng)目團(tuán)隊(duì)會不斷積累風(fēng)險(xiǎn)管理相關(guān)經(jīng)驗(yàn),MSF模型認(rèn)為這些經(jīng)驗(yàn)可以給其他項(xiàng)目進(jìn)行指導(dǎo),項(xiàng)目團(tuán)隊(duì)成員在參與項(xiàng)目過程中吸收學(xué)習(xí)這些知識,在交流過程中傳播這些知識,給其他項(xiàng)目的風(fēng)險(xiǎn)管理工作提供指導(dǎo)。
(4)責(zé)任
MSF模型強(qiáng)調(diào)項(xiàng)目風(fēng)險(xiǎn)管理是全部項(xiàng)目成員的責(zé)任,并不僅僅是項(xiàng)目經(jīng)理的工作。在風(fēng)險(xiǎn)識別分析后每個(gè)項(xiàng)目成員都應(yīng)承擔(dān)風(fēng)險(xiǎn)管理的責(zé)任。項(xiàng)目成員在項(xiàng)目開發(fā)過程中應(yīng)該更加積極主動(dòng)地參與風(fēng)險(xiǎn)管理工作,確保項(xiàng)目風(fēng)險(xiǎn)管理活動(dòng)貫穿項(xiàng)目全程。
維基百科對于敏捷的定義為:綜合使用平衡、協(xié)調(diào)、速度、反應(yīng)、力量、耐力和毅力等運(yùn)動(dòng)技能,并有效地做出改變身體位置的能力。在軟件項(xiàng)目管理過程中敏捷意味著項(xiàng)目組團(tuán)隊(duì)根據(jù)組織內(nèi)外部的開發(fā)環(huán)境變化,快速響應(yīng)變化,做出應(yīng)對措施,保證團(tuán)隊(duì)的持續(xù)交付能力,滿足客戶價(jià)值。
被采用較多的敏捷方法主要有Scrum方法、極限編程、水晶族等敏捷方法。雖然敏捷方法各自不同,但其都遵守敏捷所提出的價(jià)值觀和原則:“個(gè)體和互動(dòng)高于流程和工具;工作的軟件高于詳盡的文檔;客戶合作高于合同談判;響應(yīng)變化高于遵循計(jì)劃”[5]。本文主要以Scrum敏捷方法為基礎(chǔ),構(gòu)建一套基于Scrum敏捷框架的風(fēng)險(xiǎn)管理方法。
Scrum方法由Ken Schwaber和Jeff Sutherland在1996年正式提出,其目的在于充分發(fā)揮面向?qū)ο蠛蜆?gòu)件技術(shù)的開發(fā)方法的優(yōu)勢,著重于對迭代方法的改進(jìn)。Scrum將工業(yè)過程控制中的概念應(yīng)用到軟件開發(fā)過程中,其認(rèn)為軟件開發(fā)過程更多的是經(jīng)驗(yàn)性過程(Empirical Process),而不是確定性過程(Defined Process)。
Scrum敏捷項(xiàng)目主要包含以下幾個(gè)主要過程:收集產(chǎn)品需求backlog、敏捷迭代規(guī)劃會議、每日站會、上線評審會議、敏捷回顧會議。五個(gè)過程在每個(gè)sprint中重復(fù)進(jìn)行,如圖1所示。
圖1 Scrum敏捷模型
產(chǎn)品需求被定義為產(chǎn)品需求積壓(product backlogs)。產(chǎn)品需求通過用戶故事的模式進(jìn)行描述,每個(gè)用戶故事都需要拆分到可以評估的程度。所有的產(chǎn)品需求都是從用戶故事開始,并逐步被拆分成顆粒度更小的用戶故事,直到可以用于被開發(fā)人員直接評估開發(fā)工時(shí)投入的程度。
Scrum方法將項(xiàng)目分解為多個(gè)Sprint迭代周期,每個(gè)Sprint迭代代表一個(gè)用時(shí)2~4周的完整開發(fā)過程。首先,項(xiàng)目需求會被分成不同的用戶故事,然后在Sprint敏捷規(guī)劃會議上,根據(jù)客戶或核心業(yè)務(wù)人員給出的優(yōu)先級對用戶故事進(jìn)行排序,確定下一個(gè)Sprint周期要開發(fā)的需求內(nèi)容。并且在Sprint敏捷規(guī)劃會議上,需要項(xiàng)目團(tuán)隊(duì)成員一起參與,共同對本次Sprint迭代周期的用戶故事進(jìn)行工作量評估,一般采用計(jì)劃撲克的方式進(jìn)行工作量評估,并進(jìn)行任務(wù)拆分和分配。在評估過程中,需要特別注意成員要站在完成一個(gè)完整的用戶故事的角度進(jìn)行評估,不能僅僅考慮自己負(fù)責(zé)的任務(wù)。
在Sprint迭代開發(fā)過程中,項(xiàng)目團(tuán)隊(duì)每天早上在固定時(shí)間、固定地點(diǎn)都會進(jìn)行一場十分鐘以內(nèi)的站立會議。在會議上每個(gè)團(tuán)隊(duì)成員都需要溝通3個(gè)內(nèi)容:昨天做了哪些任務(wù),今天計(jì)劃做哪些任務(wù),在開發(fā)過程中是否遇到問題。站會要求團(tuán)隊(duì)成員輪流進(jìn)行主持,項(xiàng)目經(jīng)理(敏捷教練)參與,并在會后協(xié)調(diào)資源解決成員提出的問題。
在每個(gè)Sprint周期結(jié)束后,項(xiàng)目經(jīng)理需要組織團(tuán)隊(duì)成員和業(yè)務(wù)客戶進(jìn)行敏捷評審會議,在會議上給業(yè)務(wù)客戶演示本次迭代的系統(tǒng)功能,收集客戶提出的建議,以用戶故事的形式加入到產(chǎn)品需求積壓中,并在后續(xù)的Sprint中進(jìn)行實(shí)現(xiàn)。
在Scrum中,項(xiàng)目團(tuán)隊(duì)需要在Sprint結(jié)束后定期組織回顧會議。在回顧會議上,團(tuán)隊(duì)成員總結(jié)上次迭代過程中遇到的問題,如在工作中有哪些不足之處和可取之處。對于不足,項(xiàng)目經(jīng)理需要引導(dǎo)成員進(jìn)行反思制定后續(xù)的策略;對于可取之處,也要進(jìn)行團(tuán)隊(duì)經(jīng)驗(yàn)固化和分享,并在后續(xù)的Sprint中持續(xù)改進(jìn)。
軟件項(xiàng)目風(fēng)險(xiǎn)管理主要分為風(fēng)險(xiǎn)識別、風(fēng)險(xiǎn)分析、風(fēng)險(xiǎn)評估、風(fēng)險(xiǎn)應(yīng)對四個(gè)過程。在傳統(tǒng)的瀑布型項(xiàng)目中,風(fēng)險(xiǎn)管理為前置過程,在項(xiàng)目早期就需要對項(xiàng)目風(fēng)險(xiǎn)進(jìn)行完整的風(fēng)險(xiǎn)管理。
對于敏捷軟件項(xiàng)目,基于CRM風(fēng)險(xiǎn)管理方法,結(jié)合Scrum敏捷模型在每個(gè)Sprint中進(jìn)行完整的風(fēng)險(xiǎn)管理過程,并持續(xù)積累項(xiàng)目風(fēng)險(xiǎn)管理經(jīng)驗(yàn)。敏捷項(xiàng)目風(fēng)險(xiǎn)管理模型如圖2所示。
圖2 敏捷項(xiàng)目風(fēng)險(xiǎn)管理模型
風(fēng)險(xiǎn)識別是通過系統(tǒng)化結(jié)構(gòu)化的方法找出可能影響項(xiàng)目的風(fēng)險(xiǎn)事件。軟件項(xiàng)目風(fēng)險(xiǎn)識別可以在把握軟件開發(fā)整體脈絡(luò)的基礎(chǔ)之上,及時(shí)挖掘可能誘發(fā)風(fēng)險(xiǎn)的因素并加以處理,有效防止風(fēng)險(xiǎn)的發(fā)生和進(jìn)一步擴(kuò)大,為軟件項(xiàng)目開發(fā)節(jié)省一定的成本和時(shí)間投入,對軟件開發(fā)具有一定的促進(jìn)作用[6]。
在敏捷項(xiàng)目中,風(fēng)險(xiǎn)識別過程結(jié)合到敏捷規(guī)劃會議上進(jìn)行,項(xiàng)目經(jīng)理在完成用戶故事評估后,引導(dǎo)項(xiàng)目成員進(jìn)行風(fēng)險(xiǎn)識別。風(fēng)險(xiǎn)識別方法可以采用頭腦風(fēng)暴法、經(jīng)驗(yàn)法等,針對本次Sprint周期中的用戶故事來進(jìn)行發(fā)散性的識別風(fēng)險(xiǎn),在識別過程中可以結(jié)合Boehm十大風(fēng)險(xiǎn)作為風(fēng)險(xiǎn)識別的參考,便于成員快速識別風(fēng)險(xiǎn)。在敏捷項(xiàng)目中,項(xiàng)目被拆分為多個(gè)敏捷迭代,在不同的迭代中結(jié)合MSF風(fēng)險(xiǎn)管理理論,可以對風(fēng)險(xiǎn)進(jìn)行持續(xù)的識別,動(dòng)態(tài)識別迭代中的最新風(fēng)險(xiǎn)。
項(xiàng)目經(jīng)理組織團(tuán)隊(duì)成員完成風(fēng)險(xiǎn)識別之后,需要組織團(tuán)隊(duì)成員對風(fēng)險(xiǎn)進(jìn)行定量分析。一般采用專家法對每條風(fēng)險(xiǎn)發(fā)生的可能性和影響程度進(jìn)行定量評估,通過Boehm風(fēng)險(xiǎn)公式(1),分別計(jì)算出每條風(fēng)險(xiǎn)的影響程度,進(jìn)行優(yōu)先級排序。
項(xiàng)目團(tuán)隊(duì)需要制定風(fēng)險(xiǎn)準(zhǔn)入標(biāo)準(zhǔn),在風(fēng)險(xiǎn)影響程度評估和風(fēng)險(xiǎn)排序之后,經(jīng)過多次Sprint團(tuán)隊(duì)需要定義出適合團(tuán)隊(duì)自身的風(fēng)險(xiǎn)準(zhǔn)入標(biāo)準(zhǔn),并針對敏捷規(guī)劃會議上評估出的風(fēng)險(xiǎn)清單,確定出本次Sprint風(fēng)險(xiǎn)中符合準(zhǔn)入標(biāo)準(zhǔn)的風(fēng)險(xiǎn)清單。
在敏捷項(xiàng)目風(fēng)險(xiǎn)管理中,通過風(fēng)險(xiǎn)識別和風(fēng)險(xiǎn)定性定量分析得出不同迭代中需要重點(diǎn)關(guān)注的風(fēng)險(xiǎn)類型。在敏捷實(shí)踐中項(xiàng)目團(tuán)隊(duì)需要根據(jù)不同迭代中的重點(diǎn)風(fēng)險(xiǎn)事件制定風(fēng)險(xiǎn)應(yīng)對計(jì)劃并持續(xù)對風(fēng)險(xiǎn)進(jìn)行監(jiān)控,把握風(fēng)險(xiǎn)的最新情況。通過風(fēng)險(xiǎn)應(yīng)對措施和持續(xù)監(jiān)控,降低風(fēng)險(xiǎn)事件對項(xiàng)目的負(fù)面影響程度,提高項(xiàng)目的交付成功率。
根據(jù)風(fēng)險(xiǎn)準(zhǔn)入清單,需要組織團(tuán)隊(duì)成員針對清單內(nèi)的風(fēng)險(xiǎn),進(jìn)行風(fēng)險(xiǎn)應(yīng)對策略制定。風(fēng)險(xiǎn)應(yīng)對策略主要分為風(fēng)險(xiǎn)規(guī)避、風(fēng)險(xiǎn)轉(zhuǎn)移、風(fēng)險(xiǎn)減輕、風(fēng)險(xiǎn)接受,團(tuán)隊(duì)成員需要共同制訂風(fēng)險(xiǎn)應(yīng)對策略。
當(dāng)確定風(fēng)險(xiǎn)應(yīng)對策略后,項(xiàng)目經(jīng)理需要把風(fēng)險(xiǎn)應(yīng)對策略作為backlog清單內(nèi)容,加入到本次Sprint中,明確應(yīng)對策略具體的負(fù)責(zé)人,當(dāng)Sprint過程中觸發(fā)某個(gè)風(fēng)險(xiǎn)時(shí),需要風(fēng)險(xiǎn)負(fù)責(zé)人執(zhí)行風(fēng)險(xiǎn)應(yīng)對策略,來進(jìn)行風(fēng)險(xiǎn)應(yīng)對,保證當(dāng)期Sprint正常進(jìn)行。
在識別出風(fēng)險(xiǎn)清單,并根據(jù)風(fēng)險(xiǎn)影響程度進(jìn)行風(fēng)險(xiǎn)排序,制定好風(fēng)險(xiǎn)應(yīng)對策略之后,敏捷團(tuán)隊(duì)成員還需要對風(fēng)險(xiǎn)進(jìn)行監(jiān)控。由于敏捷團(tuán)隊(duì)在每天早上會有固定的會議,溝通當(dāng)期Sprint的情況,結(jié)合風(fēng)險(xiǎn)監(jiān)控的特性,在站會機(jī)制上引入風(fēng)險(xiǎn)監(jiān)控環(huán)節(jié)。
根據(jù)常規(guī)敏捷站會上成員對特定問題(昨天做了哪些事情,今天計(jì)劃做哪些事情,有沒有遇到阻礙)的回答,項(xiàng)目經(jīng)理進(jìn)行Sprint管理,引入風(fēng)險(xiǎn)管理機(jī)制后,在站會上新增加一個(gè)問題,有沒有觸發(fā)風(fēng)險(xiǎn),風(fēng)險(xiǎn)應(yīng)對清單上每個(gè)成員都有自己負(fù)責(zé)的風(fēng)險(xiǎn)項(xiàng),通過每日站會讓成員關(guān)注自己負(fù)責(zé)的風(fēng)險(xiǎn)情況,從而達(dá)到主動(dòng)管理風(fēng)險(xiǎn)的目的。
對于軟件開發(fā)項(xiàng)目來說,項(xiàng)目的風(fēng)險(xiǎn)管理是必不可少的環(huán)節(jié),只有完善的風(fēng)險(xiǎn)管理,軟件開發(fā)項(xiàng)目成功交付的可能性才會更高。對于近些年迅猛發(fā)展的敏捷項(xiàng)目管理方法,我們不能僅僅看到敏捷方法給項(xiàng)目交付效率的提升,也要充分認(rèn)識到敏捷方法給軟件項(xiàng)目帶來的風(fēng)險(xiǎn),并在敏捷項(xiàng)目中主動(dòng)管理這些風(fēng)險(xiǎn),才能更好地應(yīng)用敏捷方法給企業(yè)帶來更多價(jià)值。