房懷媛,李長銀
(臨沂大學,山東 臨沂 273400)
隨著軟件結構越來越復雜,錯誤率也大大增加。為了降低軟件故障帶來的損失,軟件預測變得格外重要。因此,為了保證構件軟件能夠得到有效使用,需要對構件軟件進行可靠性預測[1,2]。
目前,常用的軟件可靠性預測方法主要有基于組合模型的、基于體系結構的和基于優化PSO-SVM模型的軟件可靠性預測方法。其中,基于組合模型的軟件可靠性預測方法為了提升軟件測試精準度,建立一個組合模型。在模型故障數據類型、故障趨勢匹配和模型預測的基礎上闡述了模型選取算法。最后利用序列似然比方法對模型權值進行選取,再選擇一組故障數據完成對組合模型的驗證,該方法沒有對軟件缺陷進行有效分析,導致軟件預測時間過高,存在時間延遲的問題。基于體系結構的軟件可靠性預測方法為了解軟件模塊之間的調用關系對模塊可靠度進行估算。根據不同的評估方法將模型劃分為合成型與分級型兩類,再通過可靠性評估對軟件體系結構和模塊劃分原則進行分析,得出模塊的可靠度和轉移概率評估方法,為軟件預測提供重要依據,該方法沒有分析軟件故障原因,導致構件軟件在預測中系統能耗偏高,存在CPU開銷大的問題。基于優化PSO-SVM模型的軟件可靠性預測方法針對傳統軟件的預測模型弱點進行研究,更改傳統PSO-SVM模型,并完善PSO-SVM軟件預測模型,該方法獲取的軟件故障信息不全面,使程序輸出具有誤差,存在平均路徑覆蓋率差的問題[3,4]。
為了解決上述方法中存在的問題,提出基于Copula函數模型的構件軟件可靠性預測方法。
在軟件出現缺陷的過程中能夠獲取三個導致軟件失效的主要原因:
1)程序的輸入使軟件缺陷得到了執行[5]。
2)缺陷改變后置數據,引發軟件故障[6]。
3)出現錯誤信息的程序數據被散布到程序輸出中,使輸出結果出現偏差,軟件失效。
這三個主要原因展現了軟件從缺陷到失效的過程,程序存在缺陷后,陸續傳遞到數據中,經過無數次迭代,出現錯誤的數據就會將故障傳播到程序的輸出中。軟件缺陷模型如圖1所示。

圖1 構件軟件的缺陷模型
圖1中,通過數據輸入使位置數據得到執行的概率,表示為執行概率A;當數據位置出現改變時,數據狀態遭到改變的概率被稱作傳播概率B;改變后的數據狀態會產生程序輸出變動,它的概率由傳播概率C表示。當三個主要原因全部存在時,軟件缺陷才會失效,也容易被檢測出來。
當軟件缺陷的發生概率D滿足這三種原因時,它的概率乘積表示為D=A×B×C。
當系統出現故障時,就可以使用SFTA軟件對失敗事件進行分析,從中找尋發生故障的主要因素,通過分析因素的前后層次關系建立一個軟件故障樹,其故障分析如圖2所示。

圖2 SFTA事件說明
因為軟件發生數據信息輸入故障后,數據庫不能及時進行數據更新,所以將頂事件放在故障樹首位。居于故障樹底端的被稱作底事件,要想確立底事件分解級別就要確定SFTA的層次,如模塊級、程序級或語句一級[7]。整個事件中,導致數據庫不能及時更新數據的原因有如下幾種假設條件:
1)更改程序遭到破壞;
2)用戶不能正常登錄;
3)用戶登錄后不能輸入信息。
通過這幾個假設條件對事件起因進行推導,追溯每一級事件故障的直接原因事件,此事件為確定底事件,如表1所示。

表1 軟件故障分析
構造軟件故障樹是對軟件故障分析的關鍵,按照國家標準GJB768.1,構建故障樹的基本原則為:
1)確立故障樹構建的邊界條件;
2)嚴格定義故障事件;
3)自頂向底逐級建樹;
4)建立故障樹時邏輯門與邏輯門之間不能直接連接;
5)選取直接時間,消除間接時間;
6)對于多個時間同時發生的相同原因事件進行恰當處理。
根據表1的構件軟件故障分析結果建立軟件故障樹,構建結果如圖3所示。

