白盒测试之理论篇_第1页
白盒测试之理论篇_第2页
白盒测试之理论篇_第3页
白盒测试之理论篇_第4页
白盒测试之理论篇_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、白盒测试之理论篇2012-09-041为什么做白盒测试?这个问题比较复杂,我们先从一个比喻开始讲起。 假设有一台的面包机,从上面倒入面粉与水,开动机器后从下面出来的就是烤好了的面包,这个机器的功能比较单一,接口很清晰,输入是面粉与水,输出是面包。现在假定这个面包机多年未用,内部都生锈了,现在要清洗它,类似于我们开发的软件,软件有Bug,那得通过测试来清理。那如何更快速的清洗这台面包机呢?有两种洗法,一是拿水从上往下灌,这是系统测试的方法。另一种是拆开来洗,拆开机器后,拿抺布沾点清洁剂,把各零件的坑坑槽槽擦洗一遍,然后组装回来,再用水从上往下冲一遍,拆开来洗是白盒方法,组装回来用水冲是黑盒方式,

2、相当于白盒测试之后再追加一次系统测试。无疑,上面第二种方法是正确的,我们的前提是:清洗多年未用的面包机,铁锈够多,如果洗不干净,造出的面包都是致癌物质。当然,清洗面包机还只能算简单劳动,清理软件中的Bug要复杂得多,一个if语句有两条分支,一个while循环判断也是两条分支,还有break、continue、return等,想想看,一个1万行规模的软件能有多少个分支!一个分支就是一条坑坑槽槽,而且软件Bug还具备动态特性,不是静止的明摆在哪儿。所以,软件的白盒测试不可或缺,因为遗留Bug的影响很大,就像面包机没洗净留铁锈会致癌,还因为软件系统远比面包机复杂,不拆开来怎么能洗干净!2课程内容1、

3、白盒测试的概念、特点2、白盒测试的目的3、白盒测试的原则4、白盒测试的依据5、白盒测试的类别6、白盒测试的流程7、白盒测试的策略8、白盒测试方法31.1 白盒测试的概念白盒测试(White Box Testing),按照程序内部的结构、逻辑驱动测试程序,通过测试来检测产品内部动作是否按照设计说明书的规定正常进行,检验程序中的每条路径是否都能按预定要求正确工作。白盒测试的对象主要是源程序。是指用代码内部的分支、路径、条件,使程序设计的控制结构导出测试用例。白盒测试是一个与黑盒测试相对的概念,是指测试者针对可见代码进行的一种测试。白盒测试通常再划分为单元测试、集成测试两大类,但依据不同的流程,对白

4、盒测试细分的标准也不尽一致,比如在IBM的IPD流程之下,白盒测试可能划分为如下几类:模块单元测试、模块集成测试、模块系统测试、渐增Build集成测试、系统集成测试等。而在XP实践中,单元测试与集成测试之间的界限并不明显,统称为渐增迭代测试。41.2 白盒测试的特点白盒法特点:以程序的内部逻辑为基础设计测试用例,所以又称为逻辑覆盖法。应用白盒法时,手头必须有程序的规格说明以及程序清单。 白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条路径,但是由于程序中一般含有循环,所以路径的数目极大,要执行每一条路径是不可能的,只能希望覆盖的程度尽可能高些。52 白盒测试的

5、目的 保证一个模块中的所有独立路径至少被执行一次;对所有的逻辑值均需要测试真、假两个分支;在上下边界及可操作范围内运行所有循环;检查内部数据结构以确保其有效性。提高代码的质量达到软件产品中要求的可靠性、安全性;63 白盒测试的原则白盒测试的原则有4点:1)保证一个模块中所有路径至少被测试一次;2)所有逻辑值都要测试真和假两种情况;3)检查程序的内部数据结构是否有效;4)检查上、下边界及可操作范围内运行所有循环。74 白盒测试依据软件需求报告;软件需求规格说明;程序设计文档;软件界面设计;编码规范;开发命名标准。8 5 白盒测试的类别白盒测试的类别具体分为8大类:1) 软件公用问题的测试;2)

