白盒测试技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六白盒测试技术
1 实验要求与目的
●了解白盒测试技术的原理;
●熟悉常用的白盒测试技术;
●掌握逻辑覆盖的不同标准及原理,能够设计测试用例;
2 实验原理与背景知识
2.1 白盒测试
白盒测试也称结构测试或逻辑驱动测试,它按照程Array序内部的结构测试程序,通过测试来检测产品内部动作
是否按照设计规格说明书的规定正常进行,检验程序中
的每条通路是否都能按预定要求正确工作。它关注软件
产品的内部细节和逻辑结构,即把被测的程序看成是一
个透明的盒子,如图1所示
白盒测试通常可分为静态测试和动态测试两类方
法,其中静态测试不要求实际执行所测程序,主要以一
些人工的模拟技术对软件进行分析和测试;而动态测试
是通过输入一组预先按照一定的测试准则构造的实例
图1 白盒测试示意图
数据来动态运行程序,从而达到发现程序错误的过程。
白盒测试的测试方法有代码检查法、静态结构分析法、逻辑覆盖法、基本路径测试法、域测试法、符号测试法、数据流测试法、Z路径覆盖法、程序变异法等等。
2.2 代码检查法
代码检查是静态测试的主要方法,包括代码走查、桌面检查、流程图审查等。代码检查主要检查代码和设计意图的一致性、代码结构的合理性、代码编写的标准性和可读性、代码逻辑表达的正确性等方面,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
代码检查应该在编译和动态测试之前进行,在检查前,应该准备好需求文档、
程序设计文档、程序的源代码清单、代码编写标准和代码缺陷(错误)检查表。
在实际使用中,代码检查法能够快速找到缺陷,发现30%到70%的逻辑设计和编码缺陷,而且代码检查法看到的是问题本身而非征兆。但是代码检查法非常耗费时间,并且需要经验和知识的积累。
代码检查法可以使用人工测试,也可以使用测试软件进行自动化测试。
2.3 静态结构分析法
静态结构分析是指测试者通过使用测试工具分析程序源代码的系统结构、数据结构、数据结构、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图等各种图形和图表,清晰得标识整个软件的组成结构,通过分析这些图表,检查软件是否存在缺陷或错误。
以函数调用的静态分析为例,主要分析一下内容:
①检查函数的调用关系是否正确;
②是否存在孤立的函数没有被调用;
③明确函数被调用的频繁度,对调用频繁的函数可以重点检查。
2.4 程序插桩技术
在调试程序时,常常需要插入一些打印语句,从而在执行程序时能够打印有关信息,并进一步通过这些信息来了解程序执行时的一些动态特性,例如,程序的执行路径或特定变量在特定时刻的取值。这一思想发展出来的程序插桩技术在软件动态测试中,作为一种基本的测试手段,有着广泛的应用。
2.5 逻辑覆盖法
逻辑覆盖是白盒测试的主要动态测试方法之一,是以程序内部的逻辑结构为基础的测试技术,通过对程序逻辑结构的遍历实现程序的覆盖。
从覆盖源代码的不同程度可以分为以下6个标准:
语句覆盖(Statement Coverage, SC)
判定覆盖(Decision Coverage, DC)
条件覆盖(Condition Coverage, CC)
判定/条件覆盖(Decision/Condition Coverage, D/CC)
条件组合覆盖(Condition Combination Coverage, CCC)
路径覆盖(Path Coverage, PC)
正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况选用合适的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试出正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。
3 实验内容及步骤
3.1以下是一个被测模块的流程图,它的源程序如下。要求大家完成该被测模块的各种逻辑覆盖,具体要求看实验步骤。
PRCEDURE EXAMPLE(A,B:REAL; V AR X:REAL); READ
BEGIN IF (A>1) AND (B=0) THEN X:=X/A; IF (A=2) OR (X>1)
THEN X:=X+1;
END;
(1)语句覆盖
语句覆盖的含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。
表1-1 语句覆盖的测试用例
该测试用例虽然覆盖了可执行语句,但是不能检查判断逻辑是否有问题(如写程序时将第一个判定表达式中的“AND ”错写为“OR ”,该测试用例无法检查出这个错误)。
总结:语句覆盖是很不充分的一种测试,是最弱的逻辑覆盖标准。
s
a b
d
c
e
(2)判定覆盖
含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次
表1-2 判定覆盖的测试用例
总结:判定覆盖比语句覆盖强,但是对程序逻辑的覆盖程序仍然不高。(3)条件覆盖
含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果
表1-3 条件覆盖的测试用例
总结:条件覆盖通常比判定覆盖强,因为它使判定表达式中两个条件都取到了两个不同的结果。
(4)判定/条件覆盖
含义:选取足够多的测试数据,是的判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。
表1-4 判定/条件覆盖的测试用例