第十三章 系統的可靠性
13.1 軟體可靠性
目前,硬體可靠性測試技術和評估手段日趨成熟,已經得到了業界的認可。
軟體可靠性模型的研究多集中在 開發階段、測試階段、評估階段 的可靠性模型。
13.1.2 軟體可靠性的定義
可靠性(Reliability)是指產品在 規定的條件下 和 規定的時間內 完成規定功能 的 能力。
按照產品可靠性的形成,分為 固有可靠性、使用可靠性。
固有可靠性是通過 設計、製造 賦予產品的 可靠性。
使用可靠性 既受設計、製造 的 影響,又受使用條件的影響。
軟體與硬體 從可靠性角度來看,主要有4個不同點:
1、複雜性,軟體內部的邏輯高度複雜,硬體則相對簡單。
2、物理退化,一個正確的軟體任何時刻均可靠,一個正確的硬體、元器件、系統 則可能在某個時刻失效。
3、唯一性,軟體是唯一的,軟體複製不改變軟體本身,硬體不可能完全相同,機率方法在硬體可靠性領域取得巨大成功。
4、版本更新快,軟體版本更新較快,也給軟體可靠性評估帶來較大的難度。
1983年,美國IEEE 對“軟體可靠性”做出了更明確的定義。
1989年,我國國家標準 GB/T-11457也採用了這個定義。
定義:在規定的條件下,在規定的時間內,軟體不引起系統失效的機率。
依然沿用了“產品可靠性”的定義。
1、規定的時間
由於軟體啟動並執行環境與程式路徑選取的隨機性,軟體的失效為隨機事件,所以已耗用時間屬於隨機變數。
2、規定的條件
不同的環境條件下的可靠性是不同的,電腦的配置情況、對輸入的要求。
有了明確規定的環境條件,還可以有效地判斷軟體失效的責任在使用者方還是開發放。
3、所要求的功能
軟體可靠性還與規定的任務和功能有關。
要準確度量軟體系統的可靠性,必須先明確它的任務和功能。
4、“軟體可靠性”定義具有如下特點:
1. 用內在的“缺陷” 和 外在的“失效”關係來描述可靠性。
2. 定義使人們對軟體可靠性進行量化評估成為可能。
3. 用機率的方法描述可靠性是比較科學的。
13.1.3 軟體可靠性的定量描述
軟體的可靠性可以基於 使用條件、規定時間、系統輸入、系統使用、軟體缺陷 等變數構建的數學運算式。
1、規定時間:自然時間、已耗用時間、執行時間。
使用執行時間來度量軟體的可靠性最為準確。
2、失效率:把軟體從運行開始,到某一時刻t 為止,出現失效的機率用 F(t)表示。
F(0)=0,即軟體運行初始時刻失效機率為0。
F(t)在時間域(0,+無窮大)上是單調遞增的。
F(+無窮大)=1,即失效機率在已耗用時間不斷增長時 趨向於1,這也意味著任何軟體都存在缺陷。
3、可靠度:在規定的條件下,規定的時間內 不發生失效的機率。
公式略。
4、失效強度(Failure Intensity)單位時間 軟體系統出現失效的機率。
公式略。
5、失效率(Failure Rate)又稱 風險函數(Hazard Function),也可以稱為條件失效強度。
就是當軟體在 0~t 時刻內 沒有發生失效的條件下,t時刻 軟體系統的失效強度。
公式略。
6、可靠度 與 失效率 之間的換算。
略。
7、平均失效時間(Mean Time to Failure,MTTF)就是軟體運行後,到下一次出現失效的平均時間。更直觀地表明一個軟體的可靠度。
公式略。
需要對 軟體可靠度 這個反映軟體可靠性的肚量指標作下列補充說明:
1. 需指明它與其他軟體的界限。
2. 軟體失效必須明確定義。
3. 必須假設硬體無故障(失效)和軟體有關變數輸入正確。
5. 必須指明時間基準:自然時間(日曆時間)、已耗用時間、執行時間(CPU 時間)、其他時間基準。
6. 通常以機率度量,也可以模糊數學中的可能性加以度量。
7. 在時間域上進行,是一種動態度量,也可以是在資料域上,表示成功執行一個回合的機率。
軟體回合是軟體運行最小的、不可分的執行單位。
8. 有時將軟體運行環境簡單地理解為軟體運行剖面(Operational Profile)。
運行剖面定義了關於軟體可靠性描述中的“規定條件”,測試環境、測試資料 等一系列問題。
13.1.4 可靠性目標
使用 失效強度 表示軟體缺陷對軟體啟動並執行影響程度。
不僅取決於軟體失效發生的機率,還和軟體失效的嚴重程度有很大關係。引出另外一個概念——失效嚴重程度類(Failure Severity Class)。
失效嚴重程度類 就是對使用者具有相同程度影響的失效集合。
對失效嚴重程度的分級 可以按照不同的標準進行,對成本影響、對系統能力的影響 等。
對成本的影響 可能包括失效引起的 額外運行成本、修複和恢複成本、現有潛在的業務機會的損失 等。
對系統能力的影響 常常表現為 關鍵資料的損失、系統異常退出、系統崩潰、導致使用者操作無效 等。
可靠性目標 是指客戶對軟體效能滿意程度的期望。通常用 可靠度、故障強度、平均失效時間(MTTF)等指標來描述。
建立定量的可靠性指標 需要對 可靠性、交付時間、成本 進行平衡。
13.1.5 可靠性測試的意義
1、軟體失效可能造成災難性的後果。
2、軟體的失效在整個電腦系統失效中的比例較高。
80%和軟體有關。
結構太複雜了,一個較簡單的程式,其所有路徑數量可能是一個天文數字。
3、相比硬體可靠性技術,軟體可靠性技術很不成熟。
4、軟體可靠性問題是造成費用增長的主要原因之一。
5、系統對於軟體的依賴性越來越強。
13.1.6 廣義的可靠性測試與俠義的可靠性測試
廣義的軟體可靠性測試 是指 為了最終評價軟體系統的可靠性而運用 建模、統計、實驗、分析、和評價 等一系列手段對軟體系統實施的一種測試。
俠義的軟體可靠性測試 是指 為了擷取可靠性資料,按預先確定的測試案例,在軟體的預期使用環境中,對軟體實施的一種測試。
也叫“軟體可靠性實驗(Software Reliability Test)”,它是面向缺陷的測試,以使用者將要使用的方式來測試軟體,所獲得的測試資料與軟體的實際運行資料比較接近。
可靠性測試是對軟體產品的可靠性 進行調查、分析、評價 的一種手段。
對檢測出來的 失效的分布、原因、後果 進行分析,並給出糾正建議。
總的來說,可靠性測試的目的可歸納為以下三個方面:
1、發現軟體系統在 需求、設計、編碼、測試、實施 等方面的 各種缺陷。
2、為軟體的 使用、維護 提供可靠性資料。
3、確認軟體是否達到可靠性的定量要求。