張 策 , 劉宏偉 , 白 睿 , 王瞰宇 , 王金勇 , 呂為工 , 孟凡超
1(哈爾濱工業大學(威海) 計算機科學與技術學院,山東 威海 264209)
2(哈爾濱工業大學 計算機科學與技術學院,黑龍江 哈爾濱 150001)
3(山西大學 軟件學院,山西 太原 030006)
軟件作為人工制品,是多類型軟件開發人員協同完成的系統.由于軟件是對物理系統和過程的計算機編程語言描述,因此其實際功能與預期成效很可能存在不一致之處.例如,軟件自身隱藏的錯誤(error)在特定情況下可能會導致故障(fault),而故障可能會導致失效(failure):軟件的缺陷(defect 可能是設計或編碼時引入)在運行時會產生錯誤,當錯誤或故障積累到一定數量,或者達到某種條件時都會造成軟件系統的失效.因此,軟件的質量問題至關重要,尤其是可靠性問題,長久以來一直得到研究人員的關注.
可靠性作為軟件的非功能質量屬性,其可以通過軟件可靠性增長測試這一重要途徑來不斷獲得提高.軟件測試過程中,基于故障不斷被檢測并修復進而使得軟件可靠性持續獲得增長的事實,為可靠性研究提供了有效的切入點.軟件可靠性增長模型SRGM(software reliability growth model)[1,2]從軟件失效的角度進行可靠性的建模,采用以微分方程(組)為主的數學手段建立軟件測試過程中的若干個隨機參量(例如測試時間、累積檢測的失效或修復故障個數、測試工作量TE(testing-effort)等參量)之間的定量函數模型.基于求解獲得的累積檢測故障數量函數表達式(通常以m(t)作為標記),可以獲得測試階段的可靠性.因此,建立能夠準確地描述真實隨機測試過程的累積檢測故障數量函數m(t)成為了SRGM 研究的關鍵.目前,SRGM 已成為度量、預測與管控成本支出下可靠性的重要技術[3,4],是管控可靠性與系統發布的常見工具.文獻[5]即闡述了一種基于當前軟件調試工作流的特征進行可靠性增長分析的方法DWA-SRGM,其可指出影響產品評估的因素與瓶頸,從而支持流程改進決策.
而在整個可靠性的研究中,故障檢測率FDR(fault detection rate)作為累積檢測故障數量的主要影響因素,是建立可靠性增長模型的關鍵要素,因此,其是提高可靠性所需考察的重要問題.經過多年發展,FDR 以及其支持的可靠性研究取得了重要進展.目前,國內外尚沒有對FDR 進行全面述評的綜合性分析文章.本文在作者前期大量工作[1,2,6,7]的基礎上,基于國內外研究情況進行悉心梳理,從問題起源與功用、相關區別與聯系、綜合分類討論、不完美排錯下模型性能差異性分析等視角對FDR 進行了全面述評,并進行了大量的實驗驗證,進而給出后續研究趨勢和需要解決的問題,以期為研究人員提供有價值的參考與借鑒,促進可靠性研究取得新進展.
本文的貢獻著重體現在對如下4 個問題進行了深入回答.
(1) 對FDR 進行了全面深入的研究性論述,對FDR 在可靠性研究中的功能、地位、作用和成效進行了深刻闡述,這在當前可靠性研究中尚屬首次;
(2) 厘清了FDR 與失效強度、風險率/冒險率的區別與聯系,從數學角度提出并證明了FDR 與測試覆蓋函數關系的重要定理;
(3) 拓展了FDR 的研究內涵,提出了典型的不完美排錯環境下FDR 相關的軟件可靠性框架模型;
(4) 通過在大量的真實應用場景上的綜合實驗,深入分析了FDR 效用以及對可靠性模型的影響,為研究和選擇FDR 提供了有重要借鑒意義的參考.
本文第1 節對以SRGM 為核心的可靠性進行概要介紹,引出故障檢測率FDR.第2 節從可靠性模型構建視角給出FDR 的定義,從多個角度闡釋其功用.第3 節重點剖析FDR 與失效強度、風險率/冒險率的區別與聯系.第4 節給出分類視角下的FDR 構成.第5 節重點對FDR 性能及其對SRGM 的影響進行分析,提出不完美排錯框架模型,通過數值分析研究模型的差異性.最后指出后續研究的趨勢與需要解決的問題,并給出結論.
軟件開發過程中具有大量復雜的隨機性與不確定性,隨著研究人員對測試過程的不斷深入認識,SRGM 的研究持續至今.SRGM 具備描述測試過程中失效發生、故障檢測和修復等動態特征,其刻畫了軟件的一種故障行為.由于SRGM 建立了故障失效個數與可靠性間的數學關聯模型,因此,利用SRGM 就可以計算特定時刻與可靠性緊密相關的參數指標,包括失效個數、失效率、失效間隔以及可靠性等;進而,可以對測試資源進行動態的調配,預測當前測試環境下軟件達到預期目標(例如可靠性)時所需要的時間(被稱為發布時間)、成本(被稱為發布成本)等重要信息.
在研究內容上,從突破早期完美排錯的限制,到僅考慮到新故障引入的研究,以及考慮測試工作量或測試覆蓋率的NHPP 類軟件可靠性建模框架的研究,再到涵蓋不完全排錯與新故障引入等各類不完美排錯的研究,進一步拓展至變動點問題、測試資源分配問題、最優發布問題等,越來越多的可靠性模型得以建立.在求解方法與技術上,從建立單一微分方程(組)的簡單或復雜的解析式方法,擴展到非解析式方法、排隊論技術和最優化方法,進而采用離散事件仿真與非參量求解方法等,這些正在推動軟件可靠性研究不斷走向深入.圖1 對SRGM 的建模與功用進行了展示.
若SRGM 將軟件測試過程視為若干個隨機過程的統一,失效發生后,測試工作量TE 被定量地消耗用以進行故障的檢測、隔離、排除等.隨著測試的不斷進行,軟件中的故障不斷減少,從而軟件可靠性得到不斷的增長.軟件可靠性能夠通過軟件可靠性增長模型SRGM 進行有效度量與預測.目前,SRGM 得到了快速的發展,現已被廣泛應用,成為定量評估軟件可靠性的數學工具.圖2 對SRGM 的建模流程進行了歸納.
在代表NHPP(non-homogeneous Poisson process,即非齊次泊松過程)類SRGM 研究起源的經典G-O 模型[8]中,Goel L 與Okumoto K 建立了類似于下面的微分方程:
該微分方程具有更一般性,其假設認為,t時刻累積檢測的故障數量dm(t)/dt與此刻軟件中剩余的故障數量(a(t)-m(t))成正比例,比例系數b(t)為該時刻的故障檢測率FDR(fault detection rate).顯然,當b(t)=b,a(t)=a時,公式(1)轉化為G-O 模型,該模型雖忽視了故障修復與新故障引入情況,但卻成為日后研究連續性NHPP 類SRGM 中共同被遵守的事實.這其中,FDR 的表現形式是b(t),從宏觀上對故障檢測能力進行描述,但并未指出支撐故障檢測能力的構成.并且,G-O 模型認為FDR 為常量(在軟件測試的過程中保持不變),這顯然與真實的測試過程差異較大.此外:文獻[9]建立了一個非齊次泊松過程類軟件可靠性增長模型——Bbell-SRGM;文獻[10,11]提出了結合軟件運行環境中每單位時間故障檢測率的不確定性的軟件可靠性模型;文獻[12]提出了具有時間相關性噪音影響下的NHPP 類SRGM;文獻[13]提出了一種基于Weibull 分布引進故障的SRGM,使軟件可靠性增長模型更加符合實際的軟件故障檢測過程,具有重要的理論意義和實際價值;同時,文獻[14]利用基于深度循環神經網絡(RNN)編碼器-解碼器的深度學習模型來預測軟件中的故障數量并評估軟件的可靠性;文獻[15]推導了一種可以在軟件開發和運行的各個階段提供良好的軟件可靠性預測的模型,提供了更好的預測性能;文獻[10,11,16]還提出了用于比較SRGM 擬合優良性的諸多標準,例如均方誤差MSE、預測率風險PRR、預測能力PP 以及赤池信息量準則AIC,為SRGM 擬合度評估提供了有效方法.
特別指出,本文研究遵從SRGM 研究領域中的默認規定.
(1) “error(錯誤)”[17],“defect(缺陷)”[18],“fault(故障)”[19,20]以及“failure(失效)”[21]并沒有被嚴格區分,表示的含義是等價的,這與容錯研究中對“defect→error→fault→failure”進行嚴格區分是不同的.這是因為SRGM 研究中隱含著由缺陷、錯誤到失效的一一對應關系,因而將其等同看待;
(2) 這里并不區分修正、改正、修復、排除,四者均表示故障被排除掉.
在當前所建立的眾多SRGM 中,均包含“在t時刻這一當前時間點上,累積檢測到的故障數量m(t)與當前軟件中剩余的故障數量成正比例”這一基本假設,此比例系數被稱為故障檢測率FDR(fault detection rate,習慣用b(t)來表示).因此,軟件中全部初始故障數量a(t=0)=a和故障檢測率函數FDRF(fault detection rate function,通常用b(t)加以表示)是影響SRGM 的重要因素[20],這已成為SRGM 研究中的共識.圖3 展示了經典的完美排錯G-O模型的建模過程,其中的FDRF 為常量b.
在可查證的SRGM 研究文獻[17-20,22-29]中,FDR 是SRGM 建模中必不可少的參數,其描述了故障被檢測出來的能力,同時也是對測試效能的一種描述.
定義(故障檢測率FDR).即故障檢測率函數,表示當前時刻單位時間內單個故障被檢測到的平均概率[9],或每個故障的查出率[30],通常用b(t)來表示.
FDR 表征了測試環境下故障被查出的效率,具有描述綜合測試策略的能力,因而與包括測試人員、測試技術、測試工具等構成的整體測試環境緊密相關.
從早期提出將FDR 看作常數的軟件可靠性增長模型,到提出整體呈現遞減趨勢的冪函數類型FDR,再到能夠基本刻畫測試環境平緩變化的S型FDR,以及(復雜)指數類型FDR 的研究,整體上,對FDR 的研究方向呈現出貼近工程實際化特點,因而能夠更好地描述測試環境的改變,幫助提高可靠性模型的性能.
測試過程的目的是不斷發現與修復故障,提高可靠性,達到預期(發布)要求.客觀上,測試環境的不同,以及測試人員實施測試策略的差異,將使得不同系統工程在測試中表現出不同的外在特征.從建立數學模型的角度來看,公式(1)描述了測試過程中關于故障檢測的共性,但不同模型的區別與FDR:b(t)關聯緊密.可見,FDR 能夠從整體上刻畫測試效果,這使其成為影響SRGM 性能的主要評測點.
關于對FDR 影響因素的研究,Huang 在他的一系列文獻[31,32]中指出:測試初始階段,很多故障可以被檢測出來,測試FDR 依賴于故障發現效率、故障密度、測試工作量、檢出率這些參數;中期階段,FDR 通常還依賴于上述因素以外的其他因素,包括CPU 指令的執行率、失效與故障間關聯、代碼膨脹系數、測試團隊技能、程序規模、軟件可測試性,以及每日歷天預定的CPU 執行小時等因素.因此,當需求發生改變和新的特征被添加,或者修復期間有新故障引入時,FDR 可能會發生改變.此外,考慮到故障檢測的隨機性和復雜性,即針對其是具有較強不確定性的概率事件這一方面,文獻[9]提出了一個響鈴形的故障檢測率函數,文獻[33]考慮了受操作環境影響的系統故障檢測率,文獻[34]提出了一種隨時間不規則變化的故障檢測率,均體現了其突變性.
2.2.1 從FDR 角度研究CP
在關于移動點/拐點CP(change-point)的研究上,也均將FDR 作為分段研究實施的對象.由于FDR 刻畫了整個測試環境下的綜合測試效果,因而當測試環境發生變化與轉折時,FDR 就會有所變動.這樣,將FDR 進行數學上的CP 處理[35-38](即CP 前后FDR 函數形式發生變化)成為考慮CP 的SRGM 研究慣例.
由于FDR 與測試環境下的失效分布情況等多因素有關聯,而失效分布又會受到例如運行環境、測試策略和資源分配等[32]多種因素的影響.因此,當測試策略和測試資源分配發生變化時,CP 就會出現.此外,增加對程序的認識和自動化測試工具的運用也會引發CP.因此,FDR 在整個測試過程中會發生改變.
2.2.2 從FDR 角度研究測試環境與運行環境差異
此外,在考慮測試與運行環境的差異研究上[27,39],差異點也是從FDR 角度來進行研究的,相關的研究還涉及故障減少因子[20,40-43]、學習效果[17]、測試壓縮因子[44]、測試覆蓋率[45,46]等.事實上,CP 具有描述測試環境與運行環境差異性的能力.
FDR 的構成上,存在著b(t)=b,b(t)=b2t/(1+bt)[26,47],[49]等多種函數形式,基本情況見表1.

