2011年軟考系統(tǒng)架構(gòu)設(shè)計(jì)師學(xué)習(xí)筆記第十三章
系統(tǒng)的可靠性
13.1 軟件可靠性
目前,硬件可靠性測試技術(shù)和評估手段日趨成熟,已經(jīng)得到了業(yè)界的認(rèn)可。
軟件可靠性模型的研究多集中在開發(fā)階段、測試階段、評估階段的可靠性模型。
13.1.1 軟件可靠性的定義
可靠性(Reliability)是指產(chǎn)品在規(guī)定的條件下和規(guī)定的時間內(nèi)完成規(guī)定功能的能力。
按照產(chǎn)品可靠性的形成,分為固有可靠性、使用可靠性。
固有可靠性是通過設(shè)計(jì)、制造賦予產(chǎn)品的可靠性。
使用可靠性既受設(shè)計(jì)、制造的影響,又受使用條件的影響。
軟件與硬件從可靠性角度來看,主要有4個不同點(diǎn):
1、復(fù)雜性,軟件內(nèi)部的邏輯高度復(fù)雜,硬件則相對簡單。
2、物理退化,一個正確的軟件任何時刻均可靠,一個正確的硬件、元器件、系統(tǒng)則可能在某個時刻失效。
3、唯一性,軟件是唯一的,軟件復(fù)制不改變軟件本身,硬件不可能完全相同,概率方法在硬件可靠性領(lǐng)域取得巨大成功。
4、版本更新快,軟件版本更新較快,也給軟件可靠性評估帶來較大的難度。
1983年,美國IEEE 對“軟件可靠性”做出了更明確的定義。
1989年,我國國家標(biāo)準(zhǔn) GB/T-11457也采用了這個定義。
定義:在規(guī)定的條件下,在規(guī)定的時間內(nèi),軟件不引起系統(tǒng)失效的概率。
依然沿用了“產(chǎn)品可靠性”的定義。
1、規(guī)定的時間
由于軟件運(yùn)行的環(huán)境與程序路徑選取的隨機(jī)性,軟件的失效為隨機(jī)事件,所以運(yùn)行時間屬于隨機(jī)變量。
2、規(guī)定的條件
不同的環(huán)境條件下的可靠性是不同的,計(jì)算機(jī)的配置情況、對輸入的要求。
有了明確規(guī)定的環(huán)境條件,還可以有效地判斷軟件失效的責(zé)任在用戶方還是開發(fā)放。
3、所要求的功能
軟件可靠性還與規(guī)定的任務(wù)和功能有關(guān)。
要準(zhǔn)確度量軟件系統(tǒng)的可靠性,必須先明確它的任務(wù)和功能。
4、“軟件可靠性”定義具有如下特點(diǎn):
1. 用內(nèi)在的“缺陷” 和 外在的“失效”關(guān)系來描述可靠性。
2. 定義使人們對軟件可靠性進(jìn)行量化評估成為可能。
3. 用概率的方法描述可靠性是比較科學(xué)的。
13.1.2 軟件可靠性的定量描述
軟件的可靠性可以基于 使用條件、規(guī)定時間、系統(tǒng)輸入、系統(tǒng)使用、軟件缺陷 等變量構(gòu)建的數(shù)學(xué)表達(dá)式。
1、規(guī)定時間:自然時間、運(yùn)行時間、執(zhí)行時間。
使用執(zhí)行時間來度量軟件的可靠性最為準(zhǔn)確。
2、失效率:把軟件從運(yùn)行開始,到某一時刻t 為止,出現(xiàn)失效的概率用 F(t)表示。
F(0)=0,即軟件運(yùn)行初始時刻失效概率為0。
F(t)在時間域(0,+無窮大)上是單調(diào)遞增的。
F(+無窮大)=1,即失效概率在運(yùn)行時間不斷增長時 趨向于1,這也意味著任何軟件都存在缺陷。
3、可靠度:在規(guī)定的條件下,規(guī)定的時間內(nèi) 不發(fā)生失效的概率。
4、失效強(qiáng)度(Failure Intensity)單位時間 軟件系統(tǒng)出現(xiàn)失效的概率。
5、失效率(Failure Rate)又稱 風(fēng)險函數(shù)(Hazard Function),也可以稱為條件失效強(qiáng)度。
就是當(dāng)軟件在 0~t 時刻內(nèi) 沒有發(fā)生失效的條件下,t 時刻軟件系統(tǒng)的失效強(qiáng)度。
公式略。
6、可靠度與失效率之間的換算。
7、平均失效時間(Mean Time to Failure,MTTF)就是軟件運(yùn)行后,到下一次出現(xiàn)失效的平均時間。更直觀地表明一個軟件的可靠度。
需要對 軟件可靠度 這個反映軟件可靠性的肚量指標(biāo)作下列補(bǔ)充說明:
1. 需指明它與其他軟件的界限。
2. 軟件失效必須明確定義。
3. 必須假設(shè)硬件無故障(失效)和軟件有關(guān)變量輸入正確。
5. 必須指明時間基準(zhǔn):自然時間(日歷時間)、運(yùn)行時間、執(zhí)行時間(CPU 時間)、其他時間基準(zhǔn)。
6. 通常以概率度量,也可以模糊數(shù)學(xué)中的可能性加以度量。
7. 在時間域上進(jìn)行,是一種動態(tài)度量,也可以是在數(shù)據(jù)域上,表示成功執(zhí)行一個回合的概率。
軟件回合是軟件運(yùn)行最小的、不可分的執(zhí)行單位。
8. 有時將軟件運(yùn)行環(huán)境簡單地理解為軟件運(yùn)行剖面(Operational Profile)。
運(yùn)行剖面定義了關(guān)于軟件可靠性描述中的“規(guī)定條件”,測試環(huán)境、測試數(shù)據(jù) 等一系列問題。
13.1.3 可靠性目標(biāo)
使用 失效強(qiáng)度 表示軟件缺陷對軟件運(yùn)行的影響程度。
不僅取決于軟件失效發(fā)生的概率,還和軟件失效的嚴(yán)重程度有很大關(guān)系。引出另外一個概念——失效嚴(yán)重程度類(Failure Severity Class)。
失效嚴(yán)重程度類 就是對用戶具有相同程度影響的失效集合。
對失效嚴(yán)重程度的分級 可以按照不同的標(biāo)準(zhǔn)進(jìn)行,對成本影響、對系統(tǒng)能力的影響 等。
對成本的影響可能包括失效引起的額外運(yùn)行成本、修復(fù)和恢復(fù)成本、現(xiàn)有潛在的業(yè)務(wù)機(jī)會的損失等。
對系統(tǒng)能力的影響常常表現(xiàn)為 關(guān)鍵數(shù)據(jù)的損失、系統(tǒng)異常退出、系統(tǒng)崩潰、導(dǎo)致用戶操作無效等。
可靠性目標(biāo)是指客戶對軟件性能滿意程度的期望。通常用 可靠度、故障強(qiáng)度、平均失效時間(MTTF)等指標(biāo)來描述。
建立定量的可靠性指標(biāo)需要對可靠性、交付時間、成本進(jìn)行平衡。
13.1.4 可靠性測試的意義
1、軟件失效可能造成災(zāi)難性的后果。
2、軟件的失效在整個計(jì)算機(jī)系統(tǒng)失效中的比例較高。
80%和軟件有關(guān)。
結(jié)構(gòu)太復(fù)雜了,一個較簡單的程序,其所有路徑數(shù)量可能是一個天文數(shù)字。
3、相比硬件可靠性技術(shù),軟件可靠性技術(shù)很不成熟。
4、軟件可靠性問題是造成費(fèi)用增長的主要原因之一。
5、系統(tǒng)對于軟件的依賴性越來越強(qiáng)。
13.1.5 廣義的可靠性測試與俠義的可靠性測試
廣義的軟件可靠性測試是指為了最終評價軟件系統(tǒng)的可靠性而運(yùn)用建模、統(tǒng)計(jì)、試驗(yàn)、分析、和評價等一系列手段對軟件系統(tǒng)實(shí)施的一種測試。
俠義的軟件可靠性測試是指為了獲取可靠性數(shù)據(jù),按預(yù)先確定的測試用例,在軟件的預(yù)期使用環(huán)境中,對軟件實(shí)施的一種測試。
也叫“軟件可靠性試驗(yàn)(Software Reliability Test)”,它是面向缺陷的測試,以用戶將要使用的方式來測試軟件,所獲得的測試數(shù)據(jù)與軟件的實(shí)際運(yùn)行數(shù)據(jù)比較接近。
可靠性測試是對軟件產(chǎn)品的可靠性進(jìn)行調(diào)查、分析、評價的一種手段。
對檢測出來的失效的分布、原因、后果 進(jìn)行分析,并給出糾正建議。
總的來說,可靠性測試的目的可歸納為以下三個方面:
1、發(fā)現(xiàn)軟件系統(tǒng)在 需求、設(shè)計(jì)、編碼、測試、實(shí)施 等方面的 各種缺陷。
2、為軟件的使用、維護(hù)提供可靠性數(shù)據(jù)。
3、確認(rèn)軟件是否達(dá)到可靠性的定量要求。
13.2 軟件可靠性建模
13.2.1 影響軟件可靠性的因素
軟件可靠性模型(Software Reliability Model)是指 為預(yù)計(jì)或估算軟件的可靠性所建立的可靠性框圖和數(shù)學(xué)模型。
模型將復(fù)雜系統(tǒng)的可靠性逐級分解為簡單系統(tǒng)的可靠性,以便 定量預(yù)計(jì)、分配、估算、評價復(fù)雜系統(tǒng)的可靠性。
影響軟件可靠性的主要因素:缺陷的引入、發(fā)現(xiàn)、清除。
缺陷的引入主要取決于軟件產(chǎn)品的特征和軟件的開發(fā)過程特性。
缺陷的發(fā)現(xiàn)依靠運(yùn)行剖面。
缺陷的清除依賴于失效的發(fā)現(xiàn)、修復(fù)活動、可靠性方面的投入。
影響軟件可靠性的主要因素如下:
1、運(yùn)行剖面(環(huán)境)。
2、軟件規(guī)模。
3、軟件內(nèi)部結(jié)構(gòu)。
4、軟件的開發(fā)方法和開發(fā)環(huán)境。
5、軟件的可靠性投入。人力、資金、資源、時間 等。
早期重視軟件可靠性并采取措施開發(fā)出來的軟件,可靠性有明顯的提高。
13.2.2 軟件可靠性建模方法
可靠性模型通常由以下幾部分組成:
1、模型假設(shè)。模型是實(shí)際情況的簡化或規(guī)范化,總要包含若干假設(shè)。
2、性能度量。軟件可靠性模型的輸出量就是性能度量。
3、參數(shù)估計(jì)方法。
4、數(shù)據(jù)要求。
絕大多數(shù)模型包含三個共同假設(shè):
1、代表性假設(shè)。選取代表軟件實(shí)際的運(yùn)行剖面。
2、獨(dú)立性假設(shè)。假設(shè)認(rèn)為軟件失效是獨(dú)立發(fā)生于不同時刻。
3、相同性假設(shè)。認(rèn)為所有軟件失效的后果(等級)相同,即建模過程只考慮軟件失效的具體發(fā)生時刻,不區(qū)分軟件的失效嚴(yán)重等級。
如果在進(jìn)行預(yù)測時發(fā)現(xiàn)引入了新的錯誤,或修復(fù)行為使新的故障不斷發(fā)生,就應(yīng)該停止預(yù)測。否則,這樣的變化會因?yàn)樵黾訂栴}的復(fù)雜程度而使模型的適用性降低。
好的軟件可靠性模型應(yīng)該具有如下重要特性:
1、基于可靠性的假設(shè)。
2、簡單。
3、計(jì)算一些有用的量。
4、給出未來失效行為的好的映射。
5、可廣泛使用。
13.2.3 軟件的可靠性模型分類
可靠性模型大致可分為如下10類:
1、種子方法模型。
利用捕獲一再捕獲抽樣技術(shù)估計(jì)程序中的錯誤數(shù),在程序中預(yù)先有意“播種”一些設(shè)定錯誤的“種子”,然后根據(jù)測試出的原始錯誤和發(fā)現(xiàn)的誘導(dǎo)錯誤比例,估計(jì)程序中殘留的錯誤數(shù)。
優(yōu)點(diǎn)是簡單易行,缺點(diǎn)是誘導(dǎo)錯誤的“種子”與實(shí)際的原始錯誤之間的類比性估量困難。
2、失效率類模型。
3、曲線擬合類模型。
用回歸分析的方法研究軟件 復(fù)雜性、缺陷數(shù)、失效率、失效間隔時間,包括參數(shù)方法和非參數(shù)方法兩種。
4、可靠性增長模型。
5、程序結(jié)構(gòu)分析模型。
通過對每一個節(jié)點(diǎn)可靠性、節(jié)點(diǎn)間轉(zhuǎn)換的可靠性和網(wǎng)絡(luò)在節(jié)點(diǎn)間的轉(zhuǎn)換概率,得出該持續(xù)程序的整體可靠性。
6、輸入域分類模型。
7、執(zhí)行路徑分析方法模型。
8、非其次泊松過程模型。
NHPP,以軟件測試過程中單位時間的失效次數(shù)為獨(dú)立泊松隨機(jī)變量,來預(yù)測今后軟件的某使用時間點(diǎn)的積累失效次數(shù)。
9、馬兒可夫過程模型。
10、貝葉斯模型。
利用失效率的試驗(yàn)前分布和當(dāng)前的測試失效信息,來評估軟件的可靠性。
當(dāng)軟件可靠性工程師對軟件的開發(fā)過程有充分的了解,軟件的繼承性比較好時具有良效果的可靠性分析模型。
時間域。
失效數(shù)類:失效數(shù)是有限的還是無限的。
失效數(shù)分布。
有限類:用時間表示的失效強(qiáng)度的函數(shù)形式。
無限類:用經(jīng)驗(yàn)期望失效數(shù)表示的失效強(qiáng)度的函數(shù)形式。
13.2.4 軟件可靠性模型舉例
1、模型假設(shè)
JM 模型的基本假設(shè)如下:
1. 初始錯誤個數(shù)為一個未知的常數(shù)。
2. 發(fā)現(xiàn)錯誤立即被完全排除,并且不引入新的錯誤,排除時間忽略不記,因此每次排錯后就要減 1。
3. 失效率剩余的錯誤個數(shù)成正比。
2、函數(shù)表達(dá)式。
軟件可靠性模型并不成熟,定量分析方法和數(shù)學(xué)模型要在實(shí)踐中不斷加以驗(yàn)證和修正。
不同類型的軟件,應(yīng)用方式也有很大區(qū)別。
13.2.5 軟件可靠性測試概述
可靠性測試 由可靠性目標(biāo)的確定、運(yùn)行剖面的開發(fā)、測試用例的設(shè)計(jì)、測試實(shí)施、測試結(jié)果的分析 等主要活動組成。
軟件可靠性測試 還必須考慮對軟件開發(fā)進(jìn)度和成本的影響,最好是在受控的自動測試環(huán)境下,由專業(yè)測試機(jī)構(gòu)完成。
13.2.6 定義軟件運(yùn)行剖面
弧 用來連接狀態(tài)并表示由各種激勵導(dǎo)致的轉(zhuǎn)換,將轉(zhuǎn)換概率分配給每個弧。
每類用戶都可能以不同的方式使用系統(tǒng)。
兩種類型分層形式:用戶級分層、用法級分層。
用法級分層依賴于在測試狀態(tài)下系統(tǒng)能做什么。
用戶級分層考慮各種類型的用戶,以及他們?nèi)绾问褂孟到y(tǒng)。
這些概率估計(jì)主要是基于如下幾個方面:
1、從現(xiàn)有系統(tǒng)收集到的數(shù)據(jù)。
2、與用戶的交談或?qū)τ脩暨M(jìn)行觀察獲得的信息。
3、原型使用與測試分析的結(jié)果。
4、相關(guān)領(lǐng)域?qū)<业囊庖姟?/p>
13.2.7 可靠性測試的實(shí)施
有必要檢查軟件需求與文檔是否一致,檢查軟件開發(fā)過程中形成的文檔的準(zhǔn)確性、完整性、一致性。
可靠性測試依賴于軟件的可測試性。
為了獲得更多的可靠數(shù)據(jù),應(yīng)該使用多態(tài)計(jì)算機(jī)同時運(yùn)行軟件,以增加累計(jì)時間。
用時間定義的軟件可靠性數(shù)據(jù)分為4類:
1、失效時間數(shù)據(jù)。
2、失效間隔時間數(shù)據(jù)。
3、分組時間內(nèi)的失效數(shù)據(jù)。
4、分組時間的累計(jì)失效數(shù)。
這 4類數(shù)據(jù)可以相互轉(zhuǎn)化。
測試過程中必須真實(shí)地進(jìn)行記錄,每個測試記錄必須包含如下信息:
1、測試時間。
2、含有測試用例的測試說明或標(biāo)識。
3、所有與測試有關(guān)的測試結(jié)果,包括失效數(shù)據(jù)。
4、測試人員。
測試活動結(jié)束后要編寫《軟件可靠性測試報告》具備如下內(nèi)容:
1、軟件產(chǎn)品標(biāo)識。
2、測試環(huán)境配置(硬件和軟件)。
3、測試依據(jù)。
4、測試結(jié)果。
5、測試問題。
6、測試時間。
13.3 軟件可靠性評價
13.3.1 軟件可靠性評價概述
估計(jì)軟件當(dāng)前的可靠性,以確認(rèn)是否可以終止測試并發(fā)布軟件,還可以預(yù)計(jì)軟件要達(dá)到相應(yīng)的可靠性水平所需要的時間和工作量,確認(rèn)軟件的執(zhí)行與需求的一致性。
13.3.2 怎樣選擇可靠性模型
可以從以下幾個方面進(jìn)行比較和選擇:
1、模型假設(shè)的適用性。
2、預(yù)測的能力與質(zhì)量。
3、模型輸出值能否滿足可靠性評價需求。
最重要的幾個需要精確估計(jì)的可靠性定量指標(biāo)包括如下內(nèi)容:
1. 當(dāng)前的可靠度。
2. 平均失效時間。
3. 故障密度。
4. 期望達(dá)到規(guī)定可靠性目標(biāo)的日期。
5. 達(dá)到規(guī)定的可靠性目標(biāo)的成本要求。
4、模型使用的簡便性
簡便性一般包含如下三層含義:
1. 模型需要的數(shù)據(jù) 易于收集,成本不能超過可靠性計(jì)劃的預(yù)算。
2. 模型應(yīng)該簡單易懂,測試人員不會花費(fèi)太多的時間去研究專業(yè)的數(shù)學(xué)理論。
3. 模型應(yīng)該便于使用。
13.3.3 可靠性數(shù)據(jù)的收集
面向缺陷的可靠性測試 產(chǎn)生的測試數(shù)據(jù)經(jīng)過分析后,可以得到非常有價值的可靠性數(shù)據(jù),這部分?jǐn)?shù)據(jù)取決于定義的運(yùn)行剖面和選取的測試用例集。
可靠性數(shù)據(jù)的收集工作是貫穿整個軟件生命周期的。
可行的一些辦法如下:
1、及早確定所采用的可靠性模型。
2、指定可實(shí)施性較強(qiáng)的可靠性數(shù)據(jù)收集計(jì)劃,指定專人負(fù)責(zé),按照統(tǒng)一的規(guī)范收集記錄可靠性數(shù)據(jù)。
3、重視軟件測試特別是可靠性測試產(chǎn)生的測試數(shù)據(jù)的整理和分析。
4、充分利用數(shù)據(jù)庫來完成可靠性數(shù)據(jù)的存儲和統(tǒng)計(jì)分析。
13.3.4 軟件可靠性的評估和預(yù)測
1、判斷是否達(dá)到了可靠性目標(biāo)。
2、如未能達(dá)到,要再投入多少時間、多少人力、多少資金。
3、在軟件系統(tǒng)投入實(shí)際運(yùn)行 若干時間后,能否達(dá)到交付或部分交付用戶使用的可靠性水平。
沒有失效就無法估計(jì)可靠性。
要在模型之外運(yùn)行一些統(tǒng)計(jì)技術(shù)和手段對可靠性數(shù)據(jù)進(jìn)行分析,作為可靠性模型的補(bǔ)充、完善、修正。
輔助方法如下:
1、失效數(shù)據(jù)的圖形分析方法。
1. 積累失效個數(shù)圖形。
2. 單位時間段內(nèi)的失效數(shù)的圖形。
3. 失效間隔時間圖形。
2、試探性數(shù)據(jù)分析技術(shù)(Exploratory Data Analysis,EDA)對可靠性分析有用的信息如下:
1. 循環(huán)相關(guān)。
2. 短期內(nèi)失效數(shù)的急劇上升。
3. 失效數(shù)集中的時間段。
13.4 軟件的可靠性設(shè)計(jì)與管理
13.4.1 軟件可靠性設(shè)計(jì)
實(shí)踐證明,保障軟件可靠性,最有效、最經(jīng)濟(jì)、最重要的手段是 在軟件設(shè)計(jì)階段采取措施進(jìn)行可靠性控制。
1、軟件可靠性設(shè)計(jì)是軟件設(shè)計(jì)的一部分,必須在軟件的總體設(shè)計(jì)框架中使用,并且不能與其他設(shè)計(jì)原則相沖突。
2、軟件可靠性設(shè)計(jì)在滿足提高軟件質(zhì)量要求的前提下,以提高和保障軟件可靠性為最終目標(biāo)。
3、軟件可靠性設(shè)計(jì)應(yīng)確定軟件的可靠性目標(biāo),不能無限擴(kuò)大化,排在功能度、用戶需求、開發(fā)費(fèi)用之后考慮。
容錯設(shè)計(jì)、檢錯設(shè)計(jì)、降低復(fù)雜度設(shè)計(jì) 等技術(shù)。
1、容錯設(shè)計(jì)技術(shù)
1. 恢復(fù)塊設(shè)計(jì),一旦文本出現(xiàn)故障,用備份文本加以替換。
2. N版本程序設(shè)計(jì),對于相同初始條件和相同輸入的操作結(jié)果,實(shí)行多數(shù)表決,防止其中某一軟件模塊/版本的故障提供錯誤的服務(wù)。
必須注意以下兩方面:
使軟件的需求說明具有完整性和精確性。
設(shè)計(jì)全過程的不相關(guān)性。
3. 冗余設(shè)計(jì)
在相同的運(yùn)行環(huán)境中,一套軟件出故障的地方,另外一套也一定會出現(xiàn)故障。
在一套完整的軟件系統(tǒng)之外,設(shè)計(jì)一種不同路徑、不同算法或不同實(shí)現(xiàn)方法的模塊或系統(tǒng)作為備份。
費(fèi)用可能接近單個版本軟件開發(fā)費(fèi)用的兩倍,還有可能導(dǎo)致軟件運(yùn)行時所花費(fèi)的存儲空間、內(nèi)存消耗、運(yùn)行時間有所增加,需要在可靠性要求和額外付出代價之間做出折中。
2、檢錯技術(shù)
檢錯技術(shù)實(shí)現(xiàn)的代價一般低于容錯技術(shù)和冗余技術(shù),但它有一個明顯的缺點(diǎn),就是不能自動解決故障。
著重考慮幾個要素:檢測對象、檢測延時、實(shí)現(xiàn)方式、處理方式。
3、降低復(fù)雜度設(shè)計(jì)
模塊復(fù)雜性主要包含模塊內(nèi)部數(shù)據(jù)流向和程序長度兩個方面,結(jié)構(gòu)復(fù)雜性用不同模塊之間的關(guān)聯(lián)程度表示。
軟件復(fù)雜性是產(chǎn)生軟件缺陷的重要根源。
在設(shè)計(jì)師就應(yīng)該考慮降低軟件的復(fù)雜性,是提高軟件可靠性的有效方法。
在保證實(shí)現(xiàn)軟件功能的基礎(chǔ)上,簡化軟件結(jié)構(gòu),縮短程序代碼長度,優(yōu)化軟件數(shù)據(jù)流向,降低軟件復(fù)雜度,從而提高軟件可靠性。
13.4.2 軟件可靠性管理
為了進(jìn)一步提高軟件可靠性,又提出軟件可靠性管理的概念,把軟件可靠性活動貫穿于軟件開發(fā)的全過程。
各個階段的可靠性活動的目標(biāo)、計(jì)劃、進(jìn)度、任務(wù)、修正措施等。
由于軟件之間的差異較大,下面的每項(xiàng)活動并不是每一個軟件系統(tǒng)的可靠性管理的必須內(nèi)容,也不是軟件可靠性管理的全部內(nèi)容。
【編輯推薦】