車金慶 周凌翱
(1.常州工程職業(yè)技術(shù)學(xué)院智能裝備與信息工程學(xué)院 常州 213016)(2.常州信息職業(yè)技術(shù)學(xué)院軟件學(xué)院 常州 213016)
隨著計算機(jī)和信息處理的廣泛應(yīng)用,計算機(jī)系統(tǒng)的可靠性問題越來越得到人們的關(guān)注。而軟件體系規(guī)模的日益增大及其復(fù)雜性的日益增強(qiáng),使軟件的可靠性問題更為突出。據(jù)有關(guān)資料統(tǒng)計,軟件故障約占整個計算機(jī)系統(tǒng)故障的65%[1]。所謂軟件可靠性是指軟件系統(tǒng)在規(guī)定環(huán)境下、給定時間內(nèi)無故障運(yùn)行的概率,是軟件質(zhì)量的一個重要組成部分。軟件可靠性與硬件可靠性相比體現(xiàn)出了不同的特點(diǎn):1)軟件錯誤主要是由設(shè)計錯誤造成的,使用和維護(hù)對軟件可靠性的影響不大;2)軟件錯誤不隨使用時間的延長而增加[2];3)軟件修理就是通過再設(shè)計排除原有錯誤;4)軟件可靠性增長與軟件使用的時間無關(guān),與檢測并改正錯誤的努力有關(guān);5)軟件壽命期內(nèi)無老化與耗損現(xiàn)象;6)正確的軟件不因使用環(huán)境的變化而改變其正確性;7)同一軟件的冗余技術(shù)不能提高軟件的可靠性;8)采用高可靠性的標(biāo)準(zhǔn)件-系統(tǒng)軟件所提供的各種庫函數(shù),未必能提高整體軟件的可靠性。
軟件可靠性模型是軟件可靠性評估與預(yù)測的核心,目前,公開發(fā)表的軟件可靠性模型已經(jīng)有一百多種,但是,由于它們假設(shè)不同,性能各異,因此,即使用它們估測同一軟件也可能得到存在巨大差異的預(yù)測結(jié)果,至今仍然沒有一個既簡單又廣泛適用的軟件可靠性模型。本文正是針對這一問題,期望通過對軟件可靠性模型進(jìn)行系統(tǒng)梳理得到一些有益的啟示。
建立軟件可靠性模型旨在根據(jù)軟件可靠性相關(guān)測試數(shù)據(jù),運(yùn)用統(tǒng)計方法得出軟件可靠性的預(yù)測值或估計值[3]。軟件可靠性模型對于預(yù)防軟件故障,預(yù)估軟件性能都有積極意義。圖1給出了軟件可靠性建模的基本思想。
圖1 軟件可靠性建?;舅枷?/p>
從圖1可以看出軟件失效總體來說隨著故障的檢出和排除而逐漸降低,在任意給定的時間,能夠觀測到軟件失效的歷史[4]。軟件可靠性建模的目標(biāo)如下:1)預(yù)測軟件系統(tǒng)達(dá)到預(yù)期目標(biāo)所還需要的資源開銷及測試時間;2)預(yù)測測試結(jié)束后系統(tǒng)的期望可靠性。
軟件可靠性建模需要考慮以下基本問題[5]。1)模型建立
模型建立指的是怎樣去建立軟件可靠性模型。一方面是考慮模型建立的角度,例如從時間域角度、數(shù)據(jù)域角度、將軟件失效時刻作為建模對象,還可以將一定時間內(nèi)軟件故障數(shù)作為建模對象;另一方面是考慮運(yùn)用的數(shù)學(xué)語言,例如概率語言。
2)模型比較
在軟件可靠性模型分類的基礎(chǔ)上,對不同的模型分析比較,并對模型的有效性、適用性、簡潔性等進(jìn)行綜合權(quán)衡,從而確定出模型的適用范圍。
3)模型應(yīng)用
軟件可靠性模型的應(yīng)用需要從以下兩方面考慮:一是給定了軟件的開發(fā)計劃,如何選擇適當(dāng)?shù)哪P?;二是給定了軟件可靠性模型,如何指導(dǎo)軟件可靠性工程實踐。
軟件系統(tǒng)的失效歷史可以通過對測試得到的失效數(shù)據(jù)分析獲得,而實際情況中,人們最為關(guān)注的是軟件未來的失效趨勢。軟件可靠性模型基本都是建立在一定的假設(shè)基礎(chǔ)之上,所以,即使花費(fèi)了大量的時間和精力對軟件的可靠性進(jìn)行預(yù)計,也只是一種預(yù)測,這種預(yù)測的不確定性是許多未知原因交互作用的結(jié)果,根據(jù)軟件可靠性模型的預(yù)測只能以概率形式表示[6]。
軟件可靠性模型主要有以下特點(diǎn)[7]。
1)與軟件開發(fā)語言無關(guān)。軟件可靠性模型的應(yīng)用與程序開發(fā)時選用的設(shè)計語言應(yīng)該是沒有關(guān)系的。按照同一規(guī)格說明開發(fā)的軟件,對于不同的程序開發(fā)語言,相同模型應(yīng)該給出同樣的預(yù)測結(jié)果。
2)與軟件開發(fā)方法無關(guān)。雖然一個好的程序設(shè)計方法開發(fā)出來的軟件可靠性更高,但是這樣的影響是很難描述的,因為軟件開發(fā)過程十分復(fù)雜、涉及諸多人為因素,從而使得對軟件可靠性的預(yù)測非常困難。在軟件可靠性預(yù)測中,一般假設(shè)軟件系統(tǒng)采用最壞的開發(fā)方法。
3)測試方法選擇。理論上,通過完全充分的測試,軟件可靠度能達(dá)到百分之百。但是,真實情況是人們只能實施有限的測試,使得在可靠性估計精度要求高的情況下,這些模型的可用性受到了限制。
4)錯誤排除過程。早期的許多軟件可靠性模型都基于完全改錯假設(shè),但實際上,在排錯的過程中,往往會引入新的錯誤。
5)模型表達(dá)內(nèi)容。通常,模型應(yīng)該指出軟件已被測試的程度,測試數(shù)據(jù)和條件是否能準(zhǔn)確地模擬軟件運(yùn)行環(huán)境,是否足以檢測出類似的故障等。軟件可靠性模型假設(shè)軟件測試的數(shù)據(jù)和條件與操作環(huán)境有著相同的分布。
6)輸入的分布情況。軟件可靠性模型基于的輸入分布是非常重要的,因為可靠性估計與其緊密相關(guān)。例如,考慮一種極端的情況,軟件只用到一個輸入為常數(shù),軟件將或者成功或者失敗的執(zhí)行,于是模型給出的可靠性估計相應(yīng)的為1或0。
7)軟件復(fù)雜性。原則上,復(fù)雜的軟件比相對簡單的軟件要求更多的測試。但是,現(xiàn)有軟件可靠性模型大多沒有對此進(jìn)行考慮。
8)對模型的驗證。在整個軟件生命周期內(nèi),軟件規(guī)模幾乎成倍的增長,軟件可靠性必然發(fā)生相應(yīng)的變化,加之缺乏實際可用的驗證數(shù)據(jù),使得對軟件可靠性模型的驗證非常復(fù)雜。
9)模型要求數(shù)據(jù)。模型進(jìn)行估測所要求的數(shù)據(jù)應(yīng)該是易于收集的,因為數(shù)據(jù)問題往往限制了軟件可靠性模型的應(yīng)用范圍。
軟件可靠性模型經(jīng)過幾十年的發(fā)展,已有將近二百多種可靠性模型發(fā)表。但是,并沒有發(fā)現(xiàn)一種科學(xué)、系統(tǒng)的分類方法。為了更好地整理和研究這些模型,許多不同的分類方法被相繼提出?,F(xiàn)在常用的一些分類方法主要有隨機(jī)性分類、按參數(shù)的估計方法分類、按系統(tǒng)出現(xiàn)的失效數(shù)分類、按修復(fù)過程分類、按時間的適用方式分類等等[8]。
按照軟件可靠性相關(guān),將其分成四類,分別是可靠性模型、釋放時間模型、可用性模型、硬件-軟件混合模型[9]。
根據(jù)Ramamoorthy和Bastani的觀點(diǎn),根據(jù)模型的應(yīng)用階段來分類[9]:
軟件開發(fā)階段:JM模型、Littlewood-Verral模型、Shooman模型、Musa模型等。軟件驗證階段:Nelson模型等。
軟件操作運(yùn)行階段:馬爾可夫過程模型等。
軟件測試階段:Mills模型、Seeding模型等。
綜合測試環(huán)境、模型假設(shè)和數(shù)理統(tǒng)計學(xué)的分類方法,將模型分為隨機(jī)過程類模型和非隨機(jī)過程類模型[10],如圖2所示。
圖2 軟件可靠性模型分類
到目前為止,軟件可靠性模型的研究還處于較為初級的階段,尚未形成固定的分類方法。也有不少學(xué)者提出了他們的分類方法,諸如按照隨機(jī)性分類、按照故障修復(fù)過程分類、按照軟件中發(fā)現(xiàn)的故障數(shù)分類、按照模型參數(shù)估計方法分類、按照模型采用時間方式分類等[11]。
綜合模型假設(shè)、測試環(huán)境以及數(shù)理統(tǒng)計的方法,可以將模型大致分為隨機(jī)過程類模型,如馬爾可夫過程模型、非齊次泊松過程模型等,及非隨機(jī)過程類模型[12]。
在軟件測試過程中,一旦軟件故障被發(fā)現(xiàn),都要進(jìn)行改正。因此,隨著測試工作的進(jìn)行,軟件中的故障不斷被排除減少,軟件的可靠性就不斷得到提高。所以說,現(xiàn)有的軟件可靠性模型都是軟件可靠性增長模型。
綜合模型假設(shè)、測試環(huán)境以及數(shù)理統(tǒng)計的方法,我們將模型大致分為隨機(jī)過程類模型和非隨機(jī)過程類模型。
本文主要研究隨機(jī)過程類軟件可靠性模型。
隨機(jī)過程類軟件可靠性模型主要包括馬爾可夫過程模型和非齊次泊松過程模型。一般如果假定故障出現(xiàn)率在軟件無變化的區(qū)間之內(nèi)為一固定常數(shù),并且隨著故障數(shù)的減少而下降,這類模型為馬爾可夫過程模型;另外,t時刻檢測到的累計錯誤數(shù)[N(t),t≥ 0]為時間的函數(shù),并且在一定的條件下,[N(t),t≥ 0]可近似的為一個非齊次泊松過程,這類模型則屬于非齊次泊松過程模型[13~14]。
馬爾可夫過程模型的典型代表是Jelinski-Moranda模型,非齊次泊松過程模型的典型代表是Goel-Okumoto模型。
Jelinski-Moranda模型[15],簡稱JM模型,是由Z.Jelinski和P.Moranda于1972年提出的。
3.1.1 JM模型基于的基本假設(shè)
1)軟件初始固有錯誤數(shù)是一個未知固定常數(shù),記為W0;
2)任意時刻的故障檢測率都與軟件中殘留故障數(shù)成正比,比例系數(shù)記為λ;
3)測試過程發(fā)現(xiàn)的故障均可以一次完全排除,且不引入新的故障,每一次排錯后W0減1;
4)軟件中的故障相互獨(dú)立,每個故障對整個軟件系統(tǒng)的影響是相同的,各故障發(fā)生的時間間隔也是相互獨(dú)立的。
3.1.2 數(shù)學(xué)描述
JM模型認(rèn)為,以第i-1次失效為起點(diǎn)的第i次失效時間,是服從以λ(W0-i+1)為參數(shù)的指數(shù)分布的隨機(jī)變量,其概率密度 f(t)為
由假設(shè)(4)可知ti-1時刻之后軟件平均失效時間MTTF為
3.1.3 模型參數(shù)估計
模型中含有W0和λ兩個未知參數(shù),用最大似然法分別求解W0和 λ的估計值的推導(dǎo)W?0和 λ?過程如下:
由式(1),得到似然函數(shù)為
其中n為樣本大小,即到當(dāng)前時刻已排除的故障數(shù)。
對式(5)取對數(shù),可得對數(shù)似然函數(shù)為
對式(6)分別求關(guān)于W0和λ的偏導(dǎo)數(shù),并令結(jié)果為0:
G-O模型是Goel-Okumoto提出的用非齊次泊松過程描述的軟件可靠性模型,是最為典型的非齊次泊松過程類模型。
3.2.1 G-O模型基于的基本假設(shè)
1)軟件的運(yùn)行條件與預(yù)期的操作環(huán)境相同;
2)在任意的時間間隔內(nèi)發(fā)現(xiàn)的軟件故障數(shù)互相獨(dú)立;
3)檢測到每個故障對于軟件系統(tǒng)的危害嚴(yán)重性相同;
4)每個故障被檢測到的可能性大致一樣;
5)t時刻檢測到的累計錯誤數(shù) [N(t),t≥0]是一個獨(dú)立增量過程,設(shè)N(t)的期望為w(t),則N(t)服從w(t)的泊松分布。在(t,t+Δt)時間區(qū)間中檢測到的故障數(shù)的期望值與t時刻程序中殘留故障數(shù)的期望值成正比;
6)t時刻檢測到累計故障數(shù)N(t)的期望函數(shù)w(t)是一個有界的單調(diào)遞增函數(shù),滿足:
其中a為可能被檢測到的軟件故障總數(shù)。
3.2.2 數(shù)學(xué)描述
根據(jù)基本假設(shè)(5),在任意一個足夠小的時間間隔 (t,t+Δt)內(nèi),有
γ為一比例常數(shù),代表錯誤檢測率。
用初始邊界條件w(0)=0,解出:
根據(jù)基本假設(shè)(5),若t時刻累積故障數(shù)為k,則N(t)概率密度函數(shù)為
失效強(qiáng)度函數(shù)用g(t)來表示,有
t時刻軟件殘留故障數(shù)用Nr(t)表示,有
Nr(t)的數(shù)學(xué)期望為
第n次失效發(fā)生以后,軟件的可靠性函數(shù)為
給定程序在tn時刻發(fā)生第n次失效,則此時程序的MTTF為
3.2.3 模型參數(shù)估計
在使用G-O模型進(jìn)行軟件可靠性分析時,首先需要確定模型未知參數(shù)的a和γ的值,使用最大似然法進(jìn)行參數(shù)估計。
在時刻ti(i=1,2,…,m)發(fā)現(xiàn)的累積故障數(shù)為si,則由式(18),可得出參數(shù)的最大似然函數(shù)為
對上式等號兩邊分別取對數(shù),得到對數(shù)似然函數(shù),然后對對數(shù)似然函數(shù)分別求關(guān)于a和γ的偏導(dǎo)數(shù),得到以下兩個方程式:
通過數(shù)值計算方法求解由式(25)和式(26)聯(lián)立的方程組,得出a和γ的值,即可獲得它們的點(diǎn)估計值?和?。
隨著計算機(jī)技術(shù)日新月異的發(fā)展,軟件產(chǎn)品已經(jīng)進(jìn)入到社會生產(chǎn)、人們生活的各個角落,與此同時,軟件失效的情況時有發(fā)生,給人們帶來不同程度的損失,軟件的可靠性問題受到了越來越多的重視。在軟件可靠性預(yù)測中,軟件可靠性模型發(fā)揮著核心作用,使用模型對軟件進(jìn)行估測時,需要選擇那些與軟件實際開發(fā)過程最接近模型,這樣才能保證預(yù)測的客觀性和準(zhǔn)確性。
本文在G-O模型的基礎(chǔ)上做了改進(jìn),基于更為合理的假設(shè),提出了考慮兩類相關(guān)故障的軟件可靠性模型。具體包括如下內(nèi)容:
1)整理與研究國內(nèi)外相關(guān)文獻(xiàn)資料,闡述了本文的選題背景與國內(nèi)外研究現(xiàn)狀;總結(jié)了軟件可靠性的基本特點(diǎn)、影響因素、性能度量指標(biāo)及其與硬件可靠性的區(qū)別;介紹了軟件可靠性分析用到的數(shù)學(xué)準(zhǔn)備知識;歸納了軟件可靠性模型的分類、基本特點(diǎn)、評價標(biāo)準(zhǔn)及評價技術(shù)。
2)研究了幾個經(jīng)典的可靠性模型,對兩個經(jīng)典隨機(jī)過程類模型(JM模型、G-O模型)的基本假設(shè)、公式推導(dǎo)及參數(shù)估計做了詳細(xì)介紹。
深入研究已發(fā)表的經(jīng)典軟件可靠性模型之后,本文指出了傳統(tǒng)軟件可靠性模型的局限性,并以G-O模型為基礎(chǔ),提出更接近實際情形的假設(shè),即將兩類軟件相關(guān)故障考慮在內(nèi),建立了數(shù)學(xué)模型。