圖3 軟件故障樹流程圖
由圖3可知,M代表頂事件;N1代表軟件更改程序遭到破壞;N2代表用戶不能正常登錄系統;N3代表用戶不能填寫信息或信息填寫的錯誤;W1代表病毒入侵計算機;W2代表丟失加載文件;W3代表無法顯示用戶登錄的界面;W4代表驗證程序出現故障;W5代表用戶實操出現錯誤;W6代表數據庫內存不足;W7代表錄入信息出現格式錯誤;Y代表其它事件;Y1代表硬件出現障礙;Y2代表系統模塊發生障礙。
對于建立完成的故障樹,可以從中獲取構件軟件產生故障的前后因果,為構件軟件可靠性預測提供了更加全面的信息基礎。
根據二維情況研究建立普通BPA證據變量,設M1和M2為兩個證據變量,則與焦元dk相對應的邊緣區間為[m11,m12]和[m21,m22],那么二維焦元如圖4所示。

圖4 二維焦元
圖4中,邊緣BPA分別由y1和y2表示,它的邊緣區間端點用m11、m12、m21和m22描述,與邊緣區間相對應的累積BPA分別為y11、y12、y21、y22。
在傳統方法中,假設每個證據變量都是一個單獨的個體,那么與dk相對應的聯合BPA方程式如下所示

(1)
式(1)可被Copula函數修改為下述方程
y(dk)=C∏(y12,y22)-C∏(y11,y22)
-C∏(y12,y21)+C∏(y11,y21)
(2)
式中,C∏代表獨立Copula函數。由此可見,Copula函數的特殊形式可以構建普通BPA,它被稱作獨立Copula[8]。因為證據變量中具有某些相關性情況,所以對于二維問題,將與焦元dk對應的聯合BPA定義為
y(dk)=C(y12,y22|θ)-C(y11,y22|θ)
-C(y12,y21|θ)+C(y11,y21|θ)
(3)
式中,θ代表存在于Copula函數中的相關參數。在N維焦元中包括n個邊緣區間[m11,m12],…,[mn1,mn2],則聯合BPA由式(4)表示

(4)
式中,v代表差分指數。式(4)還可以用下列方程表示
-C(v1,…,vj-1,yj1,vj+1,…,vn)
(5)
則與焦元dk相應的聯合BPA定義如下

(6)
根據式(4)可知,當證據變量中存在相關性時,應當使用Copula函數差值獲取聯合BPA值,先對證據變量中的Copula函數進行辨識后,再對BPA進行計算。證據變量中所對應的大部分樣本數量較少,所以采用貝葉斯方法有效避免樣本量較小的問題,同時利用貝葉斯方法對Copula函數進行選擇[9]。在證據理論中,使用經驗分布公式對證據變量樣本Mk(k=1,2,…,d)進行轉換,轉換成[0,1]中的均勻變量,其方程定義為

(7)
式中,d代表變量數目,Ri,k代表樣本的秩(選擇其中一個變量mk,從小到大排列,它的樣本為m1,k,m2,k,…,mn,k,當樣本數目小于等于mj,k時,被稱作mj,k秩)。平等分布各個[0,1]的變量后,就可以采用貝葉斯方法獲取證據變量中的最優Copula函數。
Copula函數有很多類型,目前為止使用最多的有Elliptical Copula函數和Archimedean Copula函數。其中Clayton、AMH、Gumbel、Frank、A12和A14屬于Archimedean Copula函數,Gaussian Copula屬于Elliptical Copula函數,Ind屬于獨立Copula函數。這些函數中,只有Gaussian Copula函數與經常使用的聯合正態分布建立關系便利,建立后的方程式如下定義
CΦ(u1,u2,…,un|θ)=Φp(Φ-1(u1),Φ-1(un)|θ)
(8)
式中,ui=Φ(mi)代表標準的正態分布。
目前為止大部分Copula的運用只針對成對數據,因為部分Copula函數中具有多維模型,在實際操作時存在限制,給操作造成不便。假設在多維Archimedean Copula模型中存在相同的Copula函數和相關性參數,當變量不同時,模型中的Copula函數和相關性參數就會存在差異,模型就不能準確對變量間的相關性進行分析[10]。所以當多個變量出現變量相關性時,只對各個二元數據對應的相關情況進行考慮,再用獨立Copula函數把各個二元Copula函數關聯起來。
對于以上證據理論模型的相關性研究,提出了對構件軟件結構可靠性的分析方法。當矢量X中存在多維證據矢量時,它的不確定性結構可靠域R可用方程表示為
R{g:g(x1,…,xn)≥0}
(9)
式中,g代表功能函數,其多維識別框架定義如下
D=X1×…×Xn
={dk=[x1i1,…,xnin],x1i1∈X1,…,xnin∈Xn}
(10)
式中,通過[x1i1,…,xnin]對焦元dk進行構建,再利用式(4)對證據變量聯合BPA進行計算。依據聯合BPA與可靠域R計算出可信度Bel和似真度Pl,具體如下所示