6、语言测试;3) SQL语句测试;4) 数据类型测试;5) 界面测试;6) 数值对象测试;7) 业务对象测试;8) 数据管理对象测试。9白盒测试的流程分为界面对象和业务对象两种方式。界面对象测试界面对象测试的流程如图2-1所示。图2-1界面对象的流程图 6 白盒测试的流程10(2) 业务对象流程测试业务对象测试的流程如图2-2所示。6 白盒测试的流程 图2-2 业务对象测试的流程图11 7 白盒测试策略桌前检查(Desk Check) 同行评审(Peer Review) 代码走查(Walkthrough)静态分析(static analyse) 单元测试(Unit Testing)白盒测试综合策

7、略(1)测试中,尽量先用自动化工具来进行静态结构分析;(2)测试中建议先从静态测试开始,如:静态结构分析、代码走查和静态质量度量,然后进行动态测试,如:覆盖率测试;(3)利用静态分析的结果作为依据,再使用代码检查和动态测试的方式对静态分析结果进行进一步确认,提高测试效率及准确性;(4)覆盖率测试是白盒测试中的重要手段,在测试报告中可以作为量化指标的依据,对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率;(5)在不同的测试阶段,测试的侧重点是不同的。128 白盒测试方法静态测试 代码检查法 静态结构分析法动态测试逻辑测试语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合测试路径测试白盒测试的

8、其它方法条件测试数据流测试循环测试域测试Z路径测试138.1 静态测试 8.1.1 代码检查法 8.1.2 静态结构分析法 代码检查方式桌面检查由程序员检查自已编写的程序在程序通过编译之后,对源码进行分析检查代码审查由若干程序员和测试员组成审查小组通过阅读、讨论、争议来对程序文档进行静态分析走查由若干程序员和测试员组成审查小组,审查第一步:材料下发每个人,各自认真阅读、研究审查第二步:集中开会,大家根据预先设计好的测试用例,模拟运行程序,记录程序踪迹,供分析讨论之用148.1.1 代码检查法代码检查的主要项目变量交叉引用表标号交叉引用表子程序、宏、函数等价性检查常量检查标准检查风格检查比较控制

9、流程序的规格说明158.1.1 代码检查法代码检查的规则(可以参照编码规范)168.1.2 静态结构分析法使用静态结构分析工具分析程序源代码的内部结构系统结构数据结构数据接口内部控制逻辑可生成的分析文档函数调用关系图模块控制流程图内部文件调用关系图子程序表宏和函数参数表178.2 动态测试逻辑覆盖法基本路径覆盖法 逻辑覆盖测试方法通常采用流程图来设计测试用例,它考察的重点是图中的判定框,因为这些判定通常是与选择结构有关或是与循环结构有关,是决定程序结构的关键成分。 逻辑覆盖法路径测试就是设计足够的测试用例,覆盖程序中每一条可能的程序执行路径至少测试一次,如果程序中含有循环(在程序图中表现为环)

10、则每个循环至少执行一次。 路径测试法18发现错误的能力标 准含 义 1(弱)语句覆盖每条语句至少执行一次 2判定覆盖每一判定的每个分支至少执行一次 3条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次4 判定/条件覆盖同时满足判定覆盖和条件覆盖的要求5 (强) 条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次 逻辑覆盖测试的5种标准 19ABTFABTF20ABTFABTFABTF图示如下:208.2.1 语句覆盖语句覆盖”是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。为使程序中每个语句至少执行一次,只

11、需设计一个能通过路径ace的例子就可以了,例如选择输入数据为: A=2,B=0,X=3 就可达到“语句覆盖”标准。 从上例可看出,语句覆盖实际上是很弱的,如果第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;又如第三个条件语句中X1误写成X0,这个测试用例也不能暴露它,此外,沿着路径abd执行时,X的值应该保持不变,如果这一方面有错误,上述测试数据也不能发现它们。 语句覆盖 218.2.1 分支覆盖 A=3,B=0,X=1 (沿路径acd执行)A=2,B=1,X=3 (沿路径abe执行)比“语句覆盖”稍强的覆盖标准是“分支覆盖”含义是:执行足够的测试用例,使得程序中

