近幾年來軟件開發技術、工具都有了很大的進步,但是軟件項目開發超時、超支、甚至不能滿足用戶需求而根本沒有得到實際使用的情況仍然比比皆是。軟件項目開發和管理中一直存在著種種不確定性,嚴重影響著項目的順利完成和提交。但這些軟件風險并未得到充分的重視和系統的研究。直到20世紀80年代,Boehm比較詳細地對軟件開發中的風險進行了論述,并提出軟件風險管理的方法。Boehm認為,軟件風險管理指的是“試圖以一種可行的原則和實踐,規范化地控制影響項目成功的風險”,其目的是“辨識、描述和消除風險因素,以免它們威脅軟件的成功運作”。
在此基礎上,業界對軟件風險管理的研究開始慢慢豐富起來,理論上對風險進行了一些分類,提出了風險管理的思路;實踐上也出現了一些定量管理風險的方法和風險管理的軟件工具。雖然業界對風險管理表現了極大的興趣,做出了不少努力,但似乎很少開發項目的組織真正積極地在軟件開發過程中使用風險管理的方法。1995年IWSED(International Workshop on Software Engineering Data)會議做出的調查顯示:風險管理技術沒有得到廣泛應用的原因并不是大家不相信這種技術的實效性,而是對風險管理的技術和實踐缺乏了解。因此,我們認為很有必要對風險管理進行研究。
管理概念
軟件開發中的風險是指軟件開發過程中及軟件產品本身可能造成的傷害或損失。風險關注未來的事情,這意味著,風險涉及選擇及選擇本身包含的不確定性,軟件開發過程及軟件產品都要面臨各種決策的選擇。風險是介于確定性和不確定性之間的狀態,是處于無知和完整知識之間的狀態。另一方面,風險將涉及思想、觀念、行為、地點等因素的改變。
當在軟件工程領域考慮風險時,我們要關注以下的問題:什么樣的風險會導致軟件項目的徹底失敗;用戶需求、開發技術、目標計算機以及所有其他與項目有關的因素的改變將會對按時交付和總體成功產生什么影響;對于采用何種方法和工具,需要多少人員參與工作的問題,我們如何選擇和決策;軟件質量要達到什么程度才是“足夠的”。當沒有辦法消除風險,甚至連試圖降低該風險也存在疑問時,這些風險就是真正的風險了。在我們能夠標識出軟件項目中的真正風險之前,識別出所有對管理者和開發者而言均為明顯的風險是很重要的。
風險管理在項目管理中占有非常重要的地位。首先,有效的風險管理可以提高項目的成功率。其次,風險管理可以增加團隊的健壯性。與團隊成員一起進行風險分析可以讓大家對困難有充分估計,對各種意外有心理準備,大大提高組員的信心,從而穩定隊伍。第三,有效的風險管理可以幫助項目經理抓住工作重點,將主要精力集中于重大風險,將工作方式從被動救火轉變為主動防范。
被動風險策略是針對可能發生的風險來監督項目,直到它們變成真正的問題時,才會撥出資源來處理它們。更普遍的是,軟件項目組對風險不聞不問,直到發生了錯誤才趕緊采取行動,試圖迅速地糾正錯誤。這種管理模式常常被稱為“救火模式”。當補救的努力失敗后,項目就處在真正的危機之中了。
對于風險管理的一個更聰明的策略是主動式的。主動策略早在技術工作開始之前就已經啟動了。標識出潛在的風險,評估它們出現的概率及產生的影響,對風險按重要性進行排序,然后,軟件項目組建立一個計劃來管理風險。主動策略中的風險管理,其主要目標是預防風險。但是,因為不是所有的風險都能夠預防,所以,項目組必須建立一個應付意外事件的計劃,使其在必要時能夠以可控的及有效的方式做出反應,任何一個系統開發項目都應將風險管理作為軟件項目管理的重要內容。
在進行軟件項目風險管理時,要標識出潛在的風險,評估它們出現的概率及產生的影響,并按重要性加以排序,然后建立一個規劃來管理風險。風險管理的主要目標是預防風險,但不是所有的風險都能夠預防。所以必須建立一個意外事件計劃,使其在必要時能以可控的和有效的方式做出反應。風險管理目標的實現包含三個要素。首先,必須在項目計劃書中寫下如何進行風險管理;第二,項目預算必須包含解決風險所需的經費,如果沒有經費,就無法達到風險管理的目標;第三,評估風險時,風險的影響也必須納入項目規劃中。
風險管理涉及的主要過程包括:風險識別,風險量化,風險應對計劃制定和風險監控,如圖1所示[1][3]。風險識別在項目的開始時就要進行,并在項目執行中不斷進行。就是說,在項目的整個生命周期內,風險識別是一個連續的過程。
風險識別:風險識別包括確定風險的來源,風險產生的條件,描述其風險特征和確定哪些風險事件有可能影響本項目。風險識別不是一次就可以完成的事,應當在項目的自始至終定期進行。
風險量化:涉及對風險及風險的相互作用的評估,是衡量風險概率和風險對項目目標影響程度的過程。風險量化的基本內容是確定那些事件需要制定應對措施。。
風險應對計劃制定:針對風險量化的結果,為降低項目風險的負面效應制定風險應對策略和技術手段的過程。風險應對計劃依據風險管理計劃、風險排序、風險認知等依據,得出風險應對計劃、剩余風險、次要風險以及為其它過程提供得依據。
風險監控:涉及整個項目管理過程中的風險進行應對。該過程的輸出包括應對風險的糾正措施以及風險管理計劃的更新。
每個步驟所使用的工具和方法詳見表1:
風險管理步驟 所使用的工具、方法
風險識別頭腦風暴法、面談、Delphi法、核對表、SWOT技術
風險量化 風險因子計算、PERT估計、決策樹分析、風險模擬
風險應對計劃制定 回避、轉移、緩和、接受
風險監控 核對表、定期項目評估、掙值分析