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