从零开始学测试【1】测试方法术语总结

测试文章内容,包含一些测试语句,因为不包含足够的词语,所以必须输入足够的语句,才能正常的入库处理。

测试文章内容,包含一些测试语句,因为不包含足够的词语,所以必须输入足够的语句,才能正常的入库处理。

一、语句覆盖(Statement Coverage)

  1. 主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖需要选择足够的测试用例,使我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次
  2. 优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
  3. 缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐
    式逻辑分支,是无法测试的。
  4. 举例

public int foo(int a,int b)
{
      return a/b;
}

这是一个求两数之商的函数。如果我们设计如下的测试用例:
TestCase: a =2, b =1
此时,该函数的代码覆盖率达到了100%,并且设计的case可以顺利通过测试。但是显然该函数有一个很明显的bug:当
b=0 时,会抛出异常。

工具方法:图形矩阵
  • 导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵的数据结构很有用。
  • 利用图形矩阵可以实现自动地确定一个基本路径集。
  • 一个图形矩阵是一个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。
  • 在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。
  • 如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图形矩阵中第i行/第j列有一个非空的元素x。

对每个矩阵项加入连接权值,图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是
1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性:

1. 执行连接(边)的概率。
2. 穿越连接的处理时间。
3. 穿越连接时所需的内存。
4. 穿越连接时所需的资源。

图片 1

图形矩阵

连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。

8.判定覆盖测试
判定覆盖又叫分支覆盖,它的含义是:不仅每条语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。

二、判定覆盖(Decision Coverage)

  1. 主要特点:判定覆盖又称为分支覆盖,它要求选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次
  2. 优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
  3. 缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
  4. 举例
![](https://upload-images.jianshu.io/upload_images/2298827-34f2268901fe3fb7.png)

X    Y   路径
90  90  OAE
50  50  OBDE
90  70  OBCE

条件组合覆盖

针对上述问题又提出了另一种标准——“条件组合覆盖”。它的含义是:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。满足“条件组合覆盖”的测试用例是一定满足“分支覆盖”、“条件覆盖”和“分支/条件覆盖”的。

  • 再看例1的程序,我们需要选择适当的例子,使得下面8种条件组合都能够出现:

1) A>1, B=0    2) A>1, B≠0
3) A≤1, B=0    4) A≤1, B≠0
5) A=2, X>1    6) A=2, X≤1 
7) A≠2, X>1    8) A≠2, X≤1 

5)、 6)、 7)、8)四种情况是第二个
IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。
下面设计的四个例子可以使上述 8种条件组合至少出现一次:

① A=2,B=0,X=4  
    使 1)、5)两种情况出现; 
② A=2,B=1,X=1
    使 2)、6)两种情况出现;
③ A=1,B=0,X=2
    使 3)、7)两种情况出现;
④ A=1,B=1,X=1
    使 4)、8)两种情况出现。

上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,例如路径acd就没有执行,因此,条件组合覆盖标准仍然是不彻底。

  • 现对例2中的各个判断的条件取值组合加以标记如下:

1、x>3,z<10    记做T1 T2,第一个判断的取真分支
2、x>3,z>=10   记做T1 -T2,第一个判断的取假分支
3、x<=3,z<10   记做-T1 T2,第一个判断的取假分支
4、x<=3,z>=10  记做-T1 -T2,第一个判断的取假分支
5、x=4,y>5     记做T3 T4,第二个判断的取真分支
6、x=4,y<=5    记做T3 -T4,第二个判断的取真分支
7、x!=4,y>5    记做-T3 T4,第二个判断的取真分支
8、x!=4,y<=5   记做-T3 -T4,第二个判断的取假分支

根据定义取4个测试用例,就可以覆盖上面8种条件取值的组合。
测试用例如下表:

图片 2

条件组合覆盖测试用例

上面的测试用例覆盖了所有条件的可能取值的组合,覆盖了所有判断的可取分支,但是却丢失了一条路径abe。

14.回归测试
回归测试是指对修改后的程序进行的测试,其目的是对修改的效果进行确认,保证在修改后不会引入新的错误。

参考文献:

谈谈白盒测试中的几种覆盖方法

基本路径测试

基本路径测试在程序控制图的基础上,通过分析控制构造的环行(圈,loop)复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次
包括以下4个步骤和一个工具方法。

11.兼容性测试
兼容性测试是验证软件与其所依赖的环境的依赖程度,包括对硬件的依赖程序,对操作系统和其他软件的依赖程度等。兼容性测试内容和范围主要是硬件兼容性、浏览器兼容性、数据库兼容性及操作系统兼容性等。

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。”白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。”白盒”法是穷举路径测试。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。

主要方法

  1. 逻辑驱动测试
  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定/条件覆盖
  • 条件组合覆盖
  1. 路径测试
  • 路径测试就是设计足够多的测试用例,覆盖被测试对象中的所有可能路径。这是最强的覆盖准则。
  • 基本路径测试:设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。例如程序中的循环体只执行一次。

假如现在有一辆车,你想知道它能不能跑起来?
按照白盒测试的思想,你需要测试车的发动机、底盘、车身、电气设备是否正常,然后做出这辆车能否跑起来的判断(所以我个人认为,白盒测试你需要熟悉项目所用到的技术框架、编码语言、运行环境、等等系列的问题,这项测试是真正具有技术含量的测试,我想普通公司的测试人员不太会涉及到这方面的测试)。