等方面。这项工作可以发现违背程序编写标准的部下,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。代码检查包括代码审查、代码走查、桌面检查、静态分析等具体方式。
代码审查:小组集体阅读、讲座检查代码。
代码走查:小组成员通过用“脑”研究、执行程序来检查代码。
桌面检查:由程序自己编写的程序。程序在程序通过编译之后,进行单元测试之前,对源代码进行分析、检验,并补充相关文档,目的是发现程序的错误。
静态分析:对代码的机械性、程式化的特性分析方法,包括控制流分析、数据流分析、接口分析、表达式分析。 (2)动态测试
静态测试不实际运行软件,主要通过人工进行。动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。或者说,是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
设计高效、合理的测试用例是动态测试的关键。测试用例是为测试设计的数据。测试用例由测试输入数据和与之对应的预期输出结果两部分组成。测试用例的格式为:[(输入值集),(输出值集)]
2、白盒测试方法与测试用例设计
白盒测试方法也称结构测试或逻辑驱动测试。它是根据软件产品的内部工作过程,检查内部万分,以确认每种内部操作符合设计规格要求。白盒测试把测试对象看作一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有送信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。通过在不同点检查程序的状态来了解实际的运行状态是否与预期的一致。所以,白盒测试是在程序内部进行,主要用于完成软件内部操作的验证。 白盒测试的基本原则是:保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。
按照白盒测试的基本原则,“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字,但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序是否违反了设计规范,即程序本身是个错误的程序;第二,穷举路径测试不可能查出程序中因遗漏路径而出错;第三,穷举路径测试可能发现不了一些与数据相关的错误。 白盒测试的主要方法有逻辑覆盖、基本路径测试等。 (1)逻辑覆盖测试
逻辑覆盖是泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。通常所指的程序中的逻辑表示有判断、分支、条件等几种表示方式。
○1语句覆盖。选择足够的测试用例,使得程序中每个语句至少都能被执行一次。 例3.1设有程序流程图表示的程序如图3.24 测试用例1 : 输入
(i , j) 输出 (i , j , x)
(10,10) (10,10,10) 测试用例2:
输入
(i , j) 输出 (i , j , x)
(10,15) (10,15,15)
语句覆盖是逻辑覆盖中基本的覆盖,尤其对单元测试来说。但是语句覆盖往往没有关注判断中的条件有可能隐含的错误。
○2路径覆盖。执行足够的测试用例,使程序中所有可能的路径都至少经历一次。 例3.2设有程序流程图表示的程序如图3.25
对图3.25的程序设计如表3.2列出的一组测试用例, 就可以覆盖该程序的全部4条路径:ace,abd,abe,acd。
测试用例 通过路径 测试用例 通过路径 ([A=2,B=0,X=3),输出略] (ace) ([A=2,B=1,X=1),输出略] (abe) ([A=1,B=0,X=1),输出略] (abd) ([A=3,B=0,X=1),输出略] (acd) ○3判定覆盖。使设计的测试用例保证程序中每个判断的每个取值分支(T或F)至少经历一次。
根据判定覆盖的要求,对如图3.26所示的程序,如果其中包含条件 i≥j的判断为真值(即为“T”)和为假值(即为“F”)的程序执行路径至少经历一次,仍然可以使用例3.1的测试用例1和测试用例2。
程序每个判断中若存在多个联立条件,仅保证判断的真假值往往会导致某些单个条件的错误不能被发现。例如,某判断是“X<1或Y>5”,其中只要一个条件联欢会为真,无论另一个条件是否错误,判断的结果都为真,这说明,仅有判断覆盖还无法保证能查出在判断的条件中的错误,需要更强的逻辑覆盖。
4条件覆盖。设计的测试用例保证程序中每个判断的生个条件的可能取值至少执行一次。 例3.3设有程序流程图表示的程序如图3.26
按照条件覆盖的测试要求,对图3.26的程序判断框中的条件i≥j和条件j<5设计如下测试用例1和测试用例题,就能保证该条件取真值和取假值的情况至少执行一次。 测试用例1 输入
(i , j) 输出 (i , j , x)
(3,2) (3,2,3)
测试用例2 输入
(i , j) 输出
(i , j , x)
(5,10) (5,10,10)
条件覆盖深入到判断中的每个条件,但是可能会忽略全面的判断覆盖的要求。有必要考虑判断-条件覆盖。
○5判断-条件覆盖。设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能取值至少执行一次。 例3.4设有程序流程图表示的程序如图3.27
按照判断-条件覆盖的测试要求,对图3。27程序的两个判断框的每个取值分支至少经历一次,同时两个判断框中的三个条件的所有可能取值至少执行一次,设计如下测试用例1、测试用例2和测试用例3,就能保证满足判断-条件覆盖。 输入
(i , j,x) 输出 (i , j , x)
(3,2,0) (3,2,0) 测试用例1
测试用例2 输入
(i , j) 输出 (i , j , x)
(6,4,0) (6,4,6) 输入
(i , j) 输出 (i , j , x)
(5,10,0) (5,10,10) 测试用例3
判断-条件覆盖也有缺陷,对质量要求高的软件单元,可根据情况提出多重条件组合覆盖以及其他更高的覆盖要求。
(2)基本路径测试
基本路径测试的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。 例3.5设有程序流程图表示的程序如图3.28
对图3.28的程序流程图确定程序的环路复杂度,方法是:环境复杂度=程序流程图中的判断框个数+1
则环路复杂度的值即为要设计测试用例的基本路径数,图3。28所示的程序环路复杂度为3,设计如表3。3列出的一组测试用例,覆盖的基本路径是:abf , acef , adcf
测试用例 通过路径 [(A=-2,B=0),(输出略)] Abf [(A=5,B=0),(输出略)] Acef [(A=5,B=5),(输出略)] acdf
3.黑盒测试方法与测试用例设计
黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。所以,黑盒测试是在软件接口处进行,完成功能验证。黑盒测试只检查程序功能是否按照需求规格说明书的规定政党使用,程序是否能适当地接输入数据而产生正确的输出信息并且保持外部信息(如数据库或文件)的完整性。
黑盒测试主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错。
黑盒测试方法主要有等价类划分法、边界值分析法、错误推测试法、因果图等,主要用于软件确认测试。
(1)等价类划分法
等价类划分法是一种典型的黑盒测试方法,它是将程序的所有可能的输入数据划分成若干部分(及若干等价类),然后从每个等价类中选取数据作为测试用例,对每一个等价类,各个输入数据对发现程序中的错误的几率都有是等效的,因此只需从每个等价中选取一些有代表性的测试用例进行测试而发现错误。
使用等价类划分法设计测试方案,首先需要划分输入集合的等价类。等价类包括: ① 有效等价类:合理、有意义的输入数据构成的集合。可以检验程序中符合规定的功能、性能。 ② 无效等价类:不合理、无意义的输入数据构成的集合。可以检验程序中不符合规定的功能、性能。
为此,需要研究程序的功能说明,从而确定输入数据的有效等价类的无效等价类。 等价类划分法实施步骤分为两步: 第1步:划分等价类;
第2步:根据等价类选取相应的测试用例
例3.6程序实现输入3个边长(设为A,B,C),判断能否构成三角形。对该程序考虑等价类划分法。满足测试三角形构成条件程序的等价类划分如表3。4所示。 输入条件 有效等价类 无效等价类
1边长A,B,C限制 A>0或B>0或C>0 A<=0或B<=0或C<=0
2边长关系限制 A+B>C或B+C>A或A+C>B A+B<=C或B+C<=A或A+C<=B
根据表3。4划分的等价类,可以设计以下的测试用例: 对满足输入条件1和2的有效等价类设计的测试用例: [(A=3,B=4,C=5),(符合三角形构成条件)] 对满足输入条件1的无效等价类设计的测试用例: [(A=-3,B=4,C=5),(无效输入)]
对满足输入条件2的无效等价类设计的测试用例: [(A=3,B=4,C=8),(无效输入)] 划分等价类常用的几条原则是:
若输入条件规定了确切的联欢会范围,则可划分出一个有效等价类和两个无效等价类; 若输入条件规定了输入 值的集合(或有“必须如何”的条件),可确定一个有效等价类和一个无效等价类;
若输入条件是一个布尔量,则可确定一个有效等价类和一个无效等价类; 若输入数据是一组值,且程序要对每个值分别处理。可为每个输入值确定一个有效等价类和一个无效等价类;
若规定了输入数据必须遵守一定规则,则可确定一个有效等价类和若干个无效等价类; 若已划分的等价类中各元素在程序中处理方式不同,须将该等价类进一步划分(更小的等价类)。
(2)边界值分析法
边界值分析法是对各种输入、输出范围的边界情况设计测试用例的方法。
经验表明,程序错误最容易出现在输入或输出范围的边界处,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析法设计测试用例,确定边界情况应考虑选取正好等于,刚刚大于,或刚刚小于边界的值作为测试数据,这样发现程序中错误的概率较大。 边界值分析方法的使用要注意以下几点: ① 如果输入条件规定了取值范围或数据个数,则可选择正好等于边界值、刚刚在边界范围内和刚刚超越边界外的值进行测试; ② 针对规格说明的每个输入条件,使用上述原则; ③ 对于有序数列,选择第一个和最后一个作为测试数据。 一般多用边界值分析法来补充等价类划分方法。 (3)错误推测法
人们可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子,这就是错误推测法。 错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。错误推测法针对性强,可以直叫苄入可能的错误,直接定位,是一种非常实用、有效的方法。但是它需要丰富的经验和专业知识。 错误推测法的实施步聚一般是,对被测软件首先列出所有可能有的错误和易错情况表,然后基于该表设计测试用例。 例如,一般程序中输入为0或输出为0的情形是易错情总,测试者可以设计输入值为0的测