本章主要介绍软件测试的方法,包括白盒测试、灰盒测试、黑盒测试、静态测试、动态测试、手动测试、自动测试以及用例的设计方法等。

4.1测试方法划分

按照执行阶段划分为:白盒测试、黑盒测试、灰盒测试

按照执行状态划分为:静态测试、动态测试

按照执行行为划分为:手动测试、自动测试

今天先学习白盒测试

4.2白盒测试

白盒测试(White Box Testing)又称为结构测试,逻辑驱动测试或基于代码的测试,主要检测产品内部结构是否按照规格说明书的规定正常运行。是一种测试用例的设计方法,盒子指被测试的软件,白盒意思是可视见、可以清楚盒子内部的东西,以及里面是如何运作的。因此白盒测试需要测试人员对系统内部的结构和工作原理有一个清楚的了解。图4-1为白盒测试的示意图

4.1.2白盒测试常用的技术

一般分为静态分析技术和动态分析技术

1、静态分析技术有:控制流分析、数据流分析、信息流分析、代码评审等。

1)控制流分析:将程序的流程图转换为控制流图借助算法进行控制分析

2)数据流分析:根据代码得到的数据流表进行分析,主要关注数据的定义和引用。

3)信息流分析:根据输入变量、语句的关系及输出变量三者之间关系表进行分析

4)代码评审:是在开发组内部进行,主要检测代码和设计的一致性,代码对文档

标准的遵循以及代码的可读性,代码的逻辑表达式正确性,代码结构的合理性的

方 面,代码评审比动态测试更有效率,能快速找到70%作用的逻辑设计上的错误

和代码缺陷。代码评审实施的方法很多,如代码走读、代码审查等。

代码走读属于非正式的评审,通过个人轮查或阅读的手段找错误。

代码审查属于正式的评审,通常由开发组长组织代码评审,其主要检查是否存在逻辑

上的问题以及算法实现的问题等。

2、动态分析技术有:程序插装、逻辑覆盖率测试等

1)程序插装:对程序的路径和分支中设计程序插装,即在程序中插入一些打印语句,其目的就是在执行程序时,打印出我们最为关注的信息。

2)逻辑覆盖率:在白盒测试中最常用到的技术就是逻辑覆盖率。主要由:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖等。下面通过实例具体讲解、实例:C语言简单运算程序如下:

它的流程图如图4-2所示

图中a、b、c、d、e分别表示路径

语句覆盖:指在运行程序时,提高设计足够的测试数据,使得测试程序中至少每个语句至少被执行一次,其中语句包含所有的语句。针对上面的实例,设计测试数据X=2,y=0, z=3即可使得语句覆盖率达到100%,语句覆盖测试法仅对程序中语句进行覆盖,对隐藏的条件无法测试,有时无法发现程序中运算符误写的错误。

判定覆盖:也称为分支覆盖,在执行程序时,通过设计足够的测试数据,使被测程序中每个判定(逻辑真与假)执行被执行一次。针对上面的实例,我们需要设计2组测试数据X=2,y=0, z=3和X=1,y=0, z=1才能实现判定覆盖率达到100%,缺点:比如实例中开发人员误将第二条件x>1写出x<1 利用上述测试数据进行测试,覆盖率任能达到100%,但是无法发现程序中条件误写的错误。

条件覆盖

通过设计足够的测试数据,使被测程序中所有判断语句中每个条件的可能值(为真为假)至少被执行一次。先要搞清楚每个判断中的每个条件的取值(即为真、为假)分析实例中2个判断中条件的各种取值,然后进行标记。如针对条件表示x>1 and y=0,x>1取值为真,标记为T1;x>1取值为假,标记为F1依次类推。针对个条件的取值,我们需要设计2组测试数据:x=2,y=0,z=3和x=1,y=1,z=1可以实现条件覆盖率达到100%,从测试数据上看,条件满足但是判定未满足100%覆盖需要对条件和判定兼顾,采用判定条件覆盖。

判定条件覆盖:指运行程序时,通过设计足够的测试数据,使被测程序中所有判断语句中每个条件的可能取值(为真、为假)至少被执行一次。首先分析程序中由2个判断,每个判定包含2个条件,这4个条件在2个判断中可能有8中组合,如下表4-1所示

我们开始设计测试数据,来实现判定条件覆盖率达到100%,见表4-2所示

从上面的路径角度看仅覆盖了3条路径,漏洞了abe。因此判定条件覆盖还不是最完整的覆盖,无法满足对程序的完整测试,还需要考虑路径覆盖

路径覆盖:指运行程序时,通过设计足够的测试数据,使被测程序所有的路径至少被执行一次。路径覆盖率比前面几种逻辑覆盖方法覆盖率都大,但也没办法做到全覆盖,因此在测试中要把各种覆盖率方法组合起来进行测试。

4.2.2基本路径测试

在白盒测试最为广泛的一种测试方法,它是一种通过程序的流程图,将其转化为程序控制流图,然后分析控制结构的环形复杂性,导出基本可执行路径集合。最后进行测试用例设计的方法。

1、控制流

控制流程图是以图形的方式用来描述控制流的一种方法。只有两只符号,如图4-3所示

图中标准符号圆圈,用来表示程序流图中矩形框和菱形框的功能,也称为节点箭头用来表示控制的顺序,也称为边(是指两个节点的连线)

在程序流程图转化为控制流程图时需要注意以下几点

1)在选择或多分支结构中,分支的聚集始终有一个汇集节点

2)边和结点圈定的范围称为区域,注意图形外的区域也应记为一个区域

3)一个节点至少有2条或2条以上的输出边称为判定节点。

4)至少沿着一条新的边移动的路径称为独立路径

2、基本路径测试的步骤

是通过确定测试用例是否完全覆盖基本路径而进行测试。具体步骤如下

步骤一:将程序的流程图转化为控制流程图,如图4-4所示

图中有节点11个,边13条、区域4个(R1、R2、 R3 、R4)判定节点3个①、③、⑥

步骤2:计算控制流程图的圈复杂度

圈复杂度是一种程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数据,为确保所有语句至少执行一次的测试数量的上界,独立路径必须包含一条在定义之前不曾

用到的边。有以下三种计算玩去复杂度的方法

1)流图中区域的数量就是圈的复杂度

1)控制流程图中,边的总数减去节点总数再加2

3)控制流程图中,判定点加1

步骤室内:确认独立路径的集合

根据上面的计算方法,可得出图4-4中由四条独立的路径,分别为

路径1: 1-11
路径2:1-2-3-4-5-10-1-11
路径3:1-2-3-6-8-9-10-1-11
路径4:1-2-3-6-7-9-10-1-11

步骤4:生成测试用例,确保基本路径集合中每一条路径的执行

4.2.3白盒测试的优缺点

优点:主要检测代码中的每条分支和路径,对代码的测试比较充分。可以揭示一些隐藏在代码中的缺陷或错误,还可以迫使测试人员仔细思考软件是如何实现的。

缺点:对软件规格的正确性不进行验证,而且对测试人员的要求非常高,必须要有一些开发经验,能编写测试驱动或测试桩,成本昂贵、故目前企业不进行白盒测试,一般都是由开发人员才担任。