黑盒测试用例设计
Posted 我在路上-T
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑盒测试用例设计相关的知识,希望对你有一定的参考价值。
测试用例
测试用例的定义
测试用例是为了特定的目的而设计的一组由测试输入、执行条件、预期结果的案例(文档)
测试用例的构成要素
用例编号—用例的唯一标识
例如:QQMail_login_001
用例标题—用例的简要描述(什么情况下做什么事,有什么结果)
测试项目—用例 所属项目 范畴
用例级别—用例重要程度影响(P1:高优先级,P2:一般优先级,P3:低优先级)
预置条件—用例执行的前提(环境、数据)
测试输入—测试用例 数据输入
执行步骤—执行用例的步骤
预期结果 = 数据输入 + 预期结果 —— 应该得到的结果
-
测试用例例子
黑盒测试用例设计方法
什么是黑盒测试
通过输入、输出测试系统功能的方法
黑盒测试用例设计方法
等价类
等价类概念:在所有的测试数据中,具有某种共同特征的数据子集。
等价类划分规则:
等价类设计测试用例步骤
1.分析需求,确定输入数据类型
2.使用规则划分有效和无效等价类
3.设计用例,覆盖有效等价类——一条用例尽可能多的覆盖有效等价类
4.设计用例,覆盖无效等价类——一条用例只能覆盖一个无效等价类
例子:固定电话号码测试
边界值
-
大量的错误发生在输入或者输出范围的边界值上,而不是在输入范围的内部。
边界值法定义:选取正好等于、刚刚好大于或刚刚好小于边界值作为测试数据。
闭区间:[0,100]
上点:0,100 ;离点:-1,101;内点:50
半闭半开区间:(0,100]
上点:0,100 ;离点:1,101;内点:50
开区间:(0,100)
上点:0,100 ;离点:1,99;内点:50
边界值法设计测试用例
1.分析需求,确定输入数据类型
2.使用规则划分有效和无效等价类
3.确认上点、离点和内点
4.设计用例,覆盖有效等价类——一条用例尽可能多的覆盖有效等价类
5.设计用例,覆盖无效等价类——一条用例只能覆盖一个无效等价类
-
边界值设计测试用例的案例:固定电话号码测试
判定表法
-
使用等价类方法时对于输入域及输入域存在关联时无法覆盖
判定表设计用例步骤:
1.分析需求,定义条件桩与动作桩
2.设计优化判定表(全组合),得到条件项
3.根据条件项,依次填写动作项
4.简化判定表
5.抽取用例(每条规则就是一个用例)
-
案例
因果图法
-
与判定表的关系:判定表:先全组合画判定表再分析;因果图法:先分析再画判定表
因果图设计用例的步骤
1.考虑所有输入/输出条件的相互制约关系以及组合关系
2.考虑输入条件之间的依赖关系
3.再根据分析的关系来转化为判定表的规则
状态迁移图法
-
状态迁移图:首先要找出所有的状态,然后再分析各个状态之间的转换条件和转换路径。然后从其状态迁移路径覆盖角度来设计测试用例。(多用于协议测试)
状态迁移图法测试步骤:
1.明确状态节点
2.绘制状态迁移图
3.绘制状态迁移树
4.抽取路径设计用例
状态迁移图法案例
场景法
软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。
-
重要概念:基本流、备选流、(异常流)
场景法步骤:
1.分析需求,确定基本流和备选流
2.根据基本流和备选流生成场景
3.根据场景生成用例
测试理论 - 白盒测试 - 测试用例设计
- 概述
- 白盒测试 用例设计
- 本质上更加偏向于 单元测试
- 白盒测试 用例设计
- 背景
- 黑盒看了, 再看看白盒
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, 有这些组合
- a = 2, x > 1
- a = 2, x <= 1
- a != 2, x > 1
- a != 2, x <= 1
- 需要用尽量少的用例, 把他们组合起来
- 1 - 5
- 2 - 6
- 3 - 7
- 4 - 8
- 第一个 if, 有这些组合
- 用例
- 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
以上是关于黑盒测试用例设计的主要内容,如果未能解决你的问题,请参考以下文章