[计算机软件及应用]软件测试-白盒测试

上传人:tia****nde 文档编号:70799462 上传时间:2019-01-18 格式:PPT 页数:42 大小:765.65KB
返回 下载 相关 举报
[计算机软件及应用]软件测试-白盒测试_第1页
第1页 / 共42页
[计算机软件及应用]软件测试-白盒测试_第2页
第2页 / 共42页
[计算机软件及应用]软件测试-白盒测试_第3页
第3页 / 共42页
[计算机软件及应用]软件测试-白盒测试_第4页
第4页 / 共42页
[计算机软件及应用]软件测试-白盒测试_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《[计算机软件及应用]软件测试-白盒测试》由会员分享,可在线阅读,更多相关《[计算机软件及应用]软件测试-白盒测试(42页珍藏版)》请在金锄头文库上搜索。

1、白盒测试,了解白盒测试的定义 掌握白盒测试的常用方法,教学目标:,教学重点: 教学难点: 教学方法:多媒体 教学课时:6课时,白盒测试的覆盖测试法和路径测试法 白盒测试案例应用,白盒测试,什么是白盒测试 白盒测试的常用方法 白盒测试案例运用,一、什么是白盒测试,1、白盒测试的定义,白盒测试(White-box Testing)也称作结构测试或逻辑驱动测试,它是知道产品的内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作,而不顾它的功能。 白盒测试的主要方法有逻辑覆盖、基本路径测试等,主要用于软件

2、验证。,一、什么是白盒测试,2、为什么不采用穷举路径测试法,穷举路径测试法无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。 穷举路径测试不能查出程序因为遗漏路径而出错。 穷举路径测试发现不了一些与数据相关的错误。,一、什么是白盒测试,3、白盒测试方法遵循的原则,确保一个模块中的所有独立路径至少被测试一次。 所有逻辑值均需测试真(true)和假(false)两种情况。 检查程序的内部数据结构,保证其结构的有效性。 在取值上、下边界即可操作范围内运行所有循环。,一、什么是白盒测试,4、控制流图,白盒测试是针对软件产品内部逻辑结构进行测试的,测试人员必须对测试中的软件有深入的理解,

3、包括其内部结构、各单元部分及之间的内在联系,还有程序运行原理等等。因而这是一项庞大并且复杂的工作。为了更加突出程序的内部结构,便于测试人员理解源代码,可以对程序流程图进行简化,生成控制流图(Control Flow Graph)。 简化后的控制流图是由节点和控制边组成的。,一、什么是白盒测试,4、控制流图,控制流图的特点: 具有唯一入口节点,即源节点,表示程序段的开始语句; 具有唯一出口节点,即汇节点,表示程序段的结束语句; 节点由带有标号的圆圈表示,表示一个或多个无分支的源程序语句; 控制边由带箭头的直线或弧表示,代表控制流的方向。,常见的控制流图如图3-1所示。 包含条件的节点被称为判断节

4、点(也称谓词结点),由判断节点发出的边必须终止于某一个节点。 由边和结点所限定的范围称为区域。,图3-1 常见的控制流图,一、什么是白盒测试,4、控制流图,将一个典型的程序流程图转换成控制流图,一、什么是白盒测试,4、控制流图,图3-2 控制流图示例,对于复合条件,可将其分解为多个单个条件,并映射成控制流图。,一、什么是白盒测试,4、控制流图,控制流图的矩阵表示形式,其维数等于流图的结点数,矩阵元素对应于结点的边。 若矩阵记为M,则M(4,1)=“d”。,一、什么是白盒测试,5、图矩阵,流图对应的矩阵图,二、白盒测试的常用方法,1、覆盖率测试,白盒测试技术的常见方法之一就是覆盖测试,它是利用程

5、序的逻辑结构设计相应的测试用例。测试人员要深入了解被测程序的逻辑结构特点,完全掌握源代码的流程,才能设计出恰当的用例。 根据不同的测试要求,覆盖测试可以分为语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖。,二、白盒测试的常用方法,1、覆盖率测试,下面是一段简单的C语言程序,作为公共程序段来说明五种覆盖测试的各自特点。 程序3-1: 1 If (A1& B=0) then 2 X=X/A 3 If (A2| X1) then 4 X=X+1 逻辑运算符“&”表示“与”的关系,逻辑运算符“|”表示“或”的关系。其程序控制流图如图3-3所示。,二、白盒测试的常用方法,1、覆盖率

