软件测试技术指南主要讲的是什么

符永蔚
简介: 本书适合于从事软件测试领域的技术人员及希望从事软件测试的其他专业人员阅读, 也适合计算机、软件、自动化等相关专业的学生与老师参考。

第4章

软件测试方法

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

学习目标:

■熟悉白盒测试方法

■掌握黑盒测试方法

■掌握黑盒测试用例设计的方法:等价类划分法、边界值分析法、因果图分析法、判定表分析法、正交试验法等

4.1

测试方法划分

测试方法一般按以下几种划分:

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

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

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

4.2

白盒测试

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

图4-1 白盒测试

4.2.1

白盒测试常用技术

白盒测试常用的技术一般分为静态分析技术和动态分析技术。

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

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

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

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

4)代码评审:代码评审是在开发组内部进行,主要检查代码和设计的一致性,代码对文档标准的遵循及代码的可读性,代码的逻辑表达式正确性,代码结构的合理性等方面。代码评审比动态测试更有效率,能快速找到70%左右的逻辑设计上的错误和代码缺陷。

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

代码走读属于非正式的评审,通过个人轮查和阅读的手段来找错误,其主要检查代码是否符合标准、规范和风格等。

代码审查属于正式的评审,通常由开发组长组织代码评审,其主要检查是否存在逻辑上的问题以及算法实现的问题等。

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

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

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

Main{float x,y,z;

begin

  if (x>1) and (y=0) then z=x/y;

  if (x=2) or (z>1) then z=x+1;

end;

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

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

图4-2 程序流程图

语句覆盖

语句覆盖是指在运行程序时,通过设计足够的测试数据,使被测程序中每一个语句至少被执行一次。其中的语句包含所有的语句。

针对上面的实例,设计测试数据:x=2,y=0,z=3即可使得语句覆盖率达到100%。

语句覆盖测试方法仅对程序中的语句进行覆盖,对隐藏的条件无法测试。比如在上述实例中,如果开发人员误将第一个的逻辑运算符AND写成OR,利用上述测试数据进行测试,语句覆盖仍能达到100%,但是无法发现程序中运算符误写的错误。

判定覆盖

判定覆盖是也称分支覆盖,是指在运行程序时,通过设计足够的测试数据,使被测程序中每个判定(逻辑真与假)至少被执行一次。

针对上面的实例,我们需要设计2组测试数据:x=2,y=0,z=3和x=1,y=0,z=1才能实现判定覆盖率达到100%。

从测试数据上,可以看出判定覆盖比语句覆盖要强一点,但是判定覆盖的缺点也是很明显的。比如在上述实例中,如果开发人员误将第二个条件x>1写成x<1,利用上述测试数据进行测试,判定覆盖仍能达到100%,但是无法发现程序中条件误写的错误。

版权:机械工业出版社