测试覆盖率工具之01 Jacoco简介
1. 測試覆蓋率工具
測試過程中根據需求文檔和設計文檔編寫測試用例、執行測試;為了更加全面的覆蓋,我們可能還需要理解被測程序的邏輯,需要考慮到每個函數的輸入與輸出,邏輯分支代碼的執行情況,這個時候我們的測試執行情況就以代碼覆蓋率來衡量。
覆蓋率是衡量測試效果的一個輔助指標。
1.1. 意義
分析未覆蓋部分的代碼,從而反推在前期測試設計是否充分,沒有覆蓋到的代碼是否是測試設計的盲點,為什么沒有考慮到?需求/設計不夠清晰,測試設計的理解有誤,工程方法應用后的造成的策略性放棄等等,之后進行補充測試用例設計。
檢測出程序中的廢代碼,可以逆向反推在代碼設計中思維混亂點,提醒設計/開發人員理清代碼邏輯關系,提升代碼質量。
代碼覆蓋率高不能說明代碼質量高,但是反過來看,代碼覆蓋率低,代碼質量不會高到哪里去,可以作為測試自我審視的重要工具之一。
1.2. 工具比較
市場上主流工具Emma,Cobertura,Jacoco,Clover(商用)
2. Jacoco簡介
Jacoco 是一個開源的覆蓋率工具,針對的語言為java。它可以嵌入到 Ant 、Maven 中,也提供了 EclEmma Eclipse 插件。Jacoco 主要通過代碼注入(即 Java Agent)方式來實現覆蓋率的功能。很多第三方的工具提供了對 Jacoco 的集成,如:Sonar、Jenkins、IDEA.
下載
2.1. 覆蓋率相關概念
jacoco支持多種覆蓋率的統計,包括:
行覆蓋率(Lines):度量被測程序的每行代碼是否被執行,判斷標準行中是否至少有一個指令被執行。
類覆蓋率(classes)):度量計算class類文件是否被執行。
分支覆蓋率(Branches,C1coverage):度量if和switch語句的分支覆蓋情況,計算一個方法里面的總分支數,確定執行和不執行的 分支數量。
方法覆蓋率(non-abstract methods):度量被測程序的方法執行情況,是否執行取決于方法中是否有至少一個指令被執行。
指令覆蓋(Instructions,C0coverage):計數單元是單個java二進制代碼指令,指令覆蓋率提供了代碼是否被執行的信息,度量完全 獨立源碼格式。
圈復雜度(CyclomaticComplexity):在(線性)組合中,計算在一個方法里面所有可能路徑的最小數目,缺失的復雜度同樣表示測 試案例沒有完全覆蓋到這個模塊。
2.2. 插樁及不同插樁模式
2.2.1. 什么是插樁
程序插樁,最早是由J.C. Huang 教授提出的,它是在保證被測程序原有邏輯完整性的基礎上在程序中插入一些探針(又稱為“探測儀”,本質上就是進行信息采集的代碼段,可以是賦值語句或采集覆蓋信息的函數調用),通過探針的執行并拋出程序運行的特征數據,通過對這些數據的分析,可以獲得程序的控制流和數據流信息,進而得到邏輯覆蓋等動態信息,從而實現測試目的的方法。
2.2.2. On-The-Fly和Offine比較
on-the-fly 模式是JVM通過 -javaagent參數指定jar文件啟動代理程序,代理程序在ClassLoader裝載一個class前判斷是否修改class文件,并將探針插入class文件,探針不改變原有方法的行為,只是記錄是否已經執行。
offline 模式就是在測試之前先對文件進行插樁,生成插過樁的class或jar包,測試插過樁的class和jar包,生成覆蓋率信息到文件,最后統一處理,生成報告。
Offline模式適用于以下場景:
運行環境不支持java agent
部署環境不允許設置JVM參數
字節碼需要被轉換成其他虛擬機字節碼,如Android Dalvik VM
動態修改字節碼過程中和其他agent沖突
無法自定義用戶加載類
官方文檔
【Quality】
Quality is the value to someone who matters。做測試,首先要找到這個someone是誰,以及這個 someone重視的 value是什么。
總結
以上是生活随笔為你收集整理的测试覆盖率工具之01 Jacoco简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务人员在Hybris ASM手动分配c
- 下一篇: 使用Hybris Commerce AP