Table 1 Fault detection rate function b(t)表1 故障檢測率函數b(t)
圖4 給出了表1 中5 類b(t)的基本形狀,其中設定b=0.35,α=0.25,β=0.15,t∈[0,20],僅用以展示曲線形狀.
FDR 是與時間相關的故障檢測率函數,用以表示單位時間內故障被發現的概率.為了深入研究,b(t)有時被研究人員設定為t的某種函數.
失效強度通常用λ(t)表示,即在t時刻單位時間內失效發生的次數,在SRGM 的研究中用以表示累積故障檢測數量的導數,即λ(t)=.可見,λ(t)是跳躍強度函數,即,在時刻t單位時間內失效發生的次數.如果故障出現導致失效發生而立即被發現的話,b(t)=z(t);否則二者并不相等.
風險率即風險函數(hazard function),通常用h(t)表示,即:程序正確地運行到時刻t時,發生故障的概率.h(t)是每個故障失效發生率或冒險率[50],即“瞬時失效率”.事實上,h(t)作為“瞬時失效率”是一種冒險率.失效率的定義是
對上式求Δt的極限,求得的就是冒險率,即“瞬時失效率”.可見,冒險率或“瞬時失效率”是失效率的一種時間上的逼近.
“設T表示從0 開始運行一個程序,到程序發生失效為止經歷的時間”,T是失效時間的獨立隨機變量,其失效分布函數和失效密度函數分別為F(t)和f(t),則可得如下兩式:
則可以得到R(t+Δt)的表達式、R(t)的導數與h(t)和R(t)的關系如下:
因此,求解上式可得.顯然,R(0)=1;R(∞)=0.
綜上,我們可以得出:故障檢測率FDR、失效強度以及風險率/冒險率均為可靠性相關指標,三者均與程序運行環境中的多因素(例如程序規模、故障密度、故障測試效率、測試工作量、CPU 指令的執行率、代碼膨脹系數等)相關聯.故障檢測率b(t)與失效強度λ(t)和風險率/冒險率h(t)均成正比例關系.具體討論如下。
(1) 故障檢測率b(t)描述了測試人員在測試策略的指導下采用合適的測試案例和測試方法檢測出故障的能力,其與t時刻點上的測試覆蓋率c′(t)成正比例,是測試覆蓋c(t)的函數,可表示為b(t)=c′(t)/(1-c(t)),與可靠性R(t)直接相關;
(2) 失效強度可用于描述t時刻累積檢測的故障數量m′(t),其與此刻軟件中剩余的故障數量(a(t)-m(t))成正比例,比例系數b(t)為該時刻的故障檢測率FDR.則根據G-O 模型的基本假設,可得失效強度λ(t)與故障檢測率b(t)的關系如下式:
(3) 風險率/冒險率描述了程序正確地運行到時刻t時發生故障的概率,其側重于每個故障失效發生率或冒險率[37],即“瞬時失效率”,為失效率的一種時間上的逼近.在SRGM 研究中,根據上述公式(7)的表示以及假設條件可知:風險函數h(t)與失效強度λ(t)相等,即h(t)=λ(t).從而根據G-O 模型的基本假設,可進一步得到風險函數h(t)與故障檢測率b(t)的關系如下式:
同時,文獻[51]認為測試覆蓋下的故障以常量概率k被檢測出來,從而可推導出:
則h(t)為:
此時,即可得到風險函數或每個故障的失效發生率h(t)與故障檢測率b(t)相等,即b(t)=h(t).
軟件測試過程中,隨著測試用例的不斷執行,測試覆蓋的范圍不斷擴大,故障被檢測出的可能性不斷提高.測試覆蓋范圍的擴大,使得被檢測出的故障數量增多,因此,測試覆蓋函數與故障檢測率關系密切.測試覆蓋TC(testing coverage)指測試系統覆蓋被測試系統的程度,描述了測試與被測試對象之間的相關性[52],測試覆蓋率較高的程序在測試過程中執行了更多的源代碼.這里,從代碼語句覆蓋的角度來看,可以定量表示為公式(11)所示:
其中,Sc是測試案例覆蓋的KLOC(kiloline of code),St是全部KLOCs.
當考慮時間因素時,TC就演變為隨測試時間變化的測試覆蓋函數TCF(testing coverage function):c(t),可用以描述測試覆蓋率的變動情況.顯然,c(t)是一個非負的且非降的函數.
4.1.1 測試覆蓋函數起源——采用設定FDR 與測試覆蓋率成比例的間接視角
針對上述公式(11)的來源,文獻[51]最早給出了嚴謹的分析,其認為測試覆蓋下的故障以常量概率k被檢測出來,從而建立了下面的微分等式:
其中:a0表示初始時軟件中的故障總數;cd(t)表示t時刻測試覆蓋下故障被檢測出的概率,按照假設,得到cd(t)=k常量.這樣,令a0k=a,則得到m(t)=ac(t),進而基于的事實,可推導出:
則冒險函數(the hazard function)或每個故障的失效發生率(the failure occurrence rate per fault)h(t)為
這樣,在通常情況下可認為b(t)=h(t).通過上述得到的m(t)=ac(t),可以看出,這里就直接建立了m(t)與c(t)的關聯.為此,將現有各種m(t)函數表達式改寫成m(t)=ac(t)形式,即可獲得相應的c(t)函數.
顯然,對于完美的測試覆蓋,c(t)是t的增函數,且滿足c(0)=0,c(∞)=1.
4.1.2 測試覆蓋函數起源——采用與SRGM 和TEF 建模相同的直接視角
c(t)的建立是基于下面的假設:任意t時刻的測試覆蓋率與當前剩余的測試覆蓋值成比例.這樣,可以得到下面的微分方程:
其中,α是可獲得的測試覆蓋目標值,考慮到測試后期軟件中未覆蓋代碼的難以測試性,其滿足0<α<1;β(t)為比例系數,也被稱為測試覆蓋成熟率,滿足β(t)>0.β(t)與測試人員的技能緊密相關,因而假定測試案例設計人員的測試技能隨著測試覆蓋率的增長而增加.這樣,β(t)被定義為
其中,r=bini/bsta,bini和bsta分別是初始和穩態時測試案例設計人員的測試技能因子.公式(16)式的初始條件為c(t)=0,這樣可求得:
其中,β=(1-r)/r.這樣,當r=1 時,c(t)呈現指數增長趨勢;當r=0 時,c(t)呈現S型增長趨勢;其他情況下,c(t)受制于多種因素,變化趨勢較為復雜.可以看出,這種建模方法和獲得測試覆蓋函數的思路與對SRGM 和TEF 的建模是完全一致的.在我們前期的研究[1,7]中已分別對SRGM 和TEF[6]的建模進行了綜合研究,這里不再贅述.相應地,另一種融入測試覆蓋的NHPP 可靠性增長模型被建立如下:
其中,b是每個故障與每個可獲得測試覆蓋下的故障檢測率,在m(0)=0 的初始條件下,可求得:
易見:當c(t)=1 時,模型演變為經典的G-O 模型.這也意味著,G-O 模型假定測試覆蓋滿足100%.
4.1.3 基于測試覆蓋函數的SRGM 建模
c(t)表示截止至t時刻,已被測試的代碼或案例所占的百分比(原表述不清晰);1-c(t)表示到t時刻,尚未被測試的代碼所占的比例.顯然,c(t)的導數c′(t)表示t時刻時的測試覆蓋率.易知,FDR 與c′(t)成正比例,且與1-c(t)成反比例.這樣,文獻[11,40]認為c′(t)/(1-c(t))可被用來度量t時刻的故障檢測率b(t):
因為基于c(t)的SRGM 研究通常以下面的公共假設[19,53,54]為基礎,從而依據這些假設可建立公式(21)所示的微分方程,其可用以描述測試過程中故障檢測與測試覆蓋的基本關系:
相比于基于故障檢測率進行SRGM 研究的事實,易知很多研究中對b(t)的函數形式進行直接設定會引發更多的隨機性.上式b(t)從測試覆蓋函數TCF:c(t)進行定義,由于測試覆蓋可借助測試用例執行經過的結構或數據流單元[55]來度量,這使得FDR 的函數形式依賴于從測試覆蓋角度進行確定的結果,如公式(22)所示:
4.1.4 測試覆蓋函數與故障檢測率函數和可靠性的關聯
在提出Logistic TEF[56,57]用以描述TE 消耗的基礎上,有先增后減變化趨勢的S型函數又被用以刻畫測試覆蓋率函數[58-60],并與SRGM 結合來度量可靠性.由于TC表征了被測試代碼的比例,易知該比例的升高會使得更多的故障被檢測出來,進而隨著故障的修復,可靠性將得到提高.可見,c(t)與t時刻的可靠性R(t)具有一定的定量關系,而探討二者之間的關聯在可靠性研究中[53-55,61-63]已持續十余年.可以看出:故障檢測率b(t)直接描述了測試環境下故障被檢測出的一種概率,其是測試人員在測試策略的指導下,采用合適的測試案例或測試方法對故障進行檢測的能力描述;測試覆蓋c(t)注重于測試過程中測試代碼對被測試軟件/源代碼的覆蓋程度.
這樣,易知故障檢測率是測試覆蓋的函數,即b(t)=f(c(t)),例如b(t)=c′(t)/(1-c(t)).表2 即給出了典型的測試覆蓋函數與故障檢測率函數,并對二者的關聯進行了初步分析.

