本文主要針對軟件開發(fā)涉及到的風險,包括在軟件開發(fā)周期過程中可能出現(xiàn)的風險以及軟件實施過程中外部環(huán)境的變化可能引起的風險等進行評估。在文中對所提到的風險都一一做了詳細的分析,并提出了相應的風險回避措施。 由于風險是在項目開始之后才開始對項目的開發(fā)起負面的影響,所以風險分析的不足,或是風險回避措施不得力,都很有可能造成軟件開發(fā)的失敗。風險分析是在事前的一種估計,憑借一定的技術手段和豐富的經(jīng)驗,基本能夠對項目的風險做出比較準確的估計,經(jīng)過慎重的考慮提出可行的風險回避措施,是避免損失的重要環(huán)節(jié)。
主要風險綜述
任何軟件的開發(fā),其主要風險均來自于兩個方面,一是軟件管理,二是軟件體系結構。軟件產(chǎn)品的開發(fā)是工程技術與個人創(chuàng)作的有機結合。軟件開發(fā)是人的集體智慧按照工程化的思想進行發(fā)揮的過程。軟件管理是保證軟件開發(fā)工程化的手段。軟件體系結構的合理程度是取決于集體智慧發(fā)揮的程度和經(jīng)驗的運用。
軟件管理將影響到軟件的下列因素:
軟件是否能夠按工期的要求完成:軟件的工期常常是制約軟件質量的主要因素。很多情況下,軟件開發(fā)商在工期的壓力下,放棄文檔的書寫,組織,結果在工程的晚期,大量需要文檔進行協(xié)調的工作時,致使軟件進度越來越慢。軟件的開發(fā)不同于其他的工程,在不同的工程階段,需要的人員不同,需要配合的方面也不同,所有這些都需要行之有效的軟件管理的保證。
軟件需求的調研是否深入透徹:軟件的需求是確保軟件正確反映用戶的對軟件使用的重要的文檔,探討軟件需求是軟件開發(fā)的起始點,但軟件的需求卻會貫穿整個軟件的開發(fā)過程,軟件管理需要對軟件需求的變化進行控制和管理,一方面保證軟件需求的變化不至于造成軟件工程的一改再改而無法按期完成;同時又要保證開發(fā)的軟件能夠為用戶所接受。軟件管理需要控制軟件的每個階段進行的成度,不能過細造成時間的浪費,也不能過粗,造成軟件缺陷。
軟件的實現(xiàn)技術手段是否能夠同時滿足性能要求:軟件的構造需要對軟件構造過程中的使用的各種技術進行評估。軟件構造技術通常是這樣:成熟的技術,往往不能體現(xiàn)好的軟件性能;先進的技術,往往人員對其熟悉程度不夠,對其中隱含的缺陷不夠明了。軟件管理在制定軟件開發(fā)計劃和定義里程碑時必須考慮這些因素,并做出合理的權衡決策。
軟件質量體系是否能夠被有效地保證:任何軟件管理忽略軟件質量監(jiān)督環(huán)節(jié)都將對軟件的生產(chǎn)構成巨大的風險。而制定卓有成效的軟件質量監(jiān)督體系,是任何軟件開發(fā)組織必不可少的。軟件質量保證體系是軟件開發(fā)成為可控制過程的基礎,也是開發(fā)商和用戶進行交流的基礎和依據(jù)。
軟件體系結構影響到軟件的如下質量因素:
軟件的可伸縮性:是指軟件在不進行修改的情況下適應不同的工作環(huán)境的能力。由于硬件的飛速發(fā)展和軟件開發(fā)周期較長的矛盾,軟件升級的需要顯得非常迫切。如果軟件的升級和移植非常困難,軟件的生命期必定很短,使得化費巨大人力物力開發(fā)出的軟件系統(tǒng)只能在低性能的硬件或網(wǎng)絡上運行,甚至被廢棄不用,造成巨大的浪費。
軟件的可維護性:軟件的維護也是必然的事情,為了保證軟件的較長使用壽命,軟件必須適應不斷的業(yè)務需求變化,根據(jù)業(yè)務需求的變化對軟件進行修改。修改的成本和周期都直接和軟件的體系結構相關。一個好的軟件體系結構可以盡可能地將系統(tǒng)的變化放在系統(tǒng)的配置上,即軟件代碼無需修改,僅僅是在系統(tǒng)提供的配置文件中進行適當?shù)男薷,然后軟件重新加載進入運行狀態(tài),完成了系統(tǒng)部分功能和性能要求的變化。對于重大改動,需要打開源代碼進行修改的,也僅僅是先繼承原先的代碼,然后用新的功能接替原先的調用接口,這樣將把軟件改動量減小到低。
軟件易用性:軟件的易用性是影響軟件是否被用戶接受的關鍵之關鍵因素。在軟件產(chǎn)品中,設計復雜,功能強大而完備,但因為操作繁復而被擱置者屢見不鮮。造成的主要原因在于缺乏軟件開發(fā)中軟件體系結構的宏觀把握能力。另一方面,缺乏有效的手段進行軟件需求的確定和對潛在需求的挖掘。
項目管理的風險
軟件項目管理的風險來自于軟件項目自身的特點:
軟件產(chǎn)品不可見:開發(fā)的進展以及軟件的質量是否符合要求難于度量,從而使軟件的管理難于把握。軟件的生產(chǎn)過程不存在正確的過程形式:可以肯定的是不同的軟件開發(fā)項目應當采用不同的或者說是有針對性的軟件開發(fā)過程,而真正合適的軟件開發(fā)過程是在軟件項目的開發(fā)完成才能明了的。因此項目開發(fā)之初只能根據(jù)項目的特點和開發(fā)經(jīng)驗進行選擇,并在開發(fā)過程中不斷的調整。
大型軟件項目往往是"一次性"的。以往的經(jīng)驗可以被借鑒的地方不多。回避和控制軟件管理風險的辦法是設立監(jiān)督制度,項目開發(fā)中任何較大的決定都必須有主要技術環(huán)節(jié)甚至是由用戶參與進行的。在該項目中項目監(jiān)督由項目開發(fā)中的質量監(jiān)督組來實施。
一般參與軟件開發(fā)的人員(包括管理者和技術人員)和其責任進行分析如下:
參與者
項目經(jīng)理1人
主要職責:進行全局把握,側重于項目的商務方面,充當項目組同客戶正式交流的接口環(huán)節(jié)。
項目負責人1人
主要職責:制定項目開發(fā)計劃和開發(fā)策略,參與項目核心系統(tǒng)的分析設計,同時努力保證開發(fā)計劃的按時完成和開發(fā)策略的真正貫徹落實。
領域專家1或2人
主要職責:在軟件分析階段幫助分析人員界定系統(tǒng)實現(xiàn)邊界和實現(xiàn)的功能,對特定檢測點進行算法審核,同時對測試策略和軟件操作界面提出參考意見。
質量監(jiān)督組1或2人
主要職責:編制軟件質量控制計劃,并負責落實;控制必要文檔的生產(chǎn),通過文檔,監(jiān)督項目實施過程中軟件的質量,并產(chǎn)生軟件質量報告,提請項目經(jīng)理和項目負責人審閱;對于項目中出現(xiàn)的質量問題,主持召開質量復審會議。
系統(tǒng)分析員1或2人
主要職責:協(xié)同項目負責人進行軟件系統(tǒng)的分析和設計工作,書寫軟件需求分析和系統(tǒng)設計相關文檔。在軟件實現(xiàn)階段進行測試策略的編制和對性能測試的指導。
程序員2或3人
主要職責:協(xié)助分析人員進行詳細設計,和軟件系統(tǒng)的代碼實現(xiàn),并進行適當?shù)陌缀袦y試。