田 雷 ,封 亮 ,李海峰
(1.上海華訊網(wǎng)絡系統(tǒng)有限公司,上海 201620;2.北京航空航天大學,北京 100183)
軟件尤其是安全關鍵軟件的失效可能會導致財產(chǎn)損失甚至人員傷亡。因此,可靠性已成為軟件發(fā)布時用戶最為關心的驗證指標[1]。作為軟件可靠性定量評估的重要手段,軟件可靠性模型已經(jīng)成功地應用于各種類型關鍵軟件的開發(fā)過程[2-3]。
現(xiàn)有軟件可靠性模型主要依據(jù)基于運行剖面的軟件可靠性測試中收集的失效時間數(shù)據(jù),對失效行為進行定量評估或預計,其存在揭錯效率低下、工作量巨大等情況[4-8]。為解決這些問題,已有研究提出一個基于順序統(tǒng)計量的軟件可靠性模型處理混合測試數(shù)據(jù),但其需要同時開展功能測試以及可靠性測試,工作量較大[9];而基于失效模式的軟件測試方法,雖然可以提升揭錯效率,但是其產(chǎn)生的失效數(shù)據(jù)卻不能用已有的模型進行處理,難以準確刻畫軟件運行時的可靠性。
因此,本文在傳統(tǒng)軟件可靠性模型的基礎上,面向基于失效模式的軟件測試過程,借助失效模式概率與馬爾科夫過程,提出一種新的軟件可靠性評估模型,并在某型動力控制軟件測試失效數(shù)據(jù)上開展工程實踐。應用結(jié)果表明,新模型可對軟件測試過程中的失效數(shù)據(jù)進行處理,獲得準確的軟件可靠性定量評估結(jié)果。
軟件運行過程中接收外部輸入數(shù)據(jù),如果功能處理過程出現(xiàn)異常,則外部輸出數(shù)據(jù)也會出現(xiàn)異常,導致軟件運行出現(xiàn)失效(即軟件動態(tài)執(zhí)行的輸出為不希望或不可接受的結(jié)果,是軟件系統(tǒng)運行行為對用戶要求的偏離),即“輸入—處理—輸出”軟件失效鏈模型,該模型認為決定失效模式發(fā)生概率的主要因素有兩點,即失效模式所在功能的執(zhí)行概率,以及觸發(fā)失效模式的輸入空間分布概率[10]。
記失效模式k的發(fā)生概率為φk,失效模式k所在的功能m的執(zhí)行概率為f p m,失效模式k的輸入空間分布概率為εIPD,則失效模式k發(fā)生概率可由公式(1)計算:
由公式(1)可知,若想計算失效模式k的發(fā)生概率,需要先計算功能m的執(zhí)行概率f p m與失效模式k的輸入空間分布概率εIPD。
假定軟件共有n個功能,各項功能的執(zhí)行概率記為。依據(jù)軟件運行剖面,確定功能之間轉(zhuǎn)移關系的定量描述,即針對功能f i,假定其在運行剖面中共有path i條轉(zhuǎn)移路徑(從起始點到結(jié)束點之間的若干功能之間轉(zhuǎn)移所組成的一條通路)可以經(jīng)過功能f i,則稱這些轉(zhuǎn)移路徑為功能f i的可達路徑。
假設功能f i的可達路徑K(K=1,…,path i)上共有K ik次轉(zhuǎn)移,每次轉(zhuǎn)移的發(fā)生概率記為tp ikj(j=1,…,K ik,tp ikj≤1),則功能f i的每條可達路徑上轉(zhuǎn)移概率的乘積之和即為功能f i的執(zhí)行概率fp i,如公式(2)所示:
軟件輸入數(shù)據(jù)C的有效取值區(qū)間為ψ,無效取值區(qū)間為θ,則輸入數(shù)據(jù)C的取值空間?=ψ∪θ??梢罁?jù)軟件歷史運行數(shù)據(jù),對輸入數(shù)據(jù)C取值區(qū)間的分布概率進行計算,具體計算方法如下。
假設共有m組運行數(shù)據(jù),每組數(shù)據(jù)中均記錄輸入數(shù)據(jù)C的取值情況。假定第i組數(shù)據(jù)下,輸入數(shù)據(jù)C在有效取值區(qū)間ψ的取值次數(shù)為k i N,在無效取值區(qū)間θ的取值次數(shù)為k i A,則輸入數(shù)據(jù)C有效取值區(qū)間ψ的分布概率εψ如公式(3)所示:
輸入數(shù)據(jù)C無效取值區(qū)間θ的分布概率εθ如公式(4)所示:
基于軟件功能執(zhí)行概率與輸入分布概率的計算,本文提出軟件失效模式概率的計算方法如下。
假設失效模式k的發(fā)生概率記為φk,其所在功能m的執(zhí)行概率記為f p m,并且失效模式k與功能m的一個或多個不同類型的輸入數(shù)據(jù)相關。
假定失效模式k對應一個輸入數(shù)據(jù)C,若該輸入數(shù)據(jù)C在無效取值區(qū)間θ取值時,導致失效模式k發(fā)生,則可依據(jù)公式(4)計算無效取值區(qū)間的分布概率εθ。
依據(jù)上述計算結(jié)果,可得到軟件失效模式k的發(fā)生概率φk如公式(5)所示:
假定軟件失效模式總數(shù)為N,在測試過程中共探測到m個失效模式,每個失效模式的發(fā)生概率記為φk,k=1,…,m。整個軟件測試過程中,累積失效模式概率記為{k,φk|k=1,…,m},k表示測試過程中的累積失效模式個數(shù);φk為測試過程中的累積失效模式概率,即。
將軟件測試結(jié)束時的功能失效率記為λO,軟件測試開始時的功能失效率記為λI。本論文提出如下幾個假設,為軟件功能失效率的評估奠定基礎。
假設1:功能失效率是當前殘存失效模式的發(fā)生概率之和。
假設2:考慮到學習因素的影響,軟件測試過程中累積失效模式概率的增長速率可能會呈現(xiàn)先增后減的“S”形增長趨勢。
根據(jù)假設2,本論文采用變形“S”形函數(shù)描述累積失效模式概率φk的這種“S”形增長趨勢,如公式(6)所示:
其中,φmax=λI=φN,c,b,q為參數(shù)常量。
假設3:假定功能失效模式總數(shù)N是有限的。
進而獲得功能失效率的估計值如公式(8)所示:
馬爾科夫過程具有“無后效性”,即系統(tǒng)在下一時刻所要執(zhí)行的功能,僅取決于當前時刻的執(zhí)行功能。針對長時間連續(xù)運行的軟件,功能之間的轉(zhuǎn)移關系通常近似服從馬爾科夫過程?;谏鲜龇治?本論文提出如下建模假設。
假設1:軟件可劃分為有限個獨立的功能模塊。
假設2:軟件運行過程中,各項功能之間的轉(zhuǎn)移關系服從馬爾科夫過程。
假定軟件具有n個功能,功能i轉(zhuǎn)移到功能模塊j的轉(zhuǎn)移概率記為p ij。將轉(zhuǎn)移概率p ij依次排列,構成功能轉(zhuǎn)移概率矩陣P如公式(9)所示:
功能轉(zhuǎn)移概率矩陣P是一個n階矩陣,具有如下性質(zhì)。
性質(zhì)1:p ij≥0,即每個元素均是非負的;
由于軟件可靠性表示軟件最終成功地完成任務的概率,因此對于假定服從馬爾科夫過程的軟件可靠性R,可以用功能模塊失效率λi和功能轉(zhuǎn)移概率矩陣P表示。即對于有n個功能的軟件,軟件可靠性函數(shù)可表示為公式(10):
其中,p i表示功能模塊F i的執(zhí)行概率,p ij表示在下一項操作時由功能模塊F i遷移到模塊F j的概率,λi表示功能模塊F i的失效率,t表示軟件運行或測試時間。
本論文針對某型動力控制系統(tǒng)軟件開展工程應用,驗證基于失效模式的軟件可靠性評估模型的有效性和可行性。具體的應用步驟與評估結(jié)果如下。
(1)應用概述。針對某型動力控制系統(tǒng)軟件進行基于失效模式的軟件可靠性測試,共執(zhí)行測試用例185項,總測試時間約502 h,確認13項軟件問題(對應13項軟件失效模式,問題編號分別為REQ-01至REQ-13),受篇幅限制,問題內(nèi)容不再詳述。
(2)軟件失效模式概率計算。針對軟件外場運行數(shù)據(jù)進行統(tǒng)計分析,評估運行剖面中每項功能的執(zhí)行概率。以“初始化功能”為例,其在外場運行過程中,有效執(zhí)行時間為43 h,而軟件的總運行時間總計863 h。所以,“初始化功能”的執(zhí)行概率為43/863≈0.049 8。由此也可獲得該動力控制軟件全部功能的執(zhí)行概率計算結(jié)果,如表1所示。
表1 軟件功能執(zhí)行概率Tab.1 Operation probabilities of the software functions
針對軟件外場運行數(shù)據(jù)進行統(tǒng)計分析,確認每項外部輸入接口數(shù)據(jù)在不同值域的取值概率。以輸入接口數(shù)據(jù)“啟動信號”為例,該數(shù)據(jù)為離散型,取值值域為{0,1},取值為0表示啟動無效(即異常值),1表示啟動有效(即正常值)。在外場運行過程中,數(shù)據(jù)取值為0的時間為24.6 h,取值為1的時間為838.4 h。所以,“啟動信號”取值為0的概率為24.6/863≈0.028,取值為1的概率為1-0.028=0.972。
依據(jù)表1中的功能執(zhí)行概率,以及外部輸入接口數(shù)據(jù)的取值概率,對每項失效模式的發(fā)生概率進行計算。本文以失效模式“REQ-01”為例,說明該失效模式的發(fā)生概率計算過程如下。
首先,確定失效模式“REQ-01”對應功能的執(zhí)行概率。該失效模式與“啟動功能”相關,由表1可知,“啟動功能”的執(zhí)行概率為0.034 8;然后,確定失效模式REQ-01對應外部輸入接口數(shù)據(jù)的取值概率分布。該失效模式是由“啟動信號”取值為0(異常值)引發(fā)的。所以,該失效模式對應的外部接口數(shù)據(jù)取值概率應為取值為0的發(fā)生概率,即0.028。最后,計算失效模式REQ-01的發(fā)生概率為0.034 8×0.028=0.000 974 4。
(3)基于失效模式的功能失效率計算。依據(jù)失效模式的發(fā)生概率,以及功能執(zhí)行概率,計算失效模式相關功能的失效率。以“啟動功能”為例,說明該項功能失效率的計算過程。在本次軟件可靠性測試過程中,與“啟動功能”相關的失效模式為REQ-01、REQ-02、REQ-03,進而根據(jù)模式假設3進行功能失效率計算。
(4)基于功能失效率的軟件失效率計算。依據(jù)功能失效率以及表1中的功能執(zhí)行概率,對軟件失效率λ進行計算,具體過程如下。
依據(jù)式λ=λ1p1+λ2p2+…+λnp n,需確定動力控制軟件的所有失效模式發(fā)生概率及相應功能的執(zhí)行概率。軟件失效率^λ經(jīng)計算得
即動力控制系統(tǒng)軟件的平均失效前間隔時間MTBF=1/^λ≈100.24 h。
(5)與傳統(tǒng)軟件可靠性測試評估方法的比對分析。該動力控制系統(tǒng)軟件曾經(jīng)進行過基于運行剖面的傳統(tǒng)軟件可靠性測試評估試驗,共用時1 100 h,發(fā)現(xiàn)軟件問題11項。將這種基于運行剖面的傳統(tǒng)軟件可靠性測試評估方法(傳統(tǒng)方法),與本文提出的基于失效模式的軟件可靠性測試評估方法(新方法)相比,可以得出如下對比分析結(jié)果。①新方法可有效提升軟件的揭錯效率。本論文借助基于失效模式的軟件可靠性測試,共識別13項軟件問題;而傳統(tǒng)的基于運行剖面的軟件可靠性測試只發(fā)現(xiàn)了11項問題。因此,相比傳統(tǒng)可靠性測試,本文所提軟件的揭錯效率提升了(13-11)/11×100%≈18.2%。②新方法顯著降低軟件測試工作量。基于失效模式的軟件可靠性測試所用的測試時間僅為502 h,而傳統(tǒng)軟件可靠性測試則用時為1 100 h。因此,測試工作量降低了(1 100-502)/1 100×100%≈54.4%。③新方法可獲得與傳統(tǒng)方法同樣準確的軟件可靠性評估結(jié)果。借助經(jīng)典軟件可靠性模型(GO 模型),計算軟件的MTBF為103.41 h。借助本論文提出的模型,計算軟件的MTBF為100.24 h,二者之間的誤差僅為3.1%。因此,與經(jīng)典的GO模型相比,本文所提模型也可以獲得較為準確的可靠性評估結(jié)果。
本文提出一種新的基于失效模式的軟件可靠性定量評估模型。首先,借助運行剖面與輸入空間計算失效模式概率,進而評估軟件功能失效率;然后,借助馬爾科夫過程實現(xiàn)基于失效模式的軟件可靠性定量評估。實例應用結(jié)果表明,本文提出的基于失效模式的軟件可靠性測試方法以及評估模型,可提升18.2%的揭錯效率,降低54.4%的測試工作量,可以獲得準確的軟件可靠性評估結(jié)果,同時適用于軟件可靠性測試。
本文所提可靠性評估模型的準確性可能受限于軟件測試的充分性,即如果軟件測試數(shù)據(jù)未覆蓋所有功能及其接口時,可能會對失效模式概率以及功能執(zhí)行概率的評估值產(chǎn)生影響。因此,在未來研究工作中,將考慮采用軟件仿真數(shù)據(jù)(或運行數(shù)據(jù))與測試數(shù)據(jù)相結(jié)合的方式優(yōu)化該模型的適應性和準確性。