(11)
式中,Bel(G)表示完全支持G的證據BPA總和,Pl(G)表示全部或部分完全支持G的證據BPA總和。
理論上講,PR=P{g(x1,…,xn)≥g0}為真實的結構可靠度,其歸于區間Bel(G)≤PR≤Pl(G)中。
利用Bel和Pl對可靠度進行計算,當D?R時,焦元D全部居于可靠域中,若D∩R≠φ,則焦元D全部或只有一部分居于可靠域中。因此,焦元dk在極限狀態方程下的極值定義如下

(12)
若焦元dk的BPA被列入Bel(G)和Pl(G)中,那么gmin-g0和gmax-g0都為正數,滿足D?G的條件;若焦元dk的BPA在Bel(R)和Pl(R)之外,那么gmin-g0和gmax-g0都為負數,滿足D∩R=?;若焦元dk的BPA可以列入Pl(R)但不能列入Bel(R)中,那么gmin-g0就為負數,gmax-g0則為正數,且滿足D∩R≠?的條件。在計算焦元中的極值時,可以采用極點法減少計算數量。
根據上述可知,證據理論可靠性分析主要過程如下:
1).完成對可靠域R、邊緣BPA和X的樣本值的確立。
2)對轉換成[0,1]均勻變量的樣本值進行Kendall系數計算。
3)為選取Copula優質函數,采用貝葉斯方法對各個Copula函數的權重進行計算。
4)上述方程中,采取式(4)完成聯合BPA的構建。
5)計算極限狀態下的每個焦元極值并分析,從中獲取可靠性區間[Bel(G),Pl(G)]。
為了驗證基于Copula函數模型的構件軟件可靠性預測方法的整體有效性,需要對其進行檢測。
采用基于Copula函數模型的構件軟件可靠性預測方法(方法1)、基于組合模型的軟件可靠性預測方法(方法2)和基于體系結構的軟件可靠性預測方法(方法3)對構件軟件可靠性進行預測。圖5為預測時間延遲對比結果。

圖5 時間延遲對比圖
當方法1、方法2和方法3經過迭代次數的增加進行構件軟件可靠性的時間延遲測試時,由圖5可知,方法1的時間延遲比方法2和方法3的低,而方法2和方法3的時間曲線波動劇烈,時間延遲大。由此可知,方法1的構件軟件可用性比方法2和方法3高,因為該方法對軟件缺陷進行分析,根據分析結果實現預測,減小了預測所用的時間,進而降低了時間延遲。
圖6為CPU開銷對比結果。

圖6 CPU開銷對比圖
采用方法1、方法2和方法3對構件軟件可靠性預測中的CPU開銷進行測試,綜合圖6中的數據可知,三個方法中,方法2的CPU開銷最大,方法1的CPU開銷低于方法2和方法3,說明構件軟件在系統運行中產生的能耗小,因為方法1對建立的失效模型進行有效分析,明確了軟件故障的前后因素,降低了系統能耗,減少了CPU開銷。
表2為平均路徑覆蓋率對比結果。

表2 平均路徑覆蓋率對比
共選取三個方法中的五組平均路徑覆蓋率測試結果進行對比,分析表2數據可知,方法3在測試路徑雜亂的情況下,1、2、5組測試路徑覆蓋率偏低,最低數據為57.9%,最高數據為85.4%;方法2在路徑覆蓋率測試中,1、4組覆蓋率最低,其余路徑覆蓋率適中;而方法1在五次測試中路徑覆蓋率全部高于90%,最高覆蓋率達到98.6%,對比方法2和方法3,該方法的路徑覆蓋率極高。因為方法1解析了軟件故障的主要原因,為可靠性預測提供了詳細的信息基礎,使其能夠更全面地對路徑進行覆蓋,進而提升了平均路徑覆蓋率。
當構件軟件在計算機領域中的容錯率大大降低時,構件軟件可靠性預測就成為信息技術中必不可少的一部分。根據傳統方法在可靠性預測中存在的問題,在此提出基于Copula函數模型的構件軟件可靠性預測方法。通過對軟件缺陷的分析建立缺陷模型,對故障模型進行構件軟件可靠性分析后構建一個聯合BPA并在證據變量理論中獲取最優Copula函數,完成構件軟件可靠性預測,提高了構件軟件預測的有效性,解決了目前方法中存在的問題,為今后的構件軟件可靠性預測提供了重要基礎。