白盒测试课件.ppt

上传人:小飞机 文档编号:1577069 上传时间:2022-12-08 格式:PPT 页数:72 大小:2.44MB
返回 下载 相关 举报
白盒测试课件.ppt_第1页
第1页 / 共72页
白盒测试课件.ppt_第2页
第2页 / 共72页
白盒测试课件.ppt_第3页
第3页 / 共72页
白盒测试课件.ppt_第4页
第4页 / 共72页
白盒测试课件.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《白盒测试课件.ppt》由会员分享,可在线阅读,更多相关《白盒测试课件.ppt(72页珍藏版)》请在三一办公上搜索。

1、2022/12/8,白盒测试,NIIT1 教研室 王涛,引言,静态测试和动态测试 静态测试是指不运行程序进行的测试-只是检查和审阅。白盒测试和黑盒测试 测试用例的设计中,通常会把白盒测试和黑盒测试结合起来使用,本章主要内容,4.1静态测试技术4.2白盒测试技术,4.1静态测试技术,4.1.1 代码检查4.1.2 静态结构分析4.1.3 代码质量度量,4.1.1 代码检查,代码检查包括代码走查、代码审查等,代码走查,有组织的代码走查在编码阶段去除错误的成本是在软件发布阶段去除错误成本的1/92全部的代码是否都需要走查 最大的问题是劝说开发者要遵循一定的标准,编码风格与规范,好的风格对于好的程序设

2、计具有关键性作用 代码应该是清楚的和简单的-具有直截了当的逻辑、自然的表达式、通行的语言使用方式,代码审查,代码审查和代码走查比较代码审查是提高代码质量的良药 消除开发员的心理抵触 代码审查要有目标 代码审查清单,4.1.2静态结构分析,静态结构分析主要是以图形的方式表现程序的内部结构,例如函数调用关系图、函数内部控制流图。其中,函数调用关系图以直观的图形方式描述一个应用程序中各个函数的调用和被调用关系;控制流图显示一个函数的逻辑结构,它由许多节点组成,一个节点代表一条语句或数条语句,连接结点的叫边,边表示节点间的控制流向。,4.1.3 代码质量度量,ISO/IEC 9126国际标准所定义的软

3、件质量包括六个方面:功能性、可靠性、易用性、效率、可维护性和可移植性。软件的质量是软件属性的各种标准度量的组合。,4.2白盒测试方法,白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。,4.2白盒测试方法,这个流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365 天, 那么要想把如图所示的小程序的所有路径测试完,则需要3170年。,4.2白盒测试方法,由于对于不同复杂度的代码逻辑,可以衍生出许

4、多种执行路径,只有选择适当的测试方法,才能帮助我们从代码的迷雾森林中找到正确的方向。,4.2.1 逻辑覆盖法,白盒测试中的逻辑覆盖方法有以下6种:语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖路径覆盖,例:实现一个简单的数学运算,Dim a,b As Integer Dim c As Double If (a0 And b0) Then c=c/a End if If (a1 or c1) Then c=c+1 End if c=b+c,1.语句覆盖,基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。,1,1.语句覆盖续1,只需设计一个测试用例:a=2,b=1,

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

6、假分支。,判断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,【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。,3.条件覆盖,基本思想是:设计若干测试用例,执行

7、被测程序以后要使每个判断中每个条件的可能取值至少满足一次。,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分支。,我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4,判断M,判断Q,3.条件覆盖续3,【优点】:增加了对条件判定情况的测试,增加了测试路径。【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖

8、判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,4.判定条件覆盖,基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。,1,4.判定条件覆盖续1,按照判定条件覆盖的要求,我们设计的测试用例要满足如下条件:所有条件可能至少执行一次取值;所有判断的可能结果至少执行一次。,要满足T1、T2、 T3 、T4F1、 F2 、F3、F4,4.判定条件覆盖续2,要满足T1、T2、 T3 、T4F1、 F2 、F3、F4,4.判定条件覆盖续3,【优点】 :能同时满足判定、条件两种覆盖标准。【缺点】

9、 :判定/条件覆盖准则的缺点是未考虑条件的组合情况。,5.条件组合覆盖,基本思想是:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次,1,5.条件组合覆盖续1,按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件。,5.条件组合覆盖续2,要满足1、2、3、4、5、6、7、8条件组合,5.条件组合覆盖续3,【优点】 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。【缺点】 :线性地增加了测试用例的数量。,6.路径覆盖,基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径