12、的每一个分支至少都通过一次。 对例1的程序,如果设计两个例子,使它们能通过路径ace和abd,或者通过路径acd和abe,就可达到“判定覆盖”标准,为此,可以选择输入数据为: A=3,B=0,X=1 (沿路径acd执行); A=2,B=1,X=3(沿路径abe执行) 程序中含有判定的语句包括if-then-else、do-until、case、do-while等,所以“分支覆盖”更一般的含义是:使得每一个分支获得每一种可能的结果。 “分支覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,则每个语句也就执行过了。但是,“分支覆盖”还是很不够的,例如例1两个测试用例未能检查沿着路径abd执行时

13、,X的值是否保持不变。228.2.1 条件覆盖 A=2,B=0,X=4(沿路径ace执行)A=1,B=1,X=1 (沿路径abd执行)一个判定中往往包含了若干个条件,如例1的程序中,判定(A1) AND (B=0)包含了两个条件: A1以及 B=0,所以可引进一个更强的覆盖标准“条件覆盖”。“条件覆盖”的含义是:执行足够的测试用例使得判定中的每个条件获得各种可能的结果。 例1的程序有四个条件:A1、 B=0、A=2、X1 为了达到“条件覆盖”标准,需要执行足够的测试用例使得在a点有: A1、A1、B=0、B0 等各种结果出现,以及在b点有:A=2、A2、X1、X1 等各种结果出现。现在只需设计

14、以下两个测试用例就可满足这一标准: A=2,B=0,X=4(沿路径ace执行); A=1,B=1,X=1 (沿路径abd执行)。238.2.1 条件覆盖 “条件覆盖”通常比“分支覆盖”强,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖则不保证这一点。“条件覆盖”并不包含“分支覆盖”,如对语句IF(A AND B)THEN S 设计测试用例使其满足条件覆盖,即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以执行。 24条件覆盖 如对例2设计了下面的测试用例,则虽然满足了条件覆盖,但只覆盖了第一个条件的取假分支和第二个条件的取真分支,不满足分支覆盖的要求。

15、测试用例 通过路径 条件取值覆盖分支x=2、y=6、z=5 acd-T1、T2、-T3、T4 cdx=4、y=5、z=15 acdT1、-T2、T3、-T4 cd258.2.1 分支/条件覆盖针对上面的问题引出了另一种覆盖标准“分支 条件覆盖”,它的含义是:执行足够的测试用例,使得分支中每个条件取到各种可能的值,并使每个分支取到各种可能的结果。对例1的程序,前面的两个例子 A=2,B=0,X=4 (沿ace路) A=1,B=1,X=1 (沿abd路径)是满足这一标准的。26分支/条件覆盖对例2,根据定义只需设计以下两个测试用例便可以覆盖8个条件值以及4个判断分支。 测试用例 通过路径 条件取值

16、覆盖分支x=4、y=6、z=5 abdT1、T2、T3、T4 bdx=2、y=5、z=11ace-T1、-T2、-T3、-T4 ce278.2.1 分支/条件覆盖 分支/条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件。例如对于条件表达式(x3)&(z3)为假则一般的编译器不在判断是否z5)来说,若x=4测试结果为真,就认为表达式的结果为真,这时不再检查(y5)条件了。因此,采用分支/条件覆盖,逻辑表达式中的错误不一定能够查出来了。 288.2.2 基本路径测试法 基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设

17、计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。基本路径测试法的重点内容如下: 程序的控制流图:描述程序控制流的一种图示方法。 程序环形复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。基本路径测试方法包括以下4个步骤:画出程序的控制流图。计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。导出基本路径集,确定程序的独立路径。根据中的独立路径,设计测试用例的输入数据和预期输出。29

18、8.2.2 基本路径测试法1 程序控制流图程序控制流图(可简称流图)是对程序流程图进行简化后得到的,它突出表示程序控制流的结构。程序控制流图是描述程序控制流的一种方式。控制流图图形符号:图形符号:圆圈代表一个结点, 表示一个或多个无分支的语句或源程序语句;程序控制流边和点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域;判断语句中的条件为复合条件时,即条件表达式由一个或多个逻辑运算符连接的逻辑表达式(a and b),则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断。基本路径测试方法是在控制流图的基础上,通过分析控制结构的环形复杂度,导出执行路径的基本集,再从该基本