Table 2 Typical test coverage function and fault detection rate function表2 典型的測試覆蓋函數與故障檢測率函數
顯然,隨著測試的進行,c(t)不斷增長,但由于b(t)與c(t)之間關系較為復雜,b(t)的變化形式難以直接預測.從定量關系上來看,b(t)與c(t)都在[0,1]之間,這里以為例,提出如下定理.
定理.當β與α的大小關系確定時,b(t)與c(t)存在明確的大小關系.
證明:b(t)=c′(t)/(1-c(t)),c(t)=c(t)(1-c(t))/(1-c(t)),令z(t)=b(t)-c(t)=[c′(t)-c(t)-c2(t)]/(1-c(t)).對c(t)求導數可得:
令z(t)=0,e-bt=x,因上式分母恒大于0,且α≠0,上式可轉化為
化簡得:Δ=(b2+1)(1+β)2+2b(1+β)(1-β+2α),
因為0<β<1,所以Δ>0,所以上式有兩個根.根據一元二次方程求根公式得:
易見,兩個根的分子恒小于0.下面對β與α的關系進行討論.
· 當β>α時,x1<x2<0,函數圖像開口向上,此時圖像的大致曲線如圖5 所示.此時可得:
· 當β<α時,0<x1<x2,函數圖像開口向下,此時圖像的大致曲線如圖6 所示.此時可得:
同理,當c(t)為其他形式時可作同樣的分析處理,進而得到有價值的結果.
由于FDR 構成的不同,b(t)存在著多種函數形式.早期研究中認為FDR 為常量,設定b(t)=b,顯然無法描述b(t)隨測試環境的變化情況.隨著研究的深入,FDR 已呈現出多種函數形式,例如b(t)=b2t/(1+bt),b(t)=bαβe-βt,b(t)=等.這些FDR 可分為兩類.
①常量類型:b(t)=b,認為FDR 在整個測試過程中并不發生改變,這雖能帶來求解上的簡易,但顯然偏離實際測試情形;
另一方面,鑒于FDR 是對測試環境的直接描述,測試環境的改變可借助FDR 進行研究呈現.因而,當前對考慮變動點CP(change-point)的SRGM 研究中,多從建立FDR 分段函數的形式來實施.文獻[64]即基于各種FDR,將其引入到SRGM 建模中進行研究.
Li QY 在她的文獻[65]中指出,考慮TE 的可靠性建??梢赃M一步改善SRGM 的擬合和預測效果.測試過程中,隨著故障檢測與修復等環節中TE 的不斷消耗,軟件可靠性不斷得到提高.在我們前期研究[6,7]的基礎上對TEF 進行了梳理,并給出了考慮TEF 的SRGM 研究.例如,在如下的假設下:“[0,t]內累計檢測到的故障數量與當前剩余的故障數量下所花費的測試工作量TE 時的故障檢測率b(t)成比例”,可以得到典型的考慮TE 的SRGM建模方法[31,32,36,64,66-73]:
其中,b(t)為故障檢測率函數,m(t)表示[0,t]內累計檢測到的故障數量,a表示軟件中的總故障個數.在本質上,公式(24)的故障檢測率函數為b(t)?w(t).實際上,FDR 表示“單位TE 花費下平均檢測出的故障”[64].這樣,b(t)?w(t)實際上是一個復合函數,其包含了測試工作量的因素.
在前述分析的基礎上,我們可以將多種描述故障檢測能力的函數稱為故障檢測因子k(t),k(t)存在如下5 種情況.
(1)k(t)=b(t)=b——常量;
(2)k(t)=b(t)——此時b(t)存在多種函數形式,如前所述;
(4)k(t)=b(t)?ω(t)——從測試工作量與故障檢測率的復合角度,也即在當前測試資源消耗的情況下,提出了故障被檢測出來的能力;
(5)k(t)=b?c′(t)——從測試覆蓋與每個故障可獲得測試覆蓋下的故障檢測率角度.
綜上,針對故障檢測的描述,公式(23)建立了統一的故障檢測模型——t時刻檢測的故障與當前軟件中剩余的故障數量成比例;同時,該模型也指出了t時刻累積修復的故障數量函數形式,即c(t)=p(t)?m(t).
c(t)描述了測試用例的執行情況,側重于測試覆蓋代碼的程度;w(t)描述了測試資源的消耗情況,側重于測試成本的花銷;b(t)描述了測試策略的效果,側重于測試人員的技能、工具與技術.此三者從不同角度對測試環境效果進行了建模描述,在當前軟件可靠性建模中,用以描述故障被檢測出來的能力.
無論是故障檢測率FDR:b(t),還是故障檢測因子k(t),都是對測試過程中故障被檢測出的程度或效果的描述,刻畫了在測試環境下,消耗測試資源以執行測試策略來對故障進行檢測的能力.因此,其與測試環境下的多因素(失效分布情況、故障密度、程序大小、測試人員技能、測試案例與工具等)有關聯.
迄今為止,國內外尚未對FDR 影響下的可靠性模型進行研究,也缺少對FDR 自身性能的分析.本節將通過在大量真實失效數據集上進行實驗驗證,來分析這兩個方面.
在當前可查證到的SRGM 研究中,所有模型的建立均是基于下面的假設,即“t時刻累積檢測的故障數量與當前軟件中剩余的故障數量成比例”,這個比例即是故障檢測因子.為此,我們提出統一的故障檢測過程建模:
這里認為t時刻檢測的故障數量與當前剩余的故障總數成比例,比例系數是故障檢測因子k(t)(實際上,這里的k(t)已經超過了SRGM 研究中單純的故障檢測率b(t),其表示當前測試環境下測試人員在消耗測試資源,執行測試案例進行測試時故障被檢測出來的概率(函數),是涵蓋多個測試因素的綜合性指標.但從保持延續性以及便于實驗等因素考慮,這里依舊命名為b(t),后面不再專門用k(t)進行表示).p(t)表示故障修復概率,表示t時刻被檢測出的故障被修復的比率.
在m(0)=0 和a(0)=a的初始條件下,求解可得到:
顯然,公式(26)中b(t),p(t)和a(t)的多種設置,可以得到多種m(t).因此,這里提出的是一種框架式模型,具有較強的柔韌性.
文獻[17,19,27,28]中提出了較為常用的FDR,以公式(26)為基礎,通過設定不同形式的b(t),可以得到在相應測試環境下的可靠性模型(即累積故障檢測數量),具體求解情況如下.
此時,隨著測試的持續進行,b(t→∞)→b.
(2) 若b(t)=b2t/(1+bt),則可以求得m(t)如下:
(3) 若b(t)=bαβe-βt,則可求得m(t)如下:
此時,隨著測試的持續進行,b(t→∞)=0.
此時,隨著測試的持續進行,b(t→∞)=0.
此時,隨著測試的持續進行,b(t→∞)→b(1+σ).
雖然已有眾多SRGMs 被提出,但多以指數型和S型模型[47,74]為主.同時,為了觀測不同FDR 的差異,表3 列出了用于參與比較的可靠性模型和本文衍生的模型(不失一般性,這里所提出的框架模型中設定p(t)=p,a(t)=a)及FDR.

