房懷媛,李長銀
(臨沂大學(xué),山東 臨沂 273400)
隨著軟件結(jié)構(gòu)越來越復(fù)雜,錯誤率也大大增加。為了降低軟件故障帶來的損失,軟件預(yù)測變得格外重要。因此,為了保證構(gòu)件軟件能夠得到有效使用,需要對構(gòu)件軟件進行可靠性預(yù)測[1,2]。
目前,常用的軟件可靠性預(yù)測方法主要有基于組合模型的、基于體系結(jié)構(gòu)的和基于優(yōu)化PSO-SVM模型的軟件可靠性預(yù)測方法。其中,基于組合模型的軟件可靠性預(yù)測方法為了提升軟件測試精準度,建立一個組合模型。在模型故障數(shù)據(jù)類型、故障趨勢匹配和模型預(yù)測的基礎(chǔ)上闡述了模型選取算法。最后利用序列似然比方法對模型權(quán)值進行選取,再選擇一組故障數(shù)據(jù)完成對組合模型的驗證,該方法沒有對軟件缺陷進行有效分析,導(dǎo)致軟件預(yù)測時間過高,存在時間延遲的問題。基于體系結(jié)構(gòu)的軟件可靠性預(yù)測方法為了解軟件模塊之間的調(diào)用關(guān)系對模塊可靠度進行估算。根據(jù)不同的評估方法將模型劃分為合成型與分級型兩類,再通過可靠性評估對軟件體系結(jié)構(gòu)和模塊劃分原則進行分析,得出模塊的可靠度和轉(zhuǎn)移概率評估方法,為軟件預(yù)測提供重要依據(jù),該方法沒有分析軟件故障原因,導(dǎo)致構(gòu)件軟件在預(yù)測中系統(tǒng)能耗偏高,存在CPU開銷大的問題?;趦?yōu)化PSO-SVM模型的軟件可靠性預(yù)測方法針對傳統(tǒng)軟件的預(yù)測模型弱點進行研究,更改傳統(tǒng)PSO-SVM模型,并完善PSO-SVM軟件預(yù)測模型,該方法獲取的軟件故障信息不全面,使程序輸出具有誤差,存在平均路徑覆蓋率差的問題[3,4]。
為了解決上述方法中存在的問題,提出基于Copula函數(shù)模型的構(gòu)件軟件可靠性預(yù)測方法。
在軟件出現(xiàn)缺陷的過程中能夠獲取三個導(dǎo)致軟件失效的主要原因:
1)程序的輸入使軟件缺陷得到了執(zhí)行[5]。
2)缺陷改變后置數(shù)據(jù),引發(fā)軟件故障[6]。
3)出現(xiàn)錯誤信息的程序數(shù)據(jù)被散布到程序輸出中,使輸出結(jié)果出現(xiàn)偏差,軟件失效。
這三個主要原因展現(xiàn)了軟件從缺陷到失效的過程,程序存在缺陷后,陸續(xù)傳遞到數(shù)據(jù)中,經(jīng)過無數(shù)次迭代,出現(xiàn)錯誤的數(shù)據(jù)就會將故障傳播到程序的輸出中。軟件缺陷模型如圖1所示。
圖1 構(gòu)件軟件的缺陷模型
圖1中,通過數(shù)據(jù)輸入使位置數(shù)據(jù)得到執(zhí)行的概率,表示為執(zhí)行概率A;當數(shù)據(jù)位置出現(xiàn)改變時,數(shù)據(jù)狀態(tài)遭到改變的概率被稱作傳播概率B;改變后的數(shù)據(jù)狀態(tài)會產(chǎn)生程序輸出變動,它的概率由傳播概率C表示。當三個主要原因全部存在時,軟件缺陷才會失效,也容易被檢測出來。
當軟件缺陷的發(fā)生概率D滿足這三種原因時,它的概率乘積表示為D=A×B×C。
當系統(tǒng)出現(xiàn)故障時,就可以使用SFTA軟件對失敗事件進行分析,從中找尋發(fā)生故障的主要因素,通過分析因素的前后層次關(guān)系建立一個軟件故障樹,其故障分析如圖2所示。
圖2 SFTA事件說明
因為軟件發(fā)生數(shù)據(jù)信息輸入故障后,數(shù)據(jù)庫不能及時進行數(shù)據(jù)更新,所以將頂事件放在故障樹首位。居于故障樹底端的被稱作底事件,要想確立底事件分解級別就要確定SFTA的層次,如模塊級、程序級或語句一級[7]。整個事件中,導(dǎo)致數(shù)據(jù)庫不能及時更新數(shù)據(jù)的原因有如下幾種假設(shè)條件:
1)更改程序遭到破壞;
2)用戶不能正常登錄;
3)用戶登錄后不能輸入信息。
通過這幾個假設(shè)條件對事件起因進行推導(dǎo),追溯每一級事件故障的直接原因事件,此事件為確定底事件,如表1所示。
表1 軟件故障分析
構(gòu)造軟件故障樹是對軟件故障分析的關(guān)鍵,按照國家標準GJB768.1,構(gòu)建故障樹的基本原則為:
1)確立故障樹構(gòu)建的邊界條件;
2)嚴格定義故障事件;
3)自頂向底逐級建樹;
4)建立故障樹時邏輯門與邏輯門之間不能直接連接;
5)選取直接時間,消除間接時間;
6)對于多個時間同時發(fā)生的相同原因事件進行恰當處理。
根據(jù)表1的構(gòu)件軟件故障分析結(jié)果建立軟件故障樹,構(gòu)建結(jié)果如圖3所示。
圖3 軟件故障樹流程圖
由圖3可知,M代表頂事件;N1代表軟件更改程序遭到破壞;N2代表用戶不能正常登錄系統(tǒng);N3代表用戶不能填寫信息或信息填寫的錯誤;W1代表病毒入侵計算機;W2代表丟失加載文件;W3代表無法顯示用戶登錄的界面;W4代表驗證程序出現(xiàn)故障;W5代表用戶實操出現(xiàn)錯誤;W6代表數(shù)據(jù)庫內(nèi)存不足;W7代表錄入信息出現(xiàn)格式錯誤;Y代表其它事件;Y1代表硬件出現(xiàn)障礙;Y2代表系統(tǒng)模塊發(fā)生障礙。
對于建立完成的故障樹,可以從中獲取構(gòu)件軟件產(chǎn)生故障的前后因果,為構(gòu)件軟件可靠性預(yù)測提供了更加全面的信息基礎(chǔ)。
根據(jù)二維情況研究建立普通BPA證據(jù)變量,設(shè)M1和M2為兩個證據(jù)變量,則與焦元dk相對應(yīng)的邊緣區(qū)間為[m11,m12]和[m21,m22],那么二維焦元如圖4所示。
圖4 二維焦元
圖4中,邊緣BPA分別由y1和y2表示,它的邊緣區(qū)間端點用m11、m12、m21和m22描述,與邊緣區(qū)間相對應(yīng)的累積BPA分別為y11、y12、y21、y22。
在傳統(tǒng)方法中,假設(shè)每個證據(jù)變量都是一個單獨的個體,那么與dk相對應(yīng)的聯(lián)合BPA方程式如下所示
(1)
式(1)可被Copula函數(shù)修改為下述方程
y(dk)=C∏(y12,y22)-C∏(y11,y22)
-C∏(y12,y21)+C∏(y11,y21)
(2)
式中,C∏代表獨立Copula函數(shù)。由此可見,Copula函數(shù)的特殊形式可以構(gòu)建普通BPA,它被稱作獨立Copula[8]。因為證據(jù)變量中具有某些相關(guān)性情況,所以對于二維問題,將與焦元dk對應(yīng)的聯(lián)合BPA定義為
y(dk)=C(y12,y22|θ)-C(y11,y22|θ)
-C(y12,y21|θ)+C(y11,y21|θ)
(3)
式中,θ代表存在于Copula函數(shù)中的相關(guān)參數(shù)。在N維焦元中包括n個邊緣區(qū)間[m11,m12],…,[mn1,mn2],則聯(lián)合BPA由式(4)表示
(4)
式中,v代表差分指數(shù)。式(4)還可以用下列方程表示
-C(v1,…,vj-1,yj1,vj+1,…,vn)
(5)
則與焦元dk相應(yīng)的聯(lián)合BPA定義如下
(6)
根據(jù)式(4)可知,當證據(jù)變量中存在相關(guān)性時,應(yīng)當使用Copula函數(shù)差值獲取聯(lián)合BPA值,先對證據(jù)變量中的Copula函數(shù)進行辨識后,再對BPA進行計算。證據(jù)變量中所對應(yīng)的大部分樣本數(shù)量較少,所以采用貝葉斯方法有效避免樣本量較小的問題,同時利用貝葉斯方法對Copula函數(shù)進行選擇[9]。在證據(jù)理論中,使用經(jīng)驗分布公式對證據(jù)變量樣本Mk(k=1,2,…,d)進行轉(zhuǎn)換,轉(zhuǎn)換成[0,1]中的均勻變量,其方程定義為
(7)
式中,d代表變量數(shù)目,Ri,k代表樣本的秩(選擇其中一個變量mk,從小到大排列,它的樣本為m1,k,m2,k,…,mn,k,當樣本數(shù)目小于等于mj,k時,被稱作mj,k秩)。平等分布各個[0,1]的變量后,就可以采用貝葉斯方法獲取證據(jù)變量中的最優(yōu)Copula函數(shù)。
Copula函數(shù)有很多類型,目前為止使用最多的有Elliptical Copula函數(shù)和Archimedean Copula函數(shù)。其中Clayton、AMH、Gumbel、Frank、A12和A14屬于Archimedean Copula函數(shù),Gaussian Copula屬于Elliptical Copula函數(shù),Ind屬于獨立Copula函數(shù)。這些函數(shù)中,只有Gaussian Copula函數(shù)與經(jīng)常使用的聯(lián)合正態(tài)分布建立關(guān)系便利,建立后的方程式如下定義
CΦ(u1,u2,…,un|θ)=Φp(Φ-1(u1),Φ-1(un)|θ)
(8)
式中,ui=Φ(mi)代表標準的正態(tài)分布。
目前為止大部分Copula的運用只針對成對數(shù)據(jù),因為部分Copula函數(shù)中具有多維模型,在實際操作時存在限制,給操作造成不便。假設(shè)在多維Archimedean Copula模型中存在相同的Copula函數(shù)和相關(guān)性參數(shù),當變量不同時,模型中的Copula函數(shù)和相關(guān)性參數(shù)就會存在差異,模型就不能準確對變量間的相關(guān)性進行分析[10]。所以當多個變量出現(xiàn)變量相關(guān)性時,只對各個二元數(shù)據(jù)對應(yīng)的相關(guān)情況進行考慮,再用獨立Copula函數(shù)把各個二元Copula函數(shù)關(guān)聯(lián)起來。
對于以上證據(jù)理論模型的相關(guān)性研究,提出了對構(gòu)件軟件結(jié)構(gòu)可靠性的分析方法。當矢量X中存在多維證據(jù)矢量時,它的不確定性結(jié)構(gòu)可靠域R可用方程表示為
R{g:g(x1,…,xn)≥0}
(9)
式中,g代表功能函數(shù),其多維識別框架定義如下
D=X1×…×Xn
={dk=[x1i1,…,xnin],x1i1∈X1,…,xnin∈Xn}
(10)
式中,通過[x1i1,…,xnin]對焦元dk進行構(gòu)建,再利用式(4)對證據(jù)變量聯(lián)合BPA進行計算。依據(jù)聯(lián)合BPA與可靠域R計算出可信度Bel和似真度Pl,具體如下所示
(11)
式中,Bel(G)表示完全支持G的證據(jù)BPA總和,Pl(G)表示全部或部分完全支持G的證據(jù)BPA總和。
理論上講,PR=P{g(x1,…,xn)≥g0}為真實的結(jié)構(gòu)可靠度,其歸于區(qū)間Bel(G)≤PR≤Pl(G)中。
利用Bel和Pl對可靠度進行計算,當D?R時,焦元D全部居于可靠域中,若D∩R≠φ,則焦元D全部或只有一部分居于可靠域中。因此,焦元dk在極限狀態(tài)方程下的極值定義如下
(12)
若焦元dk的BPA被列入Bel(G)和Pl(G)中,那么gmin-g0和gmax-g0都為正數(shù),滿足D?G的條件;若焦元dk的BPA在Bel(R)和Pl(R)之外,那么gmin-g0和gmax-g0都為負數(shù),滿足D∩R=?;若焦元dk的BPA可以列入Pl(R)但不能列入Bel(R)中,那么gmin-g0就為負數(shù),gmax-g0則為正數(shù),且滿足D∩R≠?的條件。在計算焦元中的極值時,可以采用極點法減少計算數(shù)量。
根據(jù)上述可知,證據(jù)理論可靠性分析主要過程如下:
1).完成對可靠域R、邊緣BPA和X的樣本值的確立。
2)對轉(zhuǎn)換成[0,1]均勻變量的樣本值進行Kendall系數(shù)計算。
3)為選取Copula優(yōu)質(zhì)函數(shù),采用貝葉斯方法對各個Copula函數(shù)的權(quán)重進行計算。
4)上述方程中,采取式(4)完成聯(lián)合BPA的構(gòu)建。
5)計算極限狀態(tài)下的每個焦元極值并分析,從中獲取可靠性區(qū)間[Bel(G),Pl(G)]。
為了驗證基于Copula函數(shù)模型的構(gòu)件軟件可靠性預(yù)測方法的整體有效性,需要對其進行檢測。
采用基于Copula函數(shù)模型的構(gòu)件軟件可靠性預(yù)測方法(方法1)、基于組合模型的軟件可靠性預(yù)測方法(方法2)和基于體系結(jié)構(gòu)的軟件可靠性預(yù)測方法(方法3)對構(gòu)件軟件可靠性進行預(yù)測。圖5為預(yù)測時間延遲對比結(jié)果。
圖5 時間延遲對比圖
當方法1、方法2和方法3經(jīng)過迭代次數(shù)的增加進行構(gòu)件軟件可靠性的時間延遲測試時,由圖5可知,方法1的時間延遲比方法2和方法3的低,而方法2和方法3的時間曲線波動劇烈,時間延遲大。由此可知,方法1的構(gòu)件軟件可用性比方法2和方法3高,因為該方法對軟件缺陷進行分析,根據(jù)分析結(jié)果實現(xiàn)預(yù)測,減小了預(yù)測所用的時間,進而降低了時間延遲。
圖6為CPU開銷對比結(jié)果。
圖6 CPU開銷對比圖
采用方法1、方法2和方法3對構(gòu)件軟件可靠性預(yù)測中的CPU開銷進行測試,綜合圖6中的數(shù)據(jù)可知,三個方法中,方法2的CPU開銷最大,方法1的CPU開銷低于方法2和方法3,說明構(gòu)件軟件在系統(tǒng)運行中產(chǎn)生的能耗小,因為方法1對建立的失效模型進行有效分析,明確了軟件故障的前后因素,降低了系統(tǒng)能耗,減少了CPU開銷。
表2為平均路徑覆蓋率對比結(jié)果。
表2 平均路徑覆蓋率對比
共選取三個方法中的五組平均路徑覆蓋率測試結(jié)果進行對比,分析表2數(shù)據(jù)可知,方法3在測試路徑雜亂的情況下,1、2、5組測試路徑覆蓋率偏低,最低數(shù)據(jù)為57.9%,最高數(shù)據(jù)為85.4%;方法2在路徑覆蓋率測試中,1、4組覆蓋率最低,其余路徑覆蓋率適中;而方法1在五次測試中路徑覆蓋率全部高于90%,最高覆蓋率達到98.6%,對比方法2和方法3,該方法的路徑覆蓋率極高。因為方法1解析了軟件故障的主要原因,為可靠性預(yù)測提供了詳細的信息基礎(chǔ),使其能夠更全面地對路徑進行覆蓋,進而提升了平均路徑覆蓋率。
當構(gòu)件軟件在計算機領(lǐng)域中的容錯率大大降低時,構(gòu)件軟件可靠性預(yù)測就成為信息技術(shù)中必不可少的一部分。根據(jù)傳統(tǒng)方法在可靠性預(yù)測中存在的問題,在此提出基于Copula函數(shù)模型的構(gòu)件軟件可靠性預(yù)測方法。通過對軟件缺陷的分析建立缺陷模型,對故障模型進行構(gòu)件軟件可靠性分析后構(gòu)建一個聯(lián)合BPA并在證據(jù)變量理論中獲取最優(yōu)Copula函數(shù),完成構(gòu)件軟件可靠性預(yù)測,提高了構(gòu)件軟件預(yù)測的有效性,解決了目前方法中存在的問題,為今后的構(gòu)件軟件可靠性預(yù)測提供了重要基礎(chǔ)。