测试覆盖率设计与实践

一、为什么需要测试覆盖率

1.1 在日常研发过程中,经常发现一些问题

  • 测试案例的设计凭经验,当研发一个新功能时,经常对测试场景估计不足,到上线后发现bug;

  • 开发经常做一些需求之外的代码变更(代码小范围内重构或在开发过程中发现小缺陷随手改掉),导致测试任务无法测试到对应的场景,引起线上问题;

  • 对测试效果无法量化考核,导致测试工作的质量无法进一步提升。

1.2. 有没有技术手段能够尽可能的避免上面的问题呢?

在业内已经在普遍使用代码覆盖率来提升测试质量,那什么是代码覆盖率?

代码覆盖率是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率 

代码覆盖率指标通常包含下面几类:

  • 函数/方法覆盖率:函数/方法中有多少被调用到

  • 分支覆盖率:有多少控制结构的分支(例如if语句)被执行

  • 条件覆盖率:有多少布尔子表达式被测试为真值和假值

  • 行覆盖率:有多少行的源代码被测试过

1.3 在使用测试覆盖率的过程中,经常发现的场景

  • if/else语句中,if{}内的代码被覆盖到,else{}内的代码没有被覆盖到,可以得出部分分支场景没有测试到;

  • try/catch语句中,try{}内的代码被覆盖到,catch{}内的代码没有被覆盖到,可以得出异常场景没有测试到;

  • if (条件1 || 条件2 || 条件3)语句中,条件1被覆盖到,条件2和条件3没有被覆盖到,可以得出部分条件场景没有测试到;

 测试人员对代码覆盖率的指标正确使用,能有效提升测试的质量,进而提升版本的上线质量。

二、JaCoCo在测试覆盖率场景中的使用

2.1  JaCoCo介绍

当前主流的代码覆盖率工具:   

C/C++→Gcov ,Java→JaCoCo,JavaScript→ Istanbul。

考虑到服务器端主要是Java语言,所以CICD平台优先使用JaCoCo来支持 Java 语言的代码覆盖率统计能力。

通过JaCoCo官网,我们可以看到JaCoCo的使命是为Java VM 的环境中的代码覆盖分析提供标准技术。重点是提供一个轻量级、灵活且有据可查的库,用于与各种构建和开发工具集成。

2.2 JaCoCo优点

  • JaCoCo支持指令(C0)、分支(C1)、行、方法、类和圈复杂度等多维度的覆盖分析;

  • 基于 Java 字节码,也可以在没有源文件的情况下工作;

  • 性能良好,运行时开销很小,尤其是对于大型项目;

  • 比较完整的API,很方便与其他工具进行集成;

  • 远程协议和 JMX 控制可在任何时间点从代理请求执行数据下载。

2.3 JaCoCo原理

主要来自于JaCoCo官方网站

JaCoCo支持几种不同的方法来收集覆盖信息,对于每种方法,由不同技术实现的,下图橙色路径部分是JaCoCo 推荐使用的方式,即通过On-The-Fly方式收集覆盖率信息:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值