葉勇健,譚 超
(廈門華天涉外職業(yè)技術(shù)學院,福建 廈門 361102)
軟件程序規(guī)模與復(fù)雜程度的增長增加了軟件應(yīng)用的不確定性。為有效保證軟件質(zhì)量,軟件測試逐漸成為軟件研發(fā)中成本最高的項目[1]。軟件測試能力、測試效率及測試特點的動態(tài)跟蹤與定量分析,以及軟件測試的持續(xù)優(yōu)化成為目前軟件研發(fā)中最為迫切需要解決的問題[2]。目前軟件測試的研究側(cè)重于如何開展測試過程組織、具體測試方法等,測試評價主要圍繞軟件缺陷報告、缺陷跟蹤與測試進度評價等方面,缺少對軟件的動態(tài)跟蹤及在線評價[3]。導致軟件測試中經(jīng)常出現(xiàn)測試過程按照測試計劃開展,但由于測試用例較大導致測試執(zhí)行有效性缺失的問題,很難在測試過程中發(fā)現(xiàn)測試軟件薄弱點[4]。根據(jù)這一問題,提出基于多維度覆蓋率的嵌入式軟件測試分析方法。多維度覆蓋率的度量方法主要以各種覆蓋率分別統(tǒng)計,充分度量測試軟件,滿足測試充分性原則的同時,綜合利用多維度測試覆蓋率動態(tài)變化特征,對測試方法與測試用例效果及薄弱點進行動態(tài)跟蹤[5]。多維度覆蓋指標以分支覆蓋、條件覆蓋、語句覆蓋及c-use覆蓋等十余種測試覆蓋度量為指標,根據(jù)測試覆蓋的不同,從多角度反映軟件測試條件[6]。利用多維度覆蓋率做出軟件測試,試圖從多方面闡述軟件應(yīng)用情況。
軟件測試覆蓋率作為度量軟件測試程度的主要手段,其計算公式為
(1)
式中:item為測試因子實例數(shù)。
根據(jù)式(1),若要對item覆蓋情況進行計算,為從不同角度度量軟件測試的充分程度,提出多維度測試覆蓋指標,用以表示度量測試充分程度[7]。
根據(jù)覆蓋率指標,提取其特征屬性與度量參數(shù),設(shè)覆蓋率維度為m,則有m種測試覆蓋率[8]。由于測試成本與時間的限制,軟件測試通常無法達到全覆蓋率,根據(jù)軟件安全關(guān)鍵等級、測試覆蓋率難易程度、測試階段以及開發(fā)方法等[9],在軟件測試中,當執(zhí)行完第nitem個測試用例后,為表現(xiàn)實際測試覆蓋率所達到的期望值,當前滿意度可表示為
Satj(m)=(Cj(m)/Cj)×100%.
(2)
式中:Cj為軟件測試覆蓋率;Cj(m)為當前測試覆蓋率Cj的當前值,且j=1,…,m。
由于會出現(xiàn)實測覆蓋率超過覆蓋值的情況,即Satj(m)≥1[10],規(guī)定
if Satj(m)≥1,
then Satj(m)=1,
即0≤Satj(m)≤1.
(3)
因此,得到測試綜合覆蓋率定義為
Csyn=f(nitem,t,C,w,Type,θ,Sat).
(4)
式中:C為多維度測試覆蓋率參數(shù);w為多維度測試覆蓋率優(yōu)先級因子;Type為測試覆蓋率類型;θ為所有軟件模塊關(guān)鍵性測試影響因子;Sat為所有維度測試覆蓋率滿意度參數(shù)。
通過計算結(jié)果與實際相關(guān)數(shù)據(jù),判斷軟件測試多維度覆蓋率[11]。
根據(jù)對軟件測試多維度覆蓋率的分析,定量描述軟件系統(tǒng)測試可靠程度[12]。設(shè)定軟件測試時在t=0時能夠正常運行,那么在測試時間[t,0]時軟件測試不發(fā)生失效概率,即軟件測試可靠性[13]。設(shè)軟件測試目標時刻為t,如果軟件測試過程中失效時刻為a,則分析得到軟件測試可靠度為
C(t)=M(a≥t).
(5)
式中:C(t)為軟件測試可靠度。
測試中軟件間隔時間小于等于目標時刻概率,則其失效概率為
P(t)=1-C(t).
(6)
在失效概率影響下,軟件在測試時間內(nèi)隨機執(zhí)行k個測試用例,得到測試覆蓋率平均增長率為
(7)
根據(jù)式(7),計算出測試覆蓋率的平均增長率,并對連續(xù)執(zhí)行k個測試用例期間發(fā)現(xiàn)和排出的軟件缺陷增長量作出排序,分析軟件測試性能[14-15]。
在對比實驗環(huán)境中運行基于多維度覆蓋率的嵌入式軟件測試分析方法,分析該測試方法的實際使用性能。為更好分析實驗效果,在同一實驗環(huán)境下將同樣運行目前較為常用的基于目標碼的嵌入式軟件測試分析方法,通過對比兩種實驗方法的不同分析其結(jié)果。實驗中(run-time sytem)系統(tǒng)在計算機程序中執(zhí)行,提供實驗所需運行機制及實驗資源。實驗采用VisualC++6.0作為運行環(huán)境,Intel公司MCS-51系列CPU8051軟件進行仿真,虛擬機運行在X86CPU操作系統(tǒng)下。運行時,使用虛擬機為上層應(yīng)用程序提供1個運行環(huán)境,由處理器自身執(zhí)行程序命令。軟件測試需要相關(guān)數(shù)據(jù),以便針對具體連鎖軟件測試時能夠?qū)崿F(xiàn)調(diào)用相關(guān)信息。軟件測試數(shù)據(jù)配置主要分為被測場相關(guān)數(shù)據(jù)與測試接口相關(guān)數(shù)據(jù),涉及數(shù)據(jù)主要包括信號機靜態(tài)數(shù)據(jù)、區(qū)段靜態(tài)數(shù)據(jù)以及進路表數(shù)據(jù),詳細數(shù)據(jù)如表1—3所示。
表1 信號機靜態(tài)數(shù)據(jù)
數(shù)據(jù)庫記錄原始測試數(shù)據(jù)案例、進路數(shù)據(jù)以及測試結(jié)果,根據(jù)測試序列生成解析測試結(jié)果,判定查詢及記錄存儲與分析結(jié)果。測試僅針對軟件進行,不依賴硬件采集設(shè)備信息,被測軟件依據(jù)的接收信息來源于仿真平臺生成序列關(guān)鍵點。實驗中設(shè)置進路不能正常建立測試,存在多條路徑,形成并聯(lián)約束條件,根據(jù)遷移函數(shù)逐個設(shè)置信號機錯誤、道岔錯誤及區(qū)段錯誤,依據(jù)進路編號設(shè)置異常,逐步測試直到測試完成。
表2 區(qū)段靜態(tài)數(shù)據(jù)
表3 道岔靜態(tài)數(shù)據(jù)
結(jié)合實驗自動執(zhí)行數(shù)據(jù),將起始數(shù)據(jù)作為軟件初始狀態(tài),結(jié)束狀態(tài)作為軟件終止狀態(tài),將測試軟件的150個測試用例作為實例,按執(zhí)行順序執(zhí)行50個測試用例后,對比多次測試結(jié)果。對兩種方法進行驗證,分析測試軟件全功能,其結(jié)果如圖1所示。
圖1 軟件測試缺陷率分析結(jié)果對比
根據(jù)圖1可以看出,在隨機執(zhí)行多次測試用例后,分析兩組方法測試特點。相比于目標碼的嵌入式軟件測試分析方法,基于多維度覆蓋率的嵌入式軟件測試分析方法的測試結(jié)果對覆蓋率增長效果顯示更為明顯,按照最優(yōu)排序,即按照測試軟件語句覆蓋率大小排序,得到最理想的分析結(jié)果。
軟件測試中,為了能夠定量評價軟件測試效果,及時發(fā)現(xiàn)軟件測試中的薄弱點,需要對其進行測試分析,以保證軟件測試的有效性。利用多維度測試覆蓋率概念,在軟件測試中基于多種覆蓋指標度對軟件測試可靠性與質(zhì)量作出分析評價,進一步綜合分析軟件測試性能。