王金勇, 張 策, 米曉萍, 郭新峰, 李濟洪
1(山西大學 軟件學院,山西 太原 030006)
2(哈爾濱工業大學(威海) 計算機科學與技術學院,山東 威海 264209)
軟件測試和調試是一個復雜的過程,其中,測試者和調試者的能力和技術對軟件故障的檢測和排錯有著重要影響.當一個故障被檢測出來時,調試人員需要用相關的知識去考慮怎樣完全去除和修復故障,而且不要引入新的故障.但是,調試過程會被許多因素影響,例如調試者的技術、調試用的工具、調試環境和調試人員在調試過程中的心理變化等.這些因素都會影響調試人員在去除故障時是否會引入新的故障.人們一般稱在軟件調試過程中,當檢測出的故障被去除時,引進新的故障現象為不完美調試.
在過去的40年里,研究者對不完美調試現象進行相關的研究,而且也提出了許多不完美調試的軟件可靠性增長模型.由于不完美調試情況的復雜性,人們一般把不完美調試過程看做是具有不確定性的隨機過程.另外,在實際的軟件測試過程中,軟件檢測出故障的數量不一定和故障去除的故障數量相等,例如,去除一個已檢測出的故障可能會引入新的故障或者原來的故障沒有被完全去除.也就是說,在不完美調試過程中,故障總個數可能會增加.G-O[1]首先提出了不完美調試的概念,Obha等人[2]在 G-O模型的基礎上提出了故障引進的不完美調試軟件可靠性模型.Kapur等人[3]提出了故障檢測率隨測試時間下降的不完美調試軟件可靠性增長模型.Pham等人[4,5]通過考慮線性引進故障現象和合并多失效類型的故障生成過程,提出了相應的不完美調試的軟件可靠性模型.Zhang等人[6]和Kapur等人[7]分別就軟件調試過程中故障引進的不同形式提出了相應的軟件可靠性模型.另外,Kapur等人[8]通過研究故障檢測和故障去除之間的不同分布情況,提出了兩個一般的框架(framework),并得出了幾個具有NHPP類的不完美調試的軟件可靠性增長模型.Wang等人[9-11]通過對故障引進現象的研究,分別提出了故障引進非線性變化和故障引進了先增后減的不完美調試的軟件可靠性增長模型.另外,王金勇等人[12]還提出了在軟件測試過程中,故障引進率不規則變化的完美調試的軟件可靠性增長模型.謝景燕等人[13]通過對不完美調試過程中引進故障和不完全去除故障的研究,提出了故障排錯率隨測試時間變化的不完美調試的軟件可靠性模型.
雖然上面提到的關于不完美調試軟件可靠性模型在實際測試過程中能夠有效地評估軟件可靠性和預測軟件中存在的剩余故障的數量,但是沒有哪一種模型能夠應用到軟件測試的所有環境下[14].因此,還需要對軟件調試過程中故障引進現象進行深入研究.實際上,故障引進不但可能是線性[4]、指數分布[15,16]或者與故障排錯的數量成正比[7],而且還可能是更復雜的變化,可能受到調試過程中的環境、工具以及調試者的能力和技術等影響.因此,故障引進在軟件調試過程中是一個需要重點考慮的因素.
在本文中,我們用Weibull分布來模型化故障引進過程.Weibull分布有許多優點:第1,與指數分布具有無記憶性相比,它具有記憶性;第2,它可以模型化多種故障數據集,例如模型化左傾(left-skewed)、右傾(right-skewed)或者對稱數據(symmetric data);第3,當形狀參數變化時,它可以有不同的形狀;第4,它可以模型化故障引進強度函數隨時間的變化,例如故障引進的強調函數隨時間具有先增后減的變化或者下降的變化等.因此,考慮在實際的軟件調試過程中,用Weibull分布來模型化故障引進隨測試時間變化的過程,是一種有效的和可行的方法.
另外,用Weibull分布來模型化故障引進現象,與其他方法相比還有其他優勢.例如,用Weibull分布模型化故障引進的現象,可以考慮故障引進率隨測試時間先增后減和逐漸減少的變化趨勢.但是其他一般只能模型化故障引進的一種變化.因此,用其他方法建立的軟件可靠性模型對軟件測試和調試的環境適應性具有一定的限制.而用Weibull模型化故障引進過程建立的軟件可靠性模型則能更好地適應軟件測試和調試的復雜變化.本文中的實驗結果也證明了提出的模型和其他不完美調試的軟件可靠性模型相比,具有更準確的故障擬合和故障預測性能,而且提出的模型能更好地適應不同軟件測試和調試環境下.
· NHPP:非齊次泊松過程;
· SRGM:軟件可靠性增長模型;
· MLE:最大似然估計;
· MVF:均值函數;
· SSE:誤差平方和;
· AIC:Akaike 信息標注.
·a:期望引進故障的總數量;
·b:故障檢測率;
·c:故障檢測率的上邊界;
·d:形狀參數;
·p:故障去除效率;
·α:率參數;
·β:拐點因子;
·r:常量故障檢測率;
·α1:比例參數;
·β1:形狀參數;
·n:實際觀測到的故障數量;
·C:期望檢測出最初故障總數量;
·N(t):隨機變量,即,表示到t時刻為止,檢測出故障的數量;
·a(t):故障內容(總數)函數;
·b(t):故障檢測率函數;
·oti:表示到ti時刻為止,實際觀測到故障的數量;
·m(ti):均值函數,表示到ti時刻為止,期望檢測出故障的數量.
Weibull分布是一個連續的概率分布,以瑞典工程師、數學家Waloddi Weibull的名字命名.
(1) Weibull 概率密度函數可以表示為
其中,f(x;λ,k)是概率密度函數,x是隨機變量,λ是比例參數,k是形狀參數.
Weibull概率密度函數有下列特點.
① 當k<1時,Weibull概率密度函數曲線在隨機變量x逐漸增加時,有急劇下降的趨勢;
② 當k=1時,Weibull概率密度函數曲線在隨機變量x逐漸增加時,有逐漸緩慢下降的趨勢;
③ 當k>1時,Weibull概率密度函數曲線在隨機變量x逐漸增加時,有先增后降的趨勢.
從圖1能夠清晰地看到這種變化.考慮到Weibull概率密度函數的這些特點,可以用來模擬故障引進率先增后減和逐漸下降的過程.
(2) Weibull累計分布函數可以表示為
其中,F(x;λ,k)為Weibull累計分布函數.
Weibull累計分布函數有下列特點.
① 當k=1時,它為指數分布(exponential distribution);
② 當k=2,λ= 2λ時,它為瑞利分布(rayleigh distribution).
從圖 2能夠清晰地看到 Weibull累計分布函數在隨機變量x逐漸增加時發生的相應變化.考慮到 Weibull累計分布函數的特點,因此可以用來模擬故障引進過程.
為了簡化已建立不完美調試軟件可靠性增長模型的復雜性,一般都是假設軟件調試過程中,故障引入率或者為常數,或者故障引入服從指數分布.但在實際軟件調試中,故障引入率有可能不為常數,故障引入可能會受到許多因素的影響,例如調試者的技術和調試的環境等.軟件測試是一個復雜的過程,受到很多外部或內部的因素的影響,不可能建立一種模型把所有的故障引入的因素都考慮進去.因此,綜合考慮故障引入的變化,在實際的軟件調試過程中更有一定的實際意義.
另一方面,Weibull分布有許多優點,例如可以模擬多種其他分布函數形狀,通過Weibull參數的變化,有效地表示實際軟件調試過程中故障引入的復雜變化.所以,用Weibull分布函數來建立不完美調試條件下的軟件可靠性模型還是有一定的實際意義.并且隨著人們對軟件可靠性建模的不斷深入了解和認識,綜合考慮故障引入條件,并通過Weibull分布函數來建立相應的不完美軟件可靠性模型,則更符合軟件可靠性調試的實際情況.
在實際軟件調試過程中,故障引入會發生復雜變化,考慮用其他分布函數來模擬故障引入的情況,不能完全反映故障引入的隨機變化.雖然有的不完美調試軟件可靠性增長模型考慮了指數分布的故障引入情況,但是由于指數分布具有無記憶性,即P(s+t/t)=P(t),和發生的時間s無關.這一性質對于故障引入情況來說,是不符合故障引入的實際變化.也就是說,在實際的調試過程中,故障引入發生的概率會隨著測試時間逐漸變小,而不會與以前的故障引入發生概率相等.由于Weibull分布函數沒有無記憶性的性質,因此,用Weibull分布函數來模擬故障引入的過程會更有效地反映實際的軟件調試過程中故障引入情況.另外,它還可以模擬故障引進率隨測試時間下降、不變和先增后減的變化.
因此,考慮用Weibull分布來模擬故障引進過程是可行、合理的.本文的實驗結果也證明:用Weibull分布來模擬故障引進隨測試時間變化的情況,是建立高質量的軟件可靠性增長模型最好的方法之一.
從以上的分析可以得出,故障引進情況可以用Weibull分布函數來表示.因此,故障內容(總數)函數可以被表示為
其中,a表示最終期望引進故障的總數量,F(t)是故障引進的分布函數,C是最初期望的軟件內存在的故障數量,a(t)是故障內容(總數)函數.
故障引進強度函數可以表示為
假設故障內容(總數)函數服從Weibull分布,即故障內容(總數)函數a(t)與故障引進強度函數可分別表示為
其中,α為率參數,d為形狀參數.
考慮到故障引進過程主要是考察故障引進率隨測試時間發生變化的情況,因此,故障引進強度函數可以改寫為以下形式:
其中,h(t)表示故障引進率函數;[a+C-a(t)]表示到t時刻為止,期望剩余故障引進故障的數量.
在公式(7)中,[a+C-a(t)]是一個隨時間增長而非增長的函數.因此,故障引進強度函數的變化趨勢是由故障引進率的變化決定的.例如在公式(8)中:當d=1時,公式(7)意味著在(t,t+Δt)時間內引進故障的數量和剩余故障引進故障的數量成正比,即故障引進率為常數;當d<1時,故障引進率函數h(t)隨測試時間逐漸下降;當d>1時,故障引進率函數h(t)隨測試時間有逐漸增加的變化趨勢.
提出模型的假設條件如下.
① 軟件失效和故障去除過程遵循非齊次泊松過程(NHPP);
② 軟件失效發生是隨機發生的,發生的原因是由軟件中剩余故障造成的;
③ 每次檢測到一個軟件故障,立即被去除,并且可能引進新的故障;
④ 故障內容(總數)函數服從Weibull分布.
從上面的假設可以看出,假設③和假設④捕獲了在軟件調試過程中,故障引進過程所表現出的變化.
一般來說,基于 NHPP的模型都是假設軟件失效是隨機發生的,在(t,t+Δt)時間內,期望軟件發生失效的數量和期望軟件剩余故障發生的數量成正比[17].這意味著軟件故障檢測率為常量,它可以用以下微分方程來表示:
其中,m(t)表示均值函數,b(t)表示故障檢測率,a(t)表示故障內容(總數)函數.
基于假設③和假設④,故障內容(總數)函數可以表示為
這里的a為期望最終引進故障的總的數量,α為率參數,d為形狀參數,C為期望最初軟件中存在的故障的數量.當t=0,a(0)=C;當t→∞,a(∞)=a+C.公式(10)兩邊求導,得:
從公式(11)可以得到:
① 當d≤1時,故障引進隨測試時間逐漸減少;
② 當d>1時,故障引進隨測試時間有先增后減的變化.
因此,從公式(11)可以得出,故障引進隨測試時間發生變化的情況.
當b(t)=b,把公式(10)帶入公式(9)可得到:
因為公式(12)是一個復雜的微分方程,可以得到近似解為
當k=5時:
公式(13)就是提出的模型的表達式,公式(14)是所用到的提出模型的表達式.從公式(13)和公式(14)可以得到:當t=0,m(0)=0;當t→∞,m(∞)=a+C.
公式(15)兩邊積分得:
當b(t)=b和a(t)=a[1-exp(-αtd)]+C,公式(18)可以轉換成以下形式:
因為麥克勞林公式為
所以可以用公式(20)簡化公式(19),可得:
其中,C1為一個常數.當t=0,m(0)=0時,把它代入公式(24),可得:
取k=5時,公式(25)可得:
為了充分、有效地評估提出模型的擬合和預測性能,本節給出模型比較標準和模型參數的估計方法.我們還用兩個故障數據集進行相應的仿真實驗和模型的置信區間分析.表1列出了在本文中進行比較的所有模型.

