软件测试方法大类上分为黑盒测试、白盒测试和灰盒测试三种
一、黑盒测试
黑盒测试通俗来说即不知道代码是怎么写的。具体实现逻辑,基于代码输入有哪些应该输出什么进行测试的方法。 其方法有:基于直觉和经验的方法(IEBT)、基于需求/标准验证的方法(ReBT)、基于输入域的方法(IDBT)、组合测试方法
1.基于直觉和经验的方法(IEBT)
(1)Ad-hoc随机测试方法
Ad-hoc测试也称随机测试或猴子测试,是一种没有任何计划、文档的测试方法。测试是非正式和随机进行的。通常会在验收测试的时候进行。 Ad-hoc测试是由测试人员会临时测试不遵循任何结构化的测试方法,在应用程序的任何部分随机进行的。
(2)基于用户使用测试
(3)错误猜测法
基于测试人员的丰富经验和直觉,找出程序中自己认为会出现的错误,并针对性地设计测试用例。 经验可能来自于对某项业务的测试较多,也可以来自售后用户的反馈意见,或者从故障管理库中整理出bug。 列举出程序可能会出现的错误或者容易产生错误的测试点,然后根据测试点写测试用例。
2.基于输入域的方法
(1)等价类划分法
(2)边界值法
边界值法具体做法,就是找到有效数据额无效数据之间的分界点,以及其两边的点进行测试,一般与等价类划分法共同使用。 举例:对学生输入的分数进行评级,其中90 <= x <= 100 时A,80 <= x <= 89 为B,70 <= x <= 79 为C,60 < x <= 69 为D,0 <= x <= 60 为E。输入分数要求必须时正整数或者为0
根据题目可以得知
(1)等级为A的边界值为:101, 100 , 90 , 89
(2)等级为B的边界值为:90, 89 , 80 , 79
(3)等级为C的边界值为:80, 79 , 70 , 69
(4)等级为D的边界值为:70, 69 , 61 , 60
(5)等级为E的边界值为:-1, 0 , 60 , 61
综合上述边界值法得到的测试用例有:101, 100 , 90 , 89 , 80 , 79 , 70 , 69 , 61 , 60 , 0 , -1
(3)决策表法
(4)因果图法
因果图法时一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法。 输入与输出关系:
(1)恒等:如果原因为真,那么结果必为真 (2)与 ^:只有当两个原因都为真的时候,结果才为真 (3)或 V:两个原因中,有一个为真,那么结果为真 (4)非 ~:只有原因为假,结果才为真 基本约束:
(1)约束:是指输入状态还存在这某种依赖关系,这种关系称作为约束。 (2)E约束(异):表示a,b两原因不会同时成立,最多一个能成立。 (3)I约束(或):a、b、c三个原因中至少有一个必须成立。 (4)O约束(唯一):a、b当中必须有一个,且仅有一个成立 (5)R约束(要求):当a出现时,b必须也出现,不可能a出现b不出现 (6)M约束(屏蔽):表示当a是1时,b必须是0。而当a为0时,b的值不定
3.组合测试方法
(1)Pairwise方法
Pairwise方法主要的原理是,每组输入参数之间的组合以及每个可能的输出情况之间的组合。 在使用该方法的时候,首先要明确测试输入和输出变量的取值范围,以及二者之间的关系,然后使用适当的集合数学算法生成一组测试用例。
(2)n-way方法
(3)正交试验法
正交表的构成:
(1)行数:正交表中行的个数,即试验次数,我们设计测试用例的个数 (2)因素数:正交表中列的个数,即我们要测试的功能点 (3)水平数:任何单个因素能够取得的值的最大个数。即要测试功能点的输入条件 例子:对某人进行查询,假设查询某个人时有三个查询条件:按“姓名”进行查询,按“身份证号码”查询,按“手机号码”查询 行数 = 因素数 * (水平数 - 1)+ 1 = 3 *(2 - 1) + 1 = 4
(4)分类树方法
实际上,分类树法与等价类划分法有些相似 分类树法。把测试对象的输入域看作不同的方面组成,对每个方面分离并组成各种类别,而分类结果的各类又可能再进一步被分类。 设计步骤:1.识别出测试对象,并分析输入域;2.对测试对象的输入域进行分类;3.画出分类树,组合测试用例。 例子:对某人进行查询,假设查询某个人时有三个查询条件:按“姓名”进行查询,按“身份证号码”查询,按“手机号码”查询
二、白盒测试(基于代码的方法)
1.控制流覆盖
void func ( int x, int y, int z)
{
if ( x > 1 && y == 0 )
z /= x;
if ( x >= 3 || z > 1 )
++ z;
}
(1)基本路径覆盖
根据流图计算环复杂度,得到基本路径覆盖的测试用例数 流图为: 环复杂度:边数 - 节点个数 + 2 = 6 - 5 + 2 = 3 故共3条路经,即3个测试用例 1)1-》3-》5,测试数据:x=1,y=1,z=1 2)1-》2-》3-》5,测试数据:x=3,y=0,z=6 3)1-》3-》4-》5,测试数据:x=3,y=1,z=2
(2)逻辑覆盖
(a)语句覆盖:每条语句至少执行一次
走上述ace即可每条语句至少执行一次。 只需遍历ace。 测试用例:x=3,y=0,z=6
(b)判定覆盖:每个判定的所有可能结果至少出现一次(真假分支都走一遍)
若要每个判定条件的所有可能结果都出现一次,则只需走路径ace和路径abd即可 测试用例:x=3,y=0,z=6(ace)和 x=1,y=1,z=0(abd)
(c)条件覆盖:每个条件的所有可能结果至少执行一次
第一个判断条件的所有取值可能是x>1或x<=1,y=0或y≠0,第二个判断条件的所有取值可能是x>=3或x<3,z>1或z<=1 若要每个条件的所有可能结果都执行一次,则x=1,y=0,z=1(abd)和 x=2,y=1,z=2(abe)
(d)MCDC修正判定条件覆盖
(e)条件组合覆盖:每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次
第一个判断条件的所有取值可能是x>1或x<=1,y=0或y≠0,第二个判断条件的所有取值可能是x>=3或x<3,z>1或z<=1 即测试用例条件应该为①x>1,y=0;②x>1,y≠0;③x<=1,y=0;④x<=1,y≠0;⑤x >= 3,z>1;⑥x>=3,z<=1;⑦x<3,z>1;⑧x<3,z<=1;
测试用例:
1.x = 3 ,y= 0 ,z= 6 ( ace) 覆盖组1,5
2.x = 3 ,y= 1 ,z= 1 ( abe) 覆盖组2,6
3.x = 1 ,y= 0 ,z= 6 ( abe) 覆盖组3,7
4.x = 1 ,y= 1 ,z= 1 ( abd) 覆盖组4,8
2.数据流覆盖—变量定义-引用
三、灰盒测试
四、其余测试方法