IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 阿里软件测试工程师强烈推荐—免费开源神器,赋能精准测试 -> 正文阅读

[开发测试]阿里软件测试工程师强烈推荐—免费开源神器,赋能精准测试

?

如何衡量测试结果的充分性、有效性和可信度,需要测试人员不断探索和实践。作为一种客观的度量,代码覆盖率在单元测试中被广泛使用,但在系统测试中却很少使用。这时候JaCoCo派上了用场。将代码覆盖率统计应用到功能测试中,用JaCoCo的代码覆盖率报告验证测试工作是否充分有效。

?

一、什么是 JaCoCo

JaCoCo 是一个免费、开源 Java 代码覆盖率工具。

二、什么是代码覆盖率

覆盖率是用来衡量测试代码对功能代码的测试情况,通过统计测试代中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。代码覆盖率 = 代码的覆盖程度,一种度量方式。

简单来说,覆盖率:运行了一个测试用例,执行了项目代码中的哪些模块、文件、类、方法和行。

其中,行覆盖率是最细的粒度,其他覆盖率可以从行覆盖率计算出来。

1. 行覆盖

当至少一个指令被指定源码行执行时,该源码行被认为已执行。

2. 类覆盖

当一个类至少有一个方法已执行,则该类被认为已执行,包括构造函数和静态初始化方法。

3. 方法覆盖

当方法中至少有一个指令被执行,该方法被认为已执行,包括构造函数和静态初始化方法。

4. 分支覆盖

if 和 switch 语句算作分支覆盖率,这个指标计算一个方法中的分支总数,并决定已执行和未执行的分支的数量。
全部未覆盖:所有分支均未执行,红色标志
部分覆盖:部分分支被执行,黄色标志
全覆盖:所有分支均已执行,绿色标志

5. 指令覆盖

指令覆盖最小单元是 Java 字节码指令,指令覆盖率提供了代码是否被执行的信息,它为执行/未执行代码提供了大量的信息。

6. 圈复杂度

在(线性)组合中,计算在一个方法里面所有可能路径的最小数目。可以作为度量单元测试是否完全覆盖所有场景的一个依据。

三、代码覆盖率意义

分析未覆盖部分的代码,反推测试设计是否充分,没有覆盖到的代码是否存在测试设计盲点。

四、覆盖率的误区

若代码如下:

if (i > 100)
j = 10 / i          // 没有除零错误
else
j = 10 / (i + 2)    // i==-2除零错误

覆盖两个分支只需 i == 101 和 i == 1 ,但对于找到 i == -2 没有作用。

所以:

  • 不要简单的追求高的代码覆盖率
  • 高覆盖测试用例不等于测试用例有用
  • 没覆盖的分支相当于该分支上的任何错误肯定都测不到

五、JaCoCo 原理

JaCoCo 使用插桩的方式来记录覆盖率数据,是通过一个 probe 探针来注入。
插桩模式有两种:

1. on-the-fly 模式

JVM 中通过-javaagent 参数指定特定的 jar 文件启动 Instrumentation 的代理程序,代理程序在通过 Class Loader 装载一个 class 前判断是否转换修改 class 文件,将统计代码插入 class,测试覆盖率分析可以在 JVM 执行测试代码的过程中完成。

2. offline 模式

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

3.on-the-fly 和 offline 对比

on-the-fly 更方便简单,无需提前插桩,无需考虑 classpath 设置问题。
存在以下情况不适合使用 on-the-fly 模式:

  • 不支持 javaagent
  • 无法设置 JVM 参数
  • 字节码需要被转换成其他虚拟机
  • 动态修改字节码过程和其他 agent 冲突
  • 无法自定义用户加载类

评论区说说

今天的小知识学会了吗?

是不是非常实用呢~

需要资料的就在文末留言111吧

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:44:33  更:2021-12-04 13:45:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:35:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码