10、 。,1,6.路径覆盖续1,6.路径覆盖续2,【优点】 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。【缺点】 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。,从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计 。,条件组合覆盖结合路径覆盖,4.2.3程序结构分析,程序的结构形式是白盒测试的主要依据。这一部分将从控制流分析和数据流分析的不同方面讨论如何分析程序结构。我们的目的是要在程序中找到隐藏的错误。控制流分析数据流分

11、析,控制流分析,由于非结构化程序会给测试带来许多不必要的困难,所以业界要求写出的程序具有良好的结构。 控制流图程序结构的基本要求,控制流图,程序流程图又称框图,是我们最熟悉,也是最容易理解的一种程序控制结构的图形表示了。在这种图上的框里面常常标明了处理要求或者条件,但是,这些标注在做路径分析时是不重要的。为了了更加突出控制流的结构,需要对程序流程图做一些简化。在图3-2种我们给出了简化的例子。其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。,控制流图续,在控制流图中只有两种图形符号,它们是:节点:以标有编号的圆圈表示。它代

12、表了程序流程图中矩形框表示的处理、菱形表示的两个到多个出口判断以及两条到多条流线相交的汇合点。控制流线或弧:以箭头表示。它与程序流程图中的流线是一致的,表明了控制的顺序。为了方便讨论,控制流线通常标有名字,如图中所标的a、b、c等。,控制流图续2,为了使控制流图在机器上表示,我们可以把它表示成矩阵的形式,称为控制流图矩阵。图3-3表示了图3-2的控制流图矩阵,这个矩阵有5行5列,是由该控制图中5个节点决定的。矩阵中6个元素a、b、c、d、e和f的位置决定了它们所连接节点的号码。例如,弧d在矩阵中处于第3行第4列,那是因为它在控制流图中连接了节点3至节点4。这里必须注意方向,图中节点4到节点3没

13、有弧,所以矩阵中第4行第3列也就没有元素。,除了用程序流程图可以转化成控制流图以外,还可以把伪代码表示的处理过程转化成控制流图。根据程序建构控制流图很容易 。例如:三角形伪代码实现过程转化成了控制流图,有的时候,我们可以把几个节点合并成一个,合并的原则是:若在一个节点序列中没有分支,则我们可以把这个序列的节点都合并成一个节点。,包含复合条件的伪代码转化成控制流图,程序结构的基本要求,我们对于程序结构提出以下4点基本要求,这些要求是,写出的程序不应该包含:转向并不存在的标号;没有用过的语句标号;从程序入口进入后无法达到的语句;不能达到停机语句的语句。,数据流分析,在单元测试中,数据仅仅在一个模块

14、或者一个函数种流通。但是,数据流的通路往往涉及多个集成模块,甚至于整个软件,所以我们有必要进行数据流的测试,尽管它非常耗时。数据流分析最初是随着编译系统要生成有效的目标代码而出现的,这类方法主要用于优化代码。数据流测试是指一个基于通过程序的控制流,从建立的数据目标状态的序列中发现异常的结构测试方法。数据流测试用作路径测试的“真实性检查”。,数据流分析续,早期的数据流分析常常集中于现在叫做定义/引用异常的缺陷:变量杯定义,但是从来没有使用。所使用的变量没有被定义。变量在使用之前被定义了两次。因为程序内的语句因变量的定义和使用而彼此相关,所以用数据流测试方法更能有效地发现软件缺陷。但是,在度量测试

15、覆盖率和选择测试路径的时候,数据流测试很困难。,4.2.4 路径测试,1DD-路径测试(决策到决策路径测试)2基本路径测试,DD-路径测试,在讨论DD-路径测试之前,我们先要了解什么叫做链,在这里,链出现在有向图中,是一条起始节点和终止节点不同的路径,并且每个节点的出度=1,入度=1。也有一种长度为0的退化链情况,意思就是这条连只有一个节点和0条边。,DD-路径测试续,DD-路径是控制流图中的一条链,只要满足下列五种情况之一:由一个节点组成,入度=0;由一个节点组成,出度=0;由一个节点组成,入度=2或者出度=2;由一个节点组成,入度=1并且出度=1;长度=的最大链。,DD-路径测试续2,为了

16、便于理解,我们用图3-4三角形伪代码映射成的控制流图来说明这五种情况。,DD-路径测试续3,提出DD-路径的目的很多质量机构都把DD-路径覆盖作为测试覆盖的最低可接受级别。E.F.Miller发现,当通过一组测试用例满足DD-路径覆盖要求时,可以发现全部缺陷中的大约85%(Miller 1991)。如果每一条DD-路径都被遍历,则我们知道每个判断分支都被执行,其实就是遍历DD-路径图中每条边。对于if类的 语句,这意味着真、假分支都要覆盖。对于CASE语句,则每个子句都要覆盖。,基本路径测试,基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计

