測試覆蓋率是評價測試完整性的重要的度量標準之一。 EMMA 是一個面向 Java 代碼的測試覆蓋率收集工具。在測試過程中,使用 EMMA 能使收集和報告測試覆蓋率的過程更加靈活、簡單。在本文中,作者將 EMMA 引入到功能測試的過程,詳細介紹 EMMA 在功能測試中的使用方法、步驟,并對覆蓋率結果進行分析。
引言
EMMA 是一個開源、面向 Java 程序測試覆蓋率收集和報告工具。它通過對編譯后的 Java 字節碼文件進行插裝,在測試執行過程中收集覆蓋率信息,并通過支持多種報表格式對覆蓋率結果進行展示。 EMMA 所使用的字節碼插裝不僅保證 EMMA 不會給源代碼帶來“臟代碼”,還確保 EMMA 擺脫了源代碼的束縛,這一特點使 EMMA 應用于功能測試成為了可能。
注意:
在測試中使用 EMMA 收集覆蓋率信息之前,需要從 EMMA 的網站上下載 emma.jar 包。在這個網站上還可以得到更多關于 EMMA 的資源。
EMMA 只能收集 Java 代碼的覆蓋率。
文章附錄提供一個樣例代碼,包含一個 WAR 包和一個 JAR 包,其中需要將 WAR 包安裝在WebSphere Portal Server 上運行。在實際測試過程中,可以將它們替換成對應的被測對象。
功能測試中使用 EMMA 的優點
EMMA 收集的數據包括類覆蓋率、方法覆蓋率、塊覆蓋率和行覆蓋率,這些數據以包為單位進行組織。
大多數功能測試中,測試人員一般不能直接得到被測源代碼,源代碼也不是測試人員關心的重點。在具體的測試過程中,功能測試人員一般以一個有意義的功能模塊作為測試關心的重點,而能夠反映一定功能含義的類和方法的覆蓋率在功能測試中更有價值。因此,在功能測試中,類覆蓋率和方法覆蓋率是測試人員關心的重點,行和塊覆蓋率則作為測試的參考。
測試覆蓋率報告中包含了兩個方面的內容,測試覆蓋的部分和未被測試覆蓋的部分。盡管百分之百的測試覆蓋率不能代表被測對象完全沒有問題,但是測試覆蓋的部分以及覆蓋比率可以增加測試者對測試工作的信心,指導測試執行以及測試的方向。另一方面,當測試用例執行出現異常時,針對每個測試用例的測試報告還可以提供可疑代碼的范圍,為代碼糾錯提供幫助。
測試覆蓋率報告中未覆蓋的部分也同樣有價值:
表明測試可能不完整,有些功能、代碼沒有被測試覆蓋到。
為測試用例的設計提供指導建議。在覆蓋率報告的指導下,測試人員有目的地與開發人員進行討論,確定未覆蓋部分是測試的空白還是不需要測試的部分。
幫助開發人員發現無用代碼,為修改,完善代碼提供依據。
在使用 EMMA 獲得測試覆蓋率過程中,類、方法等覆蓋的百分比報告,可以方便測試人員更好的評估測試。測試人員通過對照覆蓋率報告與測試用例設計文檔,需求文檔可以迅速找到測試的不足。通過與開發人員進行討論,可以更好的評估測試力度,并指導進一步的測試。因此在功能測試中引入覆蓋率信息,能夠完善測試結果報告,確保測試質量和力度,保證測試按質、按量地完成。
特別是在目前倡導的 Agile 開發和測試流程中,開發和測試的周期都很短,有效的覆蓋率信息能夠幫助測試人員更加準確地控制測試結果和周期、跟蹤問題,保證軟件正常發布。
EMMA 在測試執行中的應用
在這一部分將逐步介紹 EMMA 在功能測試過程中的使用過程和步驟。為了使整個介紹過程容易理解,在文章附錄中提供了示例程序,文章中通過對示例程序進行操作介紹使用 EMMA 的命令。
插裝被測組件
EMMA 通過對被測組件進行插裝來跟蹤被測組件的執行過程,因此對被測組件進行插裝是使用 EMMA 獲得覆蓋率信息的第一步。測試人員應首先和開發人員討論,確定哪一部分包含了符合插裝要求的文件( Java 文件),哪一部分需要考慮覆蓋率信息,然后選擇合適的方式進行插裝。
插裝準備
在執行插裝操作之前,首先應該擴展 Java 虛擬機,即將 emma.jar 放到被測組件運行使用的JRE 目錄下面作為 JRE 的擴展,以便 EMMA 能夠被調用。 emma.jar 包含了 EMMA 核心功能模塊的實現和 EMMA 運行時所需的類文件,這些文件是使用 EMMA 所必需的。
原文轉自:http://www.testwo.com/article/591