軟件可靠性是個大問題

摘自http://blog.51xuewen.com/ymin/article_12698.htm

 

 軟件可靠性是個大問題
如果說計算機體系結構描寫了計算機的軀體,那麼,軟件就是計算機的靈魂。軟件可靠性對可信計算起着舉足輕重的作用。幾十年來,硬件技術特別是集成電路技術飛速發展,但軟件技術在產品質量、生產力、成本及性能等衆多方面都滯後於硬件技術的發展。隨着軟件系統規模和複雜性的增加,其開發成本以及由於軟件故障而造成的經濟損失也正在增加,軟件質量問題已成爲制約計算機發展的關鍵因素之一。

    軟件產品實現包括從需求描述、系統設計、系統實現、測試驗證到運行維護的整個生命週期。但是,幾十年的經驗表明,要實現一個高質量的軟件產品,開發管理極其重要。軟件生命週期定義了軟件過程的框架和原則,但沒有描述軟件過程的活動、組織形式、工具和操作規程,以及開發方針和約束。這次的綠壩事件首先就是由於開發管理出了問題。質量和生產率是軟件工程的兩個核心目標。一個信息技術(IT)項目經理最重要的責任是爲各種活動分配資源。其他責任還有項目計劃和評估、控制、組織、合同管理,質量管理,風險管理,通訊和人力資源管理。項目經理的錯誤決策也許是今天軟件失效的主要原因。技術管理的失誤引起技術差錯,但可以糾正,而錯誤的項目管理決策,可能引起全盤皆輸。

  2005年9月IEEE Spectrum 雜誌專門報導了用戶定製的企業軟件及許多軟件失效的問題,這些失效導致公司破產、政府和工業界在美國每年損失達到600-750億美元,這類計劃的15-20%不是中途停止,就是完成後很快被拋棄。問題在那裏?爲什麼軟件會失敗?沒有過程文檔或者很糟的過程文檔、不可能滿足的需求、很差的或者不斷更改的規格說明和質量控制。最大的問題可能在於人,用戶無法說清究竟他希望要什麼,賣主無法控制,管理者看到這種情況只有另圖別路。我們不妨舉幾個典型的例子來說明問題。

①最著名的一個軟件失效是美國聯邦調查局(FBI)的“虛擬案件文件系統”。這個用戶軟件希望自動化該局的紙上工作環境,允許下屬通過計算機網絡分享與調查相關的信息。但是,FBI說,開發商開發的軟件錯誤太多,使他們丟棄了這個1.7億美元的項目。但是許多人說FBI對此失敗也有責任。當FBI準備花更多的錢來做這個項目時,應該搞清楚現在的問題出在哪裏。研究表明問題還是出在軟件開發過程的錯誤。
②所有的信息技術系統都是很脆弱的。對一個磚瓦建築大樓,你需要拆掉幾百塊置於戰略位置的磚才能使一面牆倒塌。但是,對於一個十萬行程序的軟件,只要有一兩行是壞的,就會出現大問題。1991年,AT&T電話網絡失靈,使一千二百萬用戶丟失電話服務,完全是由於一行程序中一個字符的鍵入錯誤造成的。
③另一個不成熟的IT實踐是1997年美國稅收服務的40億現代化項目,美國國稅局現在還繼續投80億。把稅收編碼翻譯成軟件編碼基本上是不可能的。稅收法規非常複雜,基於常常是含糊的法律條文,並且經常改變。從信息工程的觀點來看,那是一個需求夢想。如果考慮到來自內部和外部的惡意攻擊,問題就更加複雜。
④Sydney Water Corp.是澳洲最大的水提供商,該公司的自動顧客信息和計費系統,經費3,320萬美元,在2002年被取消。根據澳大利亞總審計師的研究,該項目的計劃和規範不適當,使許多需求改變,而且要追加經費和推遲項目的計劃。Sydney Water 不得不在花費了3,320萬美元之後,中斷該項目。
⑤Oxford Health Plans Inc. 在1997年,該公司的自動計費和索賠系統不能處理擴展的商務,導致4億美元沒有收上來,6.5億美元沒有付出去。而高級經理們對擴展牛津的生意比提供滿足目前需求的計費系統更有興趣。甚至在問題出現以後,例如服務清單送出幾個月以後,經理們並不在意。當計費系統失效時,公司丟失幾千萬美元,股票價格一天內由68降到26美元,勾銷了34億企業價值。股東們告狀,最後輸掉2.25億美元。政府部門對該公司展開調查,最後發現300萬違規。
⑥在1986年,London Stock Exchange想設計一個新的股票結算系統,決定研製股票交易自動化系統。7年後,到1993年,花費了6億美元,停止了這個系統的開發,不但因爲設計太複雜、太麻煩,而且因爲管理太差,太幻想化了。研究表明,雖然出現了許多問題,工期一再推遲,花費很高,但沒有人對該項目的真實情況進行調查研究。
⑦2004年10月,一家英國食品上市公司註銷了一個5.26億美元投資的自動貯藏鏈管理系統項目。由於該系統失效,公司不得不僱用3000人來把商品從倉庫送到各商店的貨架上。
 
