测试覆盖率工具

测试过程中根据需求文档和设计文档编写测试用例、执行测试;为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试执行情况就以代码覆盖率来衡量。

覆盖率是衡量测试效果的一个辅助指标。

01

意义

分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?

需求/设计不够清晰、测试设计的理解有误、工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。

检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。

代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量不会高到哪里去,可以作为测试自我审视的重要工具之一。

02

工具比较

市场上主流工具Emma、Cobertura、Jacoco、Clover(商用)。

添加图片注释,不超过 140 字(可选)

Jacoco简介

Jacoco 是一个开源的覆盖率工具,针对的语言为java。它可以嵌入到Ant 、Maven中,也提供了EclEmma Eclipse插件。Jacoco主要通过代码注入(即Java Agent)方式来实现覆盖率的功能。

很多第三方的工具提供了对 Jacoco 的集成,如:Sonar、Jenkins、IDEA,下载地址:https://www.eclemma.org/jacoco/

01

覆盖率相关概念

Jacoco支持多种覆盖率的统计,包括:

行覆盖率(Lines):度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。

类覆盖率(classes)):度量计算class类文件是否被执行。

分支覆盖率(Branches,C1coverage):度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。

方法覆盖率(non-abstract methods):度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。

指令覆盖(Instructions,C0coverage):计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。

圈复杂度(CyclomaticComplexity):在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。

02

插桩及不同插桩模式

什么是插桩

程序插桩,最早是由J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用)。

通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。

On-The-Fly和Offine比较

On-The-Fly模式是JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件,探针不改变原有方法的行为,只是记录是否已经执行。

Offine模式就是在测试之前先对文件进行插桩,生成插过桩的class或jar包,测试插过桩的class和jar包,生成覆盖率信息到文件,最后统一处理,生成报告。

Offline模式适用于以下场景:

  • 运行环境不支持java agent

  • 部署环境不允许设置JVM参数

  • 字节码需要被转换成其他虚拟机字节码,如Android Dalvik VM

  • 动态修改字节码过程中和其他agent冲突

  • 无法自定义用户加载类

添加图片注释,不超过 140 字(可选)

阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳相关推荐

  1. 【推荐一款阿里开源的低代码工具,实用性极高!】

    之前在我印象中低代码就是通过图形化界面来生成代码而已,其实真正的低代码不仅要负责生成代码,还要负责代码的维护,把它当做一站式开发平台也不为过!最近体验了一把阿里开源的低代码工具LowCodeEngin ...

  2. Android 增量代码测试覆盖率工具实践

    当业务快速发展,新业务不断出现,开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率?当一段正常的代码,开发却修改了,测试人员没有测试其功能,如果保证能够发现? 所以代码 ...

  3. 代码扫描工具测试覆盖率工具

    测试覆盖率工具 转载于:https://www.cnblogs.com/vivian-test/p/5398289.html

  4. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  5. ios 单元测试覆盖率怎么查看_iOS 覆盖率检测原理与增量代码测试覆盖率工具实现...

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  6. 测试覆盖率工具:EclEmma

    测试覆盖率工具:EclEmma 目录 1 测试覆盖率实现技术 2 EclEmma介绍 3 EclEmma测试覆盖率指标 4 EclEmma安装 5 示例项目介绍   5.1 创建项目   5.2 用C ...

  7. 测试覆盖率工具--EMMA

    测试覆盖率(Code Coverage) 测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标.测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档.进一步考虑,测试 ...

  8. Android增量代码测试覆盖率工具

    美团业务快速发展,新项目新业务不断出现,在项目开发和测试人员不足.开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率是我们需要思考的问题. 先看一个bug: 以上代码可 ...

  9. Java覆盖率工具jacoco,Cobertura

    最近研究Java覆盖率工具,了解到了jacoco,Cobertura这两款,但是Cobertura没有维护了,不支持新的java语法.下面简单介绍一下这两个工具的使用. 简介 市场上主要代码覆盖率工具 ...

最新文章

  1. ODAC(V9.5.15) 学习笔记(十七)主从模式
  2. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表
  3. 离线缓存占内存吗_彻底弄懂浏览器缓存策略
  4. 每次新建Android项目都报样式找不到的错误?
  5. Linux下安装JDK7和TomCat7
  6. shell 编程中的判断
  7. 17级Biter的微机课程学习总结另外附上19年微机考试题型分布
  8. linux网络配置putty,linux基础:2、网络配置和用使用putty连接
  9. 一小时学会Python3爬虫基础(七)高级数据的全部操作:列表
  10. 毕业设计 嵌入式 指纹识别考勤系统设计与实现
  11. Ubuntu下配置FreeRadius+L2TP+MySQL,实现限制用户流量和登录人数
  12. 夏天计算机自动关机,电脑频繁自动关机,原因可能出在这
  13. 2021-02-11-JavaWeb网站接入支付宝支付
  14. UE4 虚幻 常用的流程控制蓝图节点介绍
  15. iPhone13或许会支持25w快充
  16. git did not exit cleanly (exit code 128)处理方式
  17. MySQL:账户管理
  18. 初识webpack与webpack环境搭建
  19. 戴尔5600服务器主板维修,戴尔至强5600双路刀片服务器横向导购
  20. Thread: alter varchar2 column to clob // ORA-22858: invalid alteration of datatype

热门文章

  1. 洛谷:玩具谜题,C语言
  2. Discus 论坛 使用方法
  3. 它又来了!FastJson又被发现漏洞,autotype的安全控制开关限制可以被绕过...你方了没?...
  4. Parametric study
  5. 图书馆管理系统心得体会
  6. ubuntu 14.04 使用极点五笔输入法
  7. linux系统启动的第一个进程是,CentOS6开机启动过程详解
  8. 读书有感:《睡眠革命》
  9. 深入理解Golang之Map
  10. python数据分析处理库-Pandas