测试理论 - 代码覆盖率
-
概述
- 整理一下我对 代码覆盖率 的认识
-
背景
- 理解了 白盒测试 用例设计
- 设计完了, 总需要一个 标准, 来评估用例的某些方面
- 这个可能, 是 覆盖率 提出的意义吧
- 至于这个是谁最先提出, 又是出于 什么目的, 现已无从考证
- 主要是我 懒得考证...
1. 回顾: 白盒测试用例设计思路
-
概述
- 回顾一下白盒测试用例的设计思路
-
思路
- 代码覆盖
- 分支覆盖
- 条件覆盖
- 分支条件覆盖
- 多重条件覆盖
-
ref
- 后面会有
2. 覆盖率
-
概述
- 简单介绍 覆盖率
-
覆盖率
-
作用
- 度量 测试用例 对 代码 测试程度
-
意义
- 找出那些地方没有测
- 重视没有覆盖的部分
- 重点是解释这些问题
- 为什么没有覆盖
- 能否覆盖
- 对于 测试质量, 没有任何的表述
- 是的, 覆盖率高, 未必就是 测试得好
- 找出那些地方没有测
-
计算方式
-
代码覆盖率
- 覆盖率 = 被测代码行数 / 代码总行数
-
当然还有其他的 覆盖率
- 那些怎么算的, 后面可能会有讲
-
-
3. 常见的 覆盖率 指标
-
概述
- 以 jacoco 的指标为例, 简单说明一下
-
jacoco 执行结果
-
概述
- 简单描述下 jacoco 执行结果
-
列
- Element
- 被测的包
- Missed Instructions & Cov
- 指令覆盖
- Missed Branhes & Cov
- 分支覆盖
- Missed & Cxty
- 圈复杂度
- Missed & Lines
- 代码覆盖
- Missed & Method
- 方法覆盖
- Missed & Classes
- 类覆盖
- Element
-
1. 指令覆盖
-
概述
- 指令级别的覆盖率
-
指令
- Java 代码最后被编译得出的 二进制码
- 这么说的话, 就和 代码格式 没有关系
- Java 代码最后被编译得出的 二进制码
-
指令覆盖率
- 这个覆盖率, 是个比较底层的覆盖率
- 感觉跟 之前提到的一些覆盖方法, 没有那么直接的关联
- 所以理解上, 会有些 陌生的感觉
- 感觉跟 之前提到的一些覆盖方法, 没有那么直接的关联
- 代码无关
- 代码格式, 不会影响这个覆盖率
- 只有最终的 二进制码, 会有影响
- 甚至没有 代码源文件, 都可以拿来一试 的覆盖率
- 代码格式, 不会影响这个覆盖率
- 其他
- 简单查了查资料, 发现基本都是说的 比较模糊
- 就说了 代码无关, 以及 覆盖的粒度
- 具体怎么用, 几乎没人提
- 简单查了查资料, 发现基本都是说的 比较模糊
- 这个覆盖率, 是个比较底层的覆盖率
2. 分支覆盖
-
概述
- 分支级别的覆盖率
-
分支
- 包含
- if
- switch
- 包含
-
分支覆盖率
- 意义
- 度量 分支 的测试程度
- 意义
-
提示
- 没有覆盖
- 代码附带 红色 背景
- 部分覆盖
- 代码附带 黄色 背景
- 完全覆盖
- 代码附带 绿色 背景
- 没有覆盖
3. 圈复杂度
-
概述
- 循环相关的覆盖率
-
圈复杂度
-
概述
- 这是一个 图论 相关的概念
- 离散数学...
- 这是一个 图论 相关的概念
-
描述对象
- 代码整体
- 并不是 循环
- 代码整体
-
意义
- 描述代码整体的 复杂度
- 越低代码越容易看懂
- 描述代码整体的 复杂度
-
-
jacoco 的 圈复杂度
-
抱歉我真的没看懂
- 感觉像是 分支覆盖率 有点像
- 但实际又有差别
-
这块只能先留下遗憾了
-
4. 代码覆盖
-
概述
- 行级别的代码覆盖率
-
行
- 就是一行 java 代码
-
代码覆盖率
- 意义
- 度量 代码行 的测试程度
- 意义
-
提示
- 同 分支测试
5. 方法覆盖
-
概述
- 方法级别的代码覆盖率
-
方法
-
方法
- 某些特定的方法不会算在里面
- 这个有空会 补充, 比如, 这些我都会考虑, 目前没有结果
- 抽象方法
- 接口方法
- 构造方法
- finalize
-
方法覆盖
- 一个方法, 只要被执行了一行代码, 就算是 覆盖了
-
-
方法覆盖率
- 意义
- 度量 方法 的测试程度
- 意义
6. 类覆盖
-
概述
- 类级别的代码覆盖率
-
类
-
类
- 某些特定的类不会算在里面
- 这个有空会 补充
-
类覆盖
- 一个类, 只要被执行了一行代码, 就算是 覆盖了
- 这个有空会 补充, 比如, 这些我都会考虑, 目前没有结果
- 抽象类
- 接口类
- 接口直接实现没有的无名类
-
-
类覆盖率
- 意义
- 度量 类 的测试程度
- 意义
ps
-
ref
-
- 我之前整理的 白盒测试用例设计思路
-
- 对 覆盖率意义 的理解, 我觉得很不错, 值得思考
- 对 覆盖率工具机制 的讲解, 我觉得不怎么样
- 感觉有点随便, 讲得断断续续的
-
- jacoco 原理的一些解释
- 目前还没看, 有时间 细细品味
- jacoco 报告里, 对于参数的描述, 是官网文档翻译的
- jacoco
-
- 有赞测试团队对 jacoco 做的改进
- 增量代码测试覆盖率工具
- 有时间 细细品味
- 增量代码测试覆盖率工具
- 有赞测试团队对 jacoco 做的改进
-
- 圈复杂度
-
-
后续
- 理解一些工具
- JaCoCo
- ide
- maven
- jenkins
- IDEA Code Coverage
- ide
- SonarQube
- jenkins
- JaCoCo
- 理解一些工具
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出