軟件項目風險管理
軟件項目風險管理是軟件項目管理的重要內容。在進行軟件項目風險管理時,要辯識風險,評估它們出現(xiàn)的概率及產生的影響,然后建立一個規(guī)劃來管理風險。風險管理的主要目標是預防風險。
軟件項目風險是指在軟件開發(fā)過程中遇到的預算和進度等方面的問題以及這些問題對軟件項目的影響。軟件項目風險會影響項目計劃的實現(xiàn),如果項目風險變成現(xiàn)實,就有可能影響項目的進度,增加項目的成本,甚至使軟件項目不能實現(xiàn)。如果對項目進行風險管理,就可以最大限度的減少風險的發(fā)生。但是,目前國內的軟件企業(yè)不太關心軟件項目的風險管理,結果造成軟件項目經(jīng)常性的延期、超過預算,甚至失敗。成功的項目管理一般都對項目風險進行了良好的管理。因此任何一個系統(tǒng)開發(fā)項目都應將風險管理作為軟件項目管理的重要內容。
在項目風險管理中,存在多種風險管理方法與工具,軟件項目管理只有找出最適合自己的方法與工具并應用到風險管理中,才能盡量減少軟件項目風險,促進項目的成功。
軟件項目的風險管理是軟件項目管理的重要內容。在進行軟件項目風險管理時,要辯識風險,評估它們出現(xiàn)的概率及產生的影響,然后建立一個規(guī)劃來管理風險。風險管理的主要目標是預防風險。本文探討了風險管理的主要內容和方法,介紹了風險管理的經(jīng)典理論,比較了幾種主流的風險管理策略和模型。
一、引言
近幾年來軟件開發(fā)技術、工具都有了很大的進步,但是軟件項目開發(fā)超時、超支、甚至不能滿足用戶需求而根本沒有得到實際使用的情況仍然比比皆是。軟件項目開發(fā)和管理中一直存在著種種不確定性,嚴重影響著項目的順利完成和提交。但這些軟件風險并未得到充分的重視和系統(tǒng)的研究。直到20世紀80年代,Boehm比較詳細地對軟件開發(fā)中的風險進行了論述,并提出軟件風險管理的方法。Boehm認為,軟件風險管理指的是"試圖以一種可行的原則和實踐,規(guī)范化地控制影響項目成功的風險",其目的是"辨識、描述和消除風險因素,以免它們威脅軟件的成功運作"。
在此基礎上,業(yè)界對軟件風險管理的研究開始慢慢豐富起來,理論上對風險進行了一些分類,提出了風險管理的思路;實踐上也出現(xiàn)了一些定量管理風險的方法和風險管理的軟件工具。雖然業(yè)界對風險管理表現(xiàn)了極大的興趣,做出了不少努力,但似乎很少開發(fā)項目的組織真正積極地在軟件開發(fā)過程中使用風險管理的方法。1995年IWSED(International Workshop on Software Engineering Data)會議做出的調查顯示:風險管理技術沒有得到廣泛應用的原因并不是大家不相信這種技術的實效性,而是對風險管理的技術和實踐缺乏了解。因此,我們認為很有必要對風險管理進行研究。
二、軟件項目風險管理
軟件開發(fā)中的風險是指軟件開發(fā)過程中及軟件產品本身可能造成的傷害或損失。風險關注未來的事情,這意味著,風險涉及選擇及選擇本身包含的不確定性,軟件開發(fā)過程及軟件產品都要面臨各種決策的選擇。風險是介于確定性和不確定性之間的狀態(tài),是處于無知和完整知識之間的狀態(tài)。另一方面,風險將涉及思想、觀念、行為、地點等因素的改變。
當在軟件工程領域考慮風險時,我們要關注以下的問題:什么樣的風險會導致軟件項目的徹底失。挥脩粜枨、開發(fā)技術、目標計算機以及所有其他與項目有關的因素的改變將會對按時交付和總體成功產生什么影響;對于采用何種方法和工具,需要多少人員參與工作的問題,我們如何選擇和決策;軟件質量要達到什么程度才是"足夠的"。當沒有辦法消除風險,甚至連試圖降低該風險也存在疑問時,這些風險就是真正的風險了。在我們能夠標識出軟件項目中的真正風險之前,識別出所有對管理者和開發(fā)者而言均為明顯的風險是很重要的。
風險管理在項目管理中占有非常重要的地位。首先,有效的風險管理可以提高項目的成功率。其次,風險管理可以增加團隊的健壯性。與團隊成員一起進行風險分析可以讓大家對困難有充分估計,對各種意外有心理準備,大大提高組員的信心,從而穩(wěn)定隊伍。第三,有效的風險管理可以幫助項目經(jīng)理抓住工作重點,將主要精力集中于重大風險,將工作方式從被動救火轉變?yōu)橹鲃臃婪丁?br /> 被動風險策略是針對可能發(fā)生的風險來監(jiān)督項目,直到它們變成真正的問題時,才會撥出資源來處理它們。更普遍的是,軟件項目組對風險不聞不問,直到發(fā)生了錯誤才趕緊采取行動,試圖迅速地糾正錯誤。這種管理模式常常被稱為"救火模式"。當補救的努力失敗后,項目就處在真正的危機之中了。
對于風險管理的一個更聰明的策略是主動式的。主動策略早在技術工作開始之前就已經(jīng)啟動了。標識出潛在的風險,評估它們出現(xiàn)的概率及產生的影響,對風險按重要性進行排序,然后,軟件項目組建立一個計劃來管理風險。主動策略中的風險管理,其主要目標是預防風險。但是,因為不是所有的風險都能夠預防,所以,項目組必須建立一個應付意外事件的計劃,使其在必要時能夠以可控的及有效的方式做出反應m任何一個系統(tǒng)開發(fā)項目都應將風險管理作為軟件項目管理的重要內容。
在進行軟件項目風險管理時,要標識出潛在的風險,評估它們出現(xiàn)的概率及產生的影響,并按重要性加以排序,然后建立一個規(guī)劃來管理風險。風險管理的主要目標是預防風險,但不是所有的風險都能夠預防。所以必須建立一個意外事件計劃,使其在必要時能以可控的和有效的方式做出反應。風險管理目標的實現(xiàn)包含三個要素。首先,必須在項目計劃書中寫下如何進行風險管理;第二,項目預算必須包含解決風險所需的經(jīng)費,如果沒有經(jīng)費,就無法達到風險管理的目標;第三,評估風險時,風險的影響也必須納入項目規(guī)劃中。
風險管理涉及的主要過程包括:風險識別,風險量化,風險應對計劃制定和風險監(jiān)控,如圖1所示[1][3]。風險識別在項目的開始時就要進行,并在項目執(zhí)行中不斷進行。就是說,在項目的整個生命周期內,風險識別是一個連續(xù)的過程。
風險識別:風險識別包括確定風險的來源,風險產生的條件,描述其風險特征和確定哪些風險事件有可能影響本項目。風險識別不是一次就可以完成的事,應當在項目的自始至終定期進行。
風險量化:涉及對風險及風險的相互作用的評估,是衡量風險概率和風險對項目目標影響程度的過程。風險量化的基本內容是確定那些事件需要制定應對措施。。
風險應對計劃制定:針對風險量化的結果,為降低項目風險的負面效應制定風險應對策略和技術手段的過程。風險應對計劃依據(jù)風險管理計劃、風險排序、風險認知等依據(jù),得出風險應對計劃、剩余風險、次要風險以及為其它過程提供得依據(jù)。
風險監(jiān)控:涉及整個項目管理過程中的風險進行應對。該過程的輸出包括應對風險的糾正措施以及風險管理計劃的更新。
每個步驟所使用的工具和方法詳見表1:
風險管理步驟 所使用的工具、方法
風險識別 頭腦風暴法、面談、Delphi法、核對表、SWOT技術
風險量化 風險因子計算、PERT估計、決策樹分析、風險模擬
風險應對計劃制定 回避、轉移、緩和、接受
風險監(jiān)控 核對表、定期項目評估、掙值分析
三、軟件項目中的風險
軟件項目的風險無非體現(xiàn)在以下四個方面:需求、技術、成本和進度。IT項目開發(fā)中常見的風險有如下幾類:
ü 需求風險
、傩枨笠呀(jīng)成為項目基準,但需求還在繼續(xù)變化;②需求定義欠佳,而進一步的定義會擴展項目范疇;③添加額外的需求;④產品定義含混的部分比預期需要更多的時間;⑤在做需求中客戶參與不夠;⑥缺少有效的需求變化管理過程。
ü 計劃編制風險
①計劃、資源和產品定義全憑客戶或上層領導口頭指令,并且不完全一致;②計劃是優(yōu)化的,是"最佳狀態(tài)",但計劃不現(xiàn)實,只能算是"期望狀態(tài)";③計劃基于使用特定的小組成員,而那個特定的小組成員其實指望不上;④產品規(guī)模(代碼行數(shù)、功能點、與前一產品規(guī)模的百分比)比估計的要大;⑤完成目標日期提前,但沒有相應地調整產品范圍或可用資源;⑥涉足不熟悉的產品領域,花費在設計和實現(xiàn)上的時間比預期的要多。
ü 組織和管理風險
①僅由管理層或市場人員進行技術決策,導致計劃進度緩慢,計劃時間延長;②低效的項目組結構降低生產率;③管理層審查 決策的周期比預期的時間長;④預算削減,打亂項目計劃;⑤管理層作出了打擊項目組織積極性的決定;⑥缺乏必要的規(guī)范,導至工作失誤與重復工作;⑦非技術的第三方的工作(預算批準、設備采購批準、法律方面的審查、安全保證等)時間比預期的延長。
ü 人員風險
①作為先決條件的任務(如培訓及其他項目)不能按時完成;②開發(fā)人員和管理層之間關系不佳,導致決策緩慢,影響全局;③缺乏激勵措施,士氣低下,降低了生產能力;④某些人員需要更多的時間適應還不熟悉的軟件工具和環(huán)境;⑤項目后期加入新的開發(fā)人員,需進行培訓并逐漸與現(xiàn)有成員溝通,從而使現(xiàn)有成員的工作效率降低;⑥由于項目組成員之間發(fā)生沖突,導致溝通不暢、設計欠佳、接口出現(xiàn)錯誤和額外的重復工作;⑦不適應工作的成員沒有調離項目組,影響了項目組其他成員的積極性;⑧沒有找到項目急需的具有特定技能的人。
ü 開發(fā)環(huán)境風險
①設施未及時到位;②設施雖到位,但不配套,如沒有電話、網(wǎng)線、辦公用品等;③設施擁擠、雜亂或者破損;④開發(fā)工具未及時到位;⑤開發(fā)工具不如期望的那樣有效,開發(fā)人員需要時間創(chuàng)建工作環(huán)境或者切換新的工具;⑥新的開發(fā)工具的學習期比預期的長,內容繁多。
ü 客戶風險
、倏蛻魧τ谧詈蠼桓兜漠a品不滿意,要求重新設計和重做;②客戶的意見未被采納,造成產品最終無法滿足用戶要求,因而必須重做;③客戶對規(guī)劃、原型和規(guī)格的審核 決策周期比預期的要長;④客戶沒有或不能參與規(guī)劃、原型和規(guī)格階段的審核,導致需求不穩(wěn)定和產品生產周期的變更;⑤客戶答復的時間(如回答或澄清與需求相關問題的時間)比預期長;⑥客戶提供的組件質量欠佳,導致額外的測試、設計和集成工作,以及額外的客戶關系管理工作。
ü 產品風險
、俪C正質量低下的不可接受的產品,需要比預期更多的測試、設計和實現(xiàn)工作;②開發(fā)額外的不需要的功能(鍍金),延長了計劃進度;③嚴格要求與現(xiàn)有系統(tǒng)兼容,需要進行比預期更多的測試、設計和實現(xiàn)工作;④要求與其他系統(tǒng)或不受本項目組控制的系統(tǒng)相連,導致無法預料的設計、實現(xiàn)和測試工作;⑤在不熟悉或未經(jīng)檢驗的軟件和硬件環(huán)境中運行所產生的未預料到的問題;⑥開發(fā)一種全新的模塊將比預期花費更長的時間;⑦依賴正在開發(fā)中的技術將延長計劃進度。
ü 設計和實現(xiàn)風險
、僭O計質量低下,導致重復設計;②一些必要的功能無法使用現(xiàn)有的代碼和庫實現(xiàn),開發(fā)人員必須使用新的庫或者自行開發(fā)新的功能;③代碼和庫質量低下,導致需要進行額外的測試,修正錯誤,或重新制作;④過高估計了增強型工具對計劃進度的節(jié)省量;⑤分別開發(fā)的模塊無法有效集成,需要重新設計或制作。
ü 過程風險
、俅罅康募埫婀ぷ鲗е逻M程比預期的慢;②前期的質量保證行為不真實,導致后期的重復工作;③太不正規(guī)(缺乏對軟件開發(fā)策略和標準的遵循),導致溝通不足,質量欠佳,甚至需重新開發(fā);④過于正規(guī)(教條地堅持軟件開發(fā)策略和標準),導致過多耗時于無用的工作;⑤向管理層撰寫進程報告占用開發(fā)人員的時間比預期的多;⑥風險管理粗心,導致未能發(fā)現(xiàn)重大的項目風險。
四、風險辨識
識別風險是系統(tǒng)化地識別已知的和可預測的風險,在可能時避免這些風險,且當必要時控制這些風險。