收藏 分享(赏)

第四讲 白盒测试v2.ppt

上传人:知足长乐 文档编号:1226279 上传时间:2018-06-19 格式:PPT 页数:80 大小:3.56MB
下载 相关 举报
第四讲 白盒测试v2.ppt_第1页
第1页 / 共80页
第四讲 白盒测试v2.ppt_第2页
第2页 / 共80页
第四讲 白盒测试v2.ppt_第3页
第3页 / 共80页
第四讲 白盒测试v2.ppt_第4页
第4页 / 共80页
第四讲 白盒测试v2.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

1、软件测试第4章 白盒测试,白盒测试概念,白盒测试把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,白盒测试技术,本章主要内容几种常见的白盒测试覆盖技术(语句,判定,条件,判定/条件,组合条件,路径覆盖)控制流的测试覆盖技术(基本路径)数据流的测试覆盖技术程序切片测试技术,白盒测试,程序结构表示方法流程图N-S图控制流图数据流图,对所有程序逻辑路径测试?,测试覆盖标准,上页小程序的流程图,20次的循环。不同路径数高达

2、520(1013)条。5分钟编写、执行和确认一测试用例需要1亿年。1秒编写、执行和确认一测试用例需要32万年。,4.1 覆盖率测试方法,语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖,面向单语句的测试准则,面向语句间控制的测试准则,4.1覆盖率测试方法,Float fun(float A,float B,float X) if (A1),语句覆盖,语句覆盖: 选取足够多的测试数据,使被测试程序中每个语句至少执行一次。图中存在4条不同的路径: L1: sacbed L2: sabd L3: sabed L4: sacbd为使每个语句都执行一次,程序的执行路径应是sacbed:A=2,

3、 B=0, X=4测试用例:,入口,返回,(A1)&(B=0),(A=2)|(X1),X = X / A,X = X + 1,s,a,b,d,c,e,语句覆盖,第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;第二个条件语句中X1误写成X0,这个测试用例也不能暴露它;沿着路径abd执行时,X的值应该保持不变,如果这一方面有错误,上述测试数据也不能发现。 一般认为“语句覆盖”是很不充分的一种标准,是最弱的逻辑覆盖准则。,判定覆盖,判定覆盖:选取足够多的测试数据,使被测试程序中不仅每个语句至少执行一次,而且每个判定的每种可能的结果都至少执行一次。能够分别覆盖路径sacb

4、ed和sabd或sacbd和sabed的两组测试数据,都满足判定覆盖标准:(1)A=3, B=0, X=3 (sacbd)(2)A=2, B=1, X=1 (sabed)测试用例,判定覆盖,程序中含有判定的语句包括IF-THEN-ELSE、DO-WHILE、REPEAT-UNTIL等,除了双值的判定语句外,还有多值的判定语句,如CASE语句。所以“判定覆盖”更一般的含义是:使得每一个判定获得每一种可能的结果。 判定覆盖并不能够覆盖每个条件语句正确。例如:A1 AND B0, A1 OR B0“判定覆盖”比“语句覆盖”严格,因为如果每个判定都执行过了,则每个语句也就执行过了。但是,“判定覆盖”还

5、是很不够的,例如两个测试用例未能检查沿着路径abd执行时,X的值是否保持不变。,条件覆盖,条件覆盖:选取足够多的测试数据,使被测试程序中不仅每个语句至少执行一次,而且每个判定表达式中的每个条件都取到各种可能的结果。在a点:A1, A1, B=0, B0;在b点:A=2, A 2, X1, X 1。(1)A=2, B=0, X=4 (sacbed)(2)A=1, B=1, X=1 (sabd)测试用例,入口,返回,(A1)&(B=0),(A=2)|(X1),X = X / A,X = X + 1,s,a,b,c,e,d,条件覆盖,“条件覆盖”通常比“判定覆盖”强,因为它使一个判定中的每一个条件都

6、取到了两个不同的结果,而判定覆盖则不保证这一点。“条件覆盖”并不包含“判定覆盖”,如对语句IF(A AND B)THEN S 设计测试用例使其满足条件覆盖,即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以执行。,判定/条件覆盖,判定/条件覆盖:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的结果,而且每个判定表达式也都取到各种可能的结果。(1)A=2, B=0, X=4 (sacbed)(2)A=1, B=1, X=1 (sabd)测试用例,入口,返回,(A1)&(B=0),(A=2)|(X1),X = X / A,X = X + 1,s,a,b,c,e

7、,d,判定/条件覆盖,判定/条件覆盖从表面来看,它测试了所有条件的取值,但是实际上某些条件掩盖了另一些条件例如对于条件表达式(x3)&(z3)为假则一般的编译器不在判断是否z5)来说,若x=4测试结果为真,就认为表达式的结果为真,这时不再检查(y5)条件了。因此,采用判定/条件覆盖,逻辑表达式中的错误不一定能够查出来了。(A&B运算,使用A=T分别对应于B的T和F,使用A=F对应于B的任意; A|B运算,使用A=F分别对应于B的T和F,使用A=T对应于B的任意; ),条件组合覆盖,条件组合覆盖:选取足够多的测试数据,使得判定表达式中条件的各种可能组合都至少出现一次。有八种可能的条件组合:(1)