Table 1 Summary of some SRGMs and their m(t)表1 軟件可靠性增長模型和m(t)
除了以前使用過的AIC[12]模型評價標準外,在這里還給出了其他模型比較評價標準.
(1) 誤差平方和
其中,n表示故障數據集的樣本大小.SSE值越小,說明模型的性能越好.
(2) Bias評價標準
Bias表示實際觀察到故障值和估計的故障值之差的絕對值之和的平均數,它的定義可以表示為
其中,m(ti)表示到ti時刻為止,期望估計檢測出故障的數量;oti表示實際觀察到故障發生的數量;n為故障數據集樣本大小.Bias值越小,說明模型的性能越好.
(3) Variance評價標準
Variance表示估計偏差的標準差[21],它可以表示為
Variance值越小,說明模型的性能越好.
(4) RMSPE(root mean square prediction error)評價標準
RMSPE表示模型預測出故障發生數量偏差性[21],它可以定義為
RMSPE值越小,說明模型的性能越好.
第 1組故障數據集來自文獻[22],總共用時 22天,86個軟件故障被檢測出來.第 2組故障數據集來自文獻[23],它是一個支持航空飛行器(space shuttle flights)的軟件系統,測試用時38周,231個軟件故障被檢測出來;另外,這個故障數據集包括重要故障(critical errors)、主要故障(major errors)和次要故障(minor errors).第3組故障數據集和第4組故障數據集是Musa[24]收集和整理的,這兩個故障數據集是實際測試(real-world)中得到的,它們的系統代碼分別為4和27,被研究者廣泛用于新建的軟件可靠性模型性能評測中.第3組故障數據集包括測試用時72天,54個故障被檢測出來.第4組故障數據集包括測試用時79天,41個故障被檢測出來.
為了充分地驗證和評估提出模型的擬合和預測能力,我們把故障數據集 1和故障數據集 2劃分為 63%和80%的子故障數據集.也就是說,分別用63%和80%的故障數據集來擬合和估計模型的參數,剩余37%和20%的故障數據集用來預測和評估模型的性能.另外,我們把故障數據集3和故障數據集4劃分為60%和80%的子故障數據集.即,分別用60%和80%的故障數據集來擬合和估計模型的參數,剩余40%和20%的故障數據集用來預測和評估模型的性能.
本文用的參數估計方法是用最大似然估計方法,它可以表示為
為了方便計算,兩邊取對數為通過對l取導數,聯立解方程組,則提出模型的參數(a,b,d,α和C)可以被估計出來(a*,b*,d*,α*和C*):
1) 數據集1(DS1)
從表2可以看到,在用63%的故障數據集時,與其他模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是124.0;其次是DSS模型,為241.6;最差是P-Z模型,為851.6;
· 有關Biaspredict的值方面,提出模型的Biaspredict值最小,僅為 3.5;其次為 DSS模型,為 5.5;最差為 ISS模型和P-Z模型,為10.1;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為 5.1;其次為 G-O模型、Yamada不完美調試模型-1、Yamada不完美調試模型-2、Zhang-Teng Pham模型、Kapur模型-1和Kapur模型-2,都是6.5;最差為ISS模型和P-Z模型,都為21.7;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為6.2;其次為G-O模型、Yamada不完美調試模型-1、Yamada不完美調試模型-2、Zhang-Teng Pham模型、Kapur模型-1和kapur模型-2,都為8.9;最差是ISS模型和P-Z模型,都為23.9;
· 有關AIC值方面,提出模型的AIC值也是最小,僅為76.1;其次為DSS模型,是76.2;最差是Zhang-Teng Pham模型,為93.1.雖然DSS模型擬合得很好,它的AIC值和提出模型的AIC值很接近,但是DSS模型的SSEpredict,Biaspredict,Variancpredicte和RMSPEpredict的值卻遠大于提出模型相應的值.因此,提出的模型在同其他的軟件可靠性模型相比,有更好的故障擬合效果和預測能力.

