代码覆盖(英语:Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。

测试覆盖率

测试覆盖率是对测试完全程度的评测。测试覆盖率是由测试需求和测试用例的覆盖或已执行代码的覆盖的表示结果。一方面可以衡量测试工作本身的有效性,提升测试效率,一方面可以提升代码质量,减少bug,提升产品的可靠性,稳定性。

代码覆盖率的意义

· 分析未覆盖部分的代码,从而反推3在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?需求/设计不够清晰,测试设计的理解有误,工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。

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

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

JaCoCo是一个免费的Java代码覆盖率库工具,由EclEmma团队根据多年来使用和集成现有库的经验创建的,其官网地址为https://www.eclemma.org/jacoco/。不论开发和测试都会有针对自己写的单元测试用例,统计覆盖了多少业务代码这样的诉求,另外一个诉求就是统计结果能够自动生成HTML报告,下面我就通过maven、junit、jacoco来实现以上这两点诉求。

首先需要在maven的pom配置文件中增加如下3个插件:

maven-surefire-plugin、jacoco-maven-plugin、maven-compiler-plugin。

这3个插件分别对应的功能是:

maven-surefire-plugin这个插件是执行junit、testng框架单元测试用例时使用的;

jacoco-maven-plugin这个插件是统计单元测试用例覆盖业务代码率时使用的;

maven-compiler-plugin这个插件是按照其配置的jdk版本来编译java源码时使用的。

以下3张截图是具体的配置内容,大家也可以根据最近的版本更新替换版本号。

接下来需要对业务代码编写单元测试用例,分别对应如下两张截图,


需要注意的是,测试用例的包名要和业务代码的包名要保持一致,否则JaCoCo无法统计覆盖率。

然后执行如下3条maven命令进行清除、插件安装、测试


然后在target\site\jacoco目录下可见本轮次单元测试结果报告的HTML格式结果。

打开JaCoCo的html格式报告如下所示,统计整体的覆盖率信息,单击包名链接,可以看到统计的详情信息。

值得注意的是App这个业务代码类中只有1个main方法,但是统计的方法数是2个,

这个统计是不是不准确?统计是准确的,App这个类中还有一个默认构造函数,虽然没有展示出来,如何证明那另外1个方法是构造函数呢?我们可以在App的测试类AppTest中增加构造函数的测试用例,具体如下截图所示。

再次执行单元测试,生成的JaCoCo单测覆盖率报告如下所示,Missed错失数由之前的2个变成0个。证明JaCoCo统计的方法中涵盖自动生成的默认构造函数。Cov.这列是统计指定业务的单元测试用例整体覆盖率的;而Missed Branches Cov.这列是针对有分支情况下统计的单元测试用例覆盖业务代码分支的覆盖率,如果某个业务类的Missed Branches Cov.分支覆盖率为n/a则说明这个业务类中没有分支情况,才会出现n/a这样结果,如下截图中App、CoCo这两个业务类中就没有分支代码,因此Missed Branches Cov.覆盖率统计结果为n/a,可以理解为这两个业务类不需要统计分支覆盖率;其他各个列,在实际工作过程中不是重点关注的覆盖率统计项。

代码覆盖率统计神器-jacoco工具实战相关推荐

  1. 基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

    首发于 Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉. "有所了解"指的是在 CI 实践中已经使用 JaCoC ...

  2. Python 代码覆盖率统计工具 coverage.py

    Python 代码覆盖率统计工具 coverage.py coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中 ...

  3. 精准化测试之:jacoco实现增量代码覆盖率统计

    精准化测试可解决的问题: 根据代码变更确定用例范围 更准确深入地覆盖被测业务 白盒探索式测试 从线上数据反推有效测试用例 字节码插桩目的 1.获取执行时代码的调用链数据 2.覆盖率是调用链的一种精简模 ...

  4. android 自动化测试_Android自动化测试探索之代码覆盖率统计

    点击上方蓝色字体,关注我们 本周开始准备统计Android自动化用例的代码覆盖率,将最终使用的方法记录下来. 覆盖率监测的原理 覆盖率监测的原理跟iOS上的原理差不多,大致的思路参考下吧,iOS自动化 ...

  5. 和无用代码说再见!阿里文娱无损代码覆盖率统计方案

    作者 | 阿里巴巴文娱高级无线开发工程师 孙珑达 责编 | 屠敏 背景 为了适应产品的快速迭代,通常大量的研发资源会投入在新功能的开发上,而针对无用功能的治理却很少被关注.随着时间的推移,线上应用会积 ...

  6. Jacoco入门实战篇

    Jacoco入门实战篇 是什么 能做什么 怎么做 深入浅出 是什么 简介 Jacoco是一款代码覆盖率的检测工具 相关概念 使用方式 ant maven java agent 使用模式 on-the- ...

  7. java 代码覆盖率_代码覆盖率统计

    不管是否在项目中起着持续.有效的作用,代码覆盖率统计已经成为各产品组必备的工具.凭借丰富的覆盖率度量维度.灵活的数据管理与报告过滤方案和良好的工具支持,Jacoco成为部门内部技术成熟,使用广泛的工具 ...

  8. 修正的判定条件覆盖例题_硬核:嵌入式代码覆盖率统计方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出.代码覆盖率可以有效避免包含未测试代码的程序被发布. 1. 问题背景 代码覆盖(Code coverage)是软 ...

  9. 自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词

    注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书<分布式机器学习实战>(人工智能科学与技术丛书)[陈敬雷编著][清华大学出版社] 文章目录 自然语言处理系列十七 分词工 ...

最新文章

  1. mysql子查询缺点_[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时
  2. linux常用关机、重启、注销命令
  3. java rwd_面向任务的设计-不仅限于Mobile First和RWD
  4. Android之数据库操作
  5. 学习Linux第一天
  6. Windows 7 时代即将终结!
  7. 时域上的乘积等于频域上的卷积_图卷积神经网络:Graph Convolutional Networks
  8. 亚信科技外包_外包到亚信---转正疑问 - 菜鸟@大虾的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  9. java 枚举 命名规范_JAVA命名规范
  10. 《头脑王者》--在线排位答题系统构思
  11. Android WebView 下载没反应
  12. 企业消息转发服务器,Python构建企业微信自动消息转发服务端
  13. 倍福PLC——ADS上位机通讯
  14. 虎牙不想做一家游戏直播公司
  15. Linux系统学习方法论 1
  16. 汇率计算器 by React
  17. Keil5 编译时显示..\OBJ\TPAD.axf: error: L6002U: Could not open file ..\obj\main.o: No such file or direct
  18. 生成彩色二维码(渐变色、插入图片和文字)
  19. Python批量PNG转换成JPGE设置quality=99
  20. 文华wh6服务器文件夹,文华财经选择服务器配置

热门文章

  1. c语言课程设计小游戏自动发牌,C语言编程:一副桥牌有52张牌,打牌时应将牌分给四个人。请使用数组方法设计一个程序完成自动发牌的工作。...
  2. YOLO 损失函数 loss
  3. Python 定时执行:schedule 模块
  4. 技术分享 | 能微分会加速的 NumPy —— JAX
  5. Linux无法运行cal指令,Linux cal 命令 command not found cal 命令详解 cal 命令未找到 cal 命令安装 - CommandNotFound ⚡️ 坑否...
  6. 比美好更好的,是等待美好的事发生。《搜神记》作者: 冯唐
  7. Python中list的最大容量限制?最多支持多少?
  8. java加密算法之base64篇
  9. scrapy爬虫框架[scrapy.core.scraper]ERROR downloading Error processing
  10. 如何利用Excel批量将英文符号替换为中文符号