白盒测试1

上传人:j7****6 文档编号:61895605 上传时间:2018-12-14 格式:PPT 页数:69 大小:2.76MB
返回 下载 相关 举报
白盒测试1_第1页
第1页 / 共69页
白盒测试1_第2页
第2页 / 共69页
白盒测试1_第3页
第3页 / 共69页
白盒测试1_第4页
第4页 / 共69页
白盒测试1_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《白盒测试1》由会员分享,可在线阅读,更多相关《白盒测试1(69页珍藏版)》请在金锄头文库上搜索。

1、第三部分 白盒测试,在本章中,我们将学习: 静态白盒测试 动态白盒测试 结构性测试案例,结构测试定义,把测试对象看做一个透明的盒子 白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法 白盒测试或逻辑驱动测试 基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件,结构测试(白盒测试)特点,可以构成测试数据使特定程序部分得到测试 有一定的充分性度量手段 可获得较多工具支持 通常只用于单元测试,结构测试的方法,静态测试方法: 程序结构分析 正式审查 同事审查 公开陈述 检验,动态测试方法: 逻辑覆盖 语句覆盖 分支覆盖 条件覆盖 分支-条件覆盖 路径覆盖,通用代码审查

2、清单,数据引用错误 数据声明错误 计算错误 比较错误 控制流程错误 子程序参数错误 输入、输出错误 其他错误,代码覆盖率,采用白盒法进行测试时,考虑的是测试用例对程序内部逻辑的覆盖程度 最彻底的白盒法是覆盖程序中的每一条路径,但这往往无法实现 采用其它一些标准来量度覆盖的程度,并希望覆盖程度尽可能高些,逻辑覆盖法,白盒测试中的逻辑覆盖方法有以下6种: 语句覆盖 判定覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖,例:实现一个简单的数学运算,Dim a,b As Integer Dim c As Double If (a0 And b0) Then c=c/a End if If (a1

3、or c1) Then c=c+1 End if c=b+c,1.语句覆盖,基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。,1,1.语句覆盖续1,只需设计一个测试用例:a=2,b=1,c=6;即达到了语句覆盖。,1.语句覆盖续2,【优点】 :可以很直观地从源代码得到测试用例,无须细分每条判定表达式。 【缺点】 :由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。,2.判定覆盖,基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一

4、次,即判断真假值均曾被满足。,1,2.判定覆盖续1,a=2,b=1 ,c=6可覆盖判断M的Y分支和判断Q的Y分支; a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断Q的N分支 。 这两组测试用例可覆盖所有判定的真假分支。,判断M,判断Q,2.判定覆盖续2,a=1,b=1 ,c=-3 可覆盖判断M的Y分支和判断Q的N分支 ; a=1,b=-2 ,c=3可覆盖判断M的N分支和判断Q的Y分支 ; 同样的这两组测试用例也可覆盖所有判定的真假分支。,判断M,判断Q,2.判定覆盖续3,【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得

5、到测试用例。 【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。,3.条件覆盖,基本思想是:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。,1,3.条件覆盖续1,判断M表达式: 设条件 a0 取真 记为 T1 假 F1 条件 b0 取真 记为 T2 假 F2 判断Q表达式: 设条件 a1 取真 记为 T3 假 F3 条件 c1 取真 记为 T4 假 F4,判断M,判断Q,3.条件覆盖续2,它覆盖了判定M的N分支和判断Q的Y分支。,我们用条件覆盖设计的思想

6、就是让测试用例能覆盖 T1、T2、T3、T4、F1、F2、F3、F4,判断M,判断Q,3.条件覆盖续3,【优点】:增加了对条件判定情况的测试,增加了测试路径。 【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,4.判定条件覆盖,基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。,1,4.判定条件覆盖续1,按照判定条件覆盖的要求,我们设计的测试用例要满足如下条件: 所有条件可能至少执行一次取值; 所有判断的可能结

7、果至少执行一次。,要满足T1、T2、 T3 、T4 F1、 F2 、F3、F4,4.判定条件覆盖续2,要满足T1、T2、 T3 、T4 F1、 F2 、F3、F4,4.判定条件覆盖续3,【优点】 :能同时满足判定、条件两种覆盖标准。 【缺点】 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。,5.条件组合覆盖,基本思想是:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次,或判定条件组合至少执行一次。,1,5.条件组合覆盖续1(第一种情况),按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件

8、。,5.条件组合覆盖续2,要满足1、2、3、4、5、6、7、8条件组合,5.条件组合覆盖续3,【优点】 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。 【缺点】 :线性地增加了测试用例的数量。,6.路径覆盖(第2种情况),基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径 。 注:和第二种方法还是有区别的,不光指条件情况。,1,6.路径覆盖续1,6.路径覆盖续2,【优点】 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。 【缺点】 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。,从前面的例子我们可以看到,采用