Table 2 Comparison results of different SRGMs for the first data set (63% of DS1)表2 第1組數據集上不同軟件可靠增長模型的比較結果(63%故障數據)
圖3(a)給出了提出模型使用故障數據集 1的63%進行故障擬合和預測的95%的置信區間,我們也能看出:提出的模型很好地擬合故障數據,并準確地預測了在實際的軟件測試當中,軟件故障發生的數量.另外,在圖3(a)中,實際觀察到的故障數量較好地落在提出模型的 95%上下界中.同時我們也能看到,提出模型有很好的擬合效果和準確的軟件故障預測行為.
圖3(b)給出了提出模型使用故障數據集1的80%進行故障擬合和預測的95%的置信區間,我們也能看出:提出的模型很好地擬合故障數據,并精準地預測在實際的軟件測試當中,軟件故障發生的數量.另外,在圖 3(b)中,實際觀察到的故障數量很好地落在提出模型的 95%上下界中.同時我們也能看到,提出模型有很好的擬合效果和精確地預測軟件故障發生.
從圖3(a)和圖 3(b)可以看出:提出的模型不論是用63%的故障數據,還是用80%的故障數據時,都能很好地擬合軟件故障數據和準確地預測軟件故障發生.因此,可以合理地得出,提出的模型有很好的擬合能力和軟件故障預測能力.
圖3(c)給出了提出模型使用故障數據集 2的63%進行故障擬合和預測的95%的置信區間,我們能看到:提出的模型很好地擬合故障數據,并較好地預測軟件發生故障的行為.另外,在圖3(c)中,實際觀察到的故障數量很好地落在提出模型的 95%上下界中.同時我們也能看到,提出模型有很好的擬合效果和準確地預測軟件故障發生行為.
圖3(d)給出提出模型使用故障數據集2的80%進行故障擬合和預測的95%的置信區間,我們也能看到:提出的模型很好地擬合故障數據,并精確地預測軟件故障發生的數量.另外,在圖3(d)中,實際觀察到的故障數量很好地落在提出模型的 95%上下界中.同時我們也能看到,提出模型有很好的擬合效果和精確地預測軟件故障發生數量.
從圖3(c)和圖 3(d)可以看出:提出的模型不論是用63%的故障數據,還是用80%的故障數據時,提出的模型很好地擬合故障數據,并且準確地預測軟件發生故障的行為.因此,在軟件故障擬合和軟件故障預測方面,提出的模型都有很好性能.
從表3可以看到,在用80%的故障數據集時,與其他模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是 2.9;其次是 DSS模型,為 3.6;最差是G-O模型、Yamada不完美調試模型-1和Kapur模型-1,為49.5;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為0.8;其次為DSS模型和Pham Zhang IFD模型,為0.9;最差為G-O模型、Yamada不完美調試模型-1和Kapur模型-1模型,為2.9;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為1.7;其次為DSS模型,是2.0;最差為ISS模型、P-N-Z模型和P-Z模型,都為5.4;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為1.9;其次為DSS模型,為2.1;最差是ISS模型和P-Z模型,都為5.9;
· 有關AIC值方面,提出模型的AIC值也是最小,僅為95.7;其次為DSS模型,是96.2;最差是Zhang-Teng
Pham模型,為115.1.雖然DSS模型擬合得很好,它的AIC值和提出模型的AIC值很接近,但是DSS模型的SSEpredict,Biaspredict,Variancepredict和RMSPEpredict的值卻大于提出模型相應的值.因此,提出的模型在同其他的軟件可靠性模型相比,有更好的故障擬合能力和預測軟件發生故障的能力.

