馬振宇,劉福勝,吳 緯,陳守華,韓 坤
(1.陸軍裝甲兵學(xué)院,北京 100072;2.北京特種車輛研究所,北京 100072)
當(dāng)今軟件在各個(gè)領(lǐng)域當(dāng)中,被使用的范圍越來越廣泛,其自身的可靠性問題也就成為專家學(xué)者們越來越關(guān)注的問題。尤其在武器裝備、航空航天等相關(guān)領(lǐng)域,對(duì)于這些安全關(guān)鍵型的軟件,使用方明確給出了軟件可靠性指標(biāo)要求。那么如何高效、客觀地驗(yàn)證這一類安全關(guān)鍵型軟件的可靠性是否達(dá)到用戶所規(guī)定的可靠性標(biāo)準(zhǔn),成為當(dāng)下軟件可靠性驗(yàn)證測試[1]中最關(guān)鍵的問題。
目前針對(duì)軟件可靠性驗(yàn)證測試有一類關(guān)于使用貝葉斯方法的測試方法。文獻(xiàn)[2]應(yīng)用了構(gòu)造共軛分布的貝葉斯方法。文獻(xiàn)[3]提出了基于先驗(yàn)動(dòng)態(tài)整合的可靠性驗(yàn)證測試方法。文獻(xiàn)[4]提出了基于混合貝塔分布的貝葉斯驗(yàn)證方法。文獻(xiàn)[5]應(yīng)用了基于減函數(shù)的先驗(yàn)分布構(gòu)造法進(jìn)行測試驗(yàn)證的方案。進(jìn)一步在文獻(xiàn)[6]中,提出了基于減函數(shù)的多層貝葉斯軟件可靠性驗(yàn)證測試方法。
為了更好地利用先驗(yàn)信息,找到新舊軟件產(chǎn)品之間存在的差異,更加真實(shí)地反映軟件可靠性驗(yàn)證測試的實(shí)際結(jié)果。本文首先采用了混合加權(quán)貝葉斯方法,通過引入混合加權(quán)權(quán)重(繼承因子),充分考慮軟件在更新?lián)Q代中各類信息,將混合加權(quán)權(quán)重看作一個(gè)隨機(jī)變量,提出了基于混合加權(quán)貝葉斯的軟件可靠性驗(yàn)證測試方法。接著詳細(xì)給出了在混合加權(quán)情況條件下的超參數(shù)估計(jì)方法。最后通過實(shí)驗(yàn)分析,驗(yàn)證了該方法的有效性。
將每一次軟件可靠性驗(yàn)證測試試驗(yàn)看成成敗型試驗(yàn),同時(shí)設(shè)定每次軟件被測試出失效的概率相等且為p,并且每一次測試均符合n重伯努利實(shí)驗(yàn)。那么在n次獨(dú)立重復(fù)測試中,出現(xiàn)X次失效次數(shù)的概率就符合二項(xiàng)分布,即:
根據(jù)上述假設(shè)的條件,在實(shí)際的軟件可靠性測試中,選擇共軛分布貝塔分布作為失效概率的概率密度函數(shù)的先驗(yàn)分布。同時(shí)后驗(yàn)分布應(yīng)與先驗(yàn)分布屬于同一類分布。
其中,0
0,b>0,a,b 都為先驗(yàn)分布的超參數(shù)。B(a,b)為貝塔函數(shù),即:
依據(jù)式(2),軟件經(jīng)過n個(gè)測試用例遍歷測試完成之后,出現(xiàn)了r個(gè)失效數(shù),并由貝葉斯定理可以得到該失效概率的后驗(yàn)分布應(yīng)是 Beta(a+r,b+n-r),即:
在進(jìn)行軟件可靠性驗(yàn)證測試時(shí),假設(shè)初始的可靠性指標(biāo)為(p0,c),其中 p0為軟件失效概率,c為置信度。聯(lián)合式(4)求出滿足下式中最小的整數(shù)解,即為軟件可靠性驗(yàn)證測試的測試用例數(shù)n。
根據(jù)歷史性數(shù)據(jù)結(jié)合貝葉斯推斷原理對(duì)先驗(yàn)分布進(jìn)行估計(jì),即對(duì)超參數(shù)a、b進(jìn)行量化估計(jì)。其求解的基本原理為:假定樣本數(shù)(x1,x2,…,xn),對(duì)變量p 的似然分布為 g(x1,x2,…,xn|p),并且變量 p 的先驗(yàn)分布為f(p),則可得到樣本數(shù)據(jù)和變量之間的聯(lián)合密度函數(shù)f(p)g(x1,x2,…,xn|p),進(jìn)而求得樣本的邊緣密度函數(shù)。h(x1,x2,…,xn)的估計(jì)是通過歷史樣本數(shù)據(jù)得到的,然后將確定出的f(p)和g(x1,x2,…,xn|p)一同去估計(jì)出超參數(shù)的值。
依據(jù)超參數(shù)的求解原理,選用軟件在以往測試過程中遺留下的最后m組的測試記錄作為先驗(yàn)信息,每一組里含有n個(gè)測試用例,并同時(shí)統(tǒng)計(jì)出每一組測試用例中造成軟件失效的數(shù)量,分別記作k1,k2,…,km,因而求得失效概率的經(jīng)驗(yàn)值為ti=ki/n(i=1,2,…,m)。
樣本的邊緣分布為:
進(jìn)而求得h(x)對(duì)應(yīng)的一階矩為:
h(x)的二階矩為:
將 E(x)、E(x2)記作 w1、w2,則超參數(shù) a,b 為:
然而w1、w2可以通過經(jīng)驗(yàn)樣本值的期望所估計(jì),即:
把式(10)代入到式(9)中,即可估計(jì)出超參數(shù)a與b的值。
通常來說,軟件的研發(fā)過程是一個(gè)不斷更新的進(jìn)程。高版本的軟件一般是在低版本的軟件基礎(chǔ)之上進(jìn)行改進(jìn)的,因此,高版本的軟件就會(huì)具有許多和低版本軟件相似的特性,同時(shí)高版本的軟件也會(huì)具有自己獨(dú)有的特性。這就要求先驗(yàn)分布既有傳承性,還有由于版本的升級(jí)換代引發(fā)的不確定性。因此,本文引入混合先驗(yàn)分布的概念,把混合加權(quán)權(quán)重[7](繼承因子和更新因子)結(jié)合到先驗(yàn)貝塔分布當(dāng)中去,使得軟件可靠性驗(yàn)證測試方案更具有實(shí)際意義。
在二項(xiàng)分布中,混合先驗(yàn)分布為:
其中:ρ為混合加權(quán)權(quán)重(繼承因子),1-ρ為更新因子,0≤ρ≤1。p 為失效概率,0<p<1。a,b 為超參數(shù)。
根據(jù)式(11)可以得出,混合先驗(yàn)分布是無信息先驗(yàn)分布以及共軛先驗(yàn)分布的加權(quán)和。繼承因子體現(xiàn)了歷史數(shù)據(jù)符合總體與試驗(yàn)樣本符合總體的相似程度,然而更新因子就體現(xiàn)出更新的高版本軟件中帶來的可靠性不確定性。
當(dāng)ρ=1時(shí),說明高版本軟件對(duì)低版本軟件沒有進(jìn)行任何的改進(jìn)措施,那么此時(shí)的混合先驗(yàn)分布就是共軛先驗(yàn)分布,即為f(p)=Beta(a,b);當(dāng)ρ=0時(shí),說明高版本軟件徹底改變了低版本軟件的所有性質(zhì),是一個(gè)全新的軟件,那么此時(shí)的混合先驗(yàn)分布就是在區(qū)間[0,1]上的均勻分布,即f(p)=1。實(shí)際的意思就是徹底沒有利用歷史信息,在無先驗(yàn)信息的條件下,確定的先驗(yàn)分布;當(dāng)0<ρ<1說明高版本軟件與低版本軟件是類似的,歷史數(shù)據(jù)起到了一定的參考價(jià)值。當(dāng)ρ取值在0和1之間,也更貼近實(shí)際的工程意義。
因?yàn)槔^承因子對(duì)軟件可靠性的驗(yàn)證起到了至關(guān)重要的作用,所以對(duì)于它的取值就應(yīng)該非常慎重。它體現(xiàn)的是相似程度。如果當(dāng)高版本軟件在低版本軟件的基礎(chǔ)上做了許多改動(dòng),則ρ的值就應(yīng)該越??;反過來說,如果當(dāng)高版本軟件在低版本軟件的基礎(chǔ)上幾乎沒有做太多的改動(dòng),則ρ的值就應(yīng)該越大。
依舊根據(jù)超參數(shù)估計(jì)的基本原理,結(jié)合式(6)與式(11),可以得到在混合加權(quán)貝葉斯條件下的樣本邊緣分布,即:
結(jié)合式(7)和式(11),求得在混合加權(quán)貝葉斯條件下的h(x)對(duì)應(yīng)的一階矩為:
同理,結(jié)合式(8)和式(11),求得在混合加權(quán)貝葉斯條件下的h(x)對(duì)應(yīng)的二階矩為:
接著把式(10)代入到式(15)中,即可估計(jì)出超參數(shù)a與b的值。
在軟件可靠性測試過程中,用n個(gè)測試用例進(jìn)行遍歷測試,共出現(xiàn)了r次失效。再根據(jù)混合貝葉斯的先驗(yàn)分布,結(jié)合式(1)和式(11),可以推導(dǎo)出失效概率的后驗(yàn)分布,即:
根據(jù)實(shí)際情況,設(shè)定軟件可靠性測試中最大失效的次數(shù)r,失效概率為p0,置信度為c。應(yīng)用式(16),求出滿足式(17)的最小整數(shù)值,也就是基于混合加權(quán)貝葉斯可靠性驗(yàn)證測試方案的測試用例數(shù)量n。
本文通過一個(gè)實(shí)測項(xiàng)目結(jié)果用于證明基于混合加權(quán)貝葉斯方法在軟件可靠性驗(yàn)證測試的方法中有效地降低工作量,減少測試用例的數(shù)量。首先收集軟件可靠性測試過程中最后10組數(shù)據(jù)作為估計(jì)先驗(yàn)信息的歷史數(shù)據(jù),每一組出現(xiàn)的失效次數(shù)如表1所示。
表1 先驗(yàn)信息失效數(shù)據(jù)
由式(15)可以算出在不同混合加權(quán)權(quán)重下的先驗(yàn)分布的超參數(shù)的估計(jì)值,如表2所示。
表2 不同混合加權(quán)權(quán)重下的超參數(shù)估計(jì)值
特別指出,表2中并未包含ρ=0時(shí),超參數(shù)的估計(jì)情況,那是因?yàn)楫?dāng)ρ=0時(shí),此時(shí)為無先驗(yàn)信息的分布,并且該分布為在區(qū)間[0,1]上的均勻分布,同時(shí)滿足 Beta(1,1)=U(0,1)。也就說明此時(shí) a、b 的取值都為1。
給定測試方案的指標(biāo)(p0,c)=(0.001,0.99),即為在置信度為0,99,失效概率為0.001。同時(shí)規(guī)定最大允許失效次數(shù)為5的條件下,通過歷史信息,結(jié)合式(17)求得在不同失效個(gè)數(shù)下,不同權(quán)重測試方案所需要的測試用例數(shù)量,如表3所示。
表3 基于混合加權(quán)貝葉斯驗(yàn)證方法所需測試用例數(shù)量
根據(jù)表3,可以得到以下2個(gè)相關(guān)結(jié)論:
1)當(dāng)高版本軟件在低版本的基礎(chǔ)上做出的改變越多,那么混合加權(quán)權(quán)重的值就越小,這就造成軟件可靠性驗(yàn)證測試的測試用例數(shù)量陡然增加;反之,高版本軟件在原有軟件的基礎(chǔ)上只做出少許改變,則混合加權(quán)權(quán)重的值就越大,對(duì)于測試方案所需要的測試用例數(shù)量來說,增加的測試用例數(shù)量也就沒有那么明顯。特別指出當(dāng)ρ≤0.5時(shí),軟件可靠性驗(yàn)證測試方案的測試用例數(shù)會(huì)大幅度增加,因此,本文推斷存在當(dāng)高版本軟件在原軟件基礎(chǔ)之上做出至少一半的改動(dòng)時(shí),就會(huì)給驗(yàn)證測試帶來巨大的工作量,增加測試成本。
2)當(dāng)ρ=0時(shí),說明此時(shí)是在無先驗(yàn)信息條件下,測試方案對(duì)于驗(yàn)證測試所需要的工作量是最大的。當(dāng)ρ=0.1時(shí),可以發(fā)現(xiàn)較ρ=0的條件下的所需測試用例數(shù)減少了許多。這是因?yàn)楫?dāng)ρ>0時(shí),說明是在有歷史數(shù)據(jù),先驗(yàn)信息的情況下,可以顯著地降低驗(yàn)證測試的工作量。貝葉斯方法的測試方案比起無先驗(yàn)信息的測試方案分別在失效數(shù)r=0,1,2,3,4,5 時(shí),測試用例最少分別減少了 1 262 個(gè)、1 392個(gè)、1 341個(gè)、1 268個(gè)、1 201個(gè)、1 325個(gè)(ρ=0.1時(shí)),最多減少了2 460個(gè)、2 603個(gè)、2 593個(gè)、2 538個(gè)、2 596個(gè)、2 514個(gè)(ρ=1時(shí))。
本文首先提出基于貝葉斯方法的軟件可靠性驗(yàn)證測試方案,并同時(shí)給出針對(duì)超參數(shù)求解的詳細(xì)推導(dǎo)過程。接著提出混合加權(quán)權(quán)重,該權(quán)重能夠更加真實(shí)地反映軟件在更新?lián)Q代過程中的各種變化信息。然后依據(jù)超參數(shù)的求解過程,給出了混合加權(quán)情況下的超參數(shù)估計(jì)的具體方法。最后給出了提高軟件可靠性驗(yàn)證測試效率的方法。通過案例分析,該方法比起傳統(tǒng)貝葉斯方法更客觀地反映被測軟件的可靠性,因此,該方法在實(shí)際運(yùn)用過程中更加合理化。同時(shí)比起無先驗(yàn)信息的測試方案,在保證驗(yàn)證結(jié)果置信度不變的基礎(chǔ)之上,能夠顯著地降低可靠性驗(yàn)證測試所需要的測試用例數(shù)量。但是該方法還需要投入到今后大量的驗(yàn)證測試實(shí)驗(yàn)中去檢驗(yàn),以此來不斷完善該方法,以便后續(xù)更高效地應(yīng)用到軟件可靠性驗(yàn)證測試中。