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