Table 3 Comparison results of different SRGMs for the first data set (80% of DS1)表3 第1組數據集上不同軟件可靠增長模型的比較結果(80%故障數據)
2) 數據集2(DS2)
從表4可以看到,在用63%的故障數據集時,與其他軟件可靠性模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是848.6;其次是Kapur模型-1,為1328.5;最差是Yamada不完美調試模型-1,為38647.3;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為7.2;其次為G-O模型、ISS模型、P-Z模型、Zhang-Teng Pham模型、kapur模型-1和kapur模型-2,都為9.0;最差為Yamada不完美調試模型-1,為45.7;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為4.1;Zhang-Teng Pham模型也為4.1;其次為G-O模型、ISS模型、Yamada不完美調試模型-2、P-Z模型、Kapur模型-1和Kapur模型-2,都是4.3;最差為DSS模型和Pham Zhang IFD模型,都為31.5;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為8.4;其次為Zhang-Teng Pham,為9.9;最差是Yamada不完美調試模型-1,為53.0;
· 有關AIC值方面,提出模型的AIC值也是最小,僅為116.9;其次為Yamada不完美調試模型-1,是117.1;最差是Pham Zhang IFD模型,為175.1.雖然Yamada不完美調試模型-1擬合得很好,它的AIC值和提出模型的 AIC值很接近,但是 Yamada不完美調試模型-1的SSEpredict,Biaspredict,Variancpredicte和RMSPEpredict的值卻遠遠大于提出模型相應的值.因此,提出的模型與其他的軟件可靠性模型相比,有更好的擬合故障數據的能力和更準確地預測軟件中發生故障的數量的能力.

Table 4 Comparison results of different SRGMs for the second data set (63% of DS2)表4 第2組數據集上不同軟件可靠增長模型的比較結果(63%故障數據)
從表5可以看到,在用80%的故障數據集時,與其他模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是 220.8;其次是Kapur模型-2,為364.0;最差是DSS模型和Pham Zhang IFD模型,為2091.2;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為 4.3;同時,G-O模型、ISS模型、Yamada不完美調試模型-1、Yamada不完美調試模型-2、P-Z模型、Zhang Teng Pham模型、Kapur模型-1和Kapur模型-2都是4.3;其次為P-N-Z模型,為6.9;最差為DSS模型和Pham Zhang IFD模型,為12.2;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為7.3;其次為P-N-Z模型,是7.5;最差為DSS模型和Pham Zhang IFD模型,都為28.4;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為 8.5;P-N-Z模型也為 8.5;其次為Kapur模型-2,為10.8;最差是DSS模型和Pham Zhang IFD模型,都為30.9;
· 有關 AIC值方面,提出模型的 AIC值也是最小,僅為 145.3;其次為Yamada不完美調試模型-2,是 147;最差是Pham Zhang IFD模型,為208.1.雖然Yamada不完美調試模型-2擬合得很好,它的AIC值和提出模型的 AIC值很接近,但是 Yamada不完美調試模型-2的SSEpredict,Biaspredict,Variancpredicte和RMSPEpredict的值卻大于提出模型相應的值.因此,提出的模型在與其他的軟件可靠性模型相比,故障擬合能力和預測軟件發生故障的能力都要好于其他軟件可靠性模型.
3) 數據集3(DS3)
從表6可以看到,在用60%的故障數據集時,同其他軟件可靠性模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是351.37;其次是P-N-Z模型,為419.85;最差是Kapur模型-1,為 65503;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為 3.0;其次為 P-N-Z 模型,為 9.0;最差為Kapur模型-2,為 129.67;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為4.66;其次為P-N-Z模型,為4.73;最差為Kapur模型-1,為98.36;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為5.54;其次為P-N-Z模型,都為5.72;最差是Kapur模型-2,都為129.89;
· 有關 AIC值方面,提出模型的 AIC值也是最小,僅為 148.11;其次為 G-O模型,是 149.41;最差是 Pham Zhang IFD模型,為160.5.

