一種基于分支覆蓋與相似性的回歸測試用例優(yōu)先排序方法
【技術領域】
[0001] 本發(fā)明屬于軟件測試領域,且特別是有關于一種基于分支覆蓋與相似性的回歸測 試用例優(yōu)先排序方法。
【背景技術】
[0002] 軟件測試是一項旨在幫助軟件測試工程師或者質量保證工程師衡量軟件質量,驗 證并確認被測軟件能否滿足設計要求進行評估的過程。作為軟件開發(fā)過程中的一個重要組 成部分,軟件測試貫穿整個軟件生命周期。軟件的改正性維護、適應性維護W及完善性維護 都將引起軟件的變化,軟件一旦發(fā)生變更就需要回歸測試(Regression testing)被測軟 件,W確保新的變更沒有產生副作用?;貧w測試是軟件開發(fā)與維護過程中代價最昂貴的活 動之一,占了總測試預算的80%,軟件維護階段總費用的50%。無論是傳統(tǒng)的軟件開發(fā),還是 快速迭代開發(fā),抑或是敏捷開發(fā),新版本的連續(xù)發(fā)布使得回歸測試更加頻繁。在運種背景 下,回歸測試需要消耗更多的人力與物力。一個成功的軟件回歸測試過程能夠盡肯能早地 發(fā)現(xiàn)被測軟件產品中存在的回歸錯誤、缺陷和失效,W便為錯誤定位與錯誤修復節(jié)省更多 的資源,從而提高軟件產品的質量。
[0003] 回歸測試用例優(yōu)先排序(Test case prioritization)是軟件回歸測試中的一項 重要的工作,通過重新排列測試用例的執(zhí)行順序,旨在讓那些能夠發(fā)現(xiàn)回歸錯誤的測試用 例盡可能早地執(zhí)行,W便提高軟件回歸測試的效率。在演化的軟件版本上進行回歸測試之 前,測試用例的錯誤發(fā)現(xiàn)能力是未知的。運就需要借助于代理,比如測試用例覆蓋代碼的能 力,對測試用例進行優(yōu)先排序。回歸測試通常是在受限的測試資源與測試環(huán)境下開展的,運 就意味著回歸測試中僅能執(zhí)行部分測試用例。另外,由于軟件的改善性維護使得原有的測 試用例不能夠滿足測試的需求,回歸測試過程中需要注入新的測試用例W便滿足回歸測試 充分性的要求。運就要求回歸測試用例的優(yōu)先排序方法必須是可擴展的。
[0004] 傳統(tǒng)的回歸測試用例優(yōu)先排序方法具有如下特點。
[0005] 1、借助于測試用例覆蓋代碼的能力進行排序。
[0006] 基于測試用例覆蓋代碼能力進行排序的方法根據測試用例覆蓋代碼的能力進行 排序,覆蓋能力越強的測試用例執(zhí)行順序越優(yōu)先,或者是增加總覆蓋能力越多地測試用例 執(zhí)行順序越優(yōu)先。然而,在回歸測試過程中為了產生例外行為或者是測試一些??诘墓δ?模塊而隨機生成了一些測試用例,運些測試用例并非都具有較強的覆蓋代碼的能力。而且, 在測試過程中一旦發(fā)現(xiàn)嚴重錯誤將影響測試用例的執(zhí)行,對于運些測試用例而言,它們的 覆蓋能力并不強,但仍能發(fā)現(xiàn)錯誤。運使得傳統(tǒng)的基于覆蓋的回歸測試用例優(yōu)先排序方法 的錯誤發(fā)現(xiàn)效率不高。
[0007] 2、同等對待具有相同覆蓋能力或者相同增加總覆蓋能力的測試用例。
[0008] 基于覆蓋的回歸測試用例優(yōu)先排序方法在排序過程中并沒有區(qū)分具有相同覆蓋 能力(覆蓋的代碼數量相等)或者相同增加總覆蓋能力(對總覆蓋的代碼數量的提升具有相 同的貢獻)的測試用例的差別。運使得基于覆蓋的回歸測試用例優(yōu)先排序方法產生的結果 具有較強的隨機性,制約了該方法在實踐中的應用。
[0009] 3、一旦有新的測試用例注入原始的測試套件中,基于覆蓋的回歸測試用例優(yōu)先排 序方法需要對測試用例進行重新排序。
[0010] 在軟件的完善性維護階段會增加新的功能和性能要求,為了滿足軟件回歸測試充 分性的要求,需要注入新的測試用例?;诟采w的回歸測試用例優(yōu)先排序方法根據測試用 例的覆蓋能力對其進行重新排序,運使得回歸測試用例優(yōu)先排序方法不具有擴展性。
[0011] 隨著敏捷開發(fā)的不斷普及,軟件的回歸測試會更加頻繁,傳統(tǒng)的回歸測試用例優(yōu) 先排序方法已經越來越不能滿足實際軟件回歸測試的需要。
【發(fā)明內容】
[0012] 本發(fā)明目的在于提供一種基于分支覆蓋與相似性的回歸測試用例優(yōu)先排序方法, 解決目前存在的回歸測試用例優(yōu)先排序方法效率不高、隨機性較強W及不易于擴展等問 題,進而提高回歸測試錯誤發(fā)現(xiàn)效率,降低隨機性對錯誤發(fā)現(xiàn)效率的影響,提升回歸測試用 例優(yōu)先排序方法的可擴展性,從而更高效地開展軟件回歸測試,進而提高軟件產品的質量。
[0013] 本發(fā)明的技術方案為:基于分支覆蓋和相似性的回歸測試用例優(yōu)先排序方法,在 待測程序上運行所有的測試用例,通過動態(tài)插粧技術自動地獲得每一個測試用例的執(zhí)行剖 面(profile),分析執(zhí)行剖面并構建分支覆蓋向量,如果分支被覆蓋則在向量中的值為1,反 之則為0;通過歐式距離函數計算成對的分支覆蓋向量的距離,將該距離作為對應剖面的測 試用例之間的距離;根據測試用例多樣性理論,定義目標函數模型,并W此為指導,采用蟻 群算法對回歸測試用例進行優(yōu)先排序。
[0014] 為實現(xiàn)上述目標,本發(fā)明提出了一種基于分支覆蓋與相似性的回歸測試用例優(yōu)先 排序方法。本方法具體步驟如下。
[0015] 1)測試用例剖面信息的收集與分支覆蓋向量的構建。采用自動化方式批量執(zhí)行所 有的測試用例,并聯(lián)合動態(tài)插粧技術獲得運行測試用例產生的剖面信息文件。分析獲得的 剖面信息文件,并提取文件中的分支執(zhí)行頻率列為每一個測試用例構造分支覆蓋向量。如 果一個分支執(zhí)行頻率大于0,則在分支覆蓋向量中該分支對應的值是1,否則是0。
[0016] 2)成對的測試用例之間距離的計算。使用步驟1)產生的分支覆蓋向量計算成對的 剖面之間的距離,并將其作為與剖面信息對應的測試用例之間的距離?;诔蓪Φ臏y試用 例之間的距離信息構造相異度矩陣。根據步驟1)產生的分支覆蓋向量計算兩個測試用例之 間的歐式距離,計算公式如下:
式中緣5雜Il表示測試用例X與Y之間的歐式距離,心'和巧分別表示測試用例X和Y對 應的分支覆蓋向量中的第i分支的取值。
[0017] 3)回歸測試用例的優(yōu)先排序。具體實施過程如下:首先W測試用例作為頂點,測試 用例之間的連線作為邊,鄰接的測試用例之間的距離作為邊的權重(使用步驟2)產生的相 異度矩陣)構造測試用例不相似性有限完全圖。然后W目標函數為指導,通過蟻群算法(Ant colony optimization, AC0)求解具有最長路徑的哈密頓(HamiIton)路。測試用例的多樣 性有助于提高回歸測試的錯誤發(fā)現(xiàn)效率,因此通過尋找具有最長距離的路徑的測試用例序 列W最大程度上保證測試用例的多樣性。最后將產生的Hamilton路中的測試用例序列作為 回歸測試用例優(yōu)先排序的最終序列。目標函數如下:
式中,貸表示待排序的測試用例集合。
[001引進一步,其中上述步驟1)的具體步驟如下: 步驟1)-1:起始狀態(tài); 步驟1 )-2:在被測程序中自動注入動態(tài)插粧代碼,并編譯被測的源程序; 步驟1)-3:自動運行被測程序并輸入一個測試用例; 步驟1)-4:收集運行每一個測試用例產生的剖面信息,并將其保存在磁盤中; 步驟1)-5:重復執(zhí)行步驟1)-2、步驟1)-3、步驟0-4,直到獲取了一個測試套件中的所 有測試用例的剖面信息; 步驟0-6:讀取保存的每一個剖面信息文件,通過分析該文件提取待測程序中每一個 分支被覆蓋的頻率信息。在此基礎上,基于獲得的分支覆蓋的頻率信息構造分支覆蓋向量。 若頻率值大于0,則在分支覆蓋向量中該分支的取值為1,否則為0。運個過程持續(xù)進行,直到 為一個測試套件中的所有測試用例構造完分支覆蓋向量為止; 步驟1 )-7:將所有測試用例對應的分支覆蓋向量保存到文件中,該文件中的每一行包 括測試用例的編號信息,W及測試用例對應的分支覆蓋向量; 步驟1)-8:測試用例的分支覆蓋向量構造完畢。
[0019] 進一步,其中上述步驟2)的具體步驟如下: 步驟2)-1:起始狀態(tài); 步驟2)-2:從磁盤中按行讀取步驟1)-7產生的分支覆蓋向量文件; 步驟2)-3:解析讀取的每一行,將測試用例