这段时间积累的一些想法:
1.参考这篇吐槽https://zhuanlan.zhihu.com/p/27345893,理解软件的Bug为什么不能彻底消除这一事实。
2.和传统行业(例如制造业)、传统软件行业(例如军工软件行业、IT行业)不同,互联网行业的测试只保证应用的核心链路/功能可用,并不追求测试覆盖率,出现小的bug能够通过快速迭代去fix,2者的质量策略有很大差别,即使在阿里内部,淘宝和蚂蚁的测试工具、方法和质量管理策略、理念都是有差异的。
3.老板总是吐槽我们自己定位过低,希望我们尽快从一个项目测试人员转变为一个质量领域专家,但事实上我对这2个角色之间的区别理解的不够透彻,即使理解清楚了,也并不代表一定能干的好,知易行难。
4.现在很多的测试开发工程师,都喜欢自动化测试、开发测试工具,有开发能力的测试工程师也越来越多,但是在当前行业的质量保证还无法脱离黑盒手工测试的前提下,测试设计方法仍然是每一个测试人员都需要掌握的基本功。
吐槽完了,回到正题,黑盒测试设计方法主要包含:
- 等价类划分法
- 边界值分析法
- 错误推测法
- 因果图
- 判定表法
- 正交实验法
- 状态迁移图
- 流程分析法
......
学习测试设计方法前,有基本的数学基础或者统计学基础更好,因为很多测试设计方法本质上都是基于一些抽样理论,思考的是如何通过少量的抽样实例实现对测试输入情况的全量覆盖。
等价类划分法
定义:将所有可能的输入数据划分几个子集,子集内的输入数据是等价的,在子集中抽取1个(几个)输入数据作为用例代表整个子集,通过这种方式实现所有输入数据的测试覆盖。
等价类包括有效/无效等价类,有效/无效指的是输入数据的有效/无效,分别用于覆盖正常/异常场景。
举例:
1.PRD中一个页面表单新增配置功能,规格说明如下:
输入框录入数据为整数[1,100],点击保存成功,否则弹出错误提示。
我们可以做等价类划分如下:
c1: input<1
c2: input∈[1,100]
c3: input>100
从等价类中抽取用例如下:
c10: input = -1,output = fail
c20: input = 10, output = success
c30: input = 200, output = fail
其中c1和c3属于无效等价类
c2属于有效等价类
等价类划分的原则:
1.完备性:等价类求并集为整个集合(比如举例中,c1/c2/c3求并集就是整数集合)
2.互斥性:各等价类无交集(举例中,c1/c2/c3为整数集合的互斥子集)
总结:
1.等价类是依据需求规格来划分的。
2.这里划分等价类用到了边界值分析法。
3.用例的粒度是由具体的测试设计人员来控制,测试设计人员结合实际测试场景和需求决策用例粒度。
应用场景:
边界值分析法
定义:边界值分析法是对等价类划分法的补充,依据等价类划分,从等价类的边界值处设计测试用例。
边界值分析法假定问题更容易发生在边界处,这是边界值分析法的理论基础。
还是以等价类划分里面的举例来看:
按照边界值分析法,可以抽用例如下:
c11: input = 0, output = fail
c21: input = 1, output = success
c22: input = 2, output = success
c23: input = 99, output = success
c24: input = 100, output = success
c31: input = 101, output = fail
错误推测法
基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。
这是一个很唯心的异常测试设计方法,用例设计的好坏依赖:测试人员对业务的了解程度、过往的
测试经验等。
比如测试一个移动app通话功能,我们推测可能出现通话异常的情况有:
1.弱网情况(隧道里/火车上)
2.低电量情况
3.CPU/内存耗尽
4.受到信号干扰
......
测试人员可以按照这些推测异常的场景去设计用例。
我理解的是,错误推测法更多的应用于发散测试/探索测试中。
因果图
等价类划分和边界值分析考虑的都是输入值的覆盖情况,但是没有考虑不同输入条件之间的相互影响,因果图是利用图解来分析各种输入值的组合情况,根据分析结果来设计用例。
输入条件组合的全量覆盖为何不可行?
如果有n个输入条件,每个输入条件有m个等价类,则可能的组合情况是:n^m种。
>假设n=5,m=3,组合就有19683种
>实际测试场景可能比这个更复杂。
举例:
1.PRD中的页面表单新增配置功能,规格说明如下:
表单有2个输入框如下:
输入框A,支持整数[1,100]
输入框B,支持字符(1~10字符)
点击保存成功,否则弹出错误提示。
2.按等价类分析整理输入输出如下:
输入A,等价类为:(-∞,1),[1,100],(100,+∞)
输入B,等价类为:1字符,[2,9]字符,10字符
输出:
保存成功
弹出错误提示
3.等价类全覆盖组合如下:3*3 = 9
因果图法:
输入:
A1:输入框A为[1,100]
B1:输入框B为(1,10)字符
中间状态A11:输入框A已输入[1,100]
输出C:
C1:保存成功
C2:弹出错误提示
手画因果图如下:
因果图的符号含义参考下面2张图:
将上面的因果图转判定表如下(1代表是,0代表否):
根据判定表设计4个用例即可。
后续继续施工下面的几种设计方法
- 判定表法
- 正交实验法
- 状态迁移图
- 流程分析法