04. ⽤例设计⽅法
04. ⽤例设计⽅法
⽬标
- 能对穷举场景设计测试点
- 能对限定边界规则设计测试点
- 能对多条件依赖关系进⾏设计测试点
- 能对于项⽬业务进⾏设计测试点
等价类、边界值、判定表、场景法、错误推测法
1. 等价类划分法
能对穷举场景设计测试点 (穷举:⽆穷⽆尽)
1. 说明|分类|步骤
说明
- 在所有测试数据中,根据具有某种共同特征的数据集合进行划分。
分类
- 有效等价类:满足需求的数据集合
- 无效等价类:不满足需求的数据集合
步骤
- 明确需求
- 确定有效和无效等价类
- 提取数据编写测试用例
关注点(难点)
长度
类型
规则
2. 适用场景
针对:需要有大量数据测试输入,但是没法穷举测试的地方
- 输入框
- 下拉列表
- 单选复选框
典型代表:页面的输入框类测试
提取用例:有效等价组合和单个无效等价各取一个即可
3. 案例
1. 验证QQ账号的合法性
需求:验证QQ账号的合法性 要求:6~10位自然数
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_001 | 合法(8位自然数) | P0 | 1、打开验证程序 | 1、输入账号 2、点击验证 | 账号:12345678 | 合法 | |
qq_002 | 不合法(4位自然数) | P1 | 1、打开验证程序 | 1、输入账号 2、点击验证 | 账号:1234 | 不合法 | |
qq_003 | 不合法(12位自然数) | P1 | 1、打开验证程序 | 1、输入账号 2、点击验证 | 账号:123456789012 | 不合法 | |
qq_004 | 不合法(8位非自然数) | P1 | 1、打开验证程序 | 1、输入账号 2、点击验证 | 账号:1234567A | 不合法 |
2. 验证区号的合法性
要求:
- 区号:空或者是三位数字
- 前缀码:非'0'且非'1'开头的三位数字
- 后缀码:四位数字
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
tel_001 | 合法(区号为空+其他正确) | 电话 | P0 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:空 2、前缀:234 3、后缀:1234 | 合格 |
tel_002 | 合法(区号3位数字+其他正确) | 电话 | P0 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:234 3、后缀:1234 | 合格 |
tel_003 | 不合法(区号2位数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:12 2、前缀:234 3、后缀:1234 | 不合格 |
tel_004 | 不合法(前缀为2位数字且非0非1开头+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:23 3、后缀:1234 | 不合格 |
tel_005 | 不合法(后缀为3位数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:234 3、后缀:123 | 不合格 |
tel_006 | 不合法(区号3位非数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:12a 2、前缀:234 3、后缀:1234 | 不合格 |
tel_007 | 不合法(前缀为3位非数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:23a 3、后缀:1234 | 不合格 |
tel_008 | 不合法(后缀为4位非数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:234 3、后缀:123a | 不合格 |
tel_009 | 不合法(前缀为0开头的3位数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:034 3、后缀:1234 | 不合格 |
tel_010 | 不合法(前缀为1开头的3位数字+其他正确) | 电话 | P1 | 1、打开电话验证程序 | 1、输入区号 2、输入前缀 3、输入后缀 4、点击验证 | 1、区号:123 2、前缀:134 3、后缀:1234 | 不合格 |
2. 边界值分析法
解决边界限制问题
想一想
- 如何验证两个两位数整数边界数据的求和?
需求
- 判断输入的数据是否小于-99或者大于99,如果小于-99或大于99给出错误提示
后台代码实现逻辑(伪代码)
如果 a >= -99 or a <= 99:
print("输入的参数值必须大于-99同时小于99")
如果 b >= -99 or b <= 99:
print("输入的参数值必须大于-99同时小于99")
提示
- 输入的数据包含 99 或者 -99 时
边界条件设置出错
- 代码中将
>
写成了>=
,将<
写成了<=
- 代码中将
1. 边界范围节点
选取正好等于、刚好大于、刚好小于边界的值作为测试数据
- 上点:边界上的点(正好等于)
- 离点:距离上点最近的点(刚好大于、刚好小于)
- 内点:范围内的点(区间范围内的数据,一般取一个中间点)
提示
- 有关范围限制,最多7条⽤例(未优化,优化后5条)
- 边界值能解决位数限制问题,但是不能解决类型问题(要结合等价类)
2. 应用设计步骤
- 明确需求
- 确定有效和无效等价类
- 确定边界范围值
- 提取数据编写测试用例
3. 案例
1. 通过边界值法验证标题长度的合法性
要求:标题长度大于0,小于等于30个字符
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
title_001 | 不合法(长度为0) | 标题 | P1 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:为空 | 不合法 |
title_002 | 合法(长度为30个字符) | 标题 | P0 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:30个字符 | 合法 |
title_003 | 合法(长度为1个字符) | 标题 | P0 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:A | 合法 |
title_004 | 合法(长度为29个字符) | 标题 | P0 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:29个字符 | 合法 |
title_005 | 不合法(长度为31个字符) | 标题 | P1 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:31个字符 | 不合法 |
title_006 | 合法(长度为15个字符) | 标题 | P0 | 打开验证程序 | 1、输入标题 2、点击验证 | 标题:15个字符 | 合法 |
2. 通过边界值法验证QQ号码的合法性
要求:6~10位自然数
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_001 | 合格(6位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 123456 | 合格 | |
qq_002 | 合格(10位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 1234567890 | 合格 | |
qq_003 | 不合格(5位自然数) | P1 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 12345 | 不合格 | |
qq_004 | 合格(7位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 1234567 | 合格 | |
qq_005 | 合格(9位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 123456789 | 合格 | |
qq_006 | 不合格(11位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 12345678911 | 不合格 | |
qq_007 | 合格(8位自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 12345678 | 合格 | |
qq_008 | 不合格(8位非自然数) | P0 | 打开验证程序 | 1、输入QQ号 2、点击验证 | 1234567A | 不合格 |
4. 优化
- 开区间:开区间指的是区间边界的两个值不包括在内 (a,b)
- 闭区间:闭区间指的是区间边界的两个值包括在内 [a,b]
- 半开半闭区间:指的是开区间以便的边界值不包括在内,闭区间一边的边界值包括在内 [a,b) 、(a,b]
5. 案例
需求:取一个大于10小于等于20的数值 (10,20]
重点:开内闭外(开区间选包含的点,闭区选不包含的点)
优化策略:
- 上点: 必选(不考虑区间开闭) :10 ,20
- 内点: 必选(建议选择中间范围) :15
- 离点: 开内闭外(考虑开闭区间,开区间选择内部离点,闭区间选择外部离点)
- 10 < a <= 20 使用开闭区间表达:(10,20]
- 开区间: 不包含, 取内 :11
- 闭区间: 包 含, 取外 :21
- 综合:10、 20、 15、 11、 21
必测点为了验证范围的连续性
6 .适用场景
在等价类的基础上针对有边界范围的测试数据输入的地方(重点关注边界)
常见词语描述:大小、尺寸、重量、最大、最小、至多、至少等修饰词语
典型代表:有边界范围的输入框类测试
强调:单个输⼊框,常⽤的⽅式 边界 + 等价类
3. 判定表法
- 解决多条件有依赖关系测试
1. 判定表法的引入
案例: 验证 “若用户欠费或者关机,则不允许主被叫” 功能的测试
说明:
- 等价类、边界值分析法主要关注单个输入类条件的测试
- 并未考虑输入条件之间的各种组合、输入条件与输出结果之间有相互制约关系的测试。
- 解决多条件有依赖关系测试
2. 判定表定义及组成部分
定义:是一种以表格形式表达多条件逻辑判断的工具
组成
- 条件桩:列出问题中的所有条件,列出条件的次序无关紧要(是否欠费、是否关机)
- 动作桩:列出问题中可能采取的操作,操作的排列顺序没有约束(是否允许主被叫)
- 条件项:列出条件对应的取值,所有可能情况下的真假值(是否欠费、是否关机对应的取值)
- 动作项:列出条件项的、各种取值情况下应该采取的动作结果(是否允许主被叫对应的取值)
规则
- 判定表中贯穿条件项和动作项的一列就是一条规则
- 假设有n个条件,每个条件的取值有两个(0,1),全组合有2的n次方种规则
3. 判定表法设计用例步骤
明确需求
画出判定表
- 列出条件桩和动作桩
- 填写条件项,对条件进行全组合
- 根据条件项的组合确定动作项
- 简化、合并相似规则(有相同的动作)
根据规则编写测试用例
用例编号 用例标题 项目/模块 优先级 前置条件 测试步骤 测试数据 预期结果 tel_001 不能被主被叫(欠费+关机) 电话 P1 打开验证程序 1、选择是否关机 2、选择是否欠费 3、点击验证 1、欠费 2、关机 不允许主被叫 tel_002 不能被主被叫(欠费+未关机) 电话 P1 打开验证程序 1、选择是否关机 2、选择是否欠费 3、点击验证 1、欠费 2、未关机 不允许主被叫 tel_003 不能被主被叫(未欠费+关机) 电话 P1 打开验证程序 1、选择是否关机 2、选择是否欠费 3、点击验证 1、未欠费 2、关机 不允许主被叫 tel_004 能被主被叫(未欠费+未关机) 电话 P0 打开验证程序 1、选择是否关机 2、选择是否欠费 3、点击验证 1、未欠费 2、未关机 允许主被叫
4. 案例
1. 订购单检查
规则: 如果金额大于500元,又未过期,则发出批准单和提货单; 如果金额大于500元,但过期了,则不发批准单与提货单; 如果金额小于等于500元,则不论是否过期都发出批准单和提货单; 在过期的情况下不论金额大小还需要发出通知单。
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
order_001 | 只发通知单(金额大于500且过期) | 订购单 | P1 | 打开验证程序 | 1、输入金额 2、选择是否过期 3、点击验证 | 金额:600 是否过期:过期 | 只发通知单 |
order_002 | 发提货单和批准单(金额大于500且未过期) | 订购单 | P1 | 打开验证程序 | 1、输入金额 2、选择是否过期 3、点击验证 | 金额:600 是否过期:未过期 | 发提货单、批准单 |
order_003 | 发提货单和批准单(金额不大于500且未过期) | 订购单 | P1 | 打开验证程序 | 1、输入金额 2、选择是否过期 3、点击验证 | 金额:400 是否过期:未过期 | 发提货单、批准单 |
order_004 | 发通知单、提货单、批准单(金额不大于500且过期) | 订购单 | P1 | 打开验证程序 | 1、输入金额 2、选择是否过期 3、点击验证 | 金额:400 是否过期:过期 | 发通知单、提货单、批准单 |
2. 文件修改规则
规则: 输入的第一列字符必须是A或B 第二列字符必须是一个数字 如果第一列字符不正确,则给出信息L 如果第二列字符不正确,则给出信息M 如果两列字符输入正确,则修改文件成功
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
file_001 | 文件修改成功(第一列是A或B,第二列是数字) | 文件 | P0 | 打开验证程序 | 1、输入第一列 2、输入第二列 3、点击验证 | 1、第一列:A 2、第二列:2 | 文件修改成功 |
file_002 | 输出M(第一列是A或B,第二列是非数字) | 文件 | P1 | 打开验证程序 | 1、输入第一列 2、输入第二列 3、点击验证 | 1、第一列:A 2、第二列:a | 输出:M |
file_003 | 输出M和L(第一列非A或B,第二列是非数字) | 文件 | P1 | 打开验证程序 | 1、输入第一列 2、输入第二列 3、点击验证 | 1、第一列:C 2、第二列:a | 输出:M、L |
file_004 | 输出L(第一列非A或B,第二列是数字) | 文件 | P1 | 打开验证程序 | 1、输入第一列 2、输入第二列 3、点击验证 | 1、第一列:C 2、第二列:3 | 输出:L |
5. 使用场景
有多个输入条件,多个输出结果,输入条件之间有
组合
关系,输入条件和输出结果之间有依赖(制约)关系判定表一般适用于条件组合数量较少的情况(比如4个条件以下)
提示
1、多条件之间有依赖关系,使⽤判定表来进⾏测试覆盖。 2、判定表⼀般适合4个以内条件依赖关系 3、如果条件超过4个,就不适合覆盖所有条件,应采⽤(正交法)来解决。
扩展
4. 场景法
业务⽤例是根据流程图来梳理的,需要先了解流程图
1. 流程图
- 使用标准图形和箭头来表达程序或业务的走向(场景法依赖流程图)
- 椭圆表示:开始/结束
- 菱形表示:判断
- 矩形表示:处理
- 平行四边形:输入/输出数据
- 箭头:流向
流程图对测试人员有什么作用?
- 能够看懂流程图,设计业务用例
- 当需求文档信息不全时,能够根据需求,梳理出流程
流程图绘制工具
- 网页版工具:https://processon.com/ https://app.diagrams.net/ https://draw.io
- Windows工具: visio
- 亿图
2. 场景法介绍
说明场景法
也可以叫流程图法
,是用流程图描述用户的使用场景,然后通过覆盖流程路径
来设计测试用例。
意义
- 用户使用角度: 用户平时使用的不是单个功能,而是多个功能组合起来进行使用
- 测试人员角度: 平时测试的都是单个功能点进行测试,容易忽略多个功能的组合测试
3. 使用场景
根据实际的应用场景,来测试业务用例,可以使用场景法
4. 业务测试覆盖
重点
- 覆盖业务测试,需要使用流程图法
- 先测试业务,再测试单功能、单模块、单页面
5. 案例
1. 登陆
需求:用户名为admin密码为123456,输出登陆成功
2. 取款流程
泳道图
流程图
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
ATM_001 | 取款失败(非银行卡) | ATM | P1 | 打开程序 | 1、插入银行卡 2、点击验证 | 银行卡:美容会员卡 | 取款失败,退卡。 |
ATM_002 | 取款失败(密码错误达3次) | ATM | P1 | 打开程序 | 1、插入银行卡 2、输入密码 | 卡:银行卡 密码:错误密码 | 取款失败,吞卡。 |
ATM_003 | 取款失败(账户余额不足) | ATM | P1 | 1、打开程序 2、银行卡余额为0 | 1、插入银行卡 2、输入密码 3、选择取款 4、输入取款金额 | 卡:银行卡 密码:正确密码 取款金额:100 | 取款失败,提示余额不足,退卡。 |
ATM_004 | 取款失败(取款金额错误) | ATM | P1 | 1、打开程序 2、银行卡余额为100000000 | 1、插入银行卡 2、输入密码 3、选择取款 4、输入取款金额 | 卡:银行卡 密码:正确密码 取款金额:150 | 取款失败,提示:错误,取款金额必须为100的整数倍,单次取款最大限制5000。 |
ATM_005 | 取款失败(ATM余额不足) | ATM | P1 | 1、打开程序 2、银行卡余额为100000000 3、ATM机余额为0 | 1、插入银行卡 2、输入密码 3、选择取款 4、输入取款金额 | 卡:银行卡 密码:正确密码 取款金额:100 | 取款失败,提示:抱歉,故障。 |
ATM_006 | 取款成功 | ATM | P0 | 1、打开程序 2、银行卡余额为100000000 3、ATM机余额300000 | 1、插入银行卡 2、输入密码 3、选择取款 4、输入取款金额 | 卡:银行卡 密码:正确密码 取款金额:200 | 取款成功,打印凭证,减少卡余额。 |
ATM_006: 冒烟用例
冒烟测试:批量开始测试之前,执行业务正向用例,验证软件是否具备可测性
5. 错误推测法
定义:通过经验推测系统可能出现的问题
思想:根据经验列举出可能出现问题的清单,根据清单分析问题可能原因,推测发现缺陷
场景:
- 时间紧任务量大时,根据之前项目类似经验找出易出错的模块重点测试
- 时间宽裕通过该方法列出之前出现问题较多的模块再次测试
- 当项⽬⽤例都执⾏完毕,且BUG修复完成,离上线还有⼀段时间,在这段时间中可是使⽤错误推荐法复测主要业务或测试未覆盖的功能
时间紧任务量大、人员不足时,不写用例,只列测试点。先跟产品确认哪些是主要的核心业务。覆盖核心业务,再覆盖主要的模块,先正向再逆向,列出测试点,根据测试点测试,后期有时间再补测试用例。
- 随着学习在深入用例设计会更加完善 推荐阅读:深度剖析 “用户登录” 测试:超越基础,追求卓越
6. 测试流程
1. 项目测试流程
- 需求评审 -> 测试计划 -> 用例设计 -> 用例执行 -> 缺陷管理 -> 测试报告
2. 个人实施测试 (个人计划)
- 熟悉被测模块需求
- 阅读理解需求,记录不明确之处
- 找产品人员快速串讲需求
- 分析需求
- 提取测试点
- 设计测试点覆盖需求
- 编写用例覆盖测试点
- 等价类 解决:穷举问题
- 边界值 解决:边界限制
- 判定表 解决:多条件依赖限制
- 场景法 解决:业务场景测试
- 用例评审
- 执行用例
- 缺陷管理
- 测试总结
7. 练习
1. 单模块用例设计
密码规则:
1. 不能纯数字
2. 不能纯字母
3. 字母 + 数字
4. 长度6 ~ 16位