軟體可靠性

軟體可靠性

軟徠件可靠性 (software reliability )是軟體產品在規定的條件下和規定的時間區間完成規定功能的能力。規定的條件是指直接與軟體運行相關的使用該軟體的計算機系統的狀態和軟體的輸入條件,或統稱為軟體運行時的外部輸入條件;規定的時間區間是指軟體的實際運行時間區間;規定功能是指為提供給定的服務,軟體產品所必須具備的功能。軟體可靠性不但與軟體存在的缺陷和(或)差錯有關,而且與系統輸入和系統使用有關。軟體可靠性的概率度量稱軟體可靠度。

定義


1983年美國IEEE計算機學會對“軟體可靠性”做出了明確定義,此後該定義被美國標準化研究所接受為國家標準,1989年我國也接受該定義為國家標準。該定義包括兩方面的含義:
(1)在規定的條件下,在規定的時間內,軟體不引起系統失效的概率;
(2)在規定的時間周期內,在所述條件下程序執行所要求的功能的能力;
其中徠的概率是系統輸入和系統使用的函數,也是軟體中存在的故障的函數,系統輸入將確定是否會遇到已存在的故障(如果故障存在的話)。

影響因素


軟體可靠性是關於軟體能夠滿足需求功能的性質,軟體不能滿足需求是因為軟體中的差錯引起了軟體故障。軟體中有哪些可能的差錯呢?
軟體差錯是軟體開發各階段潛入的人為錯誤:
1.需求分析定義錯誤。如用戶提出的需求不完整,用戶需求的變更未及時消化,軟體開發者和用戶對需求的理解不同等等。
2.設計錯誤。如處理的結構和演演算法錯誤,缺乏對特殊情況和錯誤處理的考慮等。
3.編碼錯誤。如語法錯誤,變數初始化錯誤等。
4.測試錯誤。如數據準備錯誤,測試用例錯誤等。
5.文檔錯誤。如文檔不齊全,文檔相關內容不一致,文檔版本不一致,缺乏完整性等。
從上游到下游,錯誤的影響是發散的,所以要盡量把錯誤消除在開發前期階段。
錯誤引入軟體的方式可歸納為兩種特性:程序代碼特性,開發過程特性。
程序代碼一個最直觀的特性是長度,另外還有演演算法和語句結構等,程序代碼越長,結構越複雜,其可靠性越難保證。
開發過程特性包括採用的工程技術和使用的工具,也包括開發者個人的業務經歷水平等。
除了軟體可靠性外,影響可靠性的另一個重要因素是健壯性,對非法輸入的容錯能力。
所以提高可靠性從原理上看就是要減少錯誤和提高健壯性。

相關分析


可靠性保證

用軟體系統規模越做越大越複雜,其可靠性越來越難保證。應用本身對系統運行的可靠性要求越來越高,在一些關鍵的應用領域,如航空、航天等,其可靠性要求尤為重要,在銀行等服務性行業,其軟體系統的可靠性也直接關係到自身的聲譽和生存發展競爭能力。特別是軟體可靠性比硬體可靠性更難保證,會嚴重影響整個系統的可靠性。在許多項目開發過程中,對可靠性沒有提出明確的要求,開發商(部門)也不在可靠性方面花更多的精力,往往只注重速度、結果的正確性和用戶界面的友好性等,而忽略了可靠性。在投入使用后才發現大量可靠性問題,增加了維護困難和工作量,嚴重時只有束之高閣,無法投入實際使用。

軟硬體可靠性區別

軟體可靠性與硬體可靠性之間主要存在以下區別:
1.最明顯的是硬體有老化損耗現象,硬體失效是物理故障,是器件物理變化的必然結果,有浴盆曲線現象;軟體不發生變化,沒有磨損現象,有陳舊落後的問題,沒有浴盆曲線現象。
2.硬體可靠性的決定因素是時間,受設計、生產、運用的所有過程影響,軟體可靠性的決定因素是與輸入數據有關的軟體差錯,是輸入數據和程序內部狀態的函數,更多地決定於人。
3.硬體的糾錯維護可通過修復或更換失效的系統重新恢復功能,軟體只有通過重設計。
4.對硬體可採用預防性維護技術預防故障,採用斷開失效部件的辦法診斷故障,而軟體則不能採用這些技術。
5.事先估計可靠性測試和可靠性的逐步增長等技術對軟體和硬體有不同的意義。
6.為提高硬體可靠性可採用冗餘技術,而同一軟體的冗餘不能提高可靠性。
7.硬體可靠性檢驗方法已建立,並已標準化且有一整套完整的理論,而軟體可靠性驗證方法仍未建立,更沒有完整的理論體系。
8.硬體可靠性已有成熟的產品市場,而軟體產品市場還很新。
9.軟體錯誤是永恆的,可重現的,而一些瞬間的硬體錯誤可能會被誤認為是軟體錯誤。
總的說來,軟體可靠性比硬體可靠性更難保證,即使是美國宇航局的軟體系統,其可靠性仍比硬體可靠性低一個數量級。