Table 3 Reliability models and FDRs involved in comparison表3 參與比較的可靠性模型及FDR
這11 個模型可以分為6 組,其中,前5 組均是在同一FDR 下采用不同的建模假設所得到的模型,可以用于比較不同模型對FDR 的影響,最后一組僅包含復雜彎曲S型函數M-10;同時,M-1,M-2,M-4,M-8,M-10 是統一建??蚣芟虏煌現DR 衍生出的模型,可以觀測不同FDR 對模型的影響.
為了驗證與比較模型的性能,我們遴選了12 個失效數據集DS1~DS12[18,19,24,48,76-83]開展實驗工作.這些失效數據集由失效檢測時間ti(通常是以周為單位)和累積檢測的失效故障數量yi構成,其均來自國際上著名的計算機公司公開發布的計算機(軟件)系統在測試過程中搜集的真實數據,描述了不同的測試場景,從而作為可靠性模型驗證的載體,得到了廣泛的認可與應用.表4 列出了來自于真實應用場景下的12 個失效數據集,對其構成與來源等進行介紹.

Table 4 Failure data set in real application scenario表4 真實應用場景下的失效數據集
5.3.1 擬合性能分析
為了獲得更為廣泛的實驗結果以得到有價值的分析,這里在12 個公開發表的失效數據集上進行實驗驗證(更多實驗結果可聯系作者).基于模型在12 個數據集上的擬合結果,我們繪制了參與比較的模型與真實的失效數據數值之間的擬合曲線,如圖7 所示.
為更加清晰地觀測不同FDR 對模型帶來的影響,在圖7 的基礎上,我們特將不同FDR 融入統一框架模型而衍生出的M-1,M-2,M-4,M-6,M-8,M-10 繪制在一處,用以比較框架模型內不同子模型之間的差異,如圖8 所示.
從圖7 以及圖8 展示的大量實驗所呈現的系列曲線結果可以看出:
(1) 整體上,除了部分模型出現嚴重偏差以外(例如M-6 在DS1上,M-8 在DS2上,M-7 在DS4上,M-6 在DS8上等),大部分模型與真實的失效數據集的增長形狀保持一致,這說明軟件測試過程從累計故障檢測的角度具有凹或凸指數型增長趨勢,這也證明采用NHPP 指數類失效時間模型研究軟件可靠性增長具有現實合理性.
可以發現:彎曲S型FDR 函數(包括復雜彎曲S型函數)對數據集的適應性最好,這通過M-4,M-5 和M-10在眾多失效數據集上的性能得到驗證,這也與我們前期研究[1,7]的結果保持一致,這是因為呈現S型的FDR 函數能夠適應不同測試階段測試環境的變化,具有較強的柔韌性;M-6 和M-7 所包含的先增后減型FDR 也展現出了較好的性能,但并不具備S型FDR 的強勁適應性;遞減型與常數型FDR 參與的模型性能表現一般,這主要是由于真實測試環境的變化并非穩定或連續變化.這些不同的實驗現象可以解釋為故障檢測過程取決于特定測試策略下的測試技術、人員技能等實際因素,這使得FDR 既不是常量,也不是持續遞減,而是具有S型等變化規律,特別是對于大型復雜軟件的長期測試過程來說更加滿足這一變化規律.
綜上,從具有相同FDR 的不同模型曲線進行分析可以看出,本文所提出的模型優于其他同組模型.
(2) 雖然S型FDR 性能較好,但將其融入某些建模假設較為合理的模型中,這些模型在有些失效數據集上不一定會表現出良好的性能.由軟件自身的特點與測試過程的特點所決定,不同公司發布的失效數據集差異性較大,這使得很難存在某個模型在所有失效數據集上均表現出良好性能.例如,M-5 在DS2上的性能并不理想,這與Sharma 等人[22]提出的模型具有局限性相一致.
(3) 另外,不完美排錯模型考慮到了更多的實際情況(正如文獻[84]所述,不完美排錯模型將故障排除效率以及軟件故障總數均看作隨時間變化的函數,更具有實際應用意義),因此其整體性能好于完美排錯模型.因為真實的測試與故障檢測和排錯過程是被多種因素影響的復雜隨機過程,具有不完美特性,因此,考慮到實際不完美情況的模型能夠給建模帶來更多的精準性.
5.3.2 預測性能分析
為了觀測模型的預測性能,我們繪制了參與比較模型的預測RE曲線,如圖9 所示.RE曲線越趨近于0,表明預測性能越好,位于0 以上是正向預測,位于0 以下是負向預測.
基于數據集的預測可以看作是模型對未來測試性能的描述能力,也反映出模型在后續時刻累積檢測出故障的能力.從圖9 所展示的曲線走勢以及相應的數據分析可以看出:
(1) 整體上,除了個別模型在部分數據集上出現預測偏差以外(例如,M-10 模型在DS5上和M-7 模型在DS8上發生預測失真現象),大部分模型的預測曲線隨著測試的進行都逐漸趨向于0,表明效果較為理想;
(2) 模型本身的建模合理性對預測效果存在著較大影響,但預測依然會受到模型參數個數、數據集本身的數量大小等因素的影響,例如在測試前半程,預測曲線的劇烈起伏變化,表明模型正在進行對數據的擬合適應;
(3) 具有(彎曲)S型FDR 函數的模型能夠較快地趨于0 水平線,表明其預測能力較好,這包括M-4,M-5.同時,結合上述針對于圖7、圖8 的討論可得,具有優秀適應能力的S型FDR 能夠幫助模型呈現更為強大的擬合與預測能力;
(4) M-10 在DS5上的預測性能并不理想,這與其在DS5上的擬合曲線所顯示的擬合性能不理想相一致.從而可以得出,任何一個模型不能在所有的數據集上表現良好(包括擬合性能和預測性能),這種現象是數據集本身或模型參數數量過多等因素造成的;
(5) 呈現S型變化趨勢的b(t)=,在多個數據集的多個模型上保持良好的性能,表明實際測試環境存在移動點/拐點CP,而并非平滑進行,因此,包含CP 的模型能夠具有更好的性能.
基于前述11 個模型在12 個真實失效數據集上的大量實驗結果分析,特作如下討論.
(1) 整體上,可靠性模型不能適應于所有的數據集,且根據實驗結果可觀察出,其擬合度量與預測具有相對的一致性.這兩點與FDR 的關聯并不大,從本文大量的實驗結果中沒有得到明顯關聯支撐:①可靠性模型的有效性具有較大的局限性,模型在一部分數據集上表現優秀的同時,在另外一些數據集上效果一般甚至較差,適用性受到較大限制;② 此外,模型的擬合性能與預測性能具有基本統一性;
(2) FDR 對模型的影響,特別是同一框架中不同的FDR 對性能的影響存在較大差異:①框架模型具有較強的柔韌性,如本文提出的一樣,不同的FDR 使得框架模型衍生為具體的模型,這為區分FDR 的性能差異帶來可能;② 同一FDR 在不同可靠性模型中的性能通過模型的整體性能來反映,由于不同模型是研究人員基于不同的假設建模得到,因而難以進行有效衡量;
(3) FDR 建模具有客觀性與主觀性兩個方面:由于FDR 與整體測試過程緊密相關,而測試過程是測試人員按照測試策略進行測試工作不斷發現軟件故障的過程,是多個隨機因素疊加在一起的隨機過程,具有很強的隨機性.因此,測試過程的隨機性會直接為FDR 的建模帶來困難:①對于具有較強測試規劃,呈現一定規律的測試過程,FDR 往往具有明顯的變化規律,這為FDR 建模提供依據;② 測試過程的復雜性解釋了本文給出的當前研究中存在多種類型FDR 形式的主要原因,具有符合多種實際的真實性;
(4) 包含更多測試信息的發布將為FDR 的建模與研究帶來直接幫助,也為深入研究可靠性的增長與變動提供有效支持.
特別指出:FDR 受到多種因素影響,具有典型的隨機性,例如不同測試策略、測試工具與方法等都會對其帶來擾動影響.因此,現有研究中提出了多種不同形式的FDR,且相互之間的差異性較大,但在特定的測試環境下還是具有合理性的.在實際測試過程中,由于測試都是在預定或已知的條件下主動實施的,此時完全可以根據測試整體安排來選擇和確定FDR.
6.1.1 描述軟件測試過程長期變化規律的FDR 函數
FDR 是SRGM 中最為重要的參變量,其描述了單位時間內被檢測到的故障數量的變化情況,因而其在本質上刻畫了整個測試過程中測試效率的演變,對于可靠性模型的演變尤其是增長至關重要.
從本文前述介紹中可以看出:FDR 實際上涉及到SRGM 中的故障檢測率函數b(t),當考慮測試工作量時,就需要將w(t)包含進來;當從測試覆蓋的視角分析時,就需要將c(t)融入進來.可以看出:FDR 是對整體測試環境的綜合建模,其數學模型不僅反映了故障檢測的效率和能力,也描述了當前測試環境下各種隨機因素的擾動情況.因此,能否提出能夠涵蓋真實隨機因素的FDR(整體函數或分段函數),是當前研究面臨的一個重要挑戰.
6.1.2 發布多模式測試環境下的更多構成要素的失效數據集
包括FDR 與可靠性在內的各類模型,本質上均需要依靠真實的失效數據集進行驗證.現有的失效數據集對FDR 驗證的支持嚴重不足,這成為制約FDR 發展的首要障礙.因此,為FDR 建模提供更多有效信息,為可靠性研究特別是建模、度量、預測、發布、調整等帶來重大變革,呼吁公司直接發布FDR,這也是當前研究中所面臨的一個挑戰.
6.2.1 對考慮FDR 參與的可靠性模型進行綜合評價
軟件開發自需求分析起始至發布的全過程,包含了多個測試階段.按照文獻[23]中給出的軟件開發流程,從圖10 可以看出,為了提高可靠性,4 個測試階段相互銜接直至進入到發布后的運行階段.
不同測試階段的目的、策略、技術、方法等差異,使得每個階段的FDR 發生變化,這種變化有時較為劇烈,對測試性能與效率影響較大.FDR 自身的不穩定性對可靠性模型評價帶來重要影響,因此要把FDR 的變化融入到可靠性模型的綜合評價分析中,從而為可靠性模型評測帶來關鍵參數上的影響,提高精確度.
6.2.2 FDR 選擇成為一個挑戰
FDR 支持可靠性研究伴隨著其眾多模型的提出而發展,特別是在以SRGM 為核心的可靠性研究上成為關鍵因素.
易知,提出能夠適應多種測試環境變化的FDR 是建立性能優異的SRGM 的重要方面.相比之下,現有的FDS中卻沒有公布FDR 的變化趨勢,這使得目前SRGM 的研究中,尚不能根據FDS 來直接驗證所建立的b(t),只能間接通過m(t)的性能來體現.
6.2.3 要為最優發布提供有效支持
軟件發布受制于軟件開發技術、人員、成本等多種因素,通常,超過預期時間的發布因為成本的劇烈上升或失去占領市場的機會等原因而直接導致軟件制品的失敗.合理管控軟件的開發過程,做到在預期之內的發布,甚至是最優發布,已成為軟件開發管理的重要內容.
區別于傳統軟件測試的主要目的——單純地檢測與排除故障,當前已開始考慮到持續進行測試以提高可靠性,達到(軟件)系統發布的目的.因此,FDR 要能夠支撐與服務于軟件的及時發布,提高市場占有率.此外,對于新型態軟件,例如大規模分布式網絡軟件、復雜軟硬件綜合系統、復雜網絡軟件等,在可靠性研究上缺少失效數據集的外部支持.
6.2.4 基于現有FDR 選擇融入到可靠性模型中,發揮精準組合作用
可靠性建模的一個分支趨勢是基于現有的模型框架融入不同的參數,或者分階段融入不同的參數,以得到更為具體的精準模型.FDR 對于建模的重要性還可以通過其作為關鍵參數的屬性,融入到現有的可靠性建模的框架中,進而建立更為靈活的可靠性模型.當前,無論是框架模型還是FDR 模型均存在多個,這為組合方式建立模型提供了有效選擇,也為可靠性模型在工程中的應用帶來機遇.
6.2.5 根據FDR 對測試策略實施有效指導
FDR 對測試環境的描述能力直接反映在故障被檢測出來的故障數量與效率上,因此,有效的FDR 也應該為實際測試過程給出建議,用以調整測試策略,更加合理地分配測試資源.當前研究中,尚未有從FDR 的角度對測試工作量(TE)分配、測試過程管理等進行具體的研究,這成為亟待突破的研究內容.
故障檢測率FDR 與可靠性的建模與度量緊密相關,是軟件測試過程中測試技術綜合運用取得的結果,既可以從測試覆蓋的角度進行建模,也可以融合測試工作量TE 因素,還可以直接根據實際進行設定.可以看出:FDR是可靠性建模、增長、度量、系統發布的重要構成要素,是用以支撐可靠性研究與增強可靠性增長的重要內容,推動了以SRGM 為核心的可靠性研究的深入發展.
本文對可靠性模型中故障檢測率的研究進行了全面述評,包括可靠性建模的關鍵要素FDR 的功能、與失效強度和冒險率的關聯、多視角下的分類、不完美排錯下的性能分析以及未來研究趨勢等.期望我們的工作能為可靠性研究,特別是FDR 的研究提供有益的借鑒和參考,并為推動可靠性相關的研究與應用向前發展做出積極貢獻.
致謝在此,我們向本文參考文獻中研究人員所做的大量基礎工作表示真誠感謝!對本文在寫作與完善工作過程中給予無私支持和提供寶貴建議意見的同行致謝.特別感謝審稿人,他們提出的寶貴意見和建議對于本文整體水平的提高有很大幫助.