资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
白盒测试之理论篇,制作人:李娟 2012-09-04,为什么做白盒测试?,这个问题比较复杂,我们先从一个比喻开始讲起。假设有一台的面包机,从上面倒入面粉与水,开动机器后从下面出来的就是烤好了的面包,这个机器的功能比较单一,接口很清晰,输入是面粉与水,输出是面包。现在假定这个面包机多年未用,内部都生锈了,现在要清洗它,类似于我们开发的软件,软件有Bug,那得通过测试来清理。那如何更快速的清洗这台面包机呢?有两种洗法,一是拿水从上往下灌,这是系统测试的方法。另一种是拆开来洗,拆开机器后,拿抺布沾点清洁剂,把各零件的坑坑槽槽擦洗一遍,然后组装回来,再用水从上往下冲一遍,拆开来洗是白盒方法,组装回来用水冲是黑盒方式,相当于白盒测试之后再追加一次系统测试。无疑,上面第二种方法是正确的,我们的前提是:清洗多年未用的面包机,铁锈够多,如果洗不干净,造出的面包都是致癌物质。当然,清洗面包机还只能算简单劳动,清理软件中的Bug要复杂得多,一个if语句有两条分支,一个while循环判断也是两条分支,还有break、continue、return等,想想看,一个1万行规模的软件能有多少个分支!一个分支就是一条坑坑槽槽,而且软件Bug还具备动态特性,不是静止的明摆在哪儿。所以,软件的白盒测试不可或缺,因为遗留Bug的影响很大,就像面包机没洗净留铁锈会致癌,还因为软件系统远比面包机复杂,不拆开来怎么能洗干净!,课程内容,1、白盒测试的概念、特点2、白盒测试的目的3、白盒测试的原则4、白盒测试的依据5、白盒测试的类别6、白盒测试的流程7、白盒测试的策略8、白盒测试方法,1.1 白盒测试的概念,白盒测试(White Box Testing),按照程序内部的结构、逻辑驱动测试程序,通过测试来检测产品内部动作是否按照设计说明书的规定正常进行,检验程序中的每条路径是否都能按预定要求正确工作。 白盒测试的对象主要是源程序。是指用代码内部的分支、路径、条件,使程序设计的控制结构导出测试用例。 白盒测试是一个与黑盒测试相对的概念,是指测试者针对可见代码进行的一种测试。白盒测试通常再划分为单元测试、集成测试两大类,但依据不同的流程,对白盒测试细分的标准也不尽一致,比如在IBM的IPD流程之下,白盒测试可能划分为如下几类:模块单元测试、模块集成测试、模块系统测试、渐增Build集成测试、系统集成测试等。而在XP实践中,单元测试与集成测试之间的界限并不明显,统称为渐增迭代测试。,1.2 白盒测试的特点,白盒法特点:以程序的内部逻辑为基础设计测试用例,所以又称为逻辑覆盖法。应用白盒法时,手头必须有程序的规格说明以及程序清单。白盒法考虑的是测试用例对程序内部逻辑的覆盖程度。 最彻底的白盒法是覆盖程序中的每一条路径,但是由于 程序中一般含有循环,所以路径的数目极大,要执行每 一条路径是不可能的,只能希望覆盖的程度尽可能高些。,2 白盒测试的目的,保证一个模块中的所有独立路径至少被执行一次; 对所有的逻辑值均需要测试真、假两个分支; 在上下边界及可操作范围内运行所有循环; 检查内部数据结构以确保其有效性。 提高代码的质量达到软件产品中要求的可靠性、安全性;,3 白盒测试的原则,白盒测试的原则有4点: 1)保证一个模块中所有路径至少被测试一次; 2)所有逻辑值都要测试真和假两种情况; 3)检查程序的内部数据结构是否有效; 4)检查上、下边界及可操作范围内运行所有循环。,4 白盒测试依据,软件需求报告; 软件需求规格说明; 程序设计文档; 软件界面设计; 编码规范; 开发命名标准。,5 白盒测试的类别,白盒测试的类别具体分为8大类: 1) 软件公用问题的测试; 2) 语言测试; 3) SQL语句测试; 4) 数据类型测试; 5) 界面测试; 6) 数值对象测试; 7) 业务对象测试; 8) 数据管理对象测试。,白盒测试的流程分为界面对象和业务对象两种方式。 界面对象测试 界面对象测试的流程如图2-1所示。,图2-1界面对象的流程图,6 白盒测试的流程,(2) 业务对象流程测试 业务对象测试的流程如图2-2所示。,6 白盒测试的流程,图2-2 业务对象测试的流程图,7 白盒测试策略,桌前检查(Desk Check) 同行评审(Peer Review) 代码走查(Walkthrough) 静态分析(static analyse) 单元测试(Unit Testing) 白盒测试综合策略 (1)测试中,尽量先用自动化工具来进行静态结构分析; (2)测试中建议先从静态测试开始,如:静态结构分析、代码走查和静态质量度量,然后进行动态测试,如:覆盖率测试; (3)利用静态分析的结果作为依据,再使用代码检查和动态测试的方式对静态分析结果进行进一步确认,提高测试效率及准确性; (4)覆盖率测试是白盒测试中的重要手段,在测试报告中可以作为量化指标的依据,对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率; (5)在不同的测试阶段,测试的侧重点是不同的。,8 白盒测试方法,静态测试代码检查法静态结构分析法 动态测试 逻辑测试 语句覆盖 判定覆盖 条件覆盖 判定-条件覆盖 条件组合测试 路径测试 白盒测试的其它方法 条件测试 数据流测试 循环测试 域测试 Z路径测试,8.1 静态测试,8.1.1 代码检查法8.1.2 静态结构分析法代码检查方式 桌面检查 由程序员检查自已编写的程序 在程序通过编译之后,对源码进行分析检查 代码审查 由若干程序员和测试员组成审查小组 通过阅读、讨论、争议来对程序文档进行静态分析 走查 由若干程序员和测试员组成审查小组, 审查第一步:材料下发每个人,各自认真阅读、研究 审查第二步:集中开会,大家根据预先设计好的测试用例, 模拟运行程序,记录程序踪迹,供分析讨论之用,8.1.1 代码检查法,代码检查的主要项目 变量交叉引用表 标号交叉引用表 子程序、宏、函数 等价性检查 常量检查 标准检查 风格检查 比较控制流 程序的规格说明,8.1.1 代码检查法,代码检查的规则(可以参照编码规范),8.1.2 静态结构分析法,使用静态结构分析工具分析程序源代码的内部结构 系统结构 数据结构 数据接口 内部控制逻辑 可生成的分析文档 函数调用关系图 模块控制流程图 内部文件调用关系图 子程序表 宏和函数参数表,8.2 动态测试,逻辑覆盖法 基本路径覆盖法,逻辑覆盖测试方法通常采用流程图来设计测试用例,它 考察的重点是图中的判定框,因为这些判定通常是与选择结 构有关或是与循环结构有关,是决定程序结构的关键成分。,逻辑覆盖法,路径测试就是设计足够的测试用例,覆盖程序中 每一条可能的程序执行路径至少测试一次,如果程序 中含有循环(在程序图中表现为环)则每个循环至少执 行一次。,路径测试法,逻辑覆盖测试的5种标准,20,图示如下:,8.2.1 语句覆盖,语句覆盖”是一个比较弱的测试标准, 它的含义是:选择足够的测试用例,使得程序 中每个语句至少都能被执行一次。为使程序中 每个语句至少执行一次,只需设计一个能通过 路径ace的例子就可以了,例如选择输入数据为:A=2,B=0,X=3 就可达到“语句覆盖”标准。从上例可看出,语句覆盖实际上是很弱的, 如果第一个条件语句中的AND错误地编写成OR, 上面的测试用例是不能发现这个错误的; 又如第三个条件语句中X1误写成X0,这个测 试用例也不能暴露它,此外,沿着路径abd执行 时,X的值应该保持不变,如果这一方面有错 误,上述测试数据也不能发现它们。,语句覆盖,8.2.1 分支覆盖,A=3,B=0,X=1 (沿路径acd执行) A=2,B=1,X=3 (沿路径abe执行),比“语句覆盖”稍强的覆盖标准是“分支覆盖” 含义是:执行足够的测试用例,使得程序中的每一个分支至少都通过一次。对例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执行时,X的值是否保持不变。,8.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 等各种结果出现。 现在只需设计以下两个测试用例就可满足这一标准: A=2,B=0,X=4 (沿路径ace执行); A=1,B=1,X=1 (沿路径abd执行)。,8.2.1 条件覆盖,“条件覆盖”通常比“分支覆盖”强,因为它使一个判定中的每一个条件都取到了两个不同的结果,而判定覆盖则不保证这一点。 “条件覆盖”并不包含“分支覆盖”,如对语句IF(A AND B)THEN S 设计测试用例使其满足“条件覆盖“,即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以执行。,条件覆盖,如对例2设计了下面的测试用例,则虽然满足了条件覆盖,但只覆盖了第一个条件的取假分支和第二个条件的取真分支,不满足分支覆盖的要求。,8.2.1 分支/条件覆盖,针对上面的问题引出了另一种覆盖标准“分支 条件覆盖”,它的含义是:执行足够的测试用例,使得分支中每个条件取到各种可能的值,并使每个分支取到各种可能的结果。 对例1的程序,前面的两个例子 A=2,B=0,X=4 (沿ace路) A=1,B=1,X=1 (沿abd路径) 是满足这一标准的。,分支/条件覆盖,对例2,根据定义只需设计以下两个测试用例便可以覆盖8个条件值以及4个判断分支。,8.2.1 分支/条件覆盖,分支/条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件。 例如对于条件表达式(x3)&(z3)为假则一 般的编译器不在判断是否z5)来说,若x=4测试结果为真,就认 为表达式的结果为真,这时不再检查(y5)条件了。 因此,采用分支/条件覆盖,逻辑表达式中的错误不一 定能够查出来了。,8.2.2 基本路径测试法,基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复 杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用 例要保证在测试中程序的每个可执行语句至少执行一次。 基本路径测试法的重点内容如下: 程序的控制流图:描述程序控制流的一种图示方法。 程序环形复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序 基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一 次所必须的测试用例数目的上界。 基本路径测试方法包括以下4个步骤: 画出程序的控制流图。 计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定 程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 导出基本路径集,确定程序的独立路径。 根据中的独立路径,设计测试用例的输入数据和预期输出。,8.2.2 基本路径测试法,1 程序控制流图 程序控制流图(可简称流图)是对程序流程图进行简化后得到的,它突出表示程序控制流的结构。 程序控制流图是描述程序控制流的一种方式。 控制流图图形符号:图形符号:圆圈代表一个结点, 表示一个或多个无分支的语句或源程序语句; 程序控制流边和点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域; 判断语句中的条件为复合条件时,即条件表达式由一个或多个逻辑运算符连接的逻辑表达式 (a and b),则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断。 基本路径测试方法是在控制流图的基础上,通过分析控制结构的环形复杂度,导出执行路径的基本 集,再从该基本集设计测试用例。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号