Table 5 Comparison results of different SRGMs for the second data set (80% of DS2)表5 第2組數據集上不同軟件可靠增長模型的比較結果(80%故障數據)

Table 6 Comparison results of different SRGMs for the third data set (60% of DS3)表6 第3組數據集上不同軟件可靠增長模型的比較結果(60%故障數據)
從表7可以看到,在用80%的故障數據集時,同其他模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是6.7;其次是Pham Zhang IFD模型,為17.44;最差是Kapur模型-1為3943.9;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為0.61;其次為Pham Zhang IFD模型,為0.94;最差為Kapur模型-1,為16.57;
· 有關Variancepredict的值方面,提出模型和Pham Zhang IFD模型的Variancepredict的值都是0.84,為最小;其次為DSS模型,是1.14;最差為Kapur模型-1,為2.80;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為1.04;其次為Pham Zhang IFD模型,為1.26;最差是Kapur模型-1為16.8;
· 有關AIC值方面,提出模型的AIC值也是最小,僅為188.67;其次為G-O模型,是190.01;最差是DSS模型,為 198.61.

Table 7 Comparison results of different SRGMs for the third data set (80% of DS3)表7 第3組數據集上不同軟件可靠增長模型的比較結果(80%故障數據)
圖 4(a)和圖 4(b)給出提出模型使用故障數據集 3的 60%和 80%進行故障擬合和預測的 95%的置信區間,我們能看到:估計的故障數量很好地落在 95%的置信區間內,而且提出的模型很好地擬合故障數據,并很好地預測軟件發生故障的行為.
4) 數據集4(DS4)
從表8可以看到,在用60%的故障數據集時,同其他軟件可靠性模型相比,我們能看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是 322.1;其次是 Yamada不完美調試模型-2,為1181.5;最差是Kapur模型-1,為2878.6;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為2.74;其次為 Yamada不完美調試模型-2,為4.63;最差為Kapur模型-1,為29.57;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為1.67;其次是Yamada不完美調試模型-2,為 10.02;最差為 Kapur模型-1,為 60.29;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為3.21;其次為Yamada不完美調試模型-2,是11.04;最差是Kapur模型-1為67.15;
· 有關AIC值方面,提出模型的AIC值也是最小,僅為 101.76;其次為G-O模型,是 102.58;最差是Pham Zhang IFD模型,為131.24.提出的模型在與其他軟件可靠性模型相比,有更好的故障擬合和預測性能.

