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