葉勇健,譚 超
(廈門華天涉外職業技術學院,福建 廈門 361102)
軟件程序規模與復雜程度的增長增加了軟件應用的不確定性。為有效保證軟件質量,軟件測試逐漸成為軟件研發中成本最高的項目[1]。軟件測試能力、測試效率及測試特點的動態跟蹤與定量分析,以及軟件測試的持續優化成為目前軟件研發中最為迫切需要解決的問題[2]。目前軟件測試的研究側重于如何開展測試過程組織、具體測試方法等,測試評價主要圍繞軟件缺陷報告、缺陷跟蹤與測試進度評價等方面,缺少對軟件的動態跟蹤及在線評價[3]。導致軟件測試中經常出現測試過程按照測試計劃開展,但由于測試用例較大導致測試執行有效性缺失的問題,很難在測試過程中發現測試軟件薄弱點[4]。根據這一問題,提出基于多維度覆蓋率的嵌入式軟件測試分析方法。多維度覆蓋率的度量方法主要以各種覆蓋率分別統計,充分度量測試軟件,滿足測試充分性原則的同時,綜合利用多維度測試覆蓋率動態變化特征,對測試方法與測試用例效果及薄弱點進行動態跟蹤[5]。多維度覆蓋指標以分支覆蓋、條件覆蓋、語句覆蓋及c-use覆蓋等十余種測試覆蓋度量為指標,根據測試覆蓋的不同,從多角度反映軟件測試條件[6]。利用多維度覆蓋率做出軟件測試,試圖從多方面闡述軟件應用情況。
軟件測試覆蓋率作為度量軟件測試程度的主要手段,其計算公式為

(1)
式中:item為測試因子實例數。
根據式(1),若要對item覆蓋情況進行計算,為從不同角度度量軟件測試的充分程度,提出多維度測試覆蓋指標,用以表示度量測試充分程度[7]。
根據覆蓋率指標,提取其特征屬性與度量參數,設覆蓋率維度為m,則有m種測試覆蓋率[8]。由于測試成本與時間的限制,軟件測試通常無法達到全覆蓋率,根據軟件安全關鍵等級、測試覆蓋率難易程度、測試階段以及開發方法等[9],在軟件測試中,當執行完第nitem個測試用例后,為表現實際測試覆蓋率所達到的期望值,當前滿意度可表示為
Satj(m)=(Cj(m)/Cj)×100%.
(2)
式中:Cj為軟件測試覆蓋率;Cj(m)為當前測試覆蓋率Cj的當前值,且j=1,…,m。
由于會出現實測覆蓋率超過覆蓋值的情況,即Satj(m)≥1[10],規定
if Satj(m)≥1,
then Satj(m)=1,
即0≤Satj(m)≤1.
(3)
因此,得到測試綜合覆蓋率定義為
Csyn=f(nitem,t,C,w,Type,θ,Sat).
(4)
式中:C為多維度測試覆蓋率參數;w為多維度測試覆蓋率優先級因子;Type為測試覆蓋率類型;θ為所有軟件模塊關鍵性測試影響因子;Sat為所有維度測試覆蓋率滿意度參數。
通過計算結果與實際相關數據,判斷軟件測試多維度覆蓋率[11]。
根據對軟件測試多維度覆蓋率的分析,定量描述軟件系統測試可靠程度[12]。設定軟件測試時在t=0時能夠正常運行,那么在測試時間[t,0]時軟件測試不發生失效概率,即軟件測試可靠性[13]。設軟件測試目標時刻為t,如果軟件測試過程中失效時刻為a,則分析得到軟件測試可靠度為
C(t)=M(a≥t).
(5)
式中:C(t)為軟件測試可靠度。
測試中軟件間隔時間小于等于目標時刻概率,則其失效概率為
P(t)=1-C(t).
(6)
在失效概率影響下,軟件在測試時間內隨機執行k個測試用例,得到測試覆蓋率平均增長率為

(7)
根據式(7),計算出測試覆蓋率的平均增長率,并對連續執行k個測試用例期間發現和排出的軟件缺陷增長量作出排序,分析軟件測試性能[14-15]。
在對比實驗環境中運行基于多維度覆蓋率的嵌入式軟件測試分析方法,分析該測試方法的實際使用性能。為更好分析實驗效果,在同一實驗環境下將同樣運行目前較為常用的基于目標碼的嵌入式軟件測試分析方法,通過對比兩種實驗方法的不同分析其結果。實驗中(run-time sytem)系統在計算機程序中執行,提供實驗所需運行機制及實驗資源。實驗采用VisualC++6.0作為運行環境,Intel公司MCS-51系列CPU8051軟件進行仿真,虛擬機運行在X86CPU操作系統下。運行時,使用虛擬機為上層應用程序提供1個運行環境,由處理器自身執行程序命令。軟件測試需要相關數據,以便針對具體連鎖軟件測試時能夠實現調用相關信息。軟件測試數據配置主要分為被測場相關數據與測試接口相關數據,涉及數據主要包括信號機靜態數據、區段靜態數據以及進路表數據,詳細數據如表1—3所示。

表1 信號機靜態數據
數據庫記錄原始測試數據案例、進路數據以及測試結果,根據測試序列生成解析測試結果,判定查詢及記錄存儲與分析結果。測試僅針對軟件進行,不依賴硬件采集設備信息,被測軟件依據的接收信息來源于仿真平臺生成序列關鍵點。實驗中設置進路不能正常建立測試,存在多條路徑,形成并聯約束條件,根據遷移函數逐個設置信號機錯誤、道岔錯誤及區段錯誤,依據進路編號設置異常,逐步測試直到測試完成。

表2 區段靜態數據

表3 道岔靜態數據
結合實驗自動執行數據,將起始數據作為軟件初始狀態,結束狀態作為軟件終止狀態,將測試軟件的150個測試用例作為實例,按執行順序執行50個測試用例后,對比多次測試結果。對兩種方法進行驗證,分析測試軟件全功能,其結果如圖1所示。

圖1 軟件測試缺陷率分析結果對比
根據圖1可以看出,在隨機執行多次測試用例后,分析兩組方法測試特點。相比于目標碼的嵌入式軟件測試分析方法,基于多維度覆蓋率的嵌入式軟件測試分析方法的測試結果對覆蓋率增長效果顯示更為明顯,按照最優排序,即按照測試軟件語句覆蓋率大小排序,得到最理想的分析結果。
軟件測試中,為了能夠定量評價軟件測試效果,及時發現軟件測試中的薄弱點,需要對其進行測試分析,以保證軟件測試的有效性。利用多維度測試覆蓋率概念,在軟件測試中基于多種覆蓋指標度對軟件測試可靠性與質量作出分析評價,進一步綜合分析軟件測試性能。