Table 8 Comparison results of different SRGMs for the fourth data set (60% of DS4)表8 第4組數據集上不同軟件可靠增長模型的比較結果(60%故障數據)
從表9可以看到,在用80%的故障數據集時,與其他模型相比,我們能夠看到:
· 有關SSEpredict的值方面,提出模型的SSEpredict的值最小,是 59.42;其次是 Yamada不完美調試模型-1,為335.56;最差是Yamada不完美調試模型-2,為16269;
· 有關Biaspredict的值方面,提出模型的Biaspredict的值最小,僅為1.71;其次為 Yamada不完美調試模型-1,為4.37;最差為Yamada不完美調試模型-2,為31.08;
· 有關Variancepredict的值方面,提出模型的Variancepredict的值最小,為3.45;其次為Yamada不完美調試模型-2,是7.37;最差為Pham Zhang IFD模型,為13.72;
· 有關RMSPEpredict的值方面,提出模型的RMSPEpredict的值最小,僅為3.85;其次為Yamada不完美調試模型-1,為10.11;最差是Yamada不完美調試模型-2,都為31.94;
· 有關 AIC 值方面,提出模型的 AIC值也是最小,僅為 124.98;其次為 Yamada不完美調試模型-2,是128.07;最差是Pham Zhang IFD模型,為166.81.提出的模型在同其他的軟件可靠性模型相比,故障擬合能力和預測軟件發生故障的能力都要好于其他軟件可靠性模型.

