273页
测试方法分类
软件测试方法分为:
- 静态测试
- 动态测试
静态测试
采用人工检测,计算机辅助静态分析
- 桌前检查(现场检查)
- 代码审查(SVN服务器)
- 代码走查(边走代码边检查)
- 计算机辅助静态分析。利用静态分析工具对被测试程序进行特性分析,检查程序逻辑的各种缺陷和可疑的程序构造。
动态测试
通过运行程序发现错误
- 黑盒测试法(测试功能)
- 白盒测试法(测试结构)
- 灰盒测试法(黑白结合)
黑盒测试
黑盒测试也称为 功能测试,在完全 不考虑 软件的内部结构和特性 的情况下,测试软件的外部特性。
为了发现以下几类错误:
- 是否有错误的功能或遗漏的功能?
- 界面是否有误?输入是否正确接收?输出是否正确?
- 是否有数据结构或外部数据库访问错误?
- 性能是否能够接受?
- 是否有初始化或终止性错误?
常用的技术
- 等价类划分
- 边界值分析
- 错误推测
- 因果图
黑盒测试 - 等价类划分
将程序的 输入域划分为若干等价类,然后从每个等价类中选取一个 代表性数据 作为测试用例。
输入域:输入数据
有效等价类 和 无效等价类
等价类划分有两种不同的情况:
- 有效等价类,即:满足需求、合理的数据
- 无效等价类,即:不满足需求、不合理的数据
等价类划分原则
在输入条件规定了 取值范围 或 值的个数 的情况下,可以定义一个有效等价类和两个无效等价类。
在输入条件规定了 输入值的集合 或规定了
必须如何的条件的情况下,可以定义一个有效等价类和一个无效等价类。在输入条件是一个 布尔值 的情况下,可以定义一个有效等价类和一个无效等价类。
在规定了输入数据的 一组值(假定 n个),并且程序要对每一个输入值 分别处理 的情况下,可以定义n个有效等价类和一个无效等价类。
在规定了输入数据必须 遵守的规则 的情况下,可以定义一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应将该等价类进一步 划分为更小 的等价类。
设计测试用例
设计一个新的测试用例时,根据 等价类 分下面两种情况:
使其尽可能多地 覆盖尚未覆盖的 有效等价类,不断重复,最后使得所有有效等价类 均被测试用例覆盖。
使其只 覆盖一个 无效等价类。
黑盒测试 - 边界值分析
输入的 边界值 比中间值更加 容易发生错误
边界值划分选择 等价类边界 的测试用例,既注重于 输入条件边界,又适用于 输出域测试用例。
输出域:输出值
测试用例原则
如果输入条件规定了 值的范围,则应取刚达到这个 范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
如果输入条件规定了 值的个数,则用 最大个数、最小个数、比最小个数少1、比最大个数多1的数据 作为测试数据。
根据规格说明的每个 输出条件 使用上述两条原则。
如果程序的规格说明给出的输入域或输出域是有序集合,则应选取 集合 的第一个元素 和 最后一个元素 作为测试用例。
如果程序中使用了一个 内部数据结构,则应当选择这个内部数据结构 边界上的值 作为测试用例。
分析规格说明,找出其他 可能的边界条件。
黑盒测试法 - 例子
例:小张帮朋友开发一个成绩分级程序,功能是这样的:
90-100分:优;80-89分:良;70-79分:中;60-69分:及格;0-59分:不及格。
对此,我们若采用等价类划分以及边界值分析,应该如何设计测试用例?
答案
等价类划分:-1,50,100,110
边界值分析:101,90-100;80-89;70-79;60-69;0-59,-1
白盒测试
白盒测试也称为 结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。
常用的技术
- 基本路径测试
- 循环覆盖测试
- 逻辑覆盖测试
白盒测试 - 逻辑覆盖
逻辑覆盖考察用 测试数据 运行被测程序时,对程序逻辑的覆盖程度
分类(覆盖从低到高)
- 语句覆盖:覆盖最低,最弱的发现能力
- 判定覆盖(分支覆盖)
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 路径覆盖:覆盖最高
准备程序
int a = 10;
int b = 1;
int c = 0;
if( a>0 && b >0){
c= c/a
}
if(a>1 || c>1){
c = c + 1
}
c = b + c
概念:
- 判定表达式:
a>0 && b >0 - 判定条件:
a>0或b >0
流程图如下:
语句覆盖
使被测试程序中的 每条语句至少执行一次
当 a=2,b=1,c=6 时,就能执行所有的语句
缺点: 无法对条件进行测试,对程序执行逻辑的覆盖很低,很弱的逻辑覆盖,最弱的发现能力
如:没有测试 a>0 and b>0 为 假 或 a>1 and c>1 为 假 的情况
判定覆盖(分支覆盖)
使得被测程序中的 每个判定表达式至少获得一次 真 值和 假 值,或者 说是程序中的每一个取 真 分支和取 假 分支至少都通过一次。
优点:比语句覆盖更强一些
如:
a=2,b=1,c=6可覆盖判断M的Y分支,判断Q的Y分支a=0,b=0,c=0可覆盖判断M的N分支,判断Q的N分支
缺点:由 多个条件 组成的判定来讲,容易 忽略某个条件的取值 情况。
如:
- 没有覆盖 判断M的 Y 分支,判断Q的 N 分支,如:
a=2,b=1,c=0 - 没有覆盖 判断M的 N 分支,判断Q的 Y 分支,如:
a=2,b=0,c=2
条件覆盖
使得每一判定语句中 每个逻辑条件 的各种可能的值 至少满足一次。
优点:测试每个逻辑条件。
如:a>0 and b>0,分别测试各个条件可能的值:
a>0为假,b>0为真,此时判定表达式为假a>0为真,b>0为假,此时判定表达式为假
缺点:没有测试 整个判定表达式 可能的值。如上面,没有测试 a>0 and b>0 为 真 的情况
判定/条件覆盖
使得判定中 每个条件 的所有可能取值(真/假)至少出现一次,并使每个判定本身的 判定结果(真/假) 也至少出现一次。
优点:能同时满足判定,条件两种覆盖标准
缺点:未考虑条件的组合
条件组合覆盖
使得每个判定中条件的 各种可能值的组合 都至少出现一次。
理解: 与 判定/条件覆盖 类似,但是测试用例更多,将各钟 判断条件的情况都测试一遍
如:a>0 and b>0 ,分别测试:
a>0为假,b>0为真a>0为真,b>0为假a>0为真,b>0为真a>0为假,b>0为假,因为是逻辑与,有一个为假就为假,所以没必要测试这种情况
优点:满足条件组合覆盖的测试用例,是一定 满足 判定覆盖、条件覆盖和判定/条件覆盖的。
缺点:线性地增加了测试用例的数量
路径覆盖
路径覆盖是指覆盖被测试程序中 所有可能的路径。
优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都要广
缺点:需要涉及大量,复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖
题
用白盒测试方法对如下图所示的流程图进行测试。若要满足分支覆盖,则至少需要( )个测试用例,正确的测试用例对是( )
(测试用例的格式为(A,B,X;X))
A、1
B、2
C、3
D、4
A、(1,3,3; 3) 和 (5,2, 15; 3)
B、(1,1,5;5) 和 (5,2,20;9)
C、(2,3,10;5) 和 (5,2,18;3)
D、(5,2,16; 3) 和 (5,2,21; 9)
分析
格式为(A,B,X;X),;前面表示输入,;后面表示输出结果,所以:
A、B、X;是输入;X是输出结果
第一问分析
程序有 2个判定表达式,所以需要 2个测试用例,才能判断出 2个判定表达式 分别为 真 和 假 的情况
技巧:从第2问也能知道需要2个测试用例
第二问分析
将各个选项的 值1、值2 代入 程序流程图,让两个 判定表达式 的结果不同,如果相同没有意义
A选项不正确:
- 将
(1,3,3; 3)代入流程图,第1个判定表达式为真;第2个判定表达式为假; - 将
(5,2, 15; 3)代入流程图,第1个判定表达式为真,与第1个值的第1个判定表达式结果相同,没有意义
B选项正确:
- 将
(1,1,5;5)代入流程图,第1个判定表达式为假;第2个判定表达式为假;结果为5 - 将
(5,2,20;9)代入流程图,第1个判定表达式为真;第2个判定表达式为假;结果为9
C选项正确:
- 将
(2,3,10;5)代入流程图,第1个判定表达式为真;第2个判定表达式为假;结果为5 - 将
(5,2,18;3)代入流程图,第1个判定表达式为真;第2个判定表达式为假,与第1个值的第2个判定表达式相同,没有意义
D选项错:
- 将
(5,2,16; 3)代入流程图,第1个判定表达式为真;第2个判定表达式为假;结果为3 - 将
(5,2,21; 9)代入流程图,第1个判定表达式为真,与第1个值的第1个判定表达式相同,没有意义
技巧:先将各个选项的第1个值代入,基本能够排除几个选项,此时再决定是否代入各个选项的第2个值
答案
B
参考:
https://blog.csdn.net/weixin_41043607/article/details/107348483






