黑盒测试的定义见”了解软件测试之测试分类“一文
一、等价类划分法
1.概念:指把所有可能的输入数据,即程序的输入域划分成若干个子集合,然后从每一个子集合中选取少数具有代表性的数据作为测试用例。在该子集合中,所有输入数据对于揭露软件中的错误都是等效的。
2.等价类划分为两种不同的情况:
(1)有效等价类:指对程序的需求说明中有意义的、合理的、正确的输入数据所构成的集合
(2)无效等价类:指不合理的或无意义的输入数据所构成的集合
例如:微信红包金额,从数据范围考虑:
有效金额:0.01 ~ 200
无效金额:<0.01 ~ >200
3.等价类划分话设计用例的步骤
(1)熟悉需求,按照数据范围/数据类型/是否必填值/需求规则约束角度划分等价类,并规定为唯一的编号
①数据范围:用户名长度(类似于 最小<x<最大,最小<x, 最大>x)
②数据类型:字符/整数/小数/负数,比如金额只能是数字,正数且小数点最多两位
③是否必填值:是否可以是空的
④需求规则约束角度:例如系统规定QQ密码必须要求密码中必须包含数字、字母和特殊字符
(2)设计测试用例,覆盖所有有效等价类
设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复,直到覆盖所有的有效等价类
(3)设计测试用例,覆盖所有无效等价类
设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复,直到覆盖所有的无效等价类
4.等价类划分法设计用例案例
例:QQ密码设置 :6-20个大小写英文字母、符号或数字组合
(1)输入需求:密码设置 ,6-20个大小写英文字母、符号或数字组合
①划分角度:长度 ,数据类型(组成)
有效等价类:6-20位,大小写字母+符号,大小写字母+数字,符号+数字,大小写字母+符号+数字
无效等价类:<6位,>20位,纯数字,纯字母(大小写),纯符号,非字母符号数字--中文
②划分角度:是否为必填项
有效等价类:必填项
无效等价类:为空
(2)输入:密码
测试用例设计(覆盖有效类):
qwert@(6位,大小写字母+符号,非空)
qwert6(6位,大小写字母+数字,非空)
Qwert12345678!@#$@&*(20位,大小写字母+数字+符号,非空)
1234567890!@#$@&*.(6-20位,数字+符号,非空)
(3)输入:密码
测试用例设计(覆盖无效类):
12345(<6位)
Qwert12345678!@#$@&*.(>20位)
123456(纯数字)
哈哈12345@(包含字母)
(不输入)
!@#¥%……&*(纯符号)
qwertyu(纯字母)
二、边界值分析法
1.边界值的作用:测试工作经验得知,大量的错误发生在输入或输出范围的边界上,而不是输入范围的内容。针对各种边界情况设计测试用例,查出更多错误。
例:微信红包金额0.01~200
正确代码:0.01 <= x <=200
错误代码:0.01 < x < 200 、0.01 = x <= 200、 0.01 <= x < 200
2.概念:边界值分析法是对等价类划分法的一个补充,边界值一般都是从等价类的边缘值去寻找。
边界值分析的基本思想:正好等于、刚刚大于、刚刚小于边界的值作为测试数据
例:微信红包金额0.01~200 ,边界值 0.01 、 0 、0.02、 199.99、 200、 200.01
下拉列表包含多个选项的情况 ,边界值:第一个选项、最后一个、中间一个
搜素功能,展示大量数据的页面,涉及翻页,测试数据完整性及正确性,边界值:第一页、中间一页、最后一页中第一行、最后一行、中间一行
banner活动页(网页中横幅广告),边界值:屏幕上光标在最左上、最右下位置
3.边界值得应用场景:如果需求规定了取值范围或规定了取值的个数时,可利用边界值进行测试。
4.边界值分析法设计用例的案例
例:QQ密码设置 :6-20个大小写英文字母、符号或数字组合
边界值:5、6、7、19、20、21
(1)输入需求:密码设置 ,6-20个大小写英文字母、符号或数字组合
①划分角度:长度 ,数据类型(组成)
有效等价类:6-20位,大小写字母+符号,大小写字母+数字,符号+数字,大小写字母+符号+数字
无效等价类:<6位,>20位,纯数字,纯字母(大小写),纯符号,非字母符号数字--中文
②划分角度:是否为必填项
有效等价类:必填项
无效等价类:为空
(2)输入:密码
测试用例设计(覆盖有效类)(边界值分析):
qwert@(6位,大小写字母+符号,非空)(6位)
qwerty6(7位,大小写字母+数字,非空) (7位)
Qwert12345678!@#$@&*(20位,大小写字母+数字+符号,非空)(20位)
1234567890!@#$@&*.@(6-20位,数字+符号,非空)(19位)
(3)输入:密码
测试用例设计(覆盖无效类)(边界值):
12345(<6位)(5位)
Qwert12345678!@#$@&*.(>20位)(21位)
123456(纯数字)
哈哈12345@(包含字母)
(不输入)
!@#¥%……&*(纯符号)
qwertyu(纯字母)
三、判定表法
等价类边界值分析主要针对单个输入类条件的测试,对于输入条件存在关联组合的情况则无法覆盖。
例:公司涨薪规则:员工有5年工龄或具有1级贡献,则涨薪
测试项 | 有效等价类 | 无效等价类 |
5年工龄 | 有5年工龄 | 没有5年工龄 |
1级贡献 | 有1级贡献 | 没有1级贡献 |
设计测试用例如下:
1.员工有5年工龄且1级贡献,涨薪;(覆盖 有效等价类:有5年工龄、有1级贡献)
2.员工没有5年工龄但有1级贡献,涨薪;(覆盖 有效等价类:有5年工龄;无效等价类:没有1级贡献)
3.员工有5年工龄但无1级贡献,涨薪;(覆盖 有效等价类:有1级贡献;无效等价类:没有5年工龄)
未覆盖用例:员工即无5年工龄也无1级贡献,不涨薪。
1.定义:判定表是分析和表达多逻辑条件下执行不同操作的工具。就是指把所有的输入条件、所有可能采取的动作按表格列出来,每一种条件和动作的组合构成一条规则,也即一条用例。
例:公司涨薪规则:员工有5年工龄或具有1级贡献,则涨薪
条件桩 | 5年工龄 | 有 | 有 | 无 | 无 |
条件桩 | 1级贡献 | 有 | 无 | 有 | 无 |
动作桩 | 涨薪 | √ | × | √ | × |
条件桩:列出需求规定所有的输入条件,顺序不重要
动作桩:列出需求规定可能采取的动作,顺序不重要
条件项:列出各个输入条件所有可能的真假值
动作项:列出在条件项的各种取值情况下应该采取的动作
2.判定表法设计用例的步骤
(1)列出条件桩和动作桩
(2)确定规则的个数 (若有n个条件,且每个条件的可取值为0或1,那么将会有2的n次方个规则)
(3)填写所有条件项
(4)填写所有动作项
(5)合并、简化判定表(若两条或多条规则具有相同的动作,并且其条件项之间存在极为相似的关系)
(6)列出测试用例(每个规章制度一条用例)
3.判定表法设计用例的案例
例:某ERP系统的一个设备管理模块,负责对公司所有的设备进行日常管理,具体包含海关检验,定期维修,报废等内容,针对设备的维修系统有如下规定:对功率大于50马力的机器同时维护记录不全,或者已经运行10年以上的机器,应该给予优先的维修处理。
条件:(1)功率大于50马力吗?
(2)维修记录不全吗?
(3)运行超过10年了吗?
动作:(1)进行优先处理
(2)做其它处理
分析条件组合,确定对应动作,建立判定表并得到最终的测试用例。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
条件桩 | 功率大于50马力 | √ | √ | √ | √ | × | × | × | × |
条件桩 | 维修记录不全 | √ | √ | × | × | √ | √ | × | × |
条件桩 | 运行超过10年 | √ | × | √ | × | √ | × | √ | × |
动作桩 | 优先处理 | √ | √ | √ | √ | √ | |||
动作桩 | 其它处理 | √ | √ | √ |
情况1,2可合并为1列;情况5,7可合并为1列;情况6,8可合并为1列(或4,8合并)
1 | 2 | 3 | 4 | 5 | ||
条件桩 | 功率大于50马力 | √ | √ | √ | × | × |
条件桩 | 维修记录不全 | √ | × | × | - | - |
条件桩 | 运行超过10年 | - | √ | × | √ | × |
动作桩 | 优先处理 | √ | √ | √ | ||
动作桩 | 其它处理 | √ | √ |
判定表法 条件多时列出表格比较繁琐,合并时容易漏测。
四、因果图法
判定表法针对输入条件之间的约束不能有效区分,会导致产生一些不合理的组合条件。需要体现输入条件之间的相互制约关系,可以使用因果图法。
1.定义:因果图法是用图解的方法表示输入的各种组合、约束关系,依据因果图最终写出判定表,从而设计相应的测试用例。
因果关系:体现条件和结果的关系。
恒等:a=b
非~:a 不等 b
或V:可能有任意个输入,如果a1或a2是1,则b为1;否则b为0。
与^:可
能有任意个输入 ,如果a1和a2都是1,则b为1;否则b为0。
约束关系:输入条件间可能存在某些依赖关系,称为约束。在因果图中,用特定符合标明这些约束
例如:某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。
E约束(异) : a和b中至多有一个可能为1,即a和b不能同时为1。
I约束(或):a、b、c中至少有一个必须 为欸,即a、b、c不能同时为0。
O约束(唯一):a和b必须有一个且仅有一个为1。
R约束(要求):a是1时,b必须是1,即a为1是,b不能为0。
M约束(强制):若结果a为1,则结果b强制为0。
2.因果图法设计用例的步骤
(1)分析需求,列出原因和结果 (原因:即输入条件;结果:输出条件)
(2)分析输入与输入,输入与输出之间的关系
(3)通过关系,画出因果图
(4)将因果图转化为判定表
(5)去掉不合理组合,列出测试用例
3.因果图法设计用例的案例
例:某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M.
第一步:先列出原因(即输入条件)和结果(输出条件):
原因:①第一列字符是A;②第一列字符是B;③第二列字符是一数字。
结果:②①修改文件;②②给出信息L;②③给出信息M
第二步:分析输入与输入,输入与输出之间的关系
第三步:通过关系,画出因果图
第四步:将因果图转化为判定表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
输入(原因) | 1:第一列字符是A | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
输入(原因) | 2:第一列字符是B | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
输入(原因) | 3:第二列字符是数字 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
输入(原因) | 11 | 1 | 1 | 1 | 1 | 0 | 0 | ||
输出(结果) | 21:修改文件 | √ | √ | ||||||
输出(结果) | 22:给出信息L | √ | √ | ||||||
输出(结果) | 23: 给出信息M | √ | √ | √ |
第五步:去掉不合理组合,剩下的每一列作为一条用例
1,2种情况不合理
五、正交实验法
利用因果图法、判定表法可以帮助我们对于输入数据的组合情况进行用例设计,但当输入数据的组合数量巨大时,由于不太可能覆盖到每个输入组合的测试情况,因果图法或判定表法可能就不太适用了,可以采用正交实验法、来合理地减少人力跟时间成本。
1.定义:正交实验法是研究多因素多水平的一种方法,它是通过正交表挑选部分有代表性的水平组合试验替代全面试验。这些有代表行的组合试验具备了“均匀分散、整齐可比”的特点。
适用场景:比较多地应用在软件产品的搜索、查询、配置项等场景中。
4=3*(2-1)+1;L是正交表;4代表试验次数或正交表的行数;3代表最多可安排影响指标因素的个数或正交表的列数;2代表每个因素水平数。
上图来源于百度。
2.正交实验法设计用例的步骤
(1)分析需求,获取因素和水平(因素:条件;水平:取值)
(2)根据因素和水平,选择正交表
(3)替换因素水平,得到试验次数
(4)细化得到最终的测试用例
3.正交实验法设计用例案例
例如:某公司想通过“性别”、“单身”和“年龄”这三个查询条件对公司男女比例情况进行查询:
根据 “性别” = “男、女”查询
根据 “单身” = “是、否”查询
根据 “年龄” = “35岁以下 、35岁以上”查询
(1)因素:3,水平:2 , 4=3*(2-1)+1
(2)Orthogonal Arrays (直接在网页中查询正交表)
(3)
Column | Column | Column | |
Experiment Number | 性别 | 单身 | 年龄 |
1 | 男 | 是 | 35岁以下 |
2 | 男 | 否 | 35岁以上 |
3 | 女 | 是 | 35岁以上 |
4 | 女 | 否 | 35岁以下 |
可借用网址正交测试用例生成工具,生成用例。
六、场景法
1.定义:通过运用场景来对系统的功能点或业务流程的描述,设计用例遍历场景,验证软件系统功能的正确性,从而提高测试效果的一种方法。
场景法一般包含基本流和备用流。(测试用例不充分,需结合其它测试方法测试)
基本流:软件功能的正确流程,通常一个业务只存在一个基本流且基本流有一个起点和一个终点。
备选流:除了基本流之外的各个支流,包含基本流之外的其它备选场景、异常场景。
2.场景法设计用例的步骤
(1)分析需求,画出流程图(基本流备选流)
矩形:表示步骤(操作/输入/输出结果)
菱形:判断--是否
箭头:工作流向
(2)依据基本流生成场景
①正常场景验证,每一个判断的正确的那条分支
(3)从开始节点,覆盖备选流,生成场景
②找到每一个判断的地方,覆盖另一条未被覆盖的判断分支
③绕回到流程上面,多验证一个正常的步骤
(4)每一个场景为一条用例
3.场景发设计用例案例
例:ATM取款
1.插入银行卡(合法)-- 输入正确密码,确定 -- 输入取款金额:5000(前提:账号余额充足,ATM现金充足) -- 取款成功
2.插入银行卡(不合法)-- 提示错误,退卡
3.插入银行卡(合法)-- 输入正确密码,取消 -- 退卡
4.插入银行卡(合法)-- 输入错误密码,确定 -- 提示重新输入密码 -- 输入正确密码,确定
5.插入银行卡(合法)-- 输入错误密码,确定3次,吞卡
6.插入银行卡(合法)-- 输入正确密码,确定 -- 输入取款金额非法:30(前提:账号余额充足、ATM现金充足)-- 金额不合法 -- 输入合法金额
7.插入银行卡(合法)-- 输入正确密码,确定 -- 输入取款金额:5000(前提:账号金额不充足、ATM现金充足)-- 余额不充足 -- 输入其它金额
8.插入银行卡(合法)-- 输入正确密码,确定 -- 输入取款金额:5000(前提:账号金额充足、ATM现金不充足)-- 余额不充足 -- 输入其它金额
七、状态迁移法
1.定义:状态迁移主要关注在测试状态转移的正确性上面。对于一个有限状态机,通过测试验证其在给定的条件内是否能够产生需要的状态变化,有没有不可达的状态和非法的状态,是否可能产生非法的状态转移等。通过构造能导致状态迁移的事件,来测试状态之间的转换。
2.使用场景:状态迁移的思想是提供多个状态的转换串起来进行测试的思路。该方法适合功能的状态比较多的情况下,需测试各种状态的转换,且这些状态转换的测试在实际工作中容易被遗漏。比如播放器、遥控按键等。对于业务流程复杂的产品,不能很好地通过场景法进行用例设计时,可应用状态迁移的思路,从业务的各种状态出发,并通过这些状态之间的切换条件串联起来进行测试覆盖,以此保证用例的高覆盖率。
3.状态迁移法设计用例的步骤
(1)分析需求,整理所有状态
(2)画出状态迁移图
(3)列出状态-事件表 (此项不是必须项,可依据实际情况跳过该步骤,直接得到状态转换树)
(4)得到状态转换树(测试路径)
(5)根据状态转换树得到测试用例
4.状态迁移法设计用例的案例
需求:通过某购票系统,顾客可以提前购买火车票,去到某地。
1.用户登录购票系统,选择出发地、目的地、出发日期,选择某趟车次点击“预定”,且填好订票人信息,点击提交订单;当前订单状态为“未支付”;
2.用户手动取消订单,车票状态更新为“已取消”;45分钟内未支付,订单自动取消,车票状态为“已取消”;
3.用户支付车票,车票状态为“已取消”;
4.用户到达车站通过自动取票机或售票窗口取票,车票状态为“已出票”;
5.在开车半小时前,可进行改签,改签成功,车票状态为“改签成功”;
6.已出票/已改签的车票检票登上火车后,车票状态变为“已使用”;
7.在开车半小时前,可进行退票,退票成功,车票状态为“退票成功”。
(1)分析需求,整理订单/车票的所有状态:
未支付、已取消、已支付、已出票、改签成功、已使用、退票成功
(2)画出状态迁移图
(3)列出状态-事件表:(不是必须项,可跳过)
(4)得到状态转换树(测试路径)
(5)根据状态转换树得到测试用例:
每条路径则为1条用例。对于状态转换有存在多个事件触发,覆盖多个事件操作,比如“未支付--已取消”这条测试路径,需要测试2种情况:①用户手动取消,②超过45分钟用户未支付,自动取消。
八、错误推测法
1.定义:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
2.要素:经验、知识、直觉。
3.使用场景:先通过对用例进行设计,再使用错误推测法进行推测列举程序中可能出现的错误,作为用例的补充。
例:长文本输入框,输入纯数字/字符/字母过长,溢出边框的情况
黑盒测试用例设计总结
等价类划分法 | 需求有输入,输入之间无关联组合要求 |
边界值分析法 | 需求有输入,且输入规定了范围或个数 |
判定表法 | 需求有多个输入,且输入需考虑关联组合 |
因果图法 | 需求有多个输入,输入间有约束关系; 输入与输出间有因果关系 |
正交实验法 | 需求有多个输入项,每个输入项又有多个不同取值, 需考虑输入间相互组合情况 |
场景法/状态迁移法 | 多个功能的业务流程/逻辑覆盖 |
错误推测法 | 补充测试用例 |