軟件開發(fā)項目的風(fēng)險管理
眾所周知,軟件開發(fā)過程可分為:需求分析、設(shè)計、編碼、測試、安裝及維護等幾個過程(在RUP方法中:業(yè)務(wù)建模、需求、分析設(shè)計、實施、測試、部署),實際上一個完整的軟件項目前后還有其它過程,在這里列出的只是和軟件開發(fā)相關(guān)的核心過程。 軟件項目的生命周期可以分為四個階段(不同行業(yè)的項目生命周期不同),即初始階段、設(shè)計階段、實施階段、收尾階段。軟件開發(fā)過程在軟件項目的這四個階段中的分布情況如下(括弧里面表示RUP方法中的過程):
初始階段:大部分需求分析,少部分設(shè)計(大部分業(yè)務(wù)建模和需求,少部分分析設(shè)計)
設(shè)計階段:大部分設(shè)計,少部分編碼(大部分分析設(shè)計,部分實施及測試,開始考慮部署)
實施階段:大部分編碼和測試,少部分設(shè)計(大部分實施及測試,部分部署)
收尾階段:安裝及維護(大部分部署)
而項目管理則貫穿在整個生命周期的每個階段。
根據(jù)PMBOK,項目管理可以從范圍管理、時間管理、費用管理、質(zhì)量管理、人力資源管理、溝通管理、風(fēng)險管理、采購管理和整體管理等9個方面考慮,對于軟件項目管理來講軟件配置管理(屬于整體管理)、軟件質(zhì)量管理、軟件風(fēng)險管理及開發(fā)人員管理(屬于人力資源管理)等四個方面的管理尤為重要,軟件開發(fā)的每個階段、每個過程都要重視這幾方面的管理。
下面就以軟件項目的風(fēng)險管理為主題展開討論。
軟件項目管理的四個階段中,在初始階段項目成功的可能性最小,風(fēng)險發(fā)生的概率也就最高,但是這時候一旦預(yù)計的風(fēng)險發(fā)生了,損失是最小的,比如:在這個階段如果某種原因突然資金來源斷了(這在需求階段是很有可能的),以至于不能繼續(xù)進行項目,不得不終止項目,那么這時候的損失只是需求分析階段的投入。隨著項目的進展項目成功的可能性變大,風(fēng)險發(fā)生的概率逐漸變小,風(fēng)險對項目的損失逐漸變大,快到收尾階段的時候風(fēng)險對項目的損失最大,隨著收尾階段的進行風(fēng)險又逐漸變小。
風(fēng)險管理是對項目風(fēng)險進行識別、分析和應(yīng)對的過程。我們先看看項目風(fēng)險可以怎么分類,然后再對風(fēng)險管理的這三個過程逐一進行討論。
1.風(fēng)險的分類
按內(nèi)容分
范圍風(fēng)險:與范圍變更有關(guān)的風(fēng)險
質(zhì)量風(fēng)險:沒有按照要求的技術(shù)性能和質(zhì)量水平完成任務(wù)
進度風(fēng)險:沒有在預(yù)算的時間范圍內(nèi)完成任務(wù)
成本風(fēng)險:沒有在預(yù)算的成本范圍內(nèi)完成任務(wù)
技術(shù)風(fēng)險:技術(shù)變化
法律風(fēng)險:許可權(quán)、專利、合同失效、訴訟、不可抗力
外部可預(yù)測風(fēng)險:市場風(fēng)險(原材料可利用性、需求)、日常運作(維修需求)、環(huán)境影響、社會影響、貨幣變動、通貨膨脹、稅收
外部可預(yù)測風(fēng)險:規(guī)章(不可預(yù)測的政府干預(yù))、自然災(zāi)害
內(nèi)部非技術(shù)風(fēng)險:戰(zhàn)略風(fēng)險(公司的經(jīng)營戰(zhàn)略發(fā)生了變化)、管理風(fēng)險(公司管理人員是否成熟等)
按可確定性分
已知風(fēng)險(Knowns):員工離職
已知-未知風(fēng)險(Known-unknowns):可預(yù)知風(fēng)險
未知-未知風(fēng)險(Unknown-unknowns):不可預(yù)知風(fēng)險
2.風(fēng)險識別
風(fēng)險的識別就是確定何種風(fēng)險事件可能影響項目。在項目開始、每個項目階段中間、主要范圍變更批準(zhǔn)之前都要進行風(fēng)險識別,實際上它在整個項目生命周期內(nèi)都是一個連續(xù)的過程。
要識別風(fēng)險,首先我們應(yīng)該了解在軟件開發(fā)的各個階段都有可能發(fā)生哪些風(fēng)險(風(fēng)險事件或風(fēng)險來源)。
初始階段
在這個階段進行大部分需求分析、少部分設(shè)計(大部分業(yè)務(wù)建模和需求、少部分分析設(shè)計)。
可能的風(fēng)險事件:
1、 項目目標(biāo)不清
2、 項目范圍不明確(范圍太大太小都不可以)
3、 用戶參與少或和用戶溝通少
4、 對業(yè)務(wù)了解不夠
5、 對需求了解不夠
6、 沒有進行可行性研究
設(shè)計階段
在這個階段進行大部分設(shè)計、少部分編碼(大部分分析設(shè)計,部分實施及測試,開始考慮部署)
可能的風(fēng)險事件
1、 項目隊伍缺乏經(jīng)驗,如缺乏有經(jīng)驗的系統(tǒng)分析員
2、 沒有變更控制計劃,以至于變更沒有依據(jù),該變更的不變,不該變的也變,這樣得來的設(shè)計勢必會失敗或者偏離用戶需求
3、 倉促計劃,可能帶來進度方面的風(fēng)險
4、 漏項,由于設(shè)計人員的疏忽某個功能沒有考慮進去
實施階段
在這個階段進行大部分編碼和測試,也涉及少部分設(shè)計(大部分實施及測試,部分部署),如:設(shè)計變更或補充設(shè)計。
可能的風(fēng)險事件
1、 開發(fā)環(huán)境沒有具備好
2、 設(shè)計錯誤帶來的實施困難
3、 程序員開發(fā)能力差,或程序員對開發(fā)工具不熟
4、 項目范圍改變(突然要增加或修改一些功能,需要重新考慮設(shè)計)
5、 項目進度改變(要求提前完成任務(wù)等)[NextPage]
6、 人員離開,在一個項目內(nèi)軟件開發(fā)工作有一定的連續(xù)性,需要移交和交接,有時人員離開對項目的影響會很大
7、 開發(fā)團隊內(nèi)部溝通不夠,導(dǎo)致程序員對系統(tǒng)設(shè)計的理解上有偏差
8、 沒有有效的備份方案
9、 沒有切實可行的測試計劃
10、 測試人員經(jīng)驗不足
收尾階段
在這個階段進行安裝及維護(大部分部署)。
可能的風(fēng)險事件
1、 質(zhì)量差
2、 客戶不滿意
3、 設(shè)備沒有按時到貨
4、 資金不能回收
以上只是例具了常見的風(fēng)險事件,對不同項目可能發(fā)生的風(fēng)險事件不同,應(yīng)該對具體項目識別出真正有可能發(fā)生在該項目的風(fēng)險事件。而且還要對這些風(fēng)險事件進行描述,如:可能性、可能后果范圍、預(yù)計發(fā)生時間、發(fā)生頻率等。
風(fēng)險識別的有效方法有很多,如:建立風(fēng)險項目檢查表、因果分析圖、采訪各種項目干系人等。
軟件項目的風(fēng)險可以從以下幾方面檢查:
產(chǎn)品規(guī)模風(fēng)險
業(yè)務(wù)影響風(fēng)險檢
與客戶相關(guān)的風(fēng)險
過程風(fēng)險
技術(shù)風(fēng)險
開發(fā)環(huán)境風(fēng)險
與人員的模式和經(jīng)驗有關(guān)的風(fēng)險
以上我們討論了在軟件項目各個階段中可能發(fā)生的風(fēng)險事件和識別方法。下面我們看看如何對這些風(fēng)險事件進行分析。
3.風(fēng)險分析
風(fēng)險分析就是對以上識別出來的風(fēng)險事件做風(fēng)險影響分析。
和風(fēng)險相關(guān)的有四個因素:
風(fēng)險事件,破壞或影響項目的事件
風(fēng)險概率(%),事件發(fā)生的可能性
風(fēng)險得失量(金額),說明可能造成的損失
風(fēng)險影響(金額),等于 風(fēng)險概率 × 風(fēng)險得失量
通過對風(fēng)險及風(fēng)險的相互作用的估算來評價項目可能結(jié)果的范圍,從成本、進度及性能三個方面對風(fēng)險進行評價,確定哪些風(fēng)險事件或來源可以避免,哪些可以忽略不考慮(包括可以承受),哪些要采取應(yīng)對措施。
4.風(fēng)險應(yīng)對
1、應(yīng)對方法
項目中的風(fēng)險永遠(yuǎn)不能全部消除,PMBOK提到三種應(yīng)對方法:
避免
通過分析找出來發(fā)生風(fēng)險事件的原因,消除這些原因來避免一些特定的風(fēng)險事件發(fā)生。比如:
如何避免客戶不滿意?
客戶不滿意有兩種情況,一種情況是沒有判斷客戶滿意度的依據(jù),即沒有雙方互相認(rèn)可的客戶驗收標(biāo)準(zhǔn),還有一種是開發(fā)方?jīng)]有達到驗收標(biāo)準(zhǔn),即沒有滿足用戶需求。不管是哪一種,開發(fā)方都有不可推卸的責(zé)任,只要做好以下環(huán)節(jié)完全可以避免:
1、 業(yè)務(wù)建模階段要讓客戶參與
2、 需求階段要多和客戶溝通,了解客戶真正的需求
3、 目標(biāo)系統(tǒng)的模型或DEMO系統(tǒng)要向客戶演示,并得到反饋意見,如果反饋的意見和DEMO系統(tǒng)出入比較大時,一定要將修改后的DEMO系統(tǒng)在次向客戶演示,直到雙方都達成共識為止
4、 要有雙方認(rèn)可的驗收方案和驗收標(biāo)準(zhǔn)
5、 做好變更控制和配置管理
減輕
通過降低風(fēng)險事件發(fā)生的概率或得失量來減輕對項目的影響。也可以采用風(fēng)險轉(zhuǎn)移的方法來減輕風(fēng)險對項目帶來的影響。項目預(yù)算中考慮應(yīng)急儲備金是另一種降低風(fēng)險影響的方法。比如:
經(jīng)過風(fēng)險識別發(fā)現(xiàn),項目組的程序員對所需開發(fā)技術(shù)不熟??梢圆捎檬煜さ募夹g(shù)來減輕項目在成本或進度方面的影響。也可以事先進行培訓(xùn)來減輕對項目的影響。
接受
接收風(fēng)險造成的后果。比如:
為了避免自然災(zāi)害造成的后果,在一個大的軟件項目中考慮了異地備份中心。
2、開發(fā)應(yīng)對計劃
針對需要采取應(yīng)對措施的風(fēng)險事件,開發(fā)應(yīng)對計劃,一旦發(fā)生風(fēng)險事件,就實施應(yīng)對計劃。比如:
有一個軟件集成項目中包括了設(shè)備,而且計劃在部署階段之前設(shè)備必須到位,而這些設(shè)備從廠家直接進貨。經(jīng)過分析發(fā)現(xiàn)有可能不能按時進貨,那就應(yīng)該考慮備選方案,比如能不能周轉(zhuǎn)等。
又比如:
在一個軟件開發(fā)項目中,某開發(fā)人員有可能離職,離職后會對項目造成一定的影響,則應(yīng)該對這個風(fēng)險事件開發(fā)應(yīng)對計劃,過程可以參照如下:
1、進行調(diào)研,確定流動原因
2、在項目開始前,把緩解這些流動原因的工作列入風(fēng)險管理計劃
3、項目開始時,做好計劃一旦人員離開時便可執(zhí)行,以確保人員離開后項目仍能繼續(xù)進行
4、制定文檔標(biāo)準(zhǔn),并建立一種機制,保證文檔及時產(chǎn)生
5、對所有工作進行細(xì)微詳審,使更多人能夠按計劃進度完成自己的工作
6、對每個關(guān)鍵性技術(shù)人員培養(yǎng)后備人員
在考慮風(fēng)險成本之后,決定是否采用上述策略。
初始階段:大部分需求分析,少部分設(shè)計(大部分業(yè)務(wù)建模和需求,少部分分析設(shè)計)
設(shè)計階段:大部分設(shè)計,少部分編碼(大部分分析設(shè)計,部分實施及測試,開始考慮部署)
實施階段:大部分編碼和測試,少部分設(shè)計(大部分實施及測試,部分部署)
收尾階段:安裝及維護(大部分部署)
而項目管理則貫穿在整個生命周期的每個階段。
根據(jù)PMBOK,項目管理可以從范圍管理、時間管理、費用管理、質(zhì)量管理、人力資源管理、溝通管理、風(fēng)險管理、采購管理和整體管理等9個方面考慮,對于軟件項目管理來講軟件配置管理(屬于整體管理)、軟件質(zhì)量管理、軟件風(fēng)險管理及開發(fā)人員管理(屬于人力資源管理)等四個方面的管理尤為重要,軟件開發(fā)的每個階段、每個過程都要重視這幾方面的管理。
下面就以軟件項目的風(fēng)險管理為主題展開討論。
軟件項目管理的四個階段中,在初始階段項目成功的可能性最小,風(fēng)險發(fā)生的概率也就最高,但是這時候一旦預(yù)計的風(fēng)險發(fā)生了,損失是最小的,比如:在這個階段如果某種原因突然資金來源斷了(這在需求階段是很有可能的),以至于不能繼續(xù)進行項目,不得不終止項目,那么這時候的損失只是需求分析階段的投入。隨著項目的進展項目成功的可能性變大,風(fēng)險發(fā)生的概率逐漸變小,風(fēng)險對項目的損失逐漸變大,快到收尾階段的時候風(fēng)險對項目的損失最大,隨著收尾階段的進行風(fēng)險又逐漸變小。
風(fēng)險管理是對項目風(fēng)險進行識別、分析和應(yīng)對的過程。我們先看看項目風(fēng)險可以怎么分類,然后再對風(fēng)險管理的這三個過程逐一進行討論。
1.風(fēng)險的分類
按內(nèi)容分
范圍風(fēng)險:與范圍變更有關(guān)的風(fēng)險
質(zhì)量風(fēng)險:沒有按照要求的技術(shù)性能和質(zhì)量水平完成任務(wù)
進度風(fēng)險:沒有在預(yù)算的時間范圍內(nèi)完成任務(wù)
成本風(fēng)險:沒有在預(yù)算的成本范圍內(nèi)完成任務(wù)
技術(shù)風(fēng)險:技術(shù)變化
法律風(fēng)險:許可權(quán)、專利、合同失效、訴訟、不可抗力
外部可預(yù)測風(fēng)險:市場風(fēng)險(原材料可利用性、需求)、日常運作(維修需求)、環(huán)境影響、社會影響、貨幣變動、通貨膨脹、稅收
外部可預(yù)測風(fēng)險:規(guī)章(不可預(yù)測的政府干預(yù))、自然災(zāi)害
內(nèi)部非技術(shù)風(fēng)險:戰(zhàn)略風(fēng)險(公司的經(jīng)營戰(zhàn)略發(fā)生了變化)、管理風(fēng)險(公司管理人員是否成熟等)
按可確定性分
已知風(fēng)險(Knowns):員工離職
已知-未知風(fēng)險(Known-unknowns):可預(yù)知風(fēng)險
未知-未知風(fēng)險(Unknown-unknowns):不可預(yù)知風(fēng)險
2.風(fēng)險識別
風(fēng)險的識別就是確定何種風(fēng)險事件可能影響項目。在項目開始、每個項目階段中間、主要范圍變更批準(zhǔn)之前都要進行風(fēng)險識別,實際上它在整個項目生命周期內(nèi)都是一個連續(xù)的過程。
要識別風(fēng)險,首先我們應(yīng)該了解在軟件開發(fā)的各個階段都有可能發(fā)生哪些風(fēng)險(風(fēng)險事件或風(fēng)險來源)。
初始階段
在這個階段進行大部分需求分析、少部分設(shè)計(大部分業(yè)務(wù)建模和需求、少部分分析設(shè)計)。
可能的風(fēng)險事件:
1、 項目目標(biāo)不清
2、 項目范圍不明確(范圍太大太小都不可以)
3、 用戶參與少或和用戶溝通少
4、 對業(yè)務(wù)了解不夠
5、 對需求了解不夠
6、 沒有進行可行性研究
設(shè)計階段
在這個階段進行大部分設(shè)計、少部分編碼(大部分分析設(shè)計,部分實施及測試,開始考慮部署)
可能的風(fēng)險事件
1、 項目隊伍缺乏經(jīng)驗,如缺乏有經(jīng)驗的系統(tǒng)分析員
2、 沒有變更控制計劃,以至于變更沒有依據(jù),該變更的不變,不該變的也變,這樣得來的設(shè)計勢必會失敗或者偏離用戶需求
3、 倉促計劃,可能帶來進度方面的風(fēng)險
4、 漏項,由于設(shè)計人員的疏忽某個功能沒有考慮進去
實施階段
在這個階段進行大部分編碼和測試,也涉及少部分設(shè)計(大部分實施及測試,部分部署),如:設(shè)計變更或補充設(shè)計。
可能的風(fēng)險事件
1、 開發(fā)環(huán)境沒有具備好
2、 設(shè)計錯誤帶來的實施困難
3、 程序員開發(fā)能力差,或程序員對開發(fā)工具不熟
4、 項目范圍改變(突然要增加或修改一些功能,需要重新考慮設(shè)計)
5、 項目進度改變(要求提前完成任務(wù)等)[NextPage]
6、 人員離開,在一個項目內(nèi)軟件開發(fā)工作有一定的連續(xù)性,需要移交和交接,有時人員離開對項目的影響會很大
7、 開發(fā)團隊內(nèi)部溝通不夠,導(dǎo)致程序員對系統(tǒng)設(shè)計的理解上有偏差
8、 沒有有效的備份方案
9、 沒有切實可行的測試計劃
10、 測試人員經(jīng)驗不足
收尾階段
在這個階段進行安裝及維護(大部分部署)。
可能的風(fēng)險事件
1、 質(zhì)量差
2、 客戶不滿意
3、 設(shè)備沒有按時到貨
4、 資金不能回收
以上只是例具了常見的風(fēng)險事件,對不同項目可能發(fā)生的風(fēng)險事件不同,應(yīng)該對具體項目識別出真正有可能發(fā)生在該項目的風(fēng)險事件。而且還要對這些風(fēng)險事件進行描述,如:可能性、可能后果范圍、預(yù)計發(fā)生時間、發(fā)生頻率等。
風(fēng)險識別的有效方法有很多,如:建立風(fēng)險項目檢查表、因果分析圖、采訪各種項目干系人等。
軟件項目的風(fēng)險可以從以下幾方面檢查:
產(chǎn)品規(guī)模風(fēng)險
業(yè)務(wù)影響風(fēng)險檢
與客戶相關(guān)的風(fēng)險
過程風(fēng)險
技術(shù)風(fēng)險
開發(fā)環(huán)境風(fēng)險
與人員的模式和經(jīng)驗有關(guān)的風(fēng)險
以上我們討論了在軟件項目各個階段中可能發(fā)生的風(fēng)險事件和識別方法。下面我們看看如何對這些風(fēng)險事件進行分析。
3.風(fēng)險分析
風(fēng)險分析就是對以上識別出來的風(fēng)險事件做風(fēng)險影響分析。
和風(fēng)險相關(guān)的有四個因素:
風(fēng)險事件,破壞或影響項目的事件
風(fēng)險概率(%),事件發(fā)生的可能性
風(fēng)險得失量(金額),說明可能造成的損失
風(fēng)險影響(金額),等于 風(fēng)險概率 × 風(fēng)險得失量
通過對風(fēng)險及風(fēng)險的相互作用的估算來評價項目可能結(jié)果的范圍,從成本、進度及性能三個方面對風(fēng)險進行評價,確定哪些風(fēng)險事件或來源可以避免,哪些可以忽略不考慮(包括可以承受),哪些要采取應(yīng)對措施。
4.風(fēng)險應(yīng)對
1、應(yīng)對方法
項目中的風(fēng)險永遠(yuǎn)不能全部消除,PMBOK提到三種應(yīng)對方法:
避免
通過分析找出來發(fā)生風(fēng)險事件的原因,消除這些原因來避免一些特定的風(fēng)險事件發(fā)生。比如:
如何避免客戶不滿意?
客戶不滿意有兩種情況,一種情況是沒有判斷客戶滿意度的依據(jù),即沒有雙方互相認(rèn)可的客戶驗收標(biāo)準(zhǔn),還有一種是開發(fā)方?jīng)]有達到驗收標(biāo)準(zhǔn),即沒有滿足用戶需求。不管是哪一種,開發(fā)方都有不可推卸的責(zé)任,只要做好以下環(huán)節(jié)完全可以避免:
1、 業(yè)務(wù)建模階段要讓客戶參與
2、 需求階段要多和客戶溝通,了解客戶真正的需求
3、 目標(biāo)系統(tǒng)的模型或DEMO系統(tǒng)要向客戶演示,并得到反饋意見,如果反饋的意見和DEMO系統(tǒng)出入比較大時,一定要將修改后的DEMO系統(tǒng)在次向客戶演示,直到雙方都達成共識為止
4、 要有雙方認(rèn)可的驗收方案和驗收標(biāo)準(zhǔn)
5、 做好變更控制和配置管理
減輕
通過降低風(fēng)險事件發(fā)生的概率或得失量來減輕對項目的影響。也可以采用風(fēng)險轉(zhuǎn)移的方法來減輕風(fēng)險對項目帶來的影響。項目預(yù)算中考慮應(yīng)急儲備金是另一種降低風(fēng)險影響的方法。比如:
經(jīng)過風(fēng)險識別發(fā)現(xiàn),項目組的程序員對所需開發(fā)技術(shù)不熟??梢圆捎檬煜さ募夹g(shù)來減輕項目在成本或進度方面的影響。也可以事先進行培訓(xùn)來減輕對項目的影響。
接受
接收風(fēng)險造成的后果。比如:
為了避免自然災(zāi)害造成的后果,在一個大的軟件項目中考慮了異地備份中心。
2、開發(fā)應(yīng)對計劃
針對需要采取應(yīng)對措施的風(fēng)險事件,開發(fā)應(yīng)對計劃,一旦發(fā)生風(fēng)險事件,就實施應(yīng)對計劃。比如:
有一個軟件集成項目中包括了設(shè)備,而且計劃在部署階段之前設(shè)備必須到位,而這些設(shè)備從廠家直接進貨。經(jīng)過分析發(fā)現(xiàn)有可能不能按時進貨,那就應(yīng)該考慮備選方案,比如能不能周轉(zhuǎn)等。
又比如:
在一個軟件開發(fā)項目中,某開發(fā)人員有可能離職,離職后會對項目造成一定的影響,則應(yīng)該對這個風(fēng)險事件開發(fā)應(yīng)對計劃,過程可以參照如下:
1、進行調(diào)研,確定流動原因
2、在項目開始前,把緩解這些流動原因的工作列入風(fēng)險管理計劃
3、項目開始時,做好計劃一旦人員離開時便可執(zhí)行,以確保人員離開后項目仍能繼續(xù)進行
4、制定文檔標(biāo)準(zhǔn),并建立一種機制,保證文檔及時產(chǎn)生
5、對所有工作進行細(xì)微詳審,使更多人能夠按計劃進度完成自己的工作
6、對每個關(guān)鍵性技術(shù)人員培養(yǎng)后備人員
在考慮風(fēng)險成本之后,決定是否采用上述策略。
本文標(biāo)簽:軟件開發(fā)項目的風(fēng)險管理
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《軟件開發(fā)項目的風(fēng)險管理》相關(guān)權(quán)利人與機電之家網(wǎng)取得聯(lián)系。










