第三章 黑盒测试
等价类划分
1.划分等价类:把数目极多的输入情况划分成若干个等价类
如果用集合中的一个输入条件作为测试数据进行测试不能发现程序中的错误,那么使用集合中的其他输入条件进行测试也不可能发现错误
有效等价类vs无效等价类
有效等价类可以是一个,可以是多个
(1)如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。
(2)输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。
(3)如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小的等价类。
无效等价类至少是一个,可能有多个
2.确定测试用例
Eg:某程序规定:输入三个整数作为作为三边的边长构成三角形,当此三角形为一般三角形、等腰三角形及等边三角形时,分别做计算……。试用等价类划分方法为该程序的构成三角形部分进行测试用例设计。
(1)列出等价类表:
(2)列出覆盖上述等价类的测试用例
(3)列出覆盖无效等价类的测试用例
因果图
1.导出测试用例的步骤:分析原因和结果->画因果图(标明约束条件)->转换成判定表->写测试用例
2.因果关系
因果关系的基本符号:
(1)恒等:若c1是1,则e1也是1;否则e1为0
(2)非:若c1是1,则e1是0;否则e1是1
(3)或:若c1或c2或c3是1,则e1是1;否则e1为0。“或”可有任意个输入
(4)与:若c1和c2都是1,则e1为1;否则e1为0。“与”也可有任意个输入
3.输入和输出条件的约束
约束符号:
输入条件的约束:
(1)E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1
(2)I约束(或):a、b和c中至少有一个必须是1,即a、b和c不能同时为0
(3)O约束(唯一):a和b必须有一个,且仅有1个为1
(4)R约束(要求):a是1时,b必须是1,即不可能a是1时b是0
输出条件的约束:
M约束(强制):若结果a是1,则结果b强制为0
Eg:某个软件的规格说明书包含这样的要求:第一列字符必须是A或者B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第1列字符不正确,则给出信息L;如果第2列字符不是数字,则给出信息M。
原因:
1:第一列字符是A;
2:第一列字符是B;
3:第二列字符是数字;
结果:
21:进行文件的修改;
22:给出信息L;
23:给出信息M。
边值分析
1.单变量边界值的选取
五点法vs七点法
五点法:选择最大值、略低于最大值、正常值、略高于最小值、最小值
七点法:选择略大于最大值、最大值、略低于最大值、正常值、略高于最小值、最小值、略低于最小值
弱边界值用五点法,强分析法用七点法
2.多变量组合情况下边界值的选取
对于n变量函数,使除一个以外的所有变量取正常值,对剩余的那个变量应用五点法(或七点法)取最小值、略高于最小值、正常值、略低于最大值、最大值,对每个变量都重复进行。
功能测试
1.功能测试的系统化
(1)数字型简单变量
(2)数组、向量型变量
(3)多维数组
多维数组的某一复合分量满足一定的规范结构。这时,我们就应以此复合分量为基本的测试数据生成单位
2.模块功能的分解测试(对子函数的功能测试)
(1)平行子函数
(2)顺序子函数
(3)控制子函数(常常被用来选择计算函数或终止循环与递归过程)
第四章 白盒测试
逻辑覆盖
1.几种常用的逻辑覆盖测试方法
语句覆盖:测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次
Eg:
测试用例:
A=2,B=0,X=3 路径为ace,达到语句覆盖
A=2,B=1,X=3 路径为abe,未能达到语句覆盖
判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。
测试用例:
A=2,B=0,X=3
A=1,B=1,X=1
达到判定覆盖
条件覆盖:要使每个判断中每个条件的可能取值至少满足一次
T1:A>1
T2: B=0
T3: A=2
T4: X>1
3个测试用例把4个条件的8种情况均做了覆盖。但满足条件覆盖并不一定满足判定覆盖。
判定-条件覆盖:使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次
既满足判定覆盖(覆盖了4个分支bcde),又满足条件覆盖(覆盖了8种情况),但少了一条路径acd
路径覆盖:要求覆盖程序中所有可能的路径
路径分析
着眼于路径分析的测试可称为路径测试,完成路径测试的理想情况是做到路径覆盖。
1.程序路径表达式
(1)路径的弧序列表示及节点序列表示
(2)路径表达式
引入两个运算:乘和加
乘:弧a和弧b相乘,所得的乘积为ab,它表示先沿弧a再沿弧b所经历的路段
加:弧a与弧b相加,其和a + b表示两弧是或的关系,是并行的路段
图(a)的路径表达式为:e(a + b)(c + d)f
图(b)的路径表达式为:a(b+c)d
2.程序中路径数的计算
(1)程序复杂度计算
V=E-N+2
V:复杂度
E:边数
N:结点数(判断框也算结点)
3.计算独立路径数
独立路径:某一程序的独立路径是从程序入口到出口的多次执行中,每次至少一个语句(包括运算、赋值、输入输出或判断)是新的
程序路径的树表示及路径编码
1.路径“与/或”树及其特征
2.简化路径树
AND结点下有AND结点(a)
OR结点下有OR结点(c)
AND结点有一子结点是叶结点A,A相邻结点也是叶结点(a)
AND结点有一子结点是叶结点A,A相邻结点是OR结点(b)
AND结点有一子结点是叶结点A,A相邻结点是AND结点(c)
3.路径编码
任一路径的编码是从根结点出发遍历该路径各叶结点而后回到根结点经历的所有OR结点出端编码的序列
程序插装
程序插装:是一种基本的测试手段,在软件测试中有着广泛的应用。简单地说是通过往被测程序中插入操作来实现测试目的的方法,通过用于排错。
断言语句
断言语句:有时在程序中的特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实,我们把插入的这些语句称为为断言
程序变异
错误驱动测试:是指该方法是针对某类特定程序错误的
程序强变异
程序强变异意味着对测试数据集中的每一元素,都要对程序P及其变异因子进行测试,所以要求测试数据集D和变异因子集m(P)都需精心挑选。这是强变异方法成功的关键。
m(P)是对P进行微小改动得到的,也是一个程序,称为P的变异因子
假设P有测试数据集D,若P在D上是正确的,可以找出P的变异因子的某一集合
M={M( P)|M( P)是P的变异因子}。
若M中每一元素在D上都存在错误,则认为程序的正确程度较高。
若M中某些元素在D上不存在错误,则可能存在三种情况:
(1)这些变异因子与P在功能上是等价的;
(2)现有的测试数据不足以找出P与其变异因子间的差别;
(3)P可能含有错误,而其某些变异因子却是正确的;
强变异两大弱点:一是要运行所有的变异因子,从而成倍地提高了测试的成本;二是决定程序与其变异因子是否等价是一个递归不可解问题
程序弱变异
与强变异的区别在于:强变异是产生实际的变异因子,而弱变异并不产生,而只是选择测试数据,使得变异前后程序部件产生不同的值。