基於語句交互覆蓋的回歸測試用例選擇方法
2023-05-30 17:38:21 2
基於語句交互覆蓋的回歸測試用例選擇方法
【專利摘要】本發明公開了一種基於語句交互覆蓋的回歸測試用例選擇方法,包括如下步驟:(1)對待測程序進行插樁,在插樁後的程序上執行用於測試被測程序的已有測試用例集中的每個測試用例,記錄每個測試用例的語句覆蓋信息並構造出測試用例-語句覆蓋矩陣,確定需覆蓋的語句集R;(2)基於測試用例-語句覆蓋矩陣生成可覆蓋的語句間交互集I;(3)根據可覆蓋的語句間交互集I、需覆蓋的語句集R和已有測試用例集,按照選擇策略執行測試用例集壓縮方法,並最終生成壓縮後的測試用例集。該方法具有選擇出的測試用例數量較小,同時又不會顯著降低原有測試用例集的缺陷檢測能力等優點。從而可顯著降低回歸測試成本,並進一步提高回歸測試的效率。
【專利說明】基於語句交互覆蓋的回歸測試用例選擇方法
【技術領域】
[0001]本發明屬於計算機軟體測試【技術領域】,具體涉及一種基於語句交互覆蓋的回歸測試用例選擇方法,用於提高回歸測試的效率,減少回測測試中的複雜度並使選擇出的測試用例仍具備較高的錯誤檢測能力。
【背景技術】
[0002]軟體產品在開發和維護過程中,因移除內在缺陷、完善已有功能、重構已有代碼或提高運行性能等,需要執行代碼修改並觸發軟體演化。隨著以統一過程和敏捷方法為代表的增量迭代式開發過程的流行,軟體演化頻率也隨之迅速提高並亟需經濟有效的測試方法來確保演化後軟體產品的質量。回歸測試是其中一種有效方法,可有效保證代碼修改的正確性並避免代碼修改對被測程序其他模塊產生的副作用。執行回歸測試時的一個核心問題是測試用例集的維護策略設定。在軟體持續演化過程中,因新測試用例的不斷添加,導致測試用例集規模持續增長並增加了測試用例集的執行和維護開銷。例如有研究人員在某一合作企業內,當測試一個包含約2萬行代碼的軟體產品時,發現運行所有測試用例後,所需時間高達7周。而測試用例集壓縮方法在滿足指定測試需求(例如語句、分支和定義使用對等)的覆蓋前提下,通過識別並移除冗餘測試用例來壓縮測試用例集規模,從而提高回歸測試效率並降低回歸測試成本。
[0003]然而傳統的測試用例集壓縮方法僅考慮對單一測試需求的覆蓋,隨後設計出新穎的算法來完成測試用例集的壓縮並儘可能的使得壓縮後的測試用例集規模更小。在一些實證研究中,研究人員發現測試用例集壓縮方法雖可以大幅度縮減壓縮後的測試用例集規模,但同時也會顯著降低原有測試用例集的缺陷檢測能力。
[0004]綜上所述,為提高壓縮後的測試用例集缺陷檢測能力,有必要設計出一種系統方法來提高壓縮後的測試用例集的缺陷檢測能力。本發明由此而來。
【發明內容】
[0005]本發明目的在於提供一種基於語句交互覆蓋的回歸測試用例選擇方法,解決了現有技術中測試用例集壓縮方法雖然大幅度縮減壓縮後的測試用例集規模,但顯著降低原有測試用例集的缺陷檢測能力等難題,本發明的方法有效降低測試用例數量並保持足夠高的錯誤檢測能力。
[0006]為了解決現有技術中這些問題,本發明提供的技術方案如下:
[0007]一種基於語句交互覆蓋的回歸測試用例選擇方法,包括如下步驟:
[0008](I)對待測程序進行插樁,在插樁後的程序上執行用於測試被測程序的已有測試用例集中的每個測試用例,記錄每個測試用例的語句覆蓋信息並構造出測試用例-語句覆蓋矩陣,確定需覆蓋的語句集R ;
[0009](2)基於測試用例-語句覆蓋矩陣生成可覆蓋的語句間交互集I ;
[0010](3)根據可覆蓋的語句間交互集1、需覆蓋的語句集R和已有測試用例集,按照選擇策略執行測試用例集壓縮方法,並最終生成壓縮後的測試用例集。
[0011]優選的技術方案中,所述方法步驟(3)中執行測試用例集壓縮方法按照以下步驟進行:
[0012]I)構造壓縮後的測試用例集,並設置壓縮後測試用例集為空集; [0013]2)按照第一選擇策略SI從已有測試用例集中選擇覆蓋語句集R中相應的語句的測試用例,添加到壓縮後的測試用例集中,並確定語句間交互集I中已經覆蓋的語句交互;
[0014]3)按照第二選擇策略S2從已有測試用例集中選擇覆蓋語句間交互集I中尚未覆蓋的語句交互的測試用例,添加到壓縮後的測試用例集中。
[0015]優選的技術方案中,所述方法步驟2)按照第一選擇策略SI從已有測試用例集中選擇覆蓋需覆蓋的語句集R中相應的語句的測試用例按照如下步驟進行:
[0016]Al)計算出需覆蓋的語句集R中每個語句的基數,獲取需覆蓋的語句集R中語句的最小基數;所述基數為測試用例集中覆蓋該語句的測試用例數量;
[0017]A2)從已有測試用例集中選擇測試用例子集Tl,使其中的測試用例覆蓋擁有最小基數的語句個數最多;
[0018]A3)如果測試用例子集Tl僅包含一個測試用例,則將該測試用例為被選定的測試用例;如果測試用例子集Tl包含兩個或兩個以上的測試用例時,從測試用例子集Tl中選擇測試用例子集T2,使其中的測試用例覆蓋語句間交互集I中語句交互最多;
[0019]A4)如果測試用例子集T2僅包含一個測試用例,則該測試用例為被選定的測試用例;如果測試用例子集T2包含兩個或兩個以上的測試用例時,從測試用例子集T2中隨機選擇一個測試用例作為被選定的測試用例。
[0020]優選的技術方案中,所述方法步驟3)按照第二選擇策略S2從已有測試用例集中選擇未同時覆蓋需覆蓋的語句集R中相應的語句和語句間交互集I的語句交互的測試用例按照如下步驟進行:
[0021]Al)計算出語句間交互集I中每個語句交互的基數,獲取需覆蓋的語句間交互集I中語句交互的最小基數;所述基數為測試用例集中覆蓋該語句交互的測試用例數量;
[0022]A2)從已有測試用例集中選擇測試用例子集Tl』,使其中的測試用例覆蓋擁有最小基數的語句交互個數最多;
[0023]A3)如果測試用例子集Tl』僅包含一個測試用例,則將該測試用例為被選定的測試用例;如果測試用例子集Tl』包含兩個或兩個以上的測試用例時,從測試用例子集Tl』中隨機選擇一個測試用例作為被選定的測試用例。
[0024]優選的技術方案中,所述方法步驟3)中已有測試用例集為原始已有測試用例集中排除已添加到壓縮後的測試用例集中測試用例的測試用例集合。
[0025]優選的技術方案中,所述方法步驟⑴中假設已有測試用例集為T,其中包含m個測試用例,待測程序中包含需要覆蓋的n個語句,則測試用例-語句覆蓋矩陣是一個mXn的矩陣,表示為:
c丨丨 C12 L Cln
[0026]2' 22 2
LLLL
_Cm\ Cm2 L Cm? _[0027]其中若第i個測試用例覆蓋第j個語句,則Cu取值為1,否則Cu取值為0 ;如果語句k與語句u構成的語句交互是可覆蓋的,若且唯若存在測試用例q,使得Cqk和Cqu同時取值為 I ;其中 1、j、n、k、u、q、m 均是整數,且 0〈=i〈=m ;0〈=j〈=n ;0〈=k〈=n ;0〈=u〈=n ;0〈=q〈=m。
[0028]本發明涉及回歸測試中的測試用例集優化方法。本發明所要解決的問題是傳統測試用例集壓縮方法雖可以大幅度縮減壓縮後的測試用例集規模,但同時也會顯著降低原有測試用例集的缺陷檢測能力。本發明人經長期研究發現,軟體在實際測試時,部分軟體缺陷的觸發與語句間的交互有關,本發明通過添加少量測試用例來額外滿足對語句交互的覆蓋並提出一種新穎測試用例集壓縮方法,實踐結果表明該方法可以有效提高壓縮後的測試用例集缺陷檢測能力,並且不需要大幅度增加壓縮後的測試用例集規模。
[0029]本發明採用如下方法進行測試用例的選擇:⑴將被測程序P進行代碼插樁;(2)在插樁後的程序上執行原有測試用例集T中的每個測試用例,並記錄每個測試用例的語句覆蓋信息;(3)生成可覆蓋的語句間交互集;(4)執行測試用例集壓縮方法以確保對語句間交互的充分覆蓋並最終生成壓縮後的測試用例集。
[0030]當原有測試用例集規模較大時,為降低回歸測試成本,傳統方法僅考慮對單個語句的覆蓋,但在分析軟體的實際測試過程時發現:部分軟體內在缺陷的觸發與語句間的交互有關,本發明在滿足對單個語句覆蓋的前提下,通過添加少量測試用例來額外滿足對語句交互的覆蓋並提出一種測試用例集壓縮方法,在C語言編程實現的代碼上,運行該方法後發現:本發明可以有效提高壓縮後的測試用例集缺陷檢測能力,並且不需要大幅度增加壓縮後的測試用例集規模。
[0031]相對於現有技術,本發明的優點在於:
[0032]本發明的技術方案用於從待測程序的測試用例集裡選取測試用例子集,以進一步提高回歸測試的效率,並使選取的測試用例具備足夠高的錯誤檢測能力。通過在現有技術的基礎上記錄每個測試用例的語句覆蓋信息,生成可覆蓋的語句間交互集,通過選擇策略獲取測試用例,了解語句交互之間的聯繫,在回歸測試階段有效降低測試用例數量並保持足夠高的錯誤檢測能力。
[0033]本發明通過語句分析對回歸測試中的測試用例的數量和錯誤檢測能力這兩者進行了充分權衡,以一種全新的、更加動態的方式處理測試用例,通過測試用例所展現出的程序行為的內在聯繫來理解程序,使得測試用例的選擇變得更加容易和自動化,從而可以更有效的使用這些測試用例進行回歸測試,在現有技術的基礎上進一步提高了測試用例選擇的精確度,使發現錯誤的測試用例在選擇出來的測試用例集中所佔比例增大,與現有的回歸測試技術相比,本發明從原始測試用例集選擇出覆蓋語句集和語句交互集合的測試用例構成壓縮後測試用例集,選擇出的測試用例數量減小,同時保持測試用例集本身對待測程序較高的錯誤檢測能力,從而提高了回歸測試的效率。
【專利附圖】
【附圖說明】
[0034]下面結合附圖及實施例對本發明作進一步描述:
[0035]圖1是基於語句交互覆蓋的測試用例集壓縮方法的框架圖;
[0036]圖2是基於語句交互覆蓋的測試用例集壓縮方法總體流程圖;
[0037]圖3是基於語句和語句交互覆蓋的第一選擇策略SI的流程圖;[0038]圖4是基於語句交互覆蓋的第二選擇策略S2的流程圖。
【具體實施方式】
[0039]為了更詳盡的表述上述發明的技術方案,以下本發明人列舉出具體的實施例來說明技術效果;需要強調的是,這些實施例是用於說明本發明而不限於限制本發明的範圍。
[0040]實施例
[0041]本實施例的基於語句交互覆蓋的回歸測試用例選擇方法的總體流程圖如圖1所示,包含如下步驟:
[0042](I)將被測程序P進行代碼插樁。
[0043](2)在插樁後的程序上執行原有測試用例集T中的每個測試用例,記錄每個測試用例的語句覆蓋信息並構造出測試用例-語句覆蓋矩陣。假設T中包含m個測試用例,P中包含需要覆蓋的n個語句,則該矩陣是一個mXn的矩陣且可表示如下:
【權利要求】
1.一種基於語句交互覆蓋的回歸測試用例選擇方法,其特徵在於,所述方法包括如下步驟: (1)對待測程序進行插樁,在插樁後的程序上執行用於測試被測程序的已有測試用例集中的每個測試用例,記錄每個測試用例的語句覆蓋信息並構造出測試用例-語句覆蓋矩陣,確定需覆蓋的語句集R ; (2)基於測試用例-語句覆蓋矩陣生成可覆蓋的語句間交互集I; (3)根據可覆蓋的語句間交互集1、需覆蓋的語句集R和已有測試用例集,按照選擇策略執行測試用例集壓縮方法,並最終生成壓縮後的測試用例集。
2.根據權利要求1所述的方法,其特徵在於,所述方法步驟(3)中執行測試用例集壓縮方法按照以下步驟進行: 1)構造壓縮後的測試用例集,並設置壓縮後測試用例集為空集; 2)按照第一選擇策略SI從已有測試用例集中選擇覆蓋語句集R中相應的語句的測試用例,添加到壓縮後的測試用例集中,並確定語句間交互集I中已經覆蓋的語句交互; 3)按照第二選擇策略S2從已有測試用例集中選擇覆蓋語句間交互集I中尚未覆蓋的語句交互的測試用例,添加到壓縮後的測試用例集中。
3.根據權利要求2所述的方法,其特徵在於,所述方法步驟2)按照第一選擇策略SI從已有測試用例集中選擇覆蓋需覆蓋的語句集R中相應的語句的測試用例按照如下步驟進行: Al)計算出需覆蓋的語句集R中每個語句的基數,獲取需覆蓋的語句集R中語句的最小基數;所述基數為測試用例集中覆蓋該語句的測試用例數量; A2)從已有測試用例集中選擇測試用例子集Tl,使其中的測試用例覆蓋擁有最小基數的語句個數最多; A3)如果測試用例子集Tl僅包含一個測試用例,則將該測試用例為被選定的測試用例;如果測試用例子集Tl包含兩個或兩個以上的測試用例時,從測試用例子集Tl中選擇測試用例子集T2,使其中的測試用例覆蓋語句間交互集I中語句交互最多; A4)如果測試用例子集T2僅包含一個測試用例, 則該測試用例為被選定的測試用例;如果測試用例子集T2包含兩個或兩個以上的測試用例時,從測試用例子集T2中隨機選擇一個測試用例作為被選定的測試用例。
4.根據權利要求2所述的方法,其特徵在於,所述方法步驟3)按照第二選擇策略S2從已有測試用例集中選擇未同時覆蓋需覆蓋的語句集R中相應的語句和語句間交互集I的語句交互的測試用例按照如下步驟進行: Al)計算出語句間交互集I中每個語句交互的基數,獲取需覆蓋的語句間交互集I中語句交互的最小基數;所述基數為測試用例集中覆蓋該語句交互的測試用例數量; A2)從已有測試用例集中選擇測試用例子集Tl』,使其中的測試用例覆蓋擁有最小基數的語句交互個數最多; A3)如果測試用例子集Tl』僅包含一個測試用例,則將該測試用例為被選定的測試用例;如果測試用例子集Tl』包含兩個或兩個以上的測試用例時,從測試用例子集Tl』中隨機選擇一個測試用例作為被選定的測試用例。
5.根據權利要求2或4所述的方法,其特徵在於,所述方法步驟3)中已有測試用例集為原始已有測試用例集中排除已添加到壓縮後的測試用例集中測試用例的測試用例集合。
6.根據權利要求1所述的方法,其特徵在於,所述方法步驟(1)中假設已有測試用例集為T,其中包含m個測試用例,待測程序中包含需要覆蓋的n個語句,則測試用例-語句覆蓋矩陣是一個mXn的矩陣,表示為:
【文檔編號】G06F11/36GK103617119SQ201310643493
【公開日】2014年3月5日 申請日期:2013年12月3日 優先權日:2013年12月3日
【發明者】陳翔, 田丹, 徐慧, 文萬志, 陳繼紅, 蔣崢崢 申請人:南通大學