发现Bug的方法论
一、什么是测试用例(Test Case)
1. 定义
测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果。以便测试某个程序路径或核实是否满足某个特定需求,其实也是一个能够指导软件测试执行的说明书。
2. 为什么要书写测试用例
(1) 梳理测试思路
(2) 质量评价依据
(3) 相似场景复用
(4) 规范管理
3. 测试用例应包含哪些内容
用例编号、用例名称、优先级测试模块、前置条件、测试输入、操作步骤、预期结果、实际结果
二、测试用例设计方法
最常用:等价类划分法、边界值分析法
其他方法:错误推测法、因果图法、判定表驱动法、正交试验法、功能图法、场景法
1. 等价类划分法
1.1 等价类划分法简介
等价类划分法是指将程序的输入值的集合划分为若干等价类,等价类又分为有效等价类和无效等价类,从每一类中选取少量数据进行测试。
(1) 有效等价类
是指将程序的输入值的集合当中符合输入要求的数据就是有效等价类。
(2) 无效等价类
是指将程序的输入值的集合当中不符合输入要求的数据就是无效等价类。
(3) 举例说明
登录某网站时,用户名要求使用邮箱登录或手机号进行登录。
a. 有效等价类
手机号:12345678901
邮箱:12345678@qq.com
b. 无效等价类
手机号:1234、abcdefg
邮箱:12345678、@qq.com、@456@123
c. 思考
abc@qq123.com是有效等价类还是无效等价类?
答:属于有效等价类。虽然没有qq123邮箱网站,但是只要邮箱格式正确,就属于有效等价类。这部分信息可以在右键验证模块进行验证。
1.2 等价类划分法实战演示
(1) 演示1:设计某网站用户名输入的测试用例
用例编号 | 用例名称 | 优先级 | 测试模块 | 前置条件 | 测试输入 | 操作步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|---|---|---|---|
un-01 | 正确手机号 | 1 | 登录 | 无 | 12345678901 | 1、用户名输入框中输入12345678901 2、鼠标点击任意空白处 | 无提示 | |
un-02 | 正确邮箱 | 1 | 登录 | 无 | 1234@qq.com | 1、用户名输入框中输入1234@qq.com 2、鼠标点击任意空白处 | 无提示 | |
un-03 | 错误手机号 | 1 | 登录 | 无 | 123456789012 | 1、用户名输入框中输入123456789012 2、鼠标点击任意空白处 | 提示请输入正确手机号或邮箱 | |
un-04 | 错误邮箱 | 1 | 登录 | 无 | 1234 | 1、用户名输入框中输入1234 2、鼠标点击任意空白处 | 提示请输入正确手机号或邮箱 | |
un-05 | 错误手机号 | 2 | 登录 | 无 | abcd | 1、用户名输入框中输入abcd 2、鼠标点击任意空白处 | 提示请输入正确手机号或邮箱 |
注:
(1) 用例编号中的un表示username的缩写。
(2) un-05的优先级是2的原因是:un-03已经输入一个用例名称为“错误手机号”的测试了,在项目非常紧急到时候,意味着这条测试用例可以不执行。:
(2) 演示2:设计某网站登录用户名密码的测试用例
用例编号 | 用例名称 | 优先级 | 测试模块 | 前置条件 | 测试输入 | 操作步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|---|---|---|---|
dl-01 | 正确手机号和密码 | 1 | 登录 | 无 | 用户名:12345678901 密码:123456 | 1、用户名输入框中输入12345678901 2、密码输入框输入123456 点击登录按钮 | 登陆成功,当前页面刷新状态,页面无跳转 | |
dl-02 | 正确邮箱和密码 | 1 | 登录 | 无 | 用户名:1234@qq.com 密码:123456 | 1、用户名输入框中输入1234@qq.com 2、密码输入框输入123456 3、点击登录按钮 | 登陆成功,当前页面刷新状态,页面无跳转 | |
dl-03 | 正确手机号和错误密码 | 1 | 登录 | 无 | 用户名:12345678901 密码:0000 | 1、用户名输入框中输入12345678901 2、密码输入框输入0000 3、点击登录按钮 | 登陆失败,提示用户名或密码错误 | |
dl-04 | 正确邮箱和错误密码 | 1 | 登录 | 无 | 用户名:1234@qq.com 密码:0000 | 1、用户名输入框中输入1234@qq.com 2、密码输入框输入0000 3、点击登录按钮 | 登陆失败,提示用户名或密码错误 | |
dl-05 | 错误手机号和正确密码 | 2 | 登录 | 无 | 用户名:1111111111 密码:123456 | 1、用户名输入框中输入1111111111 2、密码输入框输入123456 3、点击登录按钮 | 登陆失败,提示用户名或密码错误 | |
dl-06 | 错误邮箱和正确密码 | 2 | 登录 | 无 | 用户名:1234@000.com 密码:123456 | 1、用户名输入框中输入1234@000.com 2、密码输入框输入123456 3、点击登录按钮 | 登陆失败,提示用户名或密码错误 |
(3) 更多等价类划分法的场景
a. 区间值:考试分数录入,考试分数区间为0到100;
b. 学历信息录入:要求只能输入专科、本科、硕士、博士;
c. 性别信息录入:只能输入男或女;
d. 密码复杂度:6到12位,字母和数字的组合。
2. 边界值分析法
边界值分析法针对输入数据的边界值的测试,一般情况下与等价类划分法结合使用,根据各个等价类的边界值设计测试用例。
举例:登录某网站时,密码要求6到12位,字母区分大小写,不能使用空格。
(1) 边界值分析法实战案例
用例编号 | 用例名称 | 优先级 | 测试模块 | 前置条件 | 测试输入 | 操作步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|---|---|---|---|
pd-01 | 正确密码6位 | 1 | 登录 | 输入正确的用户名 | 用户名:12345678901 密码:123456 | 1、输入正确的用户名12345678901 2、输入密码123456 | 登陆成功,更新登录状态,页面无跳转 | |
pd-02 | 正确密码20位 | 1 | 登录 | 输入正确的用户名 | 用户名:12345678901 密码:12345123451234512345 | 1、输入正确的用户名12345678901 2、输入密码12345123451234512345 | 登陆成功,更新登录状态,页面无跳转 | |
pd-03 | 密码5位 | 1 | 登录 | 输入正确的用户名 | 用户名:12345678901 密码:12345 | 1、输入正确的用户名12345678901 2、输入密码12345 | 页面提示:请输入6-20位密码,区分大小写,不能使用空格 | |
pd-04 | 密码21位 | 1 | 登录 | 输入正确的用户名 | 用户名:12345678901 密码:123451234512345123456 | 1、输入正确的用户名12345678901 2、输入密码123451234512345123456 | 页面提示:请输入6-20位密码,区分大小写,不能使用空格 |
(2) 更多边界值分析法的场景
a. 区间值:考试分数录入,考试分数区间为0到100;
b. 某个输入框只能输入整数;
<img src= width=>
3. 错误推测法
错误推测法(猜测法)是基于经验和直觉,以及参考以往测试结果中出现较频繁及较隐蔽的错误,从而推测出程序所有可能出现的错误或异常,选择这些情况下的用例进行测试(也就是有一点点依据的瞎猜)。
4. 判定表驱动法
举例:一个程序能判定某一年份是不是闰年。
编号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|
条件 | 能被4整除 | Y | Y | Y | Y | N | N | N | N |
不能被100整除 | Y | Y | N | N | Y | Y | N | N | |
能被400整除 | Y | N | Y | N | Y | N | Y | N | |
结果 | 是闰年 | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ | |||||
不是闰年 | ✓ \checkmark ✓ | ||||||||
不存在 | \checkmark | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ |
注:这里的表是为了加深对判定表驱动法的理解,而真正的测试表还是需要向前边那样写才行。
5. 因果图法
(1) 因果图法介绍
因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,适用于检查程序输入的各种组合条件。因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合,所谓的原因就是输入,所谓的结果就是输出。
因果图的“因”即输入条件;因果图的“果”即输出结果。
(2) 因果图使用场景
等价类划分法和边界值分析法都是着重考虑输入条件,但没有考虑输入条件的组合以及制约关系。测试时必须考虑组合,但又不能考虑所有组合,所以必须考虑采用一种合适的方法对条件组合进行分析和简化。最终目的是用最少的测试用例覆盖最全面的场景。
(3) 因果图法举例
场景:自动售货机购买商品
假设自助售货机只接受5元、10元纸币,一次只能投入一张纸币,自助售货机出售的两种商品分别为:1、矿泉水3元;2、饮料6元。
a. 明确输入输出条件
输入条件 | 输出条件 |
---|---|
1、售货机有零钱 | 售货机无零钱不可购买 |
2、投5元 | 提示购买成功 |
3、投10元 | 找零钱 |
4、买矿泉水 | 提示错误 |
5、买饮料 |
b. 因果图图表中的因果关系符号说明
符号 | 名称 | 含义 | 举例 |
---|---|---|---|
- | 恒等 | 若原因出现,则结果出现;若原因不出现,则结果也不出现 | 到银行取钱,条件为取钱,结果为银行给钱 |
~ | 非 | 若原因出现,则结果不出现;若原因不出现则结果出现 | 到银行取钱,因是取钱金额大于银行卡余额,果为取钱成功 |
v | 或 | 若几个原因有一个出现,则结果出现;若几个原因都不出现,则结果不出现 | 多个原因分别为喝啤酒、喝白酒、喝红酒,果为小白喝多了 |
^ | 与 | 若几个原因都出现,则结果出现;若其中一个原因不出现,则结果不出现 | 多个原因有男性、帅、才华横溢,果为小白 |
c. 因果图中的因与因(条件与条件)约束条件说明
符号 | 名称 | 含义 | 举例 |
---|---|---|---|
E | 互斥 | 所有条件中只能有一个成立,但是可以都不成立 | 性别条件 |
I | 包含 | 所有条件中至少有一个成立。可以多选但不能不选 | 个人爱好,可以是多个,但至少有一个 |
O | 唯一 | 所有条件中有且仅有一个为1.也就是说多个原因中有且只有一个成立。 | 个人资料中下拉框里的学历选择 |
R | 要求 | 如果条件a成立,则要求条件b必须也成立,一个出现,另一个也一定出现 | 银行取钱,必须有卡和密码两个条件 |
M | 强制屏蔽 | 条件a成立时,条件b不成立。条件a不成立时,条件b不一定 | 春节放假,不是春节不一定放不放假 |
d. 因果图法设计因果图
<src img= width=>
e. 因果图转换判定表
条件||||||
|售货机有零钱|0|1|1|1|1
|投5元||1|1||
|投10元||||1|1
|买矿泉水||1||1|
|买饮料|||1||1
结果||||||
|售货机无零钱不可购买|1||||
|提示购买成功||1||1|1
|找零钱||1||1|1
|提示错误|||1||
f. 判定表转换测试用例
用例编号 | 用例名称 | 优先级 | 测试模块 | 前置条件 | 测试输入 | 操作步骤 | 预期结果 | 实际结果 |
---|---|---|---|---|---|---|---|---|
shj-01 | 售货机无零钱 | 1 | 购买 | 无 | 无 | 取空售货机中的零钱 | 不可购买商品 | |
shj-02 | 5元买矿泉水 | 1 | 购买 | 售货机有零钱 | 5元人民币 | 1、投入5元人民币 2、选择购买矿泉水 | 1、提示购买成功 2、找零正确 | |
shj-03 | 5元买饮料 | 1 | 购买 | 售货机有零钱 | 5元人民币 | 1、投入5元人民币 2、选择购买饮料 | 1、提示错误购买失败 | |
shj-04 | 10元买矿泉水 | 2 | 购买 | 售货机有零钱 | 10元人民币 | 1、投入10元人民币 2、选择购买矿泉水 | 1、提示购买成功 2、找零正确 | |
shj-05 | 10元买饮料 | 1 | 购买 | 售货机有零钱 | 10元人民币 | 1、投入10元人民币 2、选择购买饮料 | 1、提示购买成功 2、找零正确 |
6. 正交试验法
(1) 正交试验法是利用正交表来对程序进行测试,用较少的测试用例进行较全面的测试。根据正交表的正交性,从全面试验中挑选出适量的、有代表性的点进行试验。
获取最少用例数的计算:
n
=
k
∗
(
m
−
1
)
+
1
n=k*(m-1)+1
n=k∗(m−1)+1
其中,
n
n
n表示测试用例数,
k
k
k表示最多可安排影响指标因素的个数或正交表的列数,
m
m
m表示每个因素的水平数即状态。
(2) 正交试验法举例
场景:网站用户登录
此网站在登录时,要求我们输入用户名、密码和验证码
此场景一共有3个字段,2种状态(填或不填)
则最少用例数为
n
=
3
∗
(
2
−
1
)
+
1
n=3*(2-1)+1
n=3∗(2−1)+1
状态\列号|1|2|3||用户名|密码|验证码
|1|1|1||填|填|填
|2|1|1||不填|填|填
|1|2|1||填|不填|填
|1|1|2||填|填|不填
7. 功能图法
(1) 功能图法就是用功能图形象地描述程序的功能说明,并生成功能图的测试用例。
(2) 功能图法举例
场景:主题修改
某网站可以修改三种主题红、蓝、黑
则网站主题迁移图可以表示为:
<img src= width=>
由状态迁徙图演变成为状态迁徙树:
<img src= width=>
则用例设计如下图所示:
<img src= width=>
8. 场景法
(1) 场景法是通过运用场景来对系统的功能点或业务流程的描述,从而提高测试效果的一种方法。
运用场景来测试需求是指模拟特定场景边界发生的事情,通过事件来触发某个动作的发生,观察事件的最终结果,从而用来发现需求中存在的问题。
(2) 场景:权限审批
当我们入职到一个新公司时,需要申请一个办公用品等设备。
场景法设计测试用例:
<img src= width=>