張 峰 費 琪 李耀敏
(1.91404部隊 秦皇島 066000)(2.江蘇自動化研究所 連云港 222061)(3.中船重工集團第722研究所 武漢 430205)
隨著社會的發(fā)展,產(chǎn)品變得越來越智能,部分硬件已被軟件完全代替,軟件在當今社會發(fā)展中所占比重已遠遠超越硬件,且在產(chǎn)品事故率統(tǒng)計中,失效事件絕大多數(shù)都是由軟件失效引起的,故軟件的質量在人們生活中已變得越來越重要,軟件可靠性直接影響著軟件質量和開發(fā)成本[1~3],軟件可靠性評測的關鍵是構建軟件可靠性模型,因此建立科學合理的評測模型便成為軟件評測中的關鍵問題。
1970年Goel和Okumoto首次使用非齊次泊松過程(Non-Homogeneous Poisson Process,NHPP)描述軟件可靠性模型,G-O模型[3]。此后在此模型的基礎上,提出 了 很 多 新模型[4~15],包括 Delayed S-shaped 模 型[9]、Weibull-TEF 模 型[10]和 變型 S型-TEF模型[8]。通過對這些模型進行分析,存在如下缺陷:
1)在建立可靠性模型時未與軟件圈復雜度進行關聯(lián),不同等級的圈復雜度對應軟件的復雜程度不同,測試人員對此進行檢測時,檢測效率會不同,開發(fā)人員對相應問題進行排錯時,排錯率及錯誤引入率也會不同;
2)在進行可靠性建模時,不能同時引入故障檢測率、錯誤排除率、錯誤引入率。
軟件圈復雜度(Cyclomatic Complexity)是一種代碼復雜度的衡量標準,在1976年由Thomas J.McCabe,Sr.提出[11]。在軟件測試的概念里,圈復雜度用來衡量一個模塊判定結構的復雜程度,數(shù)量上表現(xiàn)為線性無關的路徑條數(shù),即合理的預防錯誤所需測試的最少路徑條數(shù)。圈復雜度大說明程序代碼可能質量低且難于測試和維護,根據(jù)經(jīng)驗,程序的可能錯誤和高的圈復雜度有著很大關系。
本文依據(jù)圈復雜度的值將此劃分為三個等級低、中、高,針對不同等級的圈復雜度對應的代碼狀況、可測性、維護成本、對測試人員測試能力要求及開發(fā)人員對問題的排錯能力如表1所示。
在構建基于軟件的不完美排錯非齊次泊松過程可靠性模型時,需做如下假設:
1)軟件執(zhí)行的任務剖面與可靠性測試時所執(zhí)行的剖面相同;
2)測試人員在任意時間序列內發(fā)現(xiàn)的問題是相互獨立互不相關的;
3)在時刻 t發(fā)現(xiàn)的錯誤累計數(shù) [M(t),t≥0]是一個隨時間變化獨立增長的過程,M(t)為服從期望函數(shù) f(t)的泊松分布(備注:低圈復雜度、中圈復雜度及高圈復雜度分別服從期望函數(shù)為 f1(t)、f2(t)及 f3(t)的Poisson分布);
4)在時間間隔 (t,t+Δt)內,故障檢測率 c(t)定義為:時間間隔(t,t+Δt)內檢測到故障總數(shù)的期望值與軟件剩余未發(fā)現(xiàn)故障數(shù)的比例,滿足0<c(t)<1的條件,不同圈復雜度軟件模塊對應的故障檢測率也不同,故進一步對不同圈復雜度軟件模塊的故障檢測率c(t)做如下詳細分解。
表1 圈復雜度對應劃分表
(1)針對低圈復雜度的軟件模塊,對測試人員能力要求低,每個測試人員檢測出故障的概率相似,故假設故障檢測率為常量,即:c1(t)=c;
(2)針對圈復雜度為中及高的軟件模塊,記故障檢測率分別為c2(t)及c3(t),不同測試人員故障檢測率不同,經(jīng)驗豐富、測試人員學習能力越高、對軟件越熟悉的人對應的故障檢測率也越高。
5)在時間間隔 (t,t+Δt)內,排錯率 p(t)定義為:時間間隔(t,t+Δt)內開發(fā)人員排除的錯誤數(shù)與單位時間內測試人員期望發(fā)現(xiàn)的故障數(shù)成正比,滿足0<p(t)≤1的條件,不同圈復雜度軟件模塊對應的故障排除率也不同,故進一步對不同圈復雜度軟件模塊的故障排錯率 p(t)做如下詳細分解。
(1)針對低圈復雜度及中圈復雜度的軟件模塊,記排錯率分別為 p1(t),因軟件較簡單,故開發(fā)人員為完美排錯,可將所有錯誤都排除,即排錯率為p1(t)=1;
(2)針對中圈復雜度及高圈復雜度的軟件模塊,記排錯率為 p2(t)及 p3(t),因軟件特別復雜,開發(fā)人員在排錯時很難將所有錯誤排除,即滿足0<p2(t)<1,0<p3(t)<1的條件。
6)在時間間隔 (t,t+Δt)內,錯誤引入率 y(t)的變化定義為:時間間隔(t,t+Δt)內預估錯誤總數(shù)的變化與單位時間內開發(fā)人員排除的錯誤數(shù)成正比,滿足0≤y(t)<1的條件,不同圈復雜度軟件模塊對應的錯誤引入率也不同,故進一步對不同圈復雜度軟件模塊的錯誤引入率y(t)做如下詳細分解:
(1)針對低圈復雜度軟件模塊,記錯誤引入率為 y1(t),因軟件簡單,故開發(fā)人員排錯時相對容易,對排錯是完美排錯,即錯誤引入率為y1(t)=0;
(2)針對中圈復雜度的軟件模塊,記錯誤引入率為y2(t),軟件相對復雜,開發(fā)人員排錯時為非完美排錯,但針對已排除的錯誤,不會引入新的錯誤,即錯誤引入率為y2(t)=0;
(3)針對高圈復雜度的的軟件模塊,記錯誤引入率為 y3(t),因軟件特別復雜,開發(fā)人員為非完美排錯,排錯過程中會引入新問題,即滿足0<y3(t)<1的條件。
依據(jù)上述6個假設,可以針對不同圈復雜度的軟件模塊進行可靠性建模,上述前3個假設為NHPP可靠性模型的統(tǒng)一假設,后3個假設是與軟件圈復雜度相關聯(lián)的可靠性模型建模假設。
依據(jù)基于軟件圈復雜度相關的不完美排錯可靠性增長模型假設4)、5)、6)可得如下不完美排錯NHPP可靠性增長的一般模型方程組:
備注:f(t)為期望故障數(shù),c(t)為測試人員對軟件的故障檢測率,s(t)為軟件中預期故障總數(shù),j(t)為已解決錯誤數(shù),p(t)為開發(fā)人員在排除錯誤時的錯誤排除率,y(t)為非完美排錯時的錯誤引入率。
依據(jù)方程(1)及可靠性模型假設4)、5)、6)可得針對低圈復雜度軟件模塊的NHPP可靠性模型為
基于上述針對低圈復雜度,軟件測試人員對錯誤的檢測率及開發(fā)人員對錯誤的排錯率分析得出如下條件:
由方程(2)和(3)可得低圈復雜度軟件模塊的期望故障數(shù)為
其中s1為初始時刻預期的軟件故障數(shù),c1表示測試人員的排錯率。
依據(jù)方程(1)及可靠性模型假設4)、5)、6)可得針對中圈復雜度軟件模塊的NHPP可靠性模型為
基于上述針對中圈復雜度,軟件測試人員對錯誤的檢測率及開發(fā)人員對錯誤的排錯率分析得出如下條件:
其中 p2滿足0<p2<1的條件。
測試人員對中圈復雜度的故障檢測率隨著對軟件產(chǎn)品的熟悉,故障檢測率會提升,當學習到一定程度,故障檢測率便會穩(wěn)定下來,符合S型變化曲線,此塊關于故障檢測率本文用Logistic曲線來描述測試人員對故障的檢測能力。
其中a為測試人員對中圈復雜度軟件模塊的初始故障檢測率,b為測試人員學習能力的尺度。滿足如下條件:0<a<1,b>0,依據(jù)方程(5)、(6)、(7)可得中圈復雜度軟件模塊的期望故障數(shù)為
其中s2表示初始時刻預期的軟件故障總數(shù)。
依據(jù)方程(1)及可靠性模型假設4)、5)、6)可得針對高圈復雜度軟件模塊的NHPP可靠性模型為
基于上述針對高圈復雜度的軟件模塊,軟件測試人員對錯誤的檢測率及開發(fā)人員對錯誤的排錯率、錯誤引入率分析得出如下條件:
其中 p3、y滿足0<p3<1、0<y<1的條件。
c3(t)在此借用中圈復雜度的模型,用Logistic增長模型來描述測試人員的能力。
其中m為測試人員對高圈復雜度軟件模塊的初始故障檢測率,n為測試人員學習能力的尺度。滿足如下條件:0<m<1,n>0,依據(jù)方程(9)、(10)、(11)可得高圈復雜度軟件模塊的期望故障數(shù)為
備注:s3表示初始時刻預期的軟件故障總數(shù)。
由此本文分別求得了低圈復雜度、中圈復雜度、高圈復雜度軟件模塊的期望故障數(shù),任一軟件的期望故障數(shù)為
為了更好地預估不同圈復雜度的故障函數(shù)中的參數(shù),采用最小誤差平方和來計算:
其中k為測試階段數(shù),ti為i階段軟件累計運行時間,xi為第i階段發(fā)現(xiàn)低圈復雜度軟件模塊的問題數(shù),yi為第i階段發(fā)現(xiàn)中圈復雜度軟件模塊的問題數(shù),zi為第i階段發(fā)現(xiàn)高圈復雜度軟件模塊的問題數(shù),為獲得低圈復雜度軟件模塊可靠性參數(shù)的最小誤差平方和,SSE1分別對c1、s1求偏導,得如下方程組:
為獲得中圈復雜度軟件模塊可靠性參數(shù)最小誤差平方和,SSE2對s2、a、b、p2分別求偏導,得如下方程組:
為獲得高圈復雜度軟件模塊可靠性參數(shù)最小誤差平方和,SSE3對s3、m、n、p3、y分別求偏導,得如下方程組:
在 約 束 條 件 為 :0<c1<1 、0<s1<∞ 、0<s2<∞ 、0<s3<∞ 、0<a<1 、0<b<1 、0<m<1、0<n<1、0<ρ1<1、0<ρ2<1、0<ρ3<1、0<y<1條件下通過方程(15)、(16)、(17)即可求得參數(shù)s1、s2、s3、a、b、m、n、p1、p2、p3、y的值。
為了證明本模型的有效性,并對新模型進行評估,引入某軟件測評中心針對通信系統(tǒng)的測評數(shù)據(jù)進行評估,表2給出了問題的發(fā)布時間及問題所對應的軟件模塊的圈復雜度等級,測試團隊從第1周開始測試直至第32周結束共發(fā)現(xiàn)問題總數(shù)為1264個,軟件問題與檢測時間、軟件模塊對應情況見表2~表5。
表2 低圈復雜度軟件模塊對應問題缺陷統(tǒng)計表
表3 中圈復雜度軟件模塊對應問題缺陷統(tǒng)計表
表4 高圈復雜度軟件模塊對應問題缺陷統(tǒng)計表
表5 軟件對應問題缺陷統(tǒng)計表
針 對 表 2,由 方 程(15)可 求 得 s1=805,c1=0.398,將其代入方程(13)可得低圈復雜度的軟件可靠性模型為
低圈復雜度故障擬合效果如圖1所示。
圖1 低圈復雜度軟件模塊故障數(shù)量擬合圖
針 對 表 3,由 方 程(16)可 求 得 :s2=267,p2=0.77,a=0.36,b=0.69,將其代入方程(8)可得中圈復雜度的軟件可靠性模型為
中圈復雜度故障擬合效果如圖2所示。
圖2 中圈復雜度軟件模塊故障數(shù)量擬合圖
針對表4,由方程(17)可求得 s3=67,p3=0.61,m=0.43,n=0.26,y=0.02,將其代入方程(12)可得高圈復雜度的軟件可靠性模型為
高圈復雜度故障擬合效果如圖3所示。
由方程(13)、(18)、(19)、(20)可得基于圈復雜度的軟件可靠性模型為
基于軟件圈復雜度的故障擬合效果如圖4所示。
圖3 高圈復雜度軟件模塊故障數(shù)量擬合圖
圖4 基于軟件圈復雜度模型的故障數(shù)量擬合圖
通過MSE度量模型與G-O模型、Delayed S-shaped 模型、Inflected S-Shaped Model(ISS)模型、變型S型-TEF模型、Logistic-WE模型進行比較,比較結果見表6所示。
表6 MSE比較
通過以上實驗分析,本文通過針對不同軟件圈復雜度的特性進行分析,分別建模,更貼近實際,得到的可靠性模型擬合效果優(yōu)于現(xiàn)有的模型。
本文通過將軟件圈復雜度劃分為三個等級:普通、復雜、特別復雜。針對不同等級的圈復雜度,分別從代碼狀況、可測性、可維護性、對測試人員能力的要求、對開發(fā)人員能力的要求5維角度進行了充分分析,從而首次提出了基于軟件圈復雜度相關的不完美排錯可靠性增長模型。在進行可靠性模型建模的同時綜合考慮了故障的檢測率、故障排錯率、排錯時故障的引入率三大因素,更加切合實際,并通過實際測試數(shù)據(jù)對本模型進行應用,并與現(xiàn)有模型進行了比較,證明了本模型的優(yōu)越性。