這種軟件項目失敗的例子還有很多。從這些例子中我們首先看出,發達國家的軟件開發費用是很高的,軟件失效的損失是慘重的。就我國目前的情況看,這兩點都未做到。我們常常以爲,軟件不過是編碼,找幾個學生就可以做了,不需要很多經費。所以,一般軟件項目經費較少。另一方面,軟件完成以後,公司或機關並不完全依賴該軟件,而是錦上添花,即使軟件失效也無關大局,因而損失也不大。俗語說“便宜沒好貨”,越是便宜的東西,質量就越差。當然,這種情況正在改變。例如,“綠壩——花季護航”軟件,國家投資4000萬,不算少。完成以後,工信部向全國發通知,2009年7月1日起,全國都要用。飛機場的管理系統崩潰,飛機就無法進出航空港。你也就無法期望很廉價地開發一個高可靠的飛機場管理系統。其次,我們可以看出,軟件並不光是指它的編碼。軟件是一個過程。整個生命週期中的任何故障都可能引起軟件的失效。許多信息技術專家相信,軟件失效實際出現的次數比人們感知的還要多。這些故障通常不可預計,它們出現在各個國家、大公司,商業,事業單位和政府機關,造成的納稅人和股東以及投資者的金錢損失一年就是幾十億美元。隨着信息技術無處不在地增長,這個問題將更加嚴重。今年,全世界的組織和政府將投資約1萬億元於信息技術,包括硬件、軟件和服務。 5-10%將半途而廢,其他的將推遲或追加經費,只有少數真正成功。最大的悲劇在於,人們知道,軟件失效總體來說不可避免,許多組織即使看到了危害甚至毀滅該組織的威脅,也不把預防失效看作緊急之事。這並不是由於技術上的原因,而是由於複雜的商業和社會原因。
近十幾年來,即使對於已成功的軟件開發項目,軟件代碼量大增也是影響軟件可靠性的大問題。例如,航天飛機機載系統有近五十萬行代碼,地面控制和處理系統也有大約三十五萬行代碼。在美國電信業中,電信線路的正常運轉需要數百個軟件系統的支持,其代碼總量超過一億行。有兩個原因使計算機軟件越來越大:一個是人們對計算機需求和依賴的與日俱增,計算機系統的規模和複雜性急劇增加;另一個是軟件體系結構越來越複雜。爲了提高軟件生產力,軟件過程趨於複雜,許多人協同工作,層次化的或網狀的體系結構和層次化的開發方法,都使得計算機軟件的大小以驚人的速度急劇膨脹。與此同時,計算機出現故障引起危機的可能性也逐漸增加。由於計算機硬件技術的進步,元器件可靠性的提高,硬件故障相對顯得次要了。研究表明:由於軟件設計故障引起的系統失效與由於硬件設計故障引起的失效之比是10:1。表1給出了某些成熟的計算機系統失效源的統計數據。

                    表1 計算機系統失效源的統計數據
 

  
數據發表年份
硬件(%)
軟件(%)
維護(%)
操作(%)
環境(%)
AT&T ESS
1978
20
15
-
65
-
Tandem
1985
18
26
25
17
14
Bellcore
1986
26
30
-
44
-
Tandem
1987
19
43
13
13
12


由表1可以看出,軟件故障正逐漸成爲導致計算機系統失效和停機的主要因素。對複雜計算機系統需求的急劇增加,遠遠超過計算機軟/硬件設計、實現、測試及維護的能力,結果出現了許多可怕的計算機工程事故,其中大多數都是由於軟件故障所致。

 

  面對系統需求和軟件複雜性的增長,軟件行業碰到兩個大問題:一個是軟件生產力的問題;一個是軟件可靠性的問題。幾百、幾千萬行的程序,要在較短的時間內拿出來,就必須要有多人分工協同,重用已有的軟件,使從規範到程序的許多過程自動化,這樣才能提高軟件生產力。因此,軟件設計方法在不斷髮展。可另一方面,怎麼保證這麼快開發出來的這麼大的軟件沒有故障?這就是軟件可靠性的問題。勿庸置疑,如何提高軟件可靠性,如同如何提高軟件生產力一樣,已成爲整個軟件開發過程中必須始終關心和設法解決的問題。

  軟件可靠性的重要性需要全社會的公認。不但開發人員要認識這問題,管理人員,包括政府機構的官員都需要認識軟件可靠性的重要性和嚴重性。廣大用戶要有冷靜的頭腦對待軟件質量。軟件不是越新越好,也不是宣傳得越動人越好。軟件開發人員必須有證據說明,“我的軟件爲什麼可靠”,用戶才能相信你的軟件,才能用你的軟件。

發佈了36 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章