17、测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。,基本路径测试续,基本路径测试法包括以下5个方面:程序的控制流图:描述程序控制流的一种图示方法。程序环境复杂性: 环形复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本独立路径数目边。导出测试用例:通过程序的控制流图导出基本路径集,列出程序的独立路径。准备测试用例,确保基本路径集中的每一条路径的执行。图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。,基本路径测试举例,下面我们通过一个实例来说明基本路径测试。例:请看以下代码,它由C+语言书写。,把

18、它转化成图形矩阵,最后请使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。,基本路径测试举例,void ReadPara( CString temp)if ( temp = = =)m_oper.SetCurSel(0); else if (temp = = ) m_oper.SetCurSel(1); else if ( temp = = = =) m_oper.SetCurSel(2); else ,if( temp = = =) m_oper.SetCurSel(3); else if ( temp = = ) m_oper.SetCurSel(4); else m

19、_oper.SetCurSel(5); return;,1画出这段代码的控制流图,如3-9所示:2根据控制流图,计算环路复杂度V(G)=22-18+2=6。3导出测试用例,列出路径:Path1:2-3-4-27-28Path2:2-3-7-8-26-27-28Path3:2-3-7-11-12-25-26-27-28Path4:2-3-7-11-15-16-24-25-26-27-28Path5:2-3-7-11-15-19-20-23-24-25-26-27-28Path6:2-3-7-11-15-19-22-23-24-25-26-27-28,图3-9 控制流图,4设计测试用例根据第3步中

20、给出的路径,下面设计测试用例列在表3-9中。5.图形矩阵的画法在前面我们已经讲过,这里不再赘述。,4.2.5 程序插桩,在软件测试中,常常要用到一种“插桩”技术,通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。,程序插桩续,想做插桩,可以思考以下几点:(1)如果出现在语句中包含了return语句,怎么在它前面插入指定语句?同时保证语句的语法合法性?例如:for(j=0;j10000;j+) if(j=k) return;-不能直接在之前插入,否则意义全变了; ,程序插桩续2,(2)当出现需要在for循环语句、while循环语句中进行插入信息时候,很可能会导

21、致程序运行时间非常长,是否有办法改进“插桩”机制? (3)是否可以由用户进行指定,比如for语句、while语句或者指定的语句前不允许进行“插桩”,怎么实现? (4)如果对于一个庞大的系统软件,我们需要进行对所运行的程序的每个函数记录其运行的有关参数,如:运行开始时间、退出时间、运行总时间、调用次数等等的统计,您有什么更好的建议与想法呢?,本章小结,白盒测试是软件测试技术中最基本的方法之一,白盒测试的核心是针对被测单元内部是如何进行工作的测试,是以覆盖测试与路径测试为基本策略。白盒测试是一种被广泛使用的逻辑测试方法,是由程序内部逻辑驱动的一种单元测试方法。只有对程序内部十分了解才能进行适度有效

22、的白盒测试。但是贯穿在程序内部的逻辑存在着不确定性和无穷性,尤其对于大规模复杂软件。因此我们不能穷举所有的逻辑路径,即使穷举也未必会带来好运(穷举不能查出程序逻辑规则错误,不能查出数据相关错误,不能查出程序遗漏的路径)。那么正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。,作业,1请把下面的程序流程图转化成控制流图。,作业,2请把第2章的NextDate问题的伪代码转换成为控制流图,并简化。3为伪代码三角形程序

23、开发条件组合覆盖的测试用例。4重新编写程序片断1420,用嵌套if-then-else语句替代复合条件。if(a=b)AND (b=c)Then Output(“Equilateral”)Else If(ab)AND(ac)AND(bc)Then Output(“Scalence”)Else Output(“Isosecles”)EndIfEndIf 比较你改写后的程序和上面程序片断的圈复杂度。,作业,5根据第4题的程序片断。对于a=c测试用例(例如a=4,b=5,c=4)会出现什么情况?第14行中的条件利用等式的传递性去掉了a=c这个条件,这样会出现问题吗?6如果我们仔细研究NextDate的实现,就看出一个问题。请看1个月有30天(4、6、9、11月)的CASE子句。没有day=31的特别行为,讨论这种行为是否正确。请就2月对应得day=29取值处理的CASE子句进行类似的讨论。,Q & A,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号