测试理论 - 白盒测试 - 测试用例设计
-
概述
- 白盒测试 用例设计
- 本质上更加偏向于 单元测试
- 白盒测试 用例设计
-
背景
- 黑盒看了, 再看看白盒
1. 分类
-
概述
- 简单分类
- 跟 黑盒 的差不多
-
分类
- 通过性测试
- 失败性测试
-
执行
- 顺序
- 通过性测试
- 失败性测试
- 顺序
2. 与 黑盒测试 的区别
-
概述
- 与 黑盒测试 比对
-
区别
-
执行者
- 黑盒
- 通常是测试
- 白盒
- 单元测试, 通常应该是 开发 来写
- 黑盒
-
思路
- 黑盒
- 视角
- 用户
- 验证内容
- 输入与输出
- 使用逻辑
- 视角
- 白盒
- 视角
- 开发
- 验证内容
- 更加偏向于 代码逻辑
- 视角
- 黑盒
-
3. 白盒用例设计
-
概述
- 白盒用例设计
-
基本思路
- 尽量遍历每一行代码
- 如果一条用例不够, 就用两条
- 条数尽量少
- 主要思考的语句块(java)
- if
- for / while
- switch
- try catch finally
-
其他
- 黑盒测试的那些设计思路, 还是用得上的
- 等价类
- 边界值
- 判定表
- 正交表
- 黑盒测试的那些设计思路, 还是用得上的
-
例子
-
概述
- 用来解释说明各种覆盖
-
例子1
// 最好画个 流程图 吧, 我懒得画了 // 点a if (a > 1 && b == 0) { // 不经过, 为 点b // 经过, 为 点c ... } if (a == 2 || x > 1) { // 不经过, 为 点d // 经过, 为 点e ... }
-
1. 语句覆盖
-
概述
- 执行所有语句
-
思路
- 设计尽可能少的用例
- 执行所有的语句
-
用例
- a = 2, b = 0, x = 2
- ace
- a = 2, b = 0, x = 2
-
结果
- 测试了所有代码
-
问题
- 但是 if 不成立时候的分支, 没有被执行
- 解决
- 分支覆盖
- 解决
- 但是 if 不成立时候的分支, 没有被执行
2. 分支覆盖
-
概述
- 尝试遍历过 所有的分支
-
思路
- 语句覆盖
- 每个分支, 至少被执行一次
- 语句覆盖
-
用例
- a = 3, b = 0, x = 1
- acd
- a = 2, b = 1, x = 2
- abe
- a = 3, b = 0, x = 1
-
结果
- 语句全部覆盖
- 分支全部覆盖
-
问题
- 有可能会有 判定条件 覆盖不到
- 比如这里的 第二组 数据
- 选择了 路线b
- 因为 a = 2, b 是否为 0 被跳过了
- 所以说, b != 0 这个 判定, 并没有被覆盖到
- 解决
- 条件覆盖
- 比如这里的 第二组 数据
- 有可能会有 判定条件 覆盖不到
3. 条件覆盖
-
概述
- 更加关注 具体的判定条件
-
思路
- 条件覆盖
- if 里的条件, 都要验证到
- 条件覆盖
-
用例
- a = 1, b = 0, x = 3
- abe
- a = 2, b = 1, x = 1
- abd
- a = 1, b = 0, x = 3
-
结果
- 语句没有完全覆盖
- 判定倒是完全覆盖了
-
问题
- 需要 分支 和 条件 一起覆盖
4. 分支/条件覆盖
-
概述
- 分支和条件都要兼顾
-
思路
- 用尽量少的用例
- 覆盖所有分支
- 覆盖所有条件
- 用尽量少的用例
-
用例
- a = 2, b = 0, x = 4
- ace
- a = 1, b = 1, x = 1
- abd
- a = 2, b = 1, x = 1
- abd
- a = 2, b = 0, x = 4
-
结果
- 语句完全覆盖
- 条件完全覆盖
-
问题
- 还是会漏掉一些东西
- 比如 a = 1, b = 0 的场景, 就没有考虑
- 或者说, 是漏掉 某些判定的可能组合
- 还是会漏掉一些东西
5. 多重条件覆盖
-
概述
- 一个 if 里, 是一个 判定组合
- 每个组合, 都会有一些可能的情况
-
思路
-
第一个 if, 有这些组合
- a > 1, b = 0;
- a > 1, b != 0;
- a <= 1, b = 0;
- a <= 1, b != 0;
-
第一个 if, 有这些组合
5. a = 2, x > 1
6. a = 2, x <= 1
7. a != 2, x > 1
8. a != 2, x <= 1 -
需要用尽量少的用例, 把他们组合起来
- 1 - 5
- 2 - 6
- 3 - 7
- 4 - 8
-
-
用例
- a = 2, b = 0, x = 4
- a = 2, b = 1, x = 1
- a = 1, b = 0, x = 2
- a = 1, b = 1, x = 1
-
结果
- 覆盖了所有语句
- 覆盖了所有判定可能
- 覆盖了 判定组合 的所有可能
-
问题
- 执行起来, 可能会比较多
- 当然, 白盒测试, 很多都是 自动化用例
- 执行起来, 可能会比较多
ps
-
ref
- 软件测试的艺术
- 白盒测试及用例详解
-
其他
- 编写 单元测试
- 使用 单元测试框架 来组织 单元测试
- testng
- 刚好有讲...
- junit
- testng
- 使用 代码覆盖率工具, 检查 单元测试 覆盖率
- jacoco
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出