毛子劍
(北方民族大學 計算機科學與工程學院,寧夏 銀川 750021)
人們普遍認為,軟件開發(fā)是很難預測的,在軟件產(chǎn)品完成后,軟件質量可能不容易提高??煽啃允擒浖玫囊粋€基本屬性,具有較高可靠性的軟件在交付給用戶之后,在實際使用過程中出現(xiàn)故障的概率小,可避免因軟件發(fā)生故障而給用戶造成不必要的損失。因此,軟件的性能和可靠性在各個領域都至關重要,若不能保證軟件的可靠性,那么會給企業(yè)和用戶帶來巨大的損失。針對此問題,為了提高軟件在發(fā)布前的可靠性程度,軟件可靠性模型可以對軟件的可靠性進行預測與評估,并通過軟件可靠性增長測試這一方法來不斷地提高軟件產(chǎn)品的質量[1]。軟件可靠性模型可以從已知或假定的條件,例如軟件的歷史故障數(shù)據(jù),預測軟件未來可能發(fā)生故障的行為并及時修復已發(fā)現(xiàn)的軟件故障,軟件的可靠性程度會隨著軟件錯誤的減少而呈現(xiàn)不斷增長的趨勢,從而有利于對軟件的發(fā)布時間進行決策。在對軟件進行測試的階段所使用的可靠性模型稱之為軟件可靠性增長模型,進而應用SRGM對軟件測試過程進行預測和評估[2]。
SRGM是評估軟件產(chǎn)品質量和可靠性的工具,對可靠性的評測、保證和產(chǎn)品發(fā)布具有重要作用[3]。軟件可靠性建模的基本方法是對軟件過去發(fā)生失效的數(shù)據(jù)進行建模,并能預測未來的失效情況,達到可靠性增長分析的目的[4]。SRGM為軟件的預測與評估提供了支持,并提高了軟件可靠性,保障了用戶的正常使用[5]。經(jīng)過幾十年的不斷發(fā)展,SRGM已經(jīng)成為用于軟件可靠性分析的最為成熟的方法之一。軟件可靠性模型可以分為隨機過程模型和非隨機過程模型[6],且可靠性模型的種類較多,不同模型評估可靠性的方法也不同。
在軟件測試階段,軟件故障定義為在測試過程中系統(tǒng)出現(xiàn)錯誤。在運用軟件可靠性增長模型時,常見的假設有軟件系統(tǒng)因發(fā)生錯誤而隨機地出現(xiàn)故障行為,以及每次發(fā)生軟件故障時,對出現(xiàn)的故障及時修復,并且在修復過程中不會額外引入新的軟件錯誤。將SRGM應用到歷史故障數(shù)據(jù)中,可以估計軟件可靠性信息,比如軟件中剩余的故障數(shù)、發(fā)現(xiàn)下一個故障的時間及可靠性函數(shù)等。
大多數(shù)的SRGM假設m(t)是一個滿足非齊次泊松過程(Nonhomogeneous Poisson Process,NHPP)的均值函數(shù),其利用在特定時間內(nèi)檢測到的故障數(shù)來評估軟件失效信息。SRGMS中的m(t)表示實際測試過程的累積檢測故障數(shù)的函數(shù),它是求解軟件可靠性的關鍵。設{N(t),t≥0}表示軟件測試過程中發(fā)現(xiàn)故障的計數(shù)過程,且m(0)=0,可得
在軟件測試階段,x表示軟件發(fā)生故障的間隔時間,在(t,t+x)內(nèi)的軟件可靠性R(x∣t)表示為
常用的軟件可靠性模型主要有超幾何分布模型、Jelinski Moranda(J-M)模型以及G-O模型等,不同可靠性模型含有不同的可靠性參數(shù),在不同的測試環(huán)境下來預測和評估可靠性的準確度也各不相同。例如,J-M模型是軟件可靠性模型的研究基礎,該模型被認為是最早用于軟件測試的可靠性模型之一[7],其假設一個軟件系統(tǒng)中包含N個故障數(shù)且所有故障均具有相同概率,假定條件有:(1)發(fā)現(xiàn)故障的概率和當前檢測到的故障數(shù)成正比;(2)故障檢測率在故障發(fā)生的時間間隔內(nèi)保持恒定;(3)在軟件測試過程中檢測出軟件故障,則立即對故障進行修復,且不引入新故障。
J-M模型不需要引入人為錯誤,根據(jù)每次測試的失效間隔時間來預測軟件中存在的總故障數(shù)N和測試強度φ。由于計算過程較為復雜,所以需要建立方程式并得到令方程兩邊近似相等的解值,則該數(shù)值表示預測軟件中的總故障數(shù)。然后,建立N值和φ值的關系,由已知的估計值解得測試人員每次執(zhí)行測試的強度,但J-M模型也存在參數(shù)估計誤差大的不足。J-M模型應用操作簡單且易于理解,所以很多SRGM對該模型的假設條件進行豐富與拓展,從而提出了更為完善的預測軟件可靠性的方法。而超幾何分布模型應用離散分布來分析軟件可靠性[8],它以添加人為錯誤的方式排除軟件中的固有錯誤,測試人員通過在發(fā)現(xiàn)人為錯誤的過程中發(fā)現(xiàn)并排除軟件中的固有錯誤,以此提高軟件可靠性。超幾何分布模型假設如下:(1)軟件中的固有錯誤數(shù)不超過N0,且N0大于0;(2)在測試開始之前,在軟件系統(tǒng)中添加N1個人為錯誤;(3)執(zhí)行測試,直到找出所有因N1引起的故障。根據(jù)每一測試階段的N1值,運用極大似然法估計軟件中N0的個數(shù),從而達到預測軟件可靠性的目的。由此可見,不同模型存在各自的優(yōu)勢,但也存在一些不足之處。
在軟件測試階段發(fā)生故障行為具有隨機性的特點,當遇到故障發(fā)生時將其記錄下來并進行修復操作,而且還需要考慮是否產(chǎn)生了額外的故障,進而消除潛在的故障,這稱為一個可靠性增長的過程。因此,應用SRGM對可靠性進行建??梢杂行У卦u估軟件可靠性,根據(jù)軟件失效數(shù)據(jù)來預測可靠性程度,最終達到提高軟件質量的目的。
使用SRGM對可靠性進行建模的主要步驟包括:(1)測試人員通過運行被測試軟件,收集故障數(shù)據(jù)信息;(2)建立SRGM模型,對測試、修復過程進行建模;(3)進行參數(shù)估計并預測軟件中剩余的故障總數(shù);(4)根據(jù)分析結果評估軟件可靠性程度。首先針對一個具體軟件提出符合該測試過程的研究假設,然后在執(zhí)行測試的過程中排除故障并建立排錯過程的微分方程式,從而預測出當前測試時間內(nèi)的累計故障數(shù)。最后,通過對估計的參數(shù)進行擬合,繪制該軟件的可靠性函數(shù)圖像,從而更好地對所建立的SRGM進行評估與分析。
本文介紹了SRGM的基本概念、SRGM在可靠性分析中的應用以及使用SRGM對可靠性進行建模等內(nèi)容,由此可知SRGM對與預測和評估軟件可靠性具有重要作用。通過對比J-M模型和超幾何分布模型在可靠性分析方面的應用可知,不同模型的假設條件和分析方法不同,但也存在一些不足之處。SRGM不僅提高了軟件的可靠性和質量,而且還有助于開發(fā)人員和測試人員確定最佳的軟件發(fā)布決策。