解決方案
基于對問題 1) 和問題 2) 的原理分析,我們設計并實施了回歸測試的解決方案,如下圖所示。它包含了 3 個主要步驟。一是測試用例的錄入;二是對新舊兩個版本的變更分析;三、通過測試用例優化選擇和覆蓋率分析,得到相應的測試用例優化選擇報告,和覆蓋率分析報告。
圖 5. 回歸測試解決方案
步驟一, Trace Test Case 負責錄制測試用例,并將捕獲到的測試用例的 Runtime Trace 存放到數據庫中;
測試用例在后臺運行中的 Runtime Trace 是動態分析 (Dynamic Analysis) 中的重要信息。這些實際的運行信息為測試用例的優化選擇和覆蓋率分析創造了條件。下面是測試用例跟蹤的框架圖:
圖 6. 測試用例跟蹤的框架圖
從上圖我們可以看出,測試人員觸發 Trigger 之后,會啟動 Agent Controller 。 Agent Controller 一直對 JVM 中的 JVMTI 進行監聽,以獲取部署在 JVM 上的被測應用程序。這些 Agent Controller 還負責將收集到的數據傳輸給 Data Collector 。又 Data Collector 將這些 Runtime Trace 寫入如下表所示的數據庫表中。
Case ID | Package | Class | Method | Signature |
001 | com.ibm.crl.orts.action | DeleteCommodityAction | Delete | ([Ljava/lang/String;)V |
001 | com.ibm.crl.orts.action | DeleteOrderAction | Delete | |
002 | ...... | |||
003 | ...... | ...... | ...... | ...... |
注意:函數的 Signature 信息作為函數的參數標識也需要記錄下來。以區別同名不同參數的函數。
步驟二, Change Analysis 用于將新舊兩個版本作比較,得到 Change Report,即程序變更報告,可以精確到 Method 粒度。一般來說代碼變更有 4 種級別,分別為包級別 (Package),類級別 (Class),函數級別 (Method) 及語句級別 (Statement) 。
對于包級別和類級別來說,比較的力度過粗,會影響到回歸測試優化的質量。而函數級別和語句級別都能起到很好的回歸測試的作用。其中語句級別因為粒度最細,等到的分析結果也最精確,回歸測試質量最高。但與函數級別的變更分析相比,回歸測試的質量相差很有限,但造成了過多的執行時間代價,影響了回歸分析的效率。因此我們采用函數級別的變更分析作為回歸測試的變更粒度。
確定比較粒度之后,可以選擇分析比較的方法。最簡單的常用比較方法就是文本比較。包括源代碼和可執行文件 (binary code) 的文本比較。根據 Java 語言面向對象的特點,還可以采用基于面向對象分析的比較方法。后者得到的分析粒度更細,但是所花的代價也越高。
步驟三, 在通過測試用例錄制得到測試用例具體的 Runtime Trace 信息,以及通過 Change 分析得到新舊兩個版本的變更信息之后,我們可以對測試用例優化問題及覆蓋率分析問題進行求解。
原文轉自:http://www.uml.org.cn/Test/200903313.asp