楊春暉
(工業(yè)和信息化部電子第五研究所 廣州 510610)
在將軟件產(chǎn)品提供給用戶使用時,可以通過軟件可靠性理論和方法對該軟件產(chǎn)品的可靠性和潛伏故障進(jìn)行預(yù)測和估計[1-3].這種估計主要有2個原因:1)作為產(chǎn)品質(zhì)量的客觀聲明;2)用于軟件維護(hù)階段的資源計劃.研究中的標(biāo)準(zhǔn)變量是在規(guī)定時間區(qū)間(如星期、月等)中的缺陷個數(shù)(或按代碼行數(shù)規(guī)格化了的缺陷率)或失效間隔時間.可靠性模型中的靜態(tài)模型[4-5]是指通過軟件系統(tǒng)或模塊的某些屬性來估算軟件中潛在的缺陷數(shù)量.可靠性模型中的動態(tài)模型[6-8]是指基于已知故障模式通過概率和統(tǒng)計分布的方法來估算軟件產(chǎn)品的可靠性.
靜態(tài)模型中的系數(shù)是通過以往軟件產(chǎn)品的數(shù)據(jù)估計得到.將感興趣的軟件產(chǎn)品或項目當(dāng)作以往軟件產(chǎn)品或項目總體中的補充觀測.動態(tài)模型的參數(shù)是基于從感興趣產(chǎn)品至今所收集來的多重數(shù)據(jù)點估計出來的,是真正意義上的可靠性模型.所以,產(chǎn)生的模型專用于試圖對其可靠性作出預(yù)測的這個產(chǎn)品.
動態(tài)軟件可靠性模型用于開發(fā)過程和后期測試階段.其中Rayleigh模型是用于開發(fā)過程的典型模型.而指數(shù)模型和其他可靠性增長模型則用于后期測試階段.動態(tài)可靠性模型的相同之處在于它們都采用開發(fā)過程中的時間或其邏輯的函數(shù)來表示.
知識能夠為軟件測試過程提供指導(dǎo).Xu[9]提出了基于知識的軟件測試方法,將導(dǎo)致軟件錯誤的原因歸結(jié)為軟件系統(tǒng)中所使用知識的錯誤以及對相關(guān)知識的使用方式錯誤,并基于實踐分析提出了基于知識的軟件測試方法,能夠有效彌補現(xiàn)有測試技術(shù)充分性和適度性方面的不足.Vijaykumar等人[10]提出了軟件測試參考本體(ROost)的概念,通過識別和重用軟件測試過程中的本體模式,能夠為大量的軟件測試信息賦予語義,從而更好地支持軟件測試過程中的知識管理.
然而,軟件知識對軟件可靠性影響的研究很少.如何描述軟件知識與軟件可靠性之間的關(guān)系,以實現(xiàn)高質(zhì)量的軟件測試,提高軟件的質(zhì)量和可靠性,科學(xué)和定量分析是必要的.因此,本文對軟件知識與軟件可靠性之間的關(guān)系進(jìn)行了估計和研究.
Weibull分布[11-12]在各種工程領(lǐng)域中用于可靠性分析已經(jīng)有十幾年,從深槽球型軸承的疲勞壽命到電子管失效和河流泛濫的發(fā)生.它是3個著名的極端值分布之一.Weibull分布的概率密度逐漸趨向于0,這是它的標(biāo)志性特征.
圖1展示了形狀參數(shù)m取不同值的Weibull概率密度曲線:
圖1 Weibull函數(shù)的幾種典型分布
Weibull分布累計分布函數(shù)和概率密度函數(shù)表示如下.
CDF:
F(t)=1-e-(t c)m;
(1)
(2)
其中,m是形狀參數(shù),c是尺寸參數(shù),t是時間.
Rayleigh模型是Weibull分布家族的一個成員.Raileigh模型是Weibull分布m=2的特殊情況.其CDF和PDF表示如下.
CDF:
F(t)=1-e-(t c)2;
(3)
(4)
指數(shù)模型也是Weibull家族的另一個特例,它的形參m=1.它最適用于單調(diào)下降到漸進(jìn)值的統(tǒng)計過程.它的累積分布函數(shù)(CDF)和概率密度函數(shù)(PDF)如下.
CDF:
F(t)=1-e-(t c)=1-e-λ t;
(5)
(6)
其中,c是尺度參數(shù),t是時間.
在實際工程應(yīng)用中,上述公式需要乘以總?cè)毕輸?shù)量或總積累缺陷率概率K.K是從數(shù)據(jù)集合推導(dǎo)具體模型時用于估計的參數(shù).
從工程實踐觀察到,測試團(tuán)隊的經(jīng)驗和知識水平可以影響測試效率和測試發(fā)現(xiàn)的問題數(shù),一般經(jīng)驗知識水平高的團(tuán)隊能更快更多地發(fā)現(xiàn)問題.而測試發(fā)現(xiàn)問題的規(guī)律是服從一定的數(shù)學(xué)分布的.
Weibull函數(shù)在軟件可靠性領(lǐng)域的應(yīng)用,經(jīng)常用到2個特殊分布,m=2的Rayleigh分布常用于描述開發(fā)階段的缺陷分布,m=1的指數(shù)分布常用于描述系統(tǒng)測試或產(chǎn)品交付后使用階段的故障分布.因為從工程實踐能夠觀察到測試效率和測試發(fā)現(xiàn)問題數(shù)與測試團(tuán)隊的經(jīng)驗和知識水平顯著相關(guān),所以,要探索從Weibull分布出發(fā),分析測試者的知識水平與故障分布的定量關(guān)系.
假設(shè)1:有2個測試團(tuán)隊A和B,團(tuán)隊A的知識量為SA,團(tuán)隊B的知識量為SB.
假設(shè)2:A和B分別對同一個軟件模塊進(jìn)行系統(tǒng)測試,且最終2個團(tuán)隊經(jīng)過經(jīng)驗積累和學(xué)習(xí),均能找出軟件模塊的全部缺陷.
假設(shè)3:被測軟件系統(tǒng)的故障分布服從軟件可靠性領(lǐng)域應(yīng)用的Weibull分布.
為計算簡便,以系統(tǒng)測試階段,Weibull函數(shù)的形狀參數(shù)m=1,即指數(shù)分布函數(shù)為分析案例.
設(shè)故障集合X為測試時間t發(fā)現(xiàn)各類故障模式失效數(shù)之和,即:
(7)
其中,K表示總?cè)毕輸?shù)量,c表示尺度因子.
由于從工程實踐觀察到,測試團(tuán)隊的經(jīng)驗和知識水平可以影響測試效率和測試發(fā)現(xiàn)的問題數(shù).因此,測試團(tuán)隊的知識量與其能發(fā)現(xiàn)的缺陷總量正相關(guān),即:
K=K(S)∝S.
(8)
將式(8)代入式(7)中,得到:
(9)
即,對于某時間t發(fā)現(xiàn)的缺陷個數(shù)X主要與知識量S和尺度因子c有關(guān),即X可通過S和c表達(dá):
X=X(S,c,t).
(10)
對于團(tuán)隊A和團(tuán)隊B,設(shè)團(tuán)隊A的故障概率分布是f1(t),團(tuán)隊B的故障概率分布是f2(t),則有:
(11)
(12)
將式(11)和式(12)分別取對數(shù)后相減,可得:
(13)
(14)
經(jīng)驗知識水平高的團(tuán)隊能更快更多地發(fā)現(xiàn)問題,假設(shè)SA>SB,則由圖2給出的指數(shù)分布函數(shù)以c為參數(shù)曲線簇可知,c1 圖2 缺陷數(shù)X與尺度因子c關(guān)系圖 從圖2可以看出,ΔlnX與|Δlnc|成正比關(guān)系,由于c1 因此,在Weibull分布模型中,軟件知識主要影響尺度參數(shù)c的變化,知識與尺度因子c存在關(guān)聯(lián)關(guān)系,c越小,表明開發(fā)或測試人員已有知識越豐富,需要獲取的知識越少;c越大,表明開發(fā)或測試人員已有知識越缺乏,需要獲取的知識越多.c可以表示為需要獲取知識量的一種量化表達(dá),如式(15)所示: c=λg(D,AD,R,AR,H,I), (15) 其中,D表示軟件知識的概念集,AD表示軟件知識概念的屬性集,R表示知識之間的關(guān)系和規(guī)則,AR表示知識之間關(guān)系的屬性集,H表示軟件知識概念的層次,I為實例集,λ為系數(shù).函數(shù)g()表示軟件開發(fā)或測試人員進(jìn)行軟件開發(fā)與測試工作所需要從知識庫中獲取的知識量的度量,其數(shù)值正比于尺度參數(shù)c. 下面分別從開發(fā)階段和測試階段分析知識對于Weibull分布中尺度因子c變化的影響. 在軟件開發(fā)階段,假設(shè)軟件開發(fā)活動和測試活動持續(xù)進(jìn)行,知識量對軟件開發(fā)階段的測試影響如圖3所示.軟件測試人員所需的知識量對測試有著直接影響.若測試人員對于軟件系統(tǒng)的理解越全面和深刻,所需要引進(jìn)的知識量就越少,尺度參數(shù)c越小,使得軟件故障發(fā)現(xiàn)得越及時和快速,軟件故障排除率上升,有效地提高了軟件可靠性.反之,若軟件測試人員基礎(chǔ)和經(jīng)驗較薄弱,所需要引進(jìn)的知識量就大,尺度參數(shù)c相應(yīng)變大,故障發(fā)現(xiàn)的速率會變慢,時間變長,不利于軟件的開發(fā). 圖3 軟件知識對軟件開發(fā)階段的影響 圖4 軟件知識對系統(tǒng)測試階段的影響 同理,如圖4所示.對于系統(tǒng)測試階段的測試活動,也遵循測試人員需要引進(jìn)的知識量越少,尺度參數(shù)c越小,軟件故障發(fā)現(xiàn)得更加及時和快速,有效地提高了軟件測試效率.反之,若軟件測試人員基礎(chǔ)和經(jīng)驗較薄弱,所需要引進(jìn)的知識量就大,尺度參數(shù)c相應(yīng)變大,軟件故障排除率降低,不利于軟件測試工作的開展. 針對Linux-S操作系統(tǒng),連續(xù)開展10輪系統(tǒng)測試工作,來驗證本文提出的結(jié)論. 10輪次測試的測試用例數(shù)、測試問題數(shù)、更新的故障模式數(shù)統(tǒng)計分析如表1所示.分析結(jié)果如圖5所示. 表1 測試結(jié)果統(tǒng)計表 圖5 測試結(jié)果統(tǒng)計分析 本文測試調(diào)整策略主要包括: 1) 每輪測試都是獨立的; 2) 每輪測試結(jié)束后,總結(jié)發(fā)現(xiàn)問題數(shù),提煉故障模式,形成知識; 3) 每輪測試根據(jù)上一輪新增故障模式,新增測試用例; 4) 每輪測試根據(jù)已有故障模式分布情況,調(diào)整原有測試用例比例. 由圖5可知,隨著測試過程的深入,對產(chǎn)品特性的理解會越來越深,即經(jīng)驗積累,發(fā)現(xiàn)的軟件故障越來越多,在對缺陷進(jìn)行分析之后,不斷發(fā)現(xiàn)新的故障模式,豐富原有知識.根據(jù)每一輪測試,測試問題數(shù)和故障模式隨著測試輪數(shù)的增加,增加速度逐步減少,故障模式最終趨于35,本次實驗所需要的知識逐步完善. 依據(jù)缺陷分布函數(shù)式(7),利用前5輪測試的缺陷模式數(shù)(20,23,26,28,29)來估算Weibull累計缺陷分布F(t)的系數(shù)K和尺度因子c. (16) 采用Matlab工具進(jìn)行仿真和擬合,計算得到K=27.943,c=0.911.擬合結(jié)果如圖6所示: 圖6 前5輪測試缺陷累計分布曲線擬合示意圖 圖7 后5輪測試缺陷累計分布曲線擬合示意圖 利用后5輪測試的缺陷模式數(shù)(32,34,35,35,35)來估算隨著知識積累之后,Weibull累計缺陷分布F(t)的系數(shù)K和尺度因子c,采用Matlab工具進(jìn)行仿真和擬合,計算得到K=34.841,c=0.404.擬合結(jié)果如圖7所示: 將以上2個不同的c值代入式(7)中的缺陷概率密度函數(shù)中,得到如圖8所示2組概率密度曲線: 圖8 不同c值的概率密度函數(shù)示意圖 隨著知識的積累,發(fā)現(xiàn)的缺陷模式越來越多,測試者已有的知識量越來越多,系數(shù)K越來越大,說明測試人員已有知識量越多,需要獲取的知識越少,尺度因子c越小. 本文通過對缺陷密度的Weibull分布分析得出,知識與Weibull分布的形態(tài)緊密相關(guān).從工程實踐觀察到,測試團(tuán)隊的經(jīng)驗和知識水平可以影響測試效率和測試發(fā)現(xiàn)的問題數(shù),一般經(jīng)驗知識水平高的團(tuán)隊能更快更多地發(fā)現(xiàn)問題,在Weibull分布模型中,軟件知識主要影響尺度參數(shù)c的變化,知識與尺度因子c存在關(guān)聯(lián)關(guān)系,c越小,表明開發(fā)或測試人員已有知識越豐富,需要獲取的知識越少;c越大,表明開發(fā)或測試人員已有知識越缺乏,需要獲取的知識越多.尺度參數(shù)c與知識量成反比關(guān)系,可以表示為知識量的一種量化表達(dá),據(jù)此可以依據(jù)知識量與缺陷發(fā)現(xiàn)的分布曲線預(yù)測測試發(fā)現(xiàn)問題的趨勢及軟件的可靠性,從而確定測試結(jié)束時機(jī).2.2 關(guān)系分析
3 實 驗
4 結(jié) 論