6、测试,图3-3 示例程序流程图及流图,二、白盒测试的常用方法,2、语句覆盖,语句覆盖(Statement Coverage)是指设计若干个测试用例,程序运行时每个可执行语句至少被执行一次。在保证完成要求的情况下,测试用例的数目越少越好。 以下是针对公共程序段设计的测试用例:,程序按路径a,c,e(流图上的路径BCEF或1-2-3-4-5)顺序执行,程序中的4个语句都被执行一次,符合语句覆盖的要求。,二、白盒测试的常用方法,2、语句覆盖,从表面上看,语句覆盖用例测试了程序中的每一个语句行,好像对程序覆盖得很全面,但实际上语句覆盖测试是最弱的逻辑覆盖方法。例如,第一个判断的逻辑运算符“&”错误写成

7、“|”,或者第二个判断的逻辑运算符“|”错误地写成“&”,这时如果仍采用Test Case 1测试用例则程序仍按流程图上的路径ace执行;当第二个条件语句中X1误写成X0时,上述的测试用例也不能发现这一错误。 根据上述分析可知,语句覆盖测试只是表面上的覆盖程序流程,没有针对源程序各个语句间的内在关系,设计更为细致的测试用例。,二、白盒测试的常用方法,3、判断覆盖,判断覆盖(Branch Coverage)是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的真值分支和假值分支至少被执行一遍。在保证完成要求的情况下,测试用例的数目越少越好。判断覆盖又称为分支覆盖。 对上述示例程序段,设计

8、两个测试用例,使它们能通过路径ace和abd或通过路径acd及ade,即可达到“判定覆盖”的标准。,二、白盒测试的常用方法,3、判断覆盖,采用这一组测试用例,公共程序段的4个判断分支b,c,d,e都被覆盖到了。,二、白盒测试的常用方法,3、判断覆盖,采用这一组测试用例,公共程序段的4个判断分支b,c,d,e也都被覆盖到了。 需要注意的是,上述两组测试用例在满足判定覆盖的同时,还完成了语句覆盖,因此判定覆盖要比语句覆盖更强一些。 但是,此时如果程序段中的第二个判定条件X1误写成X1,执行上述测试用例,原路径abe执行而不影响结果。,二、白盒测试的常用方法,4、条件覆盖,在实际程序代码中,一个判定

9、中通常都包含了若干个条件,如上述示例程序段,判定(A1)and(B=0)包含了两个条件(A1)和(B=0),此时,一个更强的覆盖标准是条件覆盖。 条件覆盖(Condition Coverage)是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件中的每个判断式的真值和假值至少被执行一遍。,二、白盒测试的常用方法,4、条件覆盖,因此,在第一个判定(A1)AND(B=0)中应考虑到各种条件取值的情况: A1为true,记为T1; A1为false,记为-T1; B=0为true,记为T2; B=0为false,记为-T2; 同样,对于第二个判定(A=2)OR(X1)应考虑到: A=2为tr

10、ue,记为T3; A=2为false,记为-T3; X1为true,记为T4; X1为false,记为-t4;,二、白盒测试的常用方法,4、条件覆盖,这两个测试用例不但覆盖了4个条件的全部8种情况,而且将两个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条件覆盖和判定覆盖。,二、白盒测试的常用方法,4、条件覆盖,但是并不可以说判断覆盖是条件覆盖的子集。 上表中虽然覆盖了4个内部判断式的8种真假值情况。但是这组测试用例的执行路径是abe,仅是覆盖了判断条件的4个真假分支中的2个。 所以,需要设计一种能同时满足判断覆盖和条件覆盖的覆盖测试方法,即判断/条件覆盖测试。,二、白盒测试的常用方法

11、,5、判定/条件覆盖,判断/条件覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的真假值分支至少被执行一遍,并且每个判断条件的内部判断式的真假值分支也要被执行一遍。 上表虽然满足了判断覆盖和条件覆盖,但是没有对每个判断条件的内部判断式的所有真假值组合进行测试。条件组合判断是必要的,因为条件判断语句中的“与”和“或”,即“&”和“|”,会使内部判断式之间产生抑制作用。例如,C=A & B中,如果A为假值,那么C就为假值,测试程序就不检测B了,B的正确与否就无法测试了。同样,C=A | B中,如果A为真值,那么C就为真值,测试程序也不检测B了,B的正确与否也就无法测试了。,二、白盒

