软件开发项目的风险管理 (转)
原作者:李藝蘭
軟件開發項目的風險管理
眾所周知,軟件開發過程可分為:需求分析、設計、編碼、測試、安裝及維護等幾個過程(在RUP方法中:業務建模、需求、分析設計、實施、測試、部署),實際上一個完整的軟件項目前后還有其它過程,在這里列出的只是和軟件開發相關的核心過程。
軟件項目的生命周期可以分為四個階段(不同行業的項目生命周期不同),即初始階段、設計階段、實施階段、收尾階段。軟件開發過程在軟件項目的這四個階段中的分布情況如下(括弧里面表示RUP方法中的過程):
初始階段:大部分需求分析,少部分設計(大部分業務建模和需求,少部分分析設計)
設計階段:大部分設計,少部分編碼(大部分分析設計,部分實施及測試,開始考慮部署)
實施階段:大部分編碼和測試,少部分設計(大部分實施及測試,部分部署)
收尾階段:安裝及維護(大部分部署)
而項目管理則貫穿在整個生命周期的每個階段。
根據PMBOK,項目管理可以從范圍管理、時間管理、費用管理、質量管理、人力資源管理、溝通管理、風險管理、采購管理和整體管理等9個方面考慮,對于軟件項目管理來講軟件配置管理(屬于整體管理)、軟件質量管理、軟件風險管理及開發人員管理(屬于人力資源管理)等四個方面的管理尤為重要,軟件開發的每個階段、每個過程都要重視這幾方面的管理。
下面就以軟件項目的風險管理為主題展開討論。
軟件項目管理的四個階段中,在初始階段項目成功的可能性最小,風險發生的概率也就最高,但是這時候一旦預計的風險發生了,損失是最小的,比如:在這個階段如果某種原因突然資金來源斷了(這在需求階段是很有可能的),以至于不能繼續進行項目,不得不終止項目,那么這時候的損失只是需求分析階段的投入。隨著項目的進展項目成功的可能性變大,風險發生的概率逐漸變小,風險對項目的損失逐漸變大,快到收尾階段的時候風險對項目的損失最大,隨著收尾階段的進行風險又逐漸變小。
風險管理是對項目風險進行識別、分析和應對的過程。我們先看看項目風險可以怎么分類,然后再對風險管理的這三個過程逐一進行討論。
1.風險的分類
按內容分
范圍風險:與范圍變更有關的風險
質量風險:沒有按照要求的技術性能和質量水平完成任務
進度風險:沒有在預算的時間范圍內完成任務
成本風險:沒有在預算的成本范圍內完成任務
技術風險:技術變化
法律風險:許可權、專利、合同失效、訴訟、不可抗力
外部可預測風險:市場風險(原材料可利用性、需求)、日常運作(維修需求)、環境影響、社會影響、貨幣變動、通貨膨脹、稅收
外部可預測風險:規章(不可預測的政府干預)、自然災害
內部非技術風險:戰略風險(公司的經營戰略發生了變化)、管理風險(公司管理人員是否成熟等)
按可確定性分
已知風險(Knowns):員工離職
已知-未知風險(Known-unknowns):可預知風險
未知-未知風險(Unknown-unknowns):不可預知風險
2.風險識別
風險的識別就是確定何種風險事件可能影響項目。在項目開始、每個項目階段中間、主要范圍變更批準之前都要進行風險識別,實際上它在整個項目生命周期內都是一個連續的過程。
要識別風險,首先我們應該了解在軟件開發的各個階段都有可能發生哪些風險(風險事件或風險來源)。
初始階段
在這個階段進行大部分需求分析、少部分設計(大部分業務建模和需求、少部分分析設計)。
可能的風險事件:
l 項目目標不清
l 項目范圍不明確(范圍太大太小都不可以)
l 用戶參與少或和用戶溝通少
l 對業務了解不夠
l 對需求了解不夠
l 沒有進行可行性研究
設計階段
在這個階段進行大部分設計、少部分編碼(大部分分析設計,部分實施及測試,開始考慮部署)
可能的風險事件
l 項目隊伍缺乏經驗,如缺乏有經驗的系統分析員
l 沒有變更控制計劃,以至于變更沒有依據,該變更的不變,不該變的也變,這樣得來的設計勢必會失敗或者偏離用戶需求
l 倉促計劃,可能帶來進度方面的風險
l 漏項,由于設計人員的疏忽某個功能沒有考慮進去
實施階段
在這個階段進行大部分編碼和測試,也涉及少部分設計(大部分實施及測試,部分部署),如:設計變更或補充設計。
可能的風險事件
l 開發環境沒有具備好
l 設計錯誤帶來的實施困難
l 程序員開發能力差,或程序員對開發工具不熟
l 項目范圍改變(突然要增加或修改一些功能,需要重新考慮設計)
l 項目進度改變(要求提前完成任務等)
l 人員離開,在一個項目內軟件開發工作有一定的連續性,需要移交和交接,有時人員離開對項目的影響會很大
l 開發團隊內部溝通不夠,導致程序員對系統設計的理解上有偏差
l 沒有有效的備份方案
l 沒有切實可行的測試計劃
l 測試人員經驗不足
收尾階段
在這個階段進行安裝及維護(大部分部署)。
可能的風險事件
l 質量差
l 客戶不滿意
l 設備沒有按時到貨
l 資金不能回收
以上只是例具了常見的風險事件,對不同項目可能發生的風險事件不同,應該對具體項目識別出真正有可能發生在該項目的風險事件。而且還要對這些風險事件進行描述,如:可能性、可能后果范圍、預計發生時間、發生頻率等。
風險識別的有效方法有很多,如:建立風險項目檢查表、因果分析圖、采訪各種項目干系人等。
軟件項目的風險可以從以下幾方面檢查:
產品規模風險
業務影響風險檢
與客戶相關的風險
過程風險
技術風險
開發環境風險
與人員的模式和經驗有關的風險
以上我們討論了在軟件項目各個階段中可能發生的風險事件和識別方法。下面我們看看如何對這些風險事件進行分析。
3.風險分析
風險分析就是對以上識別出來的風險事件做風險影響分析。
和風險相關的有四個因素:
風險事件,破壞或影響項目的事件
風險概率(%),事件發生的可能性
風險得失量(金額),說明可能造成的損失
風險影響(金額),等于 風險概率 × 風險得失量
通過對風險及風險的相互作用的估算來評價項目可能結果的范圍,從成本、進度及性能三個方面對風險進行評價,確定哪些風險事件或來源可以避免,哪些可以忽略不考慮(包括可以承受),哪些要采取應對措施。
4.風險應對
1、應對方法
項目中的風險永遠不能全部消除,PMBOK提到三種應對方法:
避免
通過分析找出來發生風險事件的原因,消除這些原因來避免一些特定的風險事件發生。
比如:
如何避免客戶不滿意?
客戶不滿意有兩種情況,一種情況是沒有判斷客戶滿意度的依據,即沒有雙方互相認可的客戶驗收標準,還有一種是開發方沒有達到驗收標準,即沒有滿足用戶需求。不管是哪一種,開發方都有不可推卸的責任,只要做好以下環節完全可以避免:
l 業務建模階段要讓客戶參與
l 需求階段要多和客戶溝通,了解客戶真正的需求
l 目標系統的模型或DEMO系統要向客戶演示,并得到反饋意見,如果反饋的意見和DEMO系統出入比較大時,一定要將修改后的DEMO系統在次向客戶演示,直到雙方都達成共識為止
l 要有雙方認可的驗收方案和驗收標準
l 做好變更控制和配置管理
減輕
通過降低風險事件發生的概率或得失量來減輕對項目的影響。也可以采用風險轉移的方法來減輕風險對項目帶來的影響。項目預算中考慮應急儲備金是另一種降低風險影響的方法。
比如:
經過風險識別發現,項目組的程序員對所需開發技術不熟。可以采用熟悉的技術來減輕項目在成本或進度方面的影響。也可以事先進行培訓來減輕對項目的影響。
接受
接收風險造成的后果。
比如:
為了避免自然災害造成的后果,在一個大的軟件項目中考慮了異地備份中心。
2、開發應對計劃
針對需要采取應對措施的風險事件,開發應對計劃,一旦發生風險事件,就實施應對計劃。
比如:
有一個軟件集成項目中包括了設備,而且計劃在部署階段之前設備必須到位,而這些設備從廠家直接進貨。經過分析發現有可能不能按時進貨,那就應該考慮備選方案,比如能不能周轉等。
又比如:
在一個軟件開發項目中,某開發人員有可能離職,離職后會對項目造成一定的影響,則應該對這個風險事件開發應對計劃,過程可以參照如下:
l 進行調研,確定流動原因
l 在項目開始前,把緩解這些流動原因的工作列入風險管理計劃
l 項目開始時,做好計劃一旦人員離開時便可執行,以確保人員離開后項目仍能繼續進行
l 制定文檔標準,并建立一種機制,保證文檔及時產生
l 對所有工作進行細微詳審,使更多人能夠按計劃進度完成自己的工作
l 對每個關鍵性技術人員培養后備人員
在考慮風險成本之后,決定是否采用上述策略。
轉載于:https://www.cnblogs.com/GeneralXU/archive/2007/03/15/675651.html
總結
以上是生活随笔為你收集整理的软件开发项目的风险管理 (转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinForm 程序的界面多语言切换
- 下一篇: 利用正则表达式去掉html代码