8、A1, B=0 T;(2)A1, B 0 F;(3)A 1, B=0 F;(4) A 1, B 0 F;(5)A=2, X1 T;(6)A=2, X 1 T;(7) A 2, X1 T;(8)A 2, X 1 F。测试数据:(1)A=2, B=0, X=4 (sacbed, 1,5)(2)A=2, B=1, X=1 (sabed, 2,6)(3)A=1, B=0, X=2 (sabed, 3,7)(4)A=1, B=1, X=1 (sabd, 4,8)测试用例,入口,返回,(A1)&(B=0),(A=2)|(X1),X = X / A,X = X + 1,s,a,c,b,d,e,路径覆盖,路径

9、覆盖:选取足够多的测试数据,使得程序的每条可能路径都至少执行一次。 测试数据:(1)A=1, B=1, X=1 (sabd)(2)A=1, B=1, X=2 (sabed)(3)A=3, B=0, X=1 (sacbd)(4)A=2, B=0, X=4 (sacbed)测试用例,入口,返回,(A1)&(B=0),(A=2)|(X1),X = X / A,X = X + 1,s,a,b,c,e,d,部分覆盖准则间的关系路径测试与点的测试的覆盖关系 ?,测试覆盖关系,4.2循环测试,循环结构,4.2循环测试,循环结构,4.2循环测试,简单循环测试方法(假设有n次循环):整个跳过循环只有一次通过循环

10、两次通过循环某个m次通过循环,mnn-1,n,n+1次通过循环,4.2循环测试,例子:快速排序算法中的一趟划分算法,4.2循环测试,int MaxSize=20;typedef int KeyType;typedef char InfoType;typedef struct KeyType key;InfoType *otherinfo;RedType;typedef struct RedType rMaxSize+1;int length;SqlList;RedType element;KeyType pivotkey;,Int Partion(Sqlist 返回枢轴位置,4.2循环测试,4

11、.3基本路径测试,概念如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次就成为基本路径测试。它是在程序流程图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。,程序结构的控制流图,在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图。流图是对待测试程序过程处理的一种表示。流图使用下面的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。,28,分支结构,if (x y) y = 0; x = x + 1;else x = y;,if (x y) y = 0; x = x + 1;,29,分支结构,if (x y

12、) return;print (x);return;,30,循环结构,Loops require “extra” nodes to be addedNodes that do not represent statements or basic blocks,31,循环结构,x = 0;while (x y) y = f (x, y); x = x + 1;,for (x = 0; x y; x+) y = f (x, y);,x = x + 1,implicitly increments loop,32,break and continue,x = 0;do y = f (x, y); x =

13、 x + 1; while (x = y,x y,y = f (x, y)x = x+1,1,x = 0,x = x + 1,break,y 0,y =f(x,y),y = 0,y = y*2continue,x = 0;while (x y) y = f (x, y); if (y = 0) break; else if y 0) y = y*2; continue; x = x + 1;print (y);,33,The case (switch) Structure,read ( c) ;switch ( c ) case N: y = 25; break; case Y: y = 50

14、; break; default: y = 0; break;print (y);, Ammann & Offutt,34,Example Control Flow Stats,public static void computeStats (int numbers) int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0; for (int i = 0; i length; i+) sum += numbers i ; med = numbers length / 2; mean = sum /

15、 (double) length; varsum = 0; for (int i = 0; i length; i+) varsum = varsum + (numbers I - mean) * (numbers I - mean); var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var ); System.out.println (length: + length); System.out.println (mean: + mean); System.out.println (median: + med); System.out.pri

16、ntln (variance: + var); System.out.println (standard deviation: + sd);,34, Ammann & Offutt,35,Control Flow Graph for Stats,public static void computeStats (int numbers) int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0; for (int i = 0; i length; i+) sum += numbers i ; med

17、= numbers length / 2; mean = sum / (double) length; varsum = 0; for (int i = 0; i 0) if(0= =iType) x=y+2; break; else if (1= =iType)x=y+10; else x=y+20; ,基本路径测试,画出其程序流程图和对应的控制流图如下,基本路径测试 - 计算圈复杂度,第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以

18、下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性;给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。,基本路径测试 - 计算圈复杂度,对应上面图中的圈复杂度,计算如下:流图中有四个区域;V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。,基本路径测试 - 导出测试用例,第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该

19、程序的独立路径的条数。)路径1:4-14路径2:4-6-7-14路径3:4-6-8-10-13-4-14路径4:4-6-8-11-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。,基本路径测试 - 准备测试用例,第四步:准备测试用例为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:,基本路径测试 - 准备测试用例,路径1:4-14输入数据:iRecordNum0,或者取iRecordNum 0) if(0= =iType) x=y+2; break; else if(1

20、= =iType) x=y+10; else x=y+20; ,基本路径测试再举例,例:下例程序流程图描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。,步骤1:导出过程的流图。,步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=EN+2=1612+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6 其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。,基本路径测试再举例,基本路径测试再举例,步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:路径1:1-2-9-1

21、0-12路径2:1-2-9-11-12路径3:1-2-3-9-10-12路径4:1-2-3-4-5-8-2路径5:1-2-3-4-5-6-8-2路径6:1-2-3-4-5-6-7-8-2,基本路径测试再举例,步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。1)路径1(1-2-9-10-12)的测试用例: scorek=有效分数值,当k i ; scorei=1, 2i50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。(i之前的数据为前置数据),基本路径测试再举例,2)路径2(1-2-9-11-12)的测试用例: scor

22、e 1 = 1 ; 期望的结果:average = 1 ,其他量保持初值。3)路径3(1-2-3-9-10-12)的测试用例: 输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。,基本路径测试再举例,4)路径4(1-2-3-4-5-8-2)的测试用例: scorei=有效分数,当i100, k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。,基本路径测试再举例,6)路径6(1-2-3-4-5-6-7-8-2)的测试用例: scorei=有效分数, 当i1800.0)30 Then3

23、1 commission=0.10*1000.032 commission=commission+0.15*800.0 commission=commission+0.20*(sales- 1800.0)34 Else If(sales1000.0)35 Then36 commission=0.10*1000.0 commission=commission+0.15(sales- 1000.0)38 Else commission=0.10*sales39 EndIf40 EndIf41 Output(“Commission is“,commission),4.4程序切片测试,变量locks切

24、片S1:S(locks,13)=13 S2:S(locks,14)=13,14,19,20S3:S(locks,16)=13,14,16,19,20 S4:S(locks,19)=19变量stocks和barrels切片S5:S(stocks,15)=13,14,15,19,20 S6:S(stocks,17)=13,14,15,17,19,20S7:S(barrels,15)=13,14,15,19,20 S8:S(barrels,18)=13,14,15,18,19,20 变量totalLocks、totalStocks、totalBarrels、lockPrice、 stockPrice

25、、 barrelPrice、lockSales、stockSales、barrelSales切片S9:S(totalLocks,10)=10 S10:S(totalLocks,16)=10,13,14,16,19,20S11:S(totalLocks,21)=10,13,14,16,19,20 S12:S(totalStocks,11)=11 S13:S(totalStocks,17)=11,13,14,15,17,19,20S14:S(totalStocks,22)=11,13,14,15,17,19,20 S15:S(totalBarrels,12)=12 S16:S(totalBarre

26、ls,18)=12,13,14,15,18,19,20S17:S(totalBarrels,23)=12,13,14,15,18,19,20 S18:S(lockPrice,24)=7 S19:S(stockPrice,25)=8 S20:S(barrelPrice,26)=9 S21:S(lockSales,24)=7,10,13,14,16,19,20,24S22:S(stockSales,25)=8,11,13,14,15,17,19,20,25S23:S(barrelSales,26)=9,12,13,14,15,18,19,20,26,4.4程序切片测试,变量sales切片S24:S

27、(sales,27)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27S25:S(sales,28)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27S26:S(sales,29)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27S27:S(sales,33)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27S28:S(sales,34)=7,8,9,10,11,12,13,14,15,1

28、6,17,18,19,20,24,25,26,27S29:S(sales,37)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27S30:S(sales,38)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27 变量commission切片S31:S(commission,31)=31S32:S(commission,32)=31,32S33:S(commission,33)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27,29,30,3

29、1,32,33S34:S(commission,36)=36S35:S(commission,37)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27,36,37S36:S(commission,38)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27,34,38S37:S(commission,41)=7,8,9,10,11,12,13,14,15,16,17,18,19,20,24,25,26,27,29,30,31,32,33,34,35,36,37,38,4.4程序切片测试,程序切片

30、作用程序调试软件测试软件维护软件复用,4.5插装,例子说明(asp中打印Sql语句)定义插装(Instrumentation),又称软件探针(Software Probe ),是白盒测试的一种常用技术。插装是在软件特定的位置插入一些语句,用来获取软件的运行信息并反馈给测试者。 插装应用软件计数器应用覆盖测试,举例说明。断言检测,举例说明。测试用例的单一指数,程序插装,程序插装技术的研究涉及下列几个问题:(1)探测哪些信息?(2)程序的什么位置设置探测点?(3)需要多少探测点? 程序插装类型:用于测试覆盖率和测试用例有效性度量的程序插装 用于断言检测的程序插装,总结:,“白盒”法全面了解程序内部

31、逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一、穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序;第二、穷举路径测试不可能查出程序中因遗漏路径而出错。第三、穷举路径测试可能发现不了一些与数据相关的错误。,实验设想,以白盒测试实验中的三角形例子,设想如下实验方案需要完成语句、判定、条件、判定/条件,组合条件,路径,基本路径覆盖分析要求将各测试用例(按一定结构)存储于MySQL数据库每种类型一个测试脚本,根据测试用例存储结构不同实现自动测试。最后对每种类型进行测试覆盖分析,Q & A,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑环境 > 环境科学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报