Table 9 Comparison results of different SRGMs for the fourth data set (80% of DS4)表9 第4組數據集上不同軟件可靠增長模型的比較結果(80%故障數據)
從圖4(c)和圖 4(d)可以看出:提出的模型不論是用60%的故障數據,還是用80%的故障數據時,估計的故障數據都很好地位于 95%的置信區間內;另外,提出的模型也很好地擬合故障數據,并且準確地預測軟件發生故障的行為.因此,無論是在軟件故障擬合還是在軟件故障預測方面,提出的模型都有很好的性能.
從以上的實驗結果可以看到,提出的模型性能明顯優于其他模型,包括完美調試模型和不完美調試模型.
提出的模型優于其他模型的機理分析如下.
① 考慮故障引進的情況,是提出的模型性能優于完美調試模型性能重要原因之一.
例如,完美調試模型包括G-O模型、DSS模型和ISS模型.由于軟件測試和調試的復雜性,例如有客觀因素——測試環境的多樣性和軟件編寫的復雜性,有主觀因素——測試者或調試者的技術以及心理因素等,故障引入很大程度上是由于軟件復雜性造成的(客觀因素),以及調試者對軟件復雜性沒有深刻認識(主觀因素),另外也與調試者的技術也有一定關系(主觀因素).當軟件發布日期臨近時,調試者的心理也會產生巨大壓力,調試者的心理也會發生巨大變化(主觀因素),在這種壓力下,當檢測出的故障被去除時,很可能引進新的故障.考慮故障被完全去除,而沒有引進故障的假設是完全不符合實際的故障被去除的情況.因此,用完美去除故障的假設來建立軟件可靠性模型在與我們提出的不完美調試模型進行性能比較時,考慮故障引進的情況,是提出模型的性能優于完美調試模型性能重要原因之一.
② 考慮故障引進多種變化的情況,是提出模型性能優于其他不完美調試模型性能的重要原因.
例如,其他不完美調試模型包括Yamada不完美調試模型-1、Yamada不完美調試模型-2、P-N-Z模型、P-Z模型、Zhang-Teng Pham模型、Pham Zhang IFD模型、Kapur模型-1和Kapur模型-2,由于故障引進的復雜性,故障引進率可能表現為隨著測試時間逐漸下降,或者故障引進率隨測試時間表現為先增后減的變化,或者故障引進隨測試時間無規律變化等.其他不完美軟件調試模型只考慮故障引進率的一種變化,不是為常數就是隨測試時間下降,完全沒有考慮到故障引進的其他變化.而我們提出的模型可以考慮故障引進率為多種變化,既可以為隨測試時間下降,還可以隨測試時間有先增后減的變化.因此,提出的模型更能適應復雜的測試和調試的情況,有更強的魯棒性和穩定性,不易受到故障數據集噪音的干擾.而其他的不完美調試模型則受限于故障引進率的單一變化,在某些情況下會表現的很不穩定,適應性和魯棒性也會很差.因此,考慮故障引進多種變化的情況,是提出模型性能優于其他不完美調試模型性能的重要原因.
③ 考慮故障引率非線性變化,是提出模型性能優于其他不完美調試模型性能的另一個重要原因.
為建模方便,Zhang-Teng Pham模型、Pham Zhang IFD模型、Kapur模型-1和Kapur模型-2假設故障引進率為常量;Yamada不完美調試模型-2和P-N-Z模型也假設故障引進率為常量,并且故障內容函數(故障總個數)隨測試時間線性變化.由于故障引進的復雜性,故障引進率極有可能表現為非線性變化,而不是線性變化或者常量.而我們提出的模型正是假設故障引進服從 Weibull分布,故障引進率隨測試時間表現為非線性變化.雖然Yamada不完美調試模型-1和P-Z模型的故障引進率都隨測試時間表現為非線性變化,但是由于Yamada不完美調試模型-1是假設故障引進率隨測試時間逐漸增長,這種情況與實際調試情況不符.因為在軟件測試過程中,引進的故障會越來越少,所以故障引進率不會隨測試時間逐漸增長.另外,P-Z模型假設故障引進服從指數分布,但是由于我們提出模型假設故障引進服從Weibull分布包含指數分布的特殊情況,所以我們提出的模型能更好地適應軟件測試和調試情況,提出模型的性能也會好于Yamada不完美調試模型-1和P-Z模型的性能.
綜上所述,提出的模型優于其他模型的原因為:一是提出的模型考慮故障引進的情況,更符合實際的軟件測試和調試過程;二是假設故障引進服從Weibull分布,能夠包括更多在軟件測試和調試過程中故障引進率變化情況;三是假設故障引進率非線性變化更符合故障引進隨測試復雜變化的情況.
一般來說,模型的參數比較多時,需要進行模型的參數敏感性分析[25].主要目的是考察哪些參數對模型的評估效果和預測有重要影響,也就是考察一下模型的魯棒性(robust).而具體使用的方法就是改變模型的某個參數值,模型其他參數則保持不變.圖5(a)~圖5(e)顯示出提出模型的參數a,b,α,d和C的敏感性分析的情況.
從圖5(a)、圖5(b)和圖5(e)中可以清晰地看到,提出模型期望估計的累計檢測出的故障數量隨著期望最終引進故障的數量a、故障檢測率b和期望最初存在軟件中的故障數量C的變化而大幅度地發生變化.因此,提出模型的參數a,b和C都是有影響的參數.
本文介紹Weibull分布的相關概念和表示方法,然后分析在軟件調試過程中,故障引進服從Weibull分布的原因.在此基礎上,用Weibull分布進行故障引進過程的相應模擬,并提出一個基于Weibull分布引進故障的軟件可靠性增長模型,同時給出相應的模型推導過程.為了驗證提出模型的擬合故障數據和預測軟件中故障發生數量的能力,本文給出了相應的故障數據集和有關的模型性能比較標準,并對提出的模型用最大似然估計法進行相應的模型參數估計.實驗結果表明:提出的模型在與多種軟件可靠性增長模型(包括完美調試軟件可靠性增長模型和不完美調試軟件可靠性增長模型)比較后,有更好的故障擬合效果和更準確地預測軟件故障發生數量的能力.為了考察提出模型的參數變化對軟件可靠性評估和軟件故障預測的影響程度,我們也給出相應的參數敏感性分析.參數敏感性分析實驗的結果表明,提出模型的參數a,b和C都是有影響的參數.
考慮到實際測試過程中檢測到的故障不是被立即和完美地去除,而是在檢測和去除故障之間會存在時間延遲,在去除故障時可能引進新的故障,因此,未來的研究將在本文研究的基礎上,就故障排錯延遲問題進行深入研究.
致謝在此,我們感謝審稿專家對本文提出的寶貴建議.