12、测试的常用方法,6、组合覆盖,条件组合覆盖是指设计若干个测试用例,执行被测试程序时,程序中每个判断条件的的内部判断式的各种真假组合可能都至少被执行一遍。可见,满足条件组合覆盖的测试用例组一定满足判断覆盖、条件覆盖和判断/条件覆盖。 在上述示例程序段中,每个判定各包含有两个条件,这两个条件在判定中有8种可能的组合: A1,B=0,记为T1,T2; A1,B0,记为T1,-T2; A0,记为-T1,-T2;,A=2,X1,记为T3,T4; A=2,X2,X1,记为-T3,T4; A2,X=1,记为-T3,-T4;,二、白盒测试的常用方法,6、组合覆盖,上述测试用例虽然同时覆盖了全部条件组合的4个分

13、支,但是却仅覆盖了3条路径,漏掉了路径acd。,二、白盒测试的常用方法,7、路径覆盖,路径覆盖(Path Coverage)要求设计若干测试用例,执行被测试程序时,能够覆盖程序中所有的可能路径。 从流程图和流图中都可以看出,本例有4条可能的路径。 路径1:ace 记为L1 路径2:abd 记为L2 路径3:abe 记为L3 路径4:acd 记为L4,二、白盒测试的常用方法,7、路径覆盖,实际问题中,一个不太复杂的程序,其路径都是一个庞大的数字,要在测试中覆盖这样多的路径是无法实现的。所以,路径覆盖测试是相对的,要尽可能把路径数压缩到一个可承受范围。 当然,即便对某个简短的程序段做到了路径覆盖测

14、试,也不能保证源代码不存在其他软件问题了。其他的软件测试手段也必要的,它们之间是相辅相成的。没有一个测试方法能够找尽所有软件缺陷,只能说是尽可能多地查找软件缺陷。,二、白盒测试的常用方法,8、基本路径测试方法,从上几节中可知,对于一个较为复杂的程序要做到完全的路径覆盖测试是不可能实现的。既然路径覆盖测试无法达到,那么可以对某个程序的所有独立路径进行测试,也就是说检验了程序的每一条语句,从而达到语句覆盖,这种测试方法就是独立路径测试方法。 某一程序的独立路径是指从入口到程序出口的多次执行中,每次至少有一个语句集(包括运算、赋值、输入/输出或判断)是新的和未被重复的。从控制流图来看,一条独立路径是

15、至少包含有一条在其它独立路径中从未有过的边的路径。路径可以用控制流图中的节点序列来表示。,二、白盒测试的常用方法,8、基本路径测试方法,独立路径测试的步骤包括4个方面: 画出控制流图 求出程序环形复杂度 导出测试用例(Test Case ) 设计测试用例 下面通过一个C语言程序实例来具体说明独立路径测试的设计流程。,二、白盒测试的常用方法,8、基本路径测试方法,void sort(int irecordnum,int itype) int x=0; int y=0; while(irecordnum0) if(itype=0) break; else if(itype=1) x=x+10; e

16、lse y=y+20; , ,二、白盒测试的常用方法,8、基本路径测试方法,第一步:画出控制流图: 图中每一个圆称做流图的结点,代表一条或多条语句。流图中的箭头称作边或连接,代表控制流。,二、白盒测试的常用方法,8、基本路径测试方法,第二步:求出程序环形复杂度 根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目。 公式1:V(G)=10-8+2,其中10是控制流图G中边的数量,8是控制流图中节点的数目。 公式2:V(G)=3+1,其中3是控制流图G中判断节点的数目。 公式3:V(G)=4,其中4是控制流图G中区域的数目。 因此,控制流图G的环形复杂度是4。就是说至少需要4条独立路径组成基本路径集合,并由此得到能够覆盖所有程序语句的测试用例。,二、白盒测试的常用方法,8、基本路径测试方法,第三步:导出测试用例(Test Case ) 可得出程序的基本路径集中有4条独立路径: 路径1:4-14 路径2:4-6-7-14 路径3:4-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号