徐 立
(1.中國科學(xué)技術(shù)大學(xué) 蘇州研究院, 江蘇 蘇州 215000;2.商丘職業(yè)技術(shù)學(xué)院 軟件學(xué)院, 河南 商丘 476100)
在現(xiàn)代市場中,產(chǎn)品質(zhì)量決定了企業(yè)能否在激烈的競爭中生存下來[1]。軟件產(chǎn)品作為一種特殊的產(chǎn)品,在發(fā)布和交付使用前,需要對軟件的可靠性進(jìn)行預(yù)測和評估,以避免發(fā)布和交付后昂貴的修復(fù)代價(jià)。預(yù)測和評估軟件的可靠性是預(yù)測軟件尚有多少沒有被測試出并修復(fù)的bug。該問題看似簡單,但并不容易解決,因?yàn)槌艘褱y試出的bug這個(gè)隨機(jī)不確定事件外,沒有更多數(shù)據(jù)可以依賴。如果能依賴已測試出并修復(fù)的bug按照某種規(guī)律建立一個(gè)自適應(yīng)和魯棒性強(qiáng)的預(yù)測模型對軟件可靠性進(jìn)行預(yù)測,則將極大提升軟件可靠性,具有重要的研究意義。
通過對以往可靠性模型的文獻(xiàn)進(jìn)行梳理發(fā)現(xiàn):模型是基于非齊次泊松過程(NHPP),且假設(shè)bug檢測率是常量,bug強(qiáng)度正比于剩余bug量,或bug檢測率是一個(gè)增長函數(shù)變量。例如,經(jīng)典G-O模型[2]雖然是后續(xù)研究的重要參考和比對對象,但假設(shè)條件和實(shí)際情況相差較大,實(shí)際情況是bug檢測率并非常量或增長函數(shù)變量,而是一個(gè)下降的函數(shù)變量,因?yàn)榇蟮摹⑽:?yán)重的bug更容易在早期被檢測出。開發(fā)和測試人員的經(jīng)驗(yàn)也表明,測試出的bug檢測率隨著測試時(shí)間的推移會越來越低,通俗的說,在后期測試出bug會更加困難。
除此之外,一些研究為了更好地建模,會將bug檢測的過程假設(shè)為完美的過程,即檢測出的bug在修復(fù)時(shí)不會引入新的bug,但實(shí)際情況并非如此,往往是開發(fā)人員在修復(fù)bug時(shí)會引入新的bug,即排錯(cuò)過程是不完美的。因此,在建模時(shí)考慮排錯(cuò)過程的不完美性更具有實(shí)際意義。最早考慮不完美排錯(cuò)過程的軟件可靠性模型是Pham模型[3],Pham考慮了測試人員的學(xué)習(xí)因子并認(rèn)為bug檢測率與尚未被檢測到的bug成正比。Jha等[4]考慮了不相關(guān)bug所占比例的因素,提出了一種不完美軟件可靠性模型。Ahmad[5]提出了基于指數(shù)分布的不同bug總數(shù)函數(shù)的不完美調(diào)試軟件可靠性模型。Zhang等[6]在建模時(shí)融入測試資源的花銷因素,提出了不完美調(diào)試軟件可靠性模型。 Zhang等[7]把bug總數(shù)函數(shù)看作是測試時(shí)間的函數(shù),同時(shí)考慮到排錯(cuò)過程會引入新錯(cuò)誤,提出了不完美排錯(cuò)可靠性模型。雖然這些考慮不完美排錯(cuò)的軟件可靠性模型能夠有效地應(yīng)用在一定的測試環(huán)境中,但是bug修復(fù)過程中引入的復(fù)雜性導(dǎo)致這些模型不能完全應(yīng)用到其他測試環(huán)境中。
本文考慮了不完美排錯(cuò)和檢測率下降變化的因素,提出了一種軟件可靠性模型(IDDD soft reliability model)。同其他模型相比,所提出模型具有更好的擬合和預(yù)測性能:
1) 考慮了不完美排錯(cuò)和檢測率下降變化的因素,提出了具有更好的擬合和預(yù)測性能的軟件可靠性模型;
2) 提出的bug總數(shù)函數(shù)是一個(gè)非線性變化的函數(shù),且排錯(cuò)時(shí)bug引入的數(shù)量具有非線性變化的特征,能提升可靠性模型的質(zhì)量。
為了方便描述模型及推導(dǎo)過程,使用的模型相關(guān)縮略語和符號說明如表1所示。
表1 模型相關(guān)縮略語和符號說明
軟件可靠性模型建立的公共假設(shè)條件如下:
1) 在軟件測試過程中,bug檢測和修復(fù)過程服從NHPP;
2) 軟件失效發(fā)生是由軟件中剩余bug造成的;
除公共假設(shè)條件外,模型其余假設(shè)條件包括:
3) bug檢測率隨測試時(shí)間呈逐漸下降變化;
4) 每次檢測出的bug立即被修復(fù), 新的bug可能被引入且bug總數(shù)函數(shù)隨測試時(shí)間非線性變化。
本文中使用的符號含義參見表1。NHPP表示為:
n=0,1,2,…
(1)
根據(jù)假設(shè)2)建立微分方程,見式(2)。
(2)
式(2)表示當(dāng)前檢測出的bug數(shù)量和軟件中剩余bug數(shù)量相關(guān)。為方便建模,一般假設(shè)b(t)為常量,即當(dāng)前檢測出的bug數(shù)量和軟件中剩余bug數(shù)量成正比。
根據(jù)假設(shè)3)得到bug檢測函數(shù),見式(3)
(3)
根據(jù)假設(shè)4),a(t)可以表示為
a(t)=a(1+αtd)
(4)
式(4)表示最終檢測出的bug總數(shù)量由軟件中最初期望檢測出的bug數(shù)量和bug引入數(shù)量組成,且引入bug的數(shù)量隨測試時(shí)間非線性變化。
將式(3)(4)代入式(2),得到式(5)。
(5)
(6)
(7)
將式(4)代入式(7),得到
(8)
(9)
式(9)即本文提出的軟件可靠性模型。
實(shí)驗(yàn)設(shè)計(jì)選取2個(gè)常用數(shù)據(jù)集用于評價(jià)和對比IDDD模型的預(yù)測性能和擬合性能。一個(gè)數(shù)據(jù)集是文獻(xiàn)[8]中的實(shí)時(shí)控制系統(tǒng)的失效數(shù)據(jù);另一個(gè)數(shù)據(jù)集來自于Tandem計(jì)算機(jī)系統(tǒng)[9],共包含4個(gè)軟件產(chǎn)品發(fā)布的bug數(shù)據(jù)集,每個(gè)數(shù)據(jù)集分為兩部分:① 用于模型擬合和參數(shù)估計(jì)的部分(前9或7條失效數(shù)據(jù));② 模型預(yù)測性能比較的部分(剩余的失效數(shù)據(jù))。
選用3個(gè)公認(rèn)的評價(jià)指標(biāo)評價(jià)模型的性能。評價(jià)指標(biāo)見式(10)~(12)。
(10)
其中n是總的觀察出的bug數(shù)量。
AIC=-2log(likelihood function at
its maximum value)+2N
(11)
其中N表示模型參數(shù)的數(shù)量。
(12)
式(10)用于評價(jià)模型的擬合性能,SSE值越小擬合性能越好[9];式(11)用于評價(jià)模型的預(yù)測性能,AIC值越小,則模型的預(yù)測性能越好;式(12)用于評價(jià)模型的擬合性,其值越接近1,擬合性能越好[8]。
文獻(xiàn)[7,9-10]提出的模型為考慮了不完美排錯(cuò)因素的可靠性模型,與IDDD模型在數(shù)據(jù)集1上用SSE和Rsquare兩個(gè)指標(biāo)進(jìn)行擬合性能對比。由于3個(gè)對比模型中的參數(shù)估計(jì)采用了最小二乘法,因此IDDD模型也采用最小二乘法進(jìn)行參數(shù)估計(jì),對比結(jié)果見表2。
表2 模型擬合性能比較結(jié)果
文獻(xiàn)[11-12]中,Zhang和Wood認(rèn)為P-Z模型和G-O模型在同其他模型比較時(shí)具有最好的預(yù)測性能,因此,本文選取這兩個(gè)模型與IDDD模型進(jìn)行比較。由于要使用AIC指標(biāo),參數(shù)估計(jì)采用極大似然估計(jì)法。在4個(gè)軟件產(chǎn)品bug數(shù)據(jù)集上的比較結(jié)果見表3~6,其中G-O和P-Z模型的實(shí)驗(yàn)結(jié)果來自文獻(xiàn)[11],驗(yàn)證了結(jié)果的正確性。
表3 使用第1款軟件產(chǎn)品bug數(shù)據(jù)集時(shí)IDDD與G-O、P-Z的比較結(jié)果
表4 使用第2款軟件產(chǎn)品bug數(shù)據(jù)集時(shí)IDDD與G-O、P-Z的比較結(jié)果
續(xù)表(表4)
表5 使用第3款軟件產(chǎn)品bug數(shù)據(jù)集時(shí)IDDD與G-O、P-Z的比較結(jié)果
表6 使用第4款軟件產(chǎn)品bug數(shù)據(jù)集時(shí)IDDD與G-O、P-Z的比較結(jié)果
從數(shù)據(jù)集1上IDDD模型與3種考慮不完美排錯(cuò)因素的模型的比較可以看出:IDDD模型的SSE和Rsquare指標(biāo)明顯優(yōu)于模型1和模型2,略優(yōu)于模型3,尤其Rsquare的指標(biāo)達(dá)到了0.999,說明擬合性較好。在數(shù)據(jù)集2上,IDDD模型與G-O模型、P-Z模型對比主要使用了SSE和AIC兩個(gè)指標(biāo),同時(shí)也計(jì)算了3個(gè)模型的Rsquare指標(biāo)。需要說明的是,與在數(shù)據(jù)集1上的實(shí)驗(yàn)結(jié)果相比時(shí),Rsquare指標(biāo)看似表現(xiàn)較差(表3~6中Rsquare值與1相差較大),這是由于用于模型擬合的失效數(shù)據(jù)過少(只有7條或9條失效數(shù)據(jù)),兩者不具有可比性。在表3中,G-O模型的SSE和AIC值是IDDD模型的25倍和2倍多,P-Z模型的SSE值與IDDD模型接近,但AIC值是IDDD模型的3倍。表4中,G-O模型的SSE值和AIC值分別約為IDDD模型的37倍和4倍。表5中,G-O模型的SSE值和AIC值分別為IDDD模型的5倍和2倍,P-Z模型的SSE和AIC均超過IDDD模型的2倍。表6中,G-O模型和P-Z模型的AIC值與IDDD模型相近,但SSE值分別為IDDD模型的10倍以上和近2倍。表3~6中,IDDD模型的Rsquare值也優(yōu)于G-O模型和P-Z模型。由此可見,IDDD模型的預(yù)測性能明顯優(yōu)于G-O模型和P-Z模型。分析IDDD模型表現(xiàn)優(yōu)秀的原因如下:
1) 提出的模型建立在bug引入為非線性變化的假設(shè)之上;
2) 提出的模型建立在bug檢測率隨測試時(shí)間有下降的變化趨勢的假設(shè)之上;
3) 提出的模型整合了上述兩種假設(shè)的bug檢測率。
本文提出了一種考慮bug檢測率具有下降變化的不完美調(diào)試的軟件可靠性模型,假設(shè)bug引進(jìn)隨測試時(shí)間為非線性變化。采用經(jīng)典的bug數(shù)據(jù)集、3個(gè)模型比較標(biāo)準(zhǔn)、2個(gè)普遍認(rèn)為有較好預(yù)測性能的模型和3個(gè)考慮不完美排錯(cuò)的模型進(jìn)行對比來評測模型的性能。實(shí)驗(yàn)結(jié)果顯示,所提出的模型有較好的擬合和預(yù)測效果,并能更準(zhǔn)確地預(yù)測剩余bug的數(shù)量。假設(shè)具有下降趨勢的bug檢測率和非線性變化的bug引進(jìn)更符合實(shí)際的bug檢測和去除變化情況。因此,本文提出的模型能更有效地在實(shí)際軟件測試中預(yù)測軟件中剩余bug的數(shù)量。
另外,該模型雖然被設(shè)計(jì)用來預(yù)測軟件可靠性,但對于符合故障檢測率呈下降趨勢和不完美排錯(cuò)規(guī)律的硬件產(chǎn)品[12]或設(shè)備[13],也可嘗試作為一種輔助預(yù)測工具。