專利名稱:一種基于修改影響分析的回歸測試用例生成方法
技術領域:
本發(fā)明提出了一種新型的回歸測試用例生成方法,主要是利用修改影響分析評估軟件修改所帶來的影響進行回歸測試用例的生成,屬于軟件測試中回歸測試用例生成領域。
背景技術:
軟件系統為了滿足人們的需求、性能的改進、功能的增強或者處理系統中發(fā)現的故障等等,都可能需要對系統進行相應的修改。在現代軟件系統的生命周期內,軟件缺陷修復,功能增強,性能改進,需求增加,運行環(huán)境改變等均要求軟件系統具有較強的演化能力,從而要求軟件工程人員能夠快速適應改變,減少軟件維護的代價。軟件維護活動的核心是進行軟件修改。由于修改肯定會對軟件的其他部分造成一些潛在影響,從而帶來軟件的不一致。所以在對軟件進行修改之后,需要對軟件系統進行再測試以保證修改之后的軟件系統仍然是安全的,這個過程就是回歸測試。 在對軟件實施一系列的修改過程中,可以得到此次軟件維護活動的修改集合。在修改過程中,一些修改又可能給系統帶來新的影響和波動,這就需要對這些修改能傳播到的范圍進行再次檢查,確認是否需要繼續(xù)實施修改或者進行二次修改。這樣,修改對軟件系統影響范圍內的內容就構成了此次修改所帶來的影響集合,這個過程就是修改影響分析。為了驗證修改之后軟件是否滿足一致性和正確性,需要對軟件系統進行再測試,也就是回歸測試。在這個過程中,首先需要產生回歸測試用例集。測試用例集需要滿足的基本條件是測試用例在回歸測試的時候能夠覆蓋軟件修改的部分,同時也需要覆蓋修改對軟件造成影響的部分。這樣,回歸測試才能夠較充分地驗證修改后的軟件系統的一致性和正確性。為了便于對軟件進行修改影響分析,需要將源代碼抽象成一定層次的抽象模型,提取源代碼的基本信息構造方法調用圖是對程序建模常用的方法。方法調用圖能夠有效地表示程序控制流關系,且抽象粒度適中、便于程序分析和軟件工程人員的理解。修改影響分析可以用在軟件維護過程中修改方案的評估和軟件實施修改后的影響傳播分析,本發(fā)明主要利用修改影響分析對軟件修改帶來的影響進行評估,然后利用修改影響分析的結果進行回歸測試用例生成,使得生成的回歸測試用例集合能夠覆蓋修改所帶來的影響范圍,從而驗證修改后的軟件的正確性和一致性。
發(fā)明內容
本發(fā)明的目的在于提出了一種基于修改影響分析的回歸測試用例生成方法,該方法利用修改影響分析計算得到影響集并根據測試路徑覆蓋規(guī)則高效地生成測試用例,用盡量少的測試用例覆蓋盡量多的修改影響范圍。實現上述目的,本發(fā)明采用技術方案如下一種基于修改影響分析的回歸測試用例生成方法,包括如下步驟I)將源代碼轉換成方法調用圖,通過特征定位將程序中的修改信息映射到方法調用圖中的對應元素,映射的元素組成的修改集將作為修改影響分析的輸入;2)在方法調用圖中進行修改影響分析,得到影響集;3)利用修改集和影響集構造判定表,判定表的定義為TS={ □ I DG CSXIS},其中CS為修改集、IS為影響集,□為CS和IS笛卡爾積中的元素;修改集和影響集中的元素都是基于方法的,故判定表中的每ー項表示了影響集中的方法是否受到了被修改的方法的影響;4)利用判定表生成測試路徑集合,方法如下在方法調用圖中選取CS(j)和IS(k)間的可達路徑,構造測試路徑集合Test-Path-Set,測試路徑集合是由CS(j)和IS (k)之間所有可達路徑的并集構成,若無法找到判定表中第i行CS(j)和IS(k)之間的可達路徑,那么將判定表該行刪除;其中,對于判定表中的第i行,基本覆蓋條件TS⑴={(CS (j),IS (k)) I彡j彡I CS I,I彡k彡IIS I},其中CS(j)為判定表第i行對應的修改集中的元素,IS(k)為判定表第i行對應的影響集中 的元素;5)若測試路徑集合中的路徑的第一個元素在方法調用圖中的出度為I或0,且該路徑是其他路徑的子路徑,即該路徑包含在其他路徑中,那么就將該路徑從測試路徑集合中刪除,從而得到測試路徑約簡后的集合;6)利用測試路徑約簡集合生成測試用例6. I)對于某ー測試路徑 test-path={v0, V1, V2, vk},其中 test-path 為方法集合,對該測試路徑的每個方法單獨進行測試,得到該方法的輸入域劃分和對應的輸出域Unput(Vi), output (Vi)} (0彡i彡k);由于vi+1的輸入域和Vi的輸出域相關聯,那么由vi+1的輸入域和Vi的輸出域關聯分析逆推得到Vi的輸入域,依次逆推就可以得到%的輸出域;6. 2)以方法V。的輸入作為測試用例就能對測試路徑test-path= {vQ, V1, V2, . . vj進行覆蓋測試;最后,對每條測試路徑中的第一個方法按步驟6. I)與步驟6. 2)的方法產生測試輸入,就得到了測試用例集。有益效果本發(fā)明提出了一種基于修改影響分析的回歸測試用例生成方法,在方法層次上進行修改影響分析,并利用路徑覆蓋判定生成測試用例集,主要有以下ー些優(yōu)點(I)基于方法層次的修改影響分析能有效地表示程序的修改信息和程序受到潛在影響的部分。在計算影響集的時候,考慮了多處修改的關聯關系,這使得影響集的結果更加精確;(2)利用修改影響分析過程中的修改集和影響集生成的判定表有效地表示了回歸測試用例生成的基本覆蓋條件。在測試用例生成的過程中,判定表使得測試用例生成簡單、聞效;(3)利用判定表生成測試路徑集合,便于在方法層次上進行回歸測試,同時也使得測試用例生成更加便捷。測試路徑集合完全覆蓋了受到修改影響的方法,使得測試能夠更加充分。
圖I是基于修改影響分析的回歸測試用例生成框架。圖2是基于修改影響分析的回歸測試用例生成的一般過程。圖3是修改影響分析法的一般過程。圖4是利用修改影響分析的結果構造判定表生成測試用例的過程示意圖。圖5是本發(fā)明實施例中程序的方法調用圖示例。圖6是本發(fā)明實施例中程序修改操作示例。
具體實施例方式下面結合附圖對本發(fā)明的技術方案進行詳細說明。
修改影響分析主要的任務是將修改后的程序和原程序進行比較得到修改信息,其中主要包括源代碼的添加、刪除、替換等操作,然后對原程序進行影響分析并計算得到程序受影響的部分。在回歸測試階段,需要重新生成一些測試用例來覆蓋程序修改后功能更改或新増加特性的部分,同時也應該覆蓋原程序中受到影響的部分,使得修改后的程序和原程序的功能和行為能夠保持一致。本發(fā)明主要利用修改影響分析的結果生成判定表,并利用判定表來尋找最優(yōu)覆蓋路徑來生成測試用例,使得回歸測試用例生成簡單高效。圖I給出了基于修改影響分析的回歸測試用例生成的一般過程示意圖。這里的回歸測試用例生成主要由兩部分組成修改影響分析和測試路徑覆蓋分析。修改影響分析是根據原程序修改點分析程序中受到修改影響的部分。在程序修改信息不知的情況下,通常將原程序和修改后的程序進行比較,利用語句或控制流等進行差異分析。在本發(fā)明中,程序修改信息通過軟件特征定位方法獲得,在實際軟件維護中,修改信息也可以通過版本控制等手段獲知。測試路徑覆蓋分析考慮如何生成測試用例將程序修改點及其受到影響部分進行覆蓋。這里,如果我們識別出的程序修改信息是方法,那么就要對相應的方法進行覆蓋分析,才能得到需要重新運行的測試用例。圖4給出了利用修改影響分析后的結果選取測試路徑進行測試路徑覆蓋分析的過程示意圖。結合圖2中的回歸測試用例生成流程,下面對流程中的步驟給予具體的說明。I)通過特征定位技術將程序的修改點定位到程序的方法中。對程序源代碼來講,一般不利于軟件開發(fā)人員理解和分析。所以需要先對源代碼進行轉換并建模成人們易于理解的模型,常見的有類與方法之間的依賴圖或者方法調用圖模型。本發(fā)明在修改影響分析中使用的模型是方法調用圖。方法調用圖能清楚地描述程序的控制轉移流程,以及方法之間的控制依賴關系,便于理解和分析程序。特征定位應用到修改影響分析中就是將程序的修改點映射到模型中的元素上,這樣就便于后面要進行的修改影響分析。在本發(fā)明中,由于所使用的抽象模型為方法調用圖,所以將程序的修改信息映射到方法中得到的方法集合即為程序的修改集(Change Set, CS)。2)利用修改影響分析技術計算程序受到修改影響的部分。修改影響分析的目的是分析程序受到修改影響的程度。附圖3是修改影響分析的一般過程,給出程序的修改集,通過修改影響分析得到了程序潛在受到影響的部分也就是影響集(Impact Set,IS)。本發(fā)明使用的修改影響分析技術是基于方法調用圖的,修改影響分析的輸入和輸出均是方法集合。修改集中的元素可以很方便的標記到方法調用圖中,通過影響分析算法在調用圖中進行向上可達遍歷得到的方法集合就是影響集。3)利用第I)和第2)步中得到修改集和影響集構造判定表。影響集(IS)是修改影響分析在修改集(CS)的基礎上計算得到的。判定表的定義為TS={ロ I DG CSXIS}.判定表中包括了修改集中每個修改元素對影響集中每個受影響元素的影響關系。由于修改集和影響集中的元素都是基于方法粒度的,故判定表中的每ー項表示了影響集中的方法是否受到了被修改的方法的影響。4)利用判定表生成測試路徑集合,對程序受到修改影響的內容進行覆蓋判定。判定表中的每一行為ー個測試用例基本覆蓋條件,代表一個測試用例能夠覆蓋最少方法的情況,即該測試用例至少覆蓋ー個被修改的方法和它所能影響的ー個方法。在下面實施例中的表I是ー個判定表的例子。對判定表中的第i行,基本覆蓋條件TS(i) = {(CS(j),IS(k)) |1彡j彡|CS|,I彡k彡 IS I},其中CS為修改集,CS (j)為判定表第i行對應的修改集中的元素,IS為影響集,IS (k)
為判定表第i行對應的影響集中的元素。在方法調用圖中選取CS (j)和IS(k)間的可達路徑,構造測試路徑集合Test-Path-Set。測試路徑集合時由CS(j)和IS(k)之間所有可達路徑的并集構成。若無法找到判定表中第i行CS(j)和IS(k)之間的可達路徑,那么需要將判定表該行刪除。利用判定表生成測試路徑,有一定的順序,首先需要先考慮修改集中修改操作為“修改”的元素,然后是修改操作為“增加”的元素,最后是修改操作為“刪除”的元素,因為ー個方法刪除后,就不會再對該方法進行測試了。5)刪除測試路徑集合中的冗余測試路徑。由于許多方法都被包含在測試路徑集合Test-Path-Set中的多條測試路徑中,對于測試路徑集合中的路徑的第一個元素%,若元素Vtl在調用圖中的出度為I或0,且該路徑是其他路徑的子路徑,即該路徑包含在其他路徑中,那么就將該路徑從測試路徑集合中刪除。6)生成測試用例集合。對于某ー測試路徑test-path= {v0,V1, V2,. . vk},其中 V0 G IS, vk G CS。在單元測試的時候,由于對每個方法單獨進行了測試,知道了該方法的輸入域劃分和對應的輸出域{input (Vi), output (Vi)I (0彡i彡k)。vi+1的輸入域和Vi的輸出域相關聯,由vi+1的輸入域和Vi的輸出域關聯分析逆推得到Vi的輸入域,依次逆推就可以得到V。的輸出域。這樣,以方法vO的輸入作為測試用例就能對測試路徑Ivtl, V1, V2,. . vk}進行覆蓋測試。對每條測試路徑中的第一個方法按上面所述的步驟產生測試輸入,就得到了測試用例集。其中概念測試用例集TestSuit=It 11 G input (v0) A V0 G test-path A test-path GTest-Path-Set}。實施例為了方便描述,我們假定有如下簡化的應用實例假定程序P 中有 13 個方法,分別是{Ml, M2, M3, M4, M5, M6, M7, M8, M9, M10, Mil, M12,M13}。程序P的方法調用圖見附圖5。當對程序實施修改后,通過特征定位將每個修改操作定位到方法中得到修改集Change Set= {M2, M3, M14},其中包括了方法的修改、刪除和增加。本例中方法M2被修改,方法M3被刪除,添加了方法M14,修改后的方法調用圖見附圖6。通過修改影響分析技術(已公知技術不進一步描述)計算得到影響集Impact Set= {Ml, M4, M5, M6, M7, Mil, M13}。現在利用修改集和影響集生成如下的判定表表I :程序P的判定表
權利要求
1.一種基于修改影響分析的回歸測試用例生成方法,其特征在于,包括如下步驟 1)將源代碼轉換成方法調用圖,通過特征定位將程序中的修改信息映射到方法調用圖中的對應元素,映射的元素組成的修改集將作為修改影響分析的輸入; 2)在方法調用圖中進行修改影響分析,得到影響集; 3)利用修改集和影響集構造判定表,判定表的定義為TS={□ I De CSXIS},其中CS為修改集、IS為影響集,□為CS和IS笛卡爾積中的元素;修改集和影響集中的元素都是基于方法的,故判定表中的每一項表示了影響集中的方法是否受到了被修改的方法的影響; 4)利用判定表生成測試路徑集合,方法如下在方法調用圖中選取CS(j)和IS(k)間的可達路徑,構造測試路徑集合Test-Path-Set,測試路徑集合是由CS(j)和IS (k)之間所有可達路徑的并集構成,若無法找到判定表中第i行CS(j)和IS(k)之間的可達路徑,那么將判定表該行刪除;其中,對于判定表中的第i行,基本覆蓋條件TS⑴={(CS (j),IS (k)) I彡j^ |CS|, |15|},其中05(」)為判定表第i行對應的修改集中的元素,IS (k)為判定表第i行對應的影響集中的元素; 5)若測試路徑集合中的路徑的第一個元素在方法調用圖中的出度為I或O,且該路徑是其他路徑的子路徑,即該路徑包含在其他路徑中,那么就將該路徑從測試路徑集合中刪除,從而得到測試路徑約簡后的集合; 6)利用測試路徑約簡集合生成測試用例。
2.根據權利要求I所述的回歸測試用例生成方法,其特征在于,所述步驟6)利用測試路徑約簡集合生成測試用例,具體實現步驟如下 . 6.I)對于某一測試路徑 test-path= {v0, V1, v2, · · vk},其中 test-path 為方法集合,對該測試路徑的每個方法單獨進行測試,得到該方法的輸入域劃分和對應的輸出域Unput(Vi), output (Vi)} (O彡i彡k);由于vi+1的輸入域和Vi的輸出域相關聯,那么由vi+1的輸入域和Vi的輸出域關聯分析逆推得到Vi的輸入域,依次逆推就可以得到%的輸出域; .6.2)以方法V。的輸入作為測試用例就能對測試路徑test-path= {v。,V1, V2, . . vk}進行覆蓋測試; .6.3)對每條測試路徑中的第一個方法按步驟6. I)與步驟6. 2)的方法產生測試輸入,就得到了測試用例集。
全文摘要
本發(fā)明提出了一種基于修改影響分析的回歸測試用例生成方法。首先對程序建模構造出源代碼的中間表示,理解源代碼中各元素之間的依賴關系,輔助程序理解;然后對程序的修改信息,利用特征定位技術識別修改點在源代碼中對應的修改位置,并將該位置與源代碼的中間表示一一對應起來從而得到修改集;在源代碼的中間表示和修改集的基礎之上,通過修改影響分析技術計算得到影響集;進而利用修改集和影響集生成回歸測試用例的判定表;最后利用判定表生成測試路徑集,并將測試路徑集約簡,將測試路徑中的輸入作為測試用例,最終得到一個能充分覆蓋修改給程序帶來的影響的測試用例集合。
文檔編號G06F11/36GK102831056SQ20121027034
公開日2012年12月19日 申請日期2012年7月31日 優(yōu)先權日2012年7月31日
發(fā)明者李必信, 張前東, 孫小兵, 陶傳奇, 耿國清, 蘭陽陽 申請人:東南大學