随机测试(RT)
黑盒测试中最简单常见的测试方法,特性:
随机!=随意;
简单且强大;
随机测试简单,做到较好的随机测试不简单
定义:
定义输入域;在输入域中随机选取一些点作为输入;将选取的数据以自动化方式执行
定义输入域:
随机测试的常见问题:
定义输入域(登陆时的用户名,密码等。结合业务和输入特征定义input domain);
随机的机制(用户名:字符串的规格限制等);
如何产生更加公平,随机的随机数(纯粹的随机建立在均匀分布的假设上面,而业务系统往往不均匀,此时纯粹的随机不一定是有效的)。
自适应随机测试(ART):
基本步骤:
1.随机产生数据t进行测试,加入到测试集合T中;
2.设定停机准则(while循环):
(1)每次重复运行时产生k个候选输入;
(2)挑选出跟已有的测试集合中距离最远的并执行
3.结束while循环。
ART的问题:
什么叫距离(数据之间的差异性)
每次产生的k个后选值与已执行的测试之间的距离的计算代价(n2)
高维灾难(最致命的问题,测试case集中在角上(随着维度增加而指数增长),中间大片区域不被覆盖到)
Failure-Pattern(ART带来的常见的失效模式)
ART建立在一些常见的Failure-Pattern上会更加有效:
即常见的数字计算产生偏差就产生了这种Failure-Pattern,往往是比较简单的程序,复杂的程序的Failure-Pattern造成空间扭曲使Failure-Pattern并不如此工整
等价类划分
等价类划分适用于:
单元测试;系统测试;集成测试
等价类划分的传统用法适用于非自动化测试,现在也可用于自动化测试
等价类划分一扩展
等价类划分的input domains:
通常包含了所有可能的输入,这使得即使很小的程序,input domains也会无法穷尽
此时选取有限的几个输入作为代表
输入参数:公共变量;用户级输入;读文件(IO)
input domains划分:
两两互不相交;
所有划分的子集合起来就是输入域
此标准在实际执行中并不那么严格,有时会有相交;很难把握使所有子集覆盖了input domains
等价类划分核心思想:等价(同一子集内)
常见的两种等价类划分方法:
基于接口:对每一个输入的输入特征进行划分
把所有的输入参数和独立来看,并不关心输入之间的关系;
基于语法或某种数据的特征来进行划分;
有可能能做自动化。
eg:三角形程序,三个输入都是整型
基于功能:按照功能划分
确定模块或系统的功能;
测试人员需要在设计或需求方面有更深的理解;
理解程序的语义或业务逻辑;
考虑不同程序输入参数的关系(这种关系来自于需求文档,构成了功能)。
eg:三角形程序(功能:生成的三角形类型:等边,等腰,普通,无效)
边界值分析
边界值分析主要来自于经验上的总结,因为Bug总是出现在边界值上
此段代码有很多控制流,在控制的判断条件上出现边界
此处应为x<0
通常边界值分析与等价类测试合并做,即先划分等价类,再在等价类的边界上做进一步的边界值分析。
复选框:全选;全不选等边界
边界复合:
6位正整数:
边界值分析方法:
弱边界值分析:
弱健壮性边界值分析:(考虑到无效输入)
强边界值分析:
由于顶点随维度增加成指数增长,所以实际情况下无法覆盖到所有顶点
强健壮性边界值分析:(考虑到无效输入)
组合测试
弱等价类测试:
强等价类测试:
Bug出现规律:
全组合:
挑选后的组合:
覆盖了输入的任意的两两组合:
覆盖了输入的任意的三三组合:
Case:6-12-24 指数型增长
固定强度的测试:
实践中选择二维,三维组合较多
可变力度的组合测试:
对所有组合进行抽样,给出一定的挑选规则
基于默认选项的测试用例集:
测试中的约束:
法一:法二: