代码覆盖率以及jacoco统计代码覆盖率的原理
一、什么是代码覆盖率
简单来说,代码覆盖率是指,至少被执行了一次的条目数占整个条目数的百分比。
如果“条目数”是语句,对应的就是代码行覆盖率;如果“条目数”是函数,对应的就是函
数覆盖率;如果“条目数”是路径,那么对应的就是路径覆盖率。依此类推,你就可以得到
绝大多数常见的代码覆盖率类型的定义。
二、常用的代码覆盖率
简单介绍一下最常用的三种代码覆盖率指标
行覆盖率又称为语句覆盖率,指已经被执行到的语句占总可执行语句(不包含类似 C++
的头文件声明、代码注释、空行等等)的百分比。这是最常用也是要求最低的覆盖率指
标。实际项目中通常会结合判定覆盖率或者条件覆盖率一起使用。
分支覆盖又称判定覆盖,用以度量程序中每一个判定的分支是否都被测试到了,即代码中
每个判断的取真分支和取假分支是否各被覆盖至少各一次。比如,对于 if(a>0 &&
b>0),就要求覆盖“a>0 && b>0”为 TURE 和 FALSE 各一次。
条件覆盖是指,判定中的每个条件的可能取值至少满足一次,度量判定中的每个条件的结
果 TRUE 和 FALSE 是否都被测试到了。比如,对于 if(a>0 && b>0),就要
求“a>0”取 TRUE 和 FALSE 各一次,同时要求“b>0”取 TRUE 和 FALSE 各一次。
三、代码覆盖率的作用
代码覆盖率的价值 现在很多项目都在单元测试以及集成测试阶段统计代码覆盖率,但是我想说的是,统计代码覆盖率仅仅是手段,你必须透过现象看到事物的本质,才能从根本上保证软件整体的质量。统计代码覆盖率的根本目的是找出潜在的遗漏测试用例,并有针对性的进行补充,同时还可
以识别出代码中那些由于需求变更等原因造成的不可达的废弃代码
即使你所设计的测试用例已经达到 100% 的代码覆盖率(包括行覆盖、分支覆盖、条件覆盖等),软件产品的质量也做不到万无一失,举例来说,从业务场景出发考虑,测试数据A覆盖场景a执行了被测代码没有发现bug,但是其实这段被测代码还有业务场景b没有被测试,此时测试数据B同样执行这段相同的代码,发现了代码bug。可见100%的代码覆盖率并不能保证不会遗漏测试用例。还得需要考虑业务场景的覆盖率。
总结来讲,高的代码覆盖率不一定能保证软件的质量,但是低的代码覆盖率一定不能能保证软件的质量。
四、jacoco统计覆盖率原理
Jacoco 是一个开源的覆盖率工具,针对的语言为java。它可以嵌入到Ant 、Maven中,也提供了EclEmma Eclipse插件。Jacoco主要通过代码注入(即Java Agent)方式来实现覆盖率的功能。
很多第三方的工具提供了对 Jacoco 的集成,如:Sonar、Jenkins、IDEA,下载地址:https://www.eclemma.org/jacoco/
Jacoco支持多种覆盖率的统计,包括:
行覆盖率(Lines):度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
类覆盖率(classes)):度量计算class类文件是否被执行。
分支覆盖率(Branches,C1coverage):度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的分支数量。
方法覆盖率(non-abstract methods):度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
指令覆盖(Instructions,C0coverage):计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全独立源码格式。
圈复杂度(CyclomaticComplexity):在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测试案例没有完全覆盖到这个模块。
JaCoCo增量覆盖率的基本实现原理
vivo 基于 JaCoCo 的测试覆盖率设计与实践 - 知乎
代码覆盖率以及jacoco统计代码覆盖率的原理相关推荐
- springboot多模块工程单元测试jacoco统计代码覆盖率总结
jacoco统计代码覆盖率的文章一搜一大堆,方法也很简单,就是在pom中引用两个插件: maven-surefire-plugin jacoco-maven-plugin 其中jacoco-maven ...
- JaCoCo计算代码覆盖率原理
官网地址: http://www.eclemma.org/jacoco/ JaCoCo 是一个非常常用的计算代码覆盖率的工具. 达到的效果就是可以分析出在代码启动到某个时间点那些代码是执行过的, 哪些 ...
- android studio 代码覆盖率,AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率
AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率 AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率 最近在做针对Android应用程序代 ...
- 还在担心漏测吗?快来使用jacoco统计下代码覆盖率
大家日常工作过程中,不论是开发还是测试都有可能会被要求写单元测试用例,但是单元测试用例写得好不好如何衡量呢? 一般都需要借助工具来统计单元测试用例覆盖了多少业务代码.算法代码,覆盖率高的情况下,比如覆 ...
- jacoco测试代码覆盖率_使用Jacoco测量多模块Android项目中的单元测试覆盖率:第2部分
jacoco测试代码覆盖率 In the first article, we discovered one of the two key Gradle commands which come with ...
- jacoco统计覆盖率最佳实践
jacoco统计覆盖率最佳实践 jacoco总结 Jacoco安装 代码覆盖率介绍 行覆盖 分支覆盖 方法覆盖 覆盖率的误区 代码覆盖率意义 覆盖率报告解析 启动jacoco agent进行插桩 ** ...
- 统计学习方法|感知机原理剖析及实现
欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...
- 统计学习方法|最大熵原理剖析及实现
最大熵的直观理解 为了引出最大熵,我们可能需要举一个所有博客都会举的例子:如果我手里拿着一个骰子,想问你扔下去后是每一面朝上的概率是多少?所有人都能抢答出来是1/6.那么为什么是1/6呢?为什么不是1 ...
- sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率
Jacoco,看起来就很好喝的样子. 一.Jacoco简介 1.Jacoco全称JavaCodeCoverage, 是一个开源的,统计JAVA覆盖率的工具. Python项目是统计不了的 2.Jaco ...
最新文章
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
- java和python的web自动化有什么区别-Python和Java哪个更适合做自动化测试?
- maven 可执行 jar_Maven提示:有关可执行jar的所有信息
- POJ 计算几何(3)
- 赞!苏州大学95后硕士一作发《Nature》!
- mongodb 分组聚合_MongoDB 临时表横空出现 1 万+,这条语句执行前请准备好翻车的姿势...
- 【Shashlik.EventBus】.NET 事件总线,分布式事务最终一致性简介
- 统计学理论—假设检验
- 小,大:使用CSS fit-content
- 群晖docker安装cms_群晖docker安装蚂蚁笔记安装教程
- 苹果系统python读取文件_python中文件的读取与写入以及os模块
- iphone safaric中将mp4保存到本地相册
- 免费logo在线设计平台
- spring4 搭建开发环境
- 课题三 数控机床的坐标系及编程规则
- win10打印机清除缓存
- JS去掉“确认重新提交表单”提示
- LabVIEW基础-图形和图表
- 维修计算机机房管理员职责,机房管理员职责
- 算术运算、关系运算与逻辑运算的区别