软考-软件设计师:软件工程-测试方法(测试分类):静态测试、动态测试、黑盒测试法、白盒测试

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


原文出处:/show_1GWyM8HuUHO.html