19、集设计测试用例。图2-4 程序控制流程图308.3 白盒测试的其它方法简介条件测试数据流测试循环测试域测试Z路径测试318.3.1 条件测试条件测试是检查程序模块中所包含逻辑条件的测试用例设计方法主要用于测试程序中条件错误和程序的其他错误一般的说,如果程序的测试集能够有效地检测程序中的条件错误,则该测试集可能也会有效地检测程序中的其他错误条件测试策略主要优点条件测试的覆盖率计算相对简单程序的条件测试覆盖率为产生另外的程序测试提供了指导328.3.1 条件测试条件式分析一个简单条件是一个布尔变量或一个可能带有NOT操作符的关系表达式,形式为:E1关系操作符E2 其中E1和E2是算术表达式,而关系

20、操作符是下列之一:“”、“”、“=”、“”(“!=”)、“”、或“”复杂条件由简单条件、布尔操作符和括弧组成,设可用于复杂条件的布尔算子包括OR,AND和NOT,不含关系表达式的条件称为布尔表达式。所以条件的成分类型包括:布尔操作符布尔变量布尔括弧(括住简单或复杂条件)关系操作符或算术表达式条件式错误如果条件不正确,则至少有一个条件成分不正确,条件错误一般有以下类型布尔操作符错误布尔变量错误布尔括弧错误关系操作符或算术表达式错误338.3.2 数据流测试 数据流测试是按照程序中的变量定义和使用的位置来选择程序的测试路径数据流测试方法能有效发现错误,由于变量的定义和使用,使程序中的语句都彼此相关

21、数据流测试方法主要用于为包含 嵌套if和循环语句的程序 选择测试路径前提设程序每条语句都赋予了独立的语句号,而且每个函数都不改变其参数和全局变量,对于语句号为S的语句DEF(S)=X语句S包含X的定义USE(S)=X语句S包含X的使用如果存在从S到S的路径,并且该路径不含X的其他定义,则变量X在语句S处的定义在语句S仍然有效变量X的定义,使用链(或称DU链)形式如X,S,S,其中S和S是语句号,X在DEF(S)和USE(S)中,而且语句S定义的X在语句S有效使用链的测试策略要求每个DU链至少覆盖一次可以证明DU测试不能保证覆盖程序的所有分支348.3.4 循环测试循环测试是一种白盒测试技术,着

22、重于检查循环结构的有效性。有如下四种循环:简单循环嵌套循环串接循环不规则循环358.3.4 循环测试简单循环整个跳过循环只有一次通过循环两次通过循环m次通过循环,其中mnn-1,n,n+1次通过循环其中n是允许通过循环的最大次数嵌套循环如果将简单循环的测试方法用于嵌套循环,可能的测试数就会随嵌套层数成几何级增加,这会导致不实际的测试数目减少测试数的方法对最内层循环使用简单循环,而使外层循环的循环参数(即循环计数)最小,并为范围外或排除的值增加其它测试由内向外构造下一个循环的测试,但其它的外层循环为最小值,并使其它的嵌套循环为“典型”值继续直到测试所有的循环368.3.4 循环测试串接循环如果串

23、接循环的循环都彼此独立,可是使用嵌套的策略测试如果两个循环串接起来,而第一个循环是第二个循环的初始值,则这两个循环并不是独立的。则可使用测试嵌套循环的方法进行测试不规则循环不能测试,尽量重新设计给结构化的程序结构后再进行测试378.3.5 域测试域是指程序的输入空间输入空间又可以划分成若干个子空间,每个子空间对应一种不同的计算,子空间的划分是由分支语句的条件式决定的有时将一个域称为一个等介类域测试主要是针对域错误进行的测试域错误如果程序的控制流有错误,对于某些特定的正确输入,可能执行的是一条错误的路径,这种错误称为域错误域测试就是在分析输入域的基础上,选择适当的测试点进行测试域测试的不足域测试对程序的限制较多当程序中有很多的路径时,所需的测试点太多388.3.5 Z路径测试将程序中的循环次数加以限制,通常为循环1次或0次,这样就将循环结构变为分支结构,这种方法称为Z路径测试Z路径测试能有效降低被测程序的路径数39面向对象的白盒测试对面向对象软件的类测试相当于传统软件的单元测试。和传统软件的单元测试不同,他往往关注模块的算法细节和模块接口间流动的数据,面向对象软件的类测试是由封装在类中的操作和类的状态行为所驱动的。 面向对象软件测试的特点:因为属性和操作是被封装的,对类之外

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论