9、任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计 。,条件组合覆盖结合路径覆盖,基本路径测试方法,路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程。从广义的角度讲,任何有关路径分析的测试都可以被称为路径测试。 完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。 在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试

10、方法。,基本路径测试方法(续),基本路径测试方法是在控制流图的基础上,通过分析控制结构的环形复杂度,导出执行路径的基本集,再从该基本集设计测试用例。基本路径测试方法包括以下4个步骤: (1)画出程序的控制流图。 (2)计算程序的环形复杂度,导出程序基本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 (3)导出基本路径集,确定程序的独立路径。 (4)根据(3)中的独立路径,设计测试用例的输入数据和预期输出。,环形复杂度,环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。 环形复杂度的应用可以将环形复杂度用于基本路径方法,它可以

11、提供:程序基本集的独立路径数量;确保所有语句至少执行一次的测试数量的上界。 独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的边。 测试可以被设计为基本路径集的执行过程,但基本路径集通常并不唯一。,计算环形复杂度的方法,环形复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环形复杂度: 控制流图中区域的数量对应于环形复杂度。 给定控制流图G的环形复杂度V(G),定义为 V(G) = E-N+2 其中,E是控制流图中边的数量,N是控制流图中的节点数量。 给定控制流图G的环形复杂

12、度V(G),也可定义为 V(G) = P+1 其中,P是控制流图G中判定节点的数量。判定节点是输出边至少2条以上的节点。,基本路径测试方法(续),void Sort ( int iRecordNum, int iType ) 1 2 int x=0; 3 int y=0; 4 while ( iRecordNum- 0 ) 5 6 If ( iType=0 ) 7 x=y+2; 8 else 9 If ( iType=1 ) 10 x=y+10; 11 else 12 x=y+20; 13 14 ,基本路径测试方法(续),画出控制流图: 如右图所示 计算环形复杂度: 10(条边)- 8(个节点

13、)+ 2 = 4 导出独立路径(用语句编号表示) 路径1:414 路径2:46714 路径3:4691013414 路径4:4691213414,路径覆盖的利弊,实现了所有路径的测试,发现错误能力强 某些条件错误可能无法发现 路径数庞大,不可能覆盖所有路径 用例数量的增加,循环测试路径覆盖,0次循环 检查跳出循环 1次循环 检查循环初始值 2次循环 检查多次循环 m次循环 检查某次循环 最大次数循环、比最大次数多一次、少一次循环 检查循环次数边界,简化循环路径,循环使路径数量急剧增长 简化 无论循环的形式和实际执行循环体的次数多少,只考虑循环一次和0次 两种情况 进入循环体一次 跳出循环体,循

14、环程序流程图,C,B,C,B,(1),(2),简化循环路径图,(1)和(2)都可简化为(3)(Z路径覆盖),C,B,最少测试用例数计算,对于具体的程序,至少要设计多少测试用例? 估算最少测试用例数 帮助执行测试 有助于估算测试的时间,结构化程序与N-S图,结构化程序是由3种基本控制结构组成 顺序型 选择型(条件分支) 重复型(循环) 测试时考虑的结构 顺序型 选择型(条件分支),程序结构与测试用例数,并行,串行,程序结构与测试用例数,当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构 如果在N-S图中存在并列的层次A1、A2,最少测试欧诺公里个数分别为a1,a2

15、,则两层所组合的最少测试用例数为a1*a2 如果在N-S图中不存在并列层次,则最少测试用例数由图中除谓词之外的操作框个数。,最少测试用例数计算实例,计算最少测试用例数,最少测试用例数计算实例,最少测试用例数计算实例,测试覆盖准则,Foster的ESTCA覆盖准则 错误敏感测试用例分析(Error Sensitive Test Cases Analysis) 例如测试 if (a3)和if (a=3)中的等号,ESTCA覆盖准则,对于分支A(, = , =, B的情况分别测试一次 对于分支A (, C时,选择A=C小正数 当AC时,选择A=C小正数 对于测试用例取值,在每个测试用例中尽量不同的值

16、或符号,覆盖率要求,对单元测试来说,语句覆盖和分支覆盖是最基本的要求 由于程序中错误(异常)处理工作的重要性以及其结构相对简单,要求错误处理要做到路径覆盖 对质量要求高的软件单元,可根据情况提出条件覆盖、分支-条件覆盖以及路径覆盖要求,基本路径有AB,ACD,ACEF,ACEG,针对四种路径设计输入数据.(10002001) AB 1001,1002,1999,2001 ACD 1992 ACEF 1600 ACEG 1900,控制流图,控制流图有以下几个特点: (1)具有唯一入口结点,表示程序段的开始语句; (2)具有唯一出口结点,表示程序段的结束语句; (3)结点由带标号的圆圈表示,表示一个或多个无分支的源程序语句; (4)控制

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

当前位置:首页 > 生活休闲 > 社会民生

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