白盒测试技术.ppt
南天培训教材系列 版权所有(C)南天信息,白盒测试技术,广州南天电脑系统有限公司 质量中心,南天培训教材系列 版权所有(C)南天信息,目录,南天培训教材系列 版权所有(C)南天信息,为什么要进行白盒测试,从清洗面包机讲起现在假定这个面包机多年未用,内部都生锈了,现在要清洗它,类似于我们开发的软件,软件有Bug,那得通过测试来清理。有两种洗法,一是拿水从上往下灌,这是系统测试的方法。另一种是拆开来洗,拆开机器后,拿抺布沾点清洁剂,把各零件的坑坑槽槽擦洗一遍,然后组装回来,再用水从上往下冲一遍,拆开来洗是白盒方法,组装回来用水冲是黑盒方式,相当于白盒测试之后再追加一次系统测试。所以,软件的白盒测试不可或缺,因为遗留Bug的影响很大,就像面包机没洗净留铁锈会致癌,还因为软件系统远比面包机复杂,不拆开来怎么能洗干净!,南天培训教材系列 版权所有(C)南天信息,第一章 白盒测试的基本概念,白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。白盒测试是被测代码可见的测试。与黑盒测试的概念是相反的。,南天培训教材系列 版权所有(C)南天信息,第一章 白盒测试的基本概念,白盒测试的原则:1)保证模块中每一个独立的路径至少执行一次。2)保证所有判断的每一个分支至少执行一次。3)保证每一个循环都在边界条件和一般条件下至少执行一次。4)验证所有内部数据结构的有效性。,南天培训教材系列 版权所有(C)南天信息,第一章 白盒测试的基本概念,黑盒测试VS白盒测试,南天培训教材系列 版权所有(C)南天信息,第二章 白盒测试基本技术,词法与语法分析,静态错误分析,程序插桩技术,白盒测试的几种基本技术,南天培训教材系列 版权所有(C)南天信息,一、词法与语法分析,通过词法与语法分析可以获取软件组成的重要基本因数,包括变量标识符、过程标识符、常量等。1)标号交叉引用表:列出各模块中出现的全部标号及标号的属性,模块以外的全局、计算标号。2)变量交叉引用表:列出变量定义及引用信息,变量的属性,变量类型(全局、局部)3)子程序、宏和函数表:列出各个子程序、宏及函数的属性,输入、输出参数信息。4)等价表:列出在等价语句和等值语句中出现的全部变量和标号。5)常数表:列出全部数字常数和字符常数。使用这些引用表可以直接查出说明或使用错误、为用户提高辅助信息和做错误预测、程序复杂度计算。,南天培训教材系列 版权所有(C)南天信息,例子,根据流程图来导出其定义和引用的变量,导出变量交叉引用表来查看程序中存在的问题:,1,2,3,4,5,6,7,8,9,10,11,南天培训教材系列 版权所有(C)南天信息,例子(答案),从定义和引用表来看,该程序有两个错误:1)语句2使用了变量W,而在此之前并未对其定义。2)语句5、6使用变量V,这在第一次执行循环时也未对其定义过。此外,该程序还包括一个异常:3)语句8对W的定义也从未使用过。,南天培训教材系列 版权所有(C)南天信息,表格作用,利用以上表格可以直接找出以下问题:引用未定义的变量(错误)未曾使用的定义(错误)常数传播(可优化)循环内的不变定义(可优化)用错的局部变量和全局变量(错误)不匹配的参数(错误)不允许的递归(错误),南天培训教材系列 版权所有(C)南天信息,二、静态错误分析,类型和单位分析,引用分析,表达式分析,对源程序的类型进行检查,为了强化检查效果,扩充一些新的数据类型,进行静态预处理程序,分析程序中的类型错误。,对程序中变量的引用进行检查,发现引用异常错误(如变量在定义前被引用,变量定义后未被引用)。采用深度优选的方法遍历程序流图的每一条路径。建立引用异常的探测工具,包括变量定义表和变量引用表。,对表达式进行分析,以发现和纠正在表达式出现的错误,如:在表达式中不正确的使用了括号造成错误;数组下标越界错误;除数为零;浮点数计算的误差(最复杂)。,接口分析,各模块之间接口一致性。模块与外部数据库的接口一致性。形参与实参在类型,数量,顺序,维数,使用上的一致性。全局变量和公共数据区在使用上的一致性。,南天培训教材系列 版权所有(C)南天信息,三、程序插桩技术,设计时考虑的问题如下:明确要探测哪些信息;在程序的什么部位设置探测点;需要设计多少个探测点。,探测点设置位置(以Fortran为例):程序块的第一个可执行语句之前;Entry语句的前后;有标号的可执行语句处;循环、条件、call、go to语句之后;,向程序中插入断言语句来测试:当断言语句成立时,程序可以继续往下执行,否则将终止该程序。,在动态测试中,是一种基本的测试手段,有广泛的应用。主要借助向程序中插入操作,来实现测试目的的方法(即向源程序中添加一些语句(也称探测器),实现对程序语句的执行、变量的变化等情况进行检查)。,南天培训教材系列 版权所有(C)南天信息,断言语句,在程序中特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实。我们把插入的这些语句称为断言。这一做法是程序正确性证明的基本步骤,尽管算不上严格的证明,但方法本身仍然是很实用的。在什么情况下该插入断言语句:1)程序的入口处需要插入断言语句;2)在判定语句的前后需要插入断言语句;3)可以判断出变量确切值时,可以插入断言语句来断言变量的值。,南天培训教材系列 版权所有(C)南天信息,断言语句实例分析,源代码如下:public class SampleCalculator public int add(int augend,int addend)return augend+addend;public int subtration(int minuend,int subtrahend)return minuend-subtrahend;,南天培训教材系列 版权所有(C)南天信息,断言语句实例分析,使用Junit工具编写断言语句的测试代码如下:public class TestSample extends TestCase public void testAdd()SampleCalculator calculator=new SampleCalculator();int result=calculator.add(50,20);assertEquals(70,result);/*断言预期结果为70*/public void testSubtration()SampleCalculator calculator=new SampleCalculator();int result=calculator.subtration(50,20);assertEquals(30,result);/*断言预期结果为30*/,南天培训教材系列 版权所有(C)南天信息,包括桌面检查、代码审查和走查等,通过测试工具分析源程序的各种内部结构,用质量度量模型来评估软件的每个方面,通过对程序逻辑结构的遍历实现程序的覆盖,分析控制流图环路复杂性,导出基本可执行路径的集合,代码检查法,静态结构分析法,静态质量度量法,逻辑覆盖法,基本路径测试法,第三章 白盒测试方法,白盒测试的几种测试方法,其他方法,包括域测试、符号测试、Z路径覆盖和程序变异等,南天培训教材系列 版权所有(C)南天信息,一、代码检查法,目的:排除违背程序编写标准的问题排除违背程序编程风格的问题找出程序中不可移植的部分发现程序中不安全、不明确和模糊的部分确保代码和设计的一致性确保代码的逻辑表达的正确性确保代码结构的合理性,南天培训教材系列 版权所有(C)南天信息,一、代码检查法,由程序员检查自己的程序,程序编译通过后,对源程序代码进行分析、检验,并补充相关的文档,为了发现程序中的错误。,由审查小组静态分析程序,以审查会议的形式审查设计规格说明书、控制流程图、程序文本、有关要求和规范是否存在错误。,由走查小组将程序沿逻辑运行一遍,以会议的形式借助测试用例让程序沿逻辑运行一遍,记录程序的踪迹,对程序的逻辑和功能提出的问题展开讨论,为了能发现更多问题。,代码审查,走查,桌面检查,代码检查方式,南天培训教材系列 版权所有(C)南天信息,几种检查方式比较,南天培训教材系列 版权所有(C)南天信息,代码检查项目,检查变量的交叉引用表。检查标号的交叉引用表。检查子程序、宏、函数。等价性检查。标准检查。风格检查。比较控制流。选择、激活路径。对照程序的规格说明和源代码。补充文档。,南天培训教材系列 版权所有(C)南天信息,代码检查重点和规则,代码检查重点:变量命名和类型审查 变量初始值检查 变量作用范围检查 程序逻辑审查 程序语法检查 程序结构检查根据编程语言以及被测试程序的特点,选择自动化测试工具中内置的合适的编码规则来进行检查。,南天培训教材系列 版权所有(C)南天信息,编码规范,是程序编写过程中必须遵循的规则,详细规定了代码的语法规则、语法格式等。从以下几个方面的规定进行检查:排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译和审查、代码测试、维护和宏。,南天培训教材系列 版权所有(C)南天信息,缺陷检查表,缺陷检查表既检查时用到的测试用例,里面包括一些容易出错的地方和以往遇到的典型错误如下:(每种语言有各自的特点)格式部分。入口和出口的连接。程序语言的使用。存储器的使用。判断和转移。性能。可维护性。逻辑。可靠性。,南天培训教材系列 版权所有(C)南天信息,二、静态结构分析法,源代码的系统结构,内部控制逻辑,数据结构,数据接口,静态分析,内部文件调用关系图,子程序表、宏和函数参数表,函数调用关系图,模块控制流图(使用Logiscope测试工具),生成,生成,生成,生成,南天培训教材系列 版权所有(C)南天信息,二、静态结构分析法,在设计和开发阶段,使用LOGISCOPE可以对软件的体系结构和编码进行确认。可以在尽可能的早期阶段检测那些关键部分,寻找潜在的错误,并在禁止更改和维护工作之前做更多的工作。Logiscope RuleChecker:根据工程中定义的编程规则自动检查软件代码错误,可直接定位错误。包含大量标准规则,用户也可定制创建规则。自动生成测试报告。Logiscope Audit:定位错误模块,可评估软件质量及复杂程度。提供代码的直观描述,自动生成软件文档。Logiscope TestChecker:测试覆盖分析,显示没有测试的代码路径,基于源码结构分析。直接反馈测试效率和测试进度,协助进行衰退测试。既可在主机上测试,也可在目标板上测试。支持不同的实时操作系统、支持多线程。可累积合并多次测试结果,自动鉴别低效测试和衰退测试。自动生成定制报告和文档。Logiscope分为Audit、RuleChecker和TestChecker3部分,对代码分别进行静态度量、编程风格检测和测试覆盖率分析。,南天培训教材系列 版权所有(C)南天信息,三、静态质量度量法,有效性(时间特性、资源特性),可靠性(成熟性、容错性、可恢复性),可用性(可理解性、易学性、可操作性),轻便性(即可移植性,包括适应性、可安装性、一致性、可替换性),可维护性(可分析性、可修改性、稳定性、可测性),功能性(适合性、准确性、互操作性、依从性、安全性),质量,南天培训教材系列 版权所有(C)南天信息,构造质量模型度量可维护性,确定度量的规则:代码行数、注释频度等度量软件的各种行为属性。度量规则参数表参考书本P176。确定所采用的分类标准:可分析性、可修改性、稳定性和可测性,每个分类标准由一系列度量规则组成,由规则的取值与权重值计算出每个分类标准的取值。分类标准组参考书本P177。计算出各分类标准后确定代码的质量等级:优秀、良好、一般和较差。根据分类标准的计算结果来确定质量因素的取值,也分为四个等级:优秀、良好、一般和较差。可以使用上述得出的计算数据来量化被测程序的质量。,南天培训教材系列 版权所有(C)南天信息,软件质量评价过程,南天培训教材系列 版权所有(C)南天信息,四、逻辑覆盖法,这是其中一种动态白盒测试的方法,动态白盒测试也称结构化测试,要根据程序的控制结构设计相应的测试用例,原则如下:1)保证一个模块中的所有独立路径至少被使用一次。2)对所有逻辑值均需测试true和false。3)在上下边界及可操作范围内运行所有循环。4)检查内部数据结构以确保其有效性。逻辑覆盖法是其中一种实用的白盒测试用例设计的方法,是通过对程序逻辑结构的遍历来实现程序的覆盖,是一系列测试过程的总称。逻辑覆盖标准包括以下几种:语句覆盖(SC)、判定覆盖(DC)、条件覆盖(CC)、条件判定组合覆盖(CDC)、多条件覆盖(MCC)和修正判定条件覆盖(MCDC)。,南天培训教材系列 版权所有(C)南天信息,四、逻辑覆盖法,首先,来看个例子,源代码如下:if(!(x=80),南天培训教材系列 版权所有(C)南天信息,四、逻辑覆盖法,开始,(x=80)&(y=80),语句1,结束,true,(x+y)=140&(x=90|y=90),false,语句2,语句3,true,false,1,2,3,4,5,6,南天培训教材系列 版权所有(C)南天信息,1、语句覆盖(SC),语句覆盖(Statement Coverage):是最起码的结构覆盖要求,要求设计足够多的测试用例,使被测程序中每条语句至少被执行一次。为了测试例子程序中每条语句都能至少执行一次,可以设计如下的测试用例来实现:(如果此时1路径上的语句1去掉,那么用例如下),南天培训教材系列 版权所有(C)南天信息,1、语句覆盖(SC),优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。,南天培训教材系列 版权所有(C)南天信息,2、判定覆盖(DC),判定覆盖(Decision coverage):又称分支覆盖,要求设计足够多的测试用例,使得 程序中的每个判定至少有一次为“真值”,有一次为“假值”,即:程序中的每个分支至 少执行一次,每个判断的取真、取假至少执行一次。为了测试例子程序中每条判定分支获得每一种可能的结果至少测试一次,设计一下测试用例:,南天培训教材系列 版权所有(C)南天信息,2、判定覆盖(DC),优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定条件就可以得到测试用例。缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。,南天培训教材系列 版权所有(C)南天信息,3、条件覆盖(CC),条件覆盖(Condition Coverage):构造一组测试用例,使得程序中的每一个判定语句中每个逻辑条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。为了测试例子程序中每一个判定语句中每个逻辑条件的可能值至少满足一次,设计以下的测试用例:,南天培训教材系列 版权所有(C)南天信息,3、条件覆盖(CC),优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,南天培训教材系列 版权所有(C)南天信息,4、条件判定组合覆盖(CDC),条件判定组合覆盖(Condition/Decision Coverage):设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。设计相应满足条件判定组合覆盖标准的测试用例如下:,南天培训教材系列 版权所有(C)南天信息,4、条件判定组合覆盖(CDC),优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。,南天培训教材系列 版权所有(C)南天信息,5、多条件覆盖(MCC),多条件覆盖(Multiple Condition Coverage):也称条件组合覆盖,要求设计足够的测试用例,使得每个判定中条件的各种可能组合至少出现一次。满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。设计相应满足多条件覆盖标准的测试用例如下:,南天培训教材系列 版权所有(C)南天信息,5、多条件覆盖(MCC),优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。缺点:线性地增加了测试用例的数量。判定语句多时,组合数太大。,南天培训教材系列 版权所有(C)南天信息,6、修正条件判定覆盖(MCDC),修正条件判定覆盖(Multiple Condition Decision Coverage):首先,每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符连接的bool条件,每个条件对于判定的结果值都是独立的。设计相应满足修正条件判定覆盖标准的测试用例如下:,南天培训教材系列 版权所有(C)南天信息,6、修正条件判定覆盖(MCDC),南天培训教材系列 版权所有(C)南天信息,7、测试覆盖准则,(1)Foster的ESTCA覆盖准则 前面所介绍的逻辑覆盖其出发点似乎是合理的。所谓“覆盖”,就是想要做到全面而无遗漏。但是,事实表明,它并不能真的做到无遗漏。K.A.Foster从测试工作实践的教训出发,吸收了计算机硬件的测试原理,提出了一种经验型的测试覆盖准则。(2)Woodward等人的层次LCSAJ覆盖准则 Woodward等人曾经指出结构覆盖的一些准则,如分支覆盖或路径覆盖,都不足以保证测试数据的有效性。为此,他们提出了一种层次LCSAJ覆盖准则。,南天培训教材系列 版权所有(C)南天信息,五、基本路径覆盖,基本概念路径:从入口到出口的唯一的一系列分支。独立路径:从入口到出口的路径,至少经历一 个从未走过的边。基本路径法:使用线性独立路径把覆盖的路径 数压缩到一定限度内。,南天培训教材系列 版权所有(C)南天信息,五、基本路径覆盖,第一步,第二步,第三步,第五步,第四步,得出结果,以详细设计或源代码为基础,导出程序的控制流图。,计算得到控制流图G的环路复杂性v(g)。V(G)E(边数)N(节点数)2 或V(G)P(判定节点数)1 或区域数,确定线性无关的路径的基本集,导出测试用例。,准备测试用例,确保基本路径集中每条路径的执行。,根据编写好的测试用例来执行测试。,南天培训教材系列 版权所有(C)南天信息,例子,有以下的C函数,用基本路径测试法进行测试:void Sort(int iRecordNum,int iType)int x=0;int y=0;while(iRecordNum-0)if(0=iType)x=y+2;break;else if(1=iType)x=y+10;else x=y+20;,南天培训教材系列 版权所有(C)南天信息,例子,画出程序流程图:,4,6,7,14,8,10,11,13,南天培训教材系列 版权所有(C)南天信息,例子,控制流图如下:,4,6,7,14,8,10,11,13,南天培训教材系列 版权所有(C)南天信息,例子,二、计算圈复杂度,计算如下:1)流图中有四个区域。2)V(G)=10条边-8结点+2=4。3)V(G)=3个判定结点+1=4。三、导出测试用例路径1:4-14路径2:4-6-7-14路径3:4-6-8-10-13-4-14路径4:4-6-8-11-13-4-14,南天培训教材系列 版权所有(C)南天信息,例子,四、准备测试用例:路径1:4-14输入数据:iRecordNum=0,或者取iRecordNum0的某一个值预期结果:x=0路径2:4-6-7-14输入数据:iRecordNum=1,iType=0预期结果:x=2路径3:4-6-8-10-13-4-14输入数据:iRecordNum=1,iType=1预期结果:x=10路径4:4-6-8-11-13-4-14输入数据:iRecordNum=1,iType=2预期结果:x=20,南天培训教材系列 版权所有(C)南天信息,五、基本路径法,基本路径法缺点:缺点1:只考虑每个判定表达式的取值,并没有检验表达 式中条件的各种可能组合情况 解决办法:1、拆分 2、和条件覆盖法结合起来使用缺点2:对循环结构测试不充分 解决办法:对循环结构进行补充测试,南天培训教材系列 版权所有(C)南天信息,六、其他白盒测试方法,南天培训教材系列 版权所有(C)南天信息,白盒测试方法小结,从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计。,南天培训教材系列 版权所有(C)南天信息,白盒测试综合选择策略,在测试中,应尽量先用工具进行静态结构分析;测试中要采取先静态后动态的组合方式:先进行静态结构分析、代码检查和静态质量度量,再进行覆盖率测试;利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果进行进一步的确认,使测试更为有效;覆盖率测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准:对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率;在不同的测试阶段,测试的侧重点不同:在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析、静态质量度量;在系统测试阶段,应根据的结果,采取相应的白盒测试。在白盒测试中需要计算最少测试用例数。,南天培训教材系列 版权所有(C)南天信息,总结,白盒测试是一种被广泛使用的逻辑测试方法,是由程序内部逻辑驱动的一种单元测试方法。只有对程序内部十分了解才能进行适度有效的白盒测试。但是贯穿在程序内部的逻辑存在着不确定性和无穷性,尤其对于大规模复杂软件。因此我们不能穷举所有的逻辑路径,即使穷举也未必会带来好运(穷举不能查出程序逻辑规则错误,不能查出数据相关错误,不能查出程序遗漏的路径)。那么正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。而设计测试用例时,通常会把白盒测试技术和黑盒测试技术结合起来使用。,错误潜伏在角落里,聚集在边界上!,南天培训教材系列 版权所有(C)南天信息,讨论,结合在项目中的实际情况谈谈项目组或公司该不该开展白盒测试工作?需要开展白盒测试工作的话该采用哪种技术和方法进行呢?白盒测试应该做到哪种程度才可以停止呢?,南天培训教材系列 版权所有(C)南天信息,Thank You!,广州南天电脑系统有限公司 质量中心,