软件工程--白盒测试技术 ppt课件
- 格式:ppt
- 大小:4.52 MB
- 文档页数:147
白盒测试白盒测试以程序的结构为依据,所有又称为结构测试;早期的白盒测试把注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度;随着测试技术的发展,人们越来越重视对程序执行路径的考察,并且用程序图代替流程图来设计测试用例;为了区分这两种白盒测试技术,以下把前者称为逻辑覆盖测试,后者称为路径测试;一、逻辑覆盖测试逻辑覆盖测试法Logic Coverage Testing考察的重点是图中的判定框菱形框;因为这些判定若不是与选择结构有关,就是与循环结构有关,是决定程序结构的关键成分;按照对被测程序所作测试的有效程度,逻辑覆盖测试可由弱到强区分为5种覆盖标有一个程序段如下:(a)L1a->c->e 上,;L1a-=,语句覆盖是最弱的逻(b),使得程序中每个判断的取真分支和取假分支至少经历一次;判定覆盖又称为分支覆盖;如上例如果选择路径L1a->c->e和L2a->b->d,可得满足要求得测试用例:L2a->b->d={A<=1 or B≠0 } and {A≠2 and x<=1}= A<=1 and x<=1 or { B≠0 and A≠2 and x<=1}测试用例可以设计为:2,0,4,2,0,3覆盖aceL11,1,1,1,1,1覆盖abdL2如果选取路径L3a->b->e和L4a->c->dL3a->b->e={A<=1 or B≠0 } and {A=2 or x>1}={ A<=1 and x>1} or { B≠0 and A=2 } or { B≠0 and x>1}L4a->c->d={A>1 and B=0 } and {A≠2 and x/A<=1}还可以得到另一组可用得测试用例:2,1,1,2,1,2覆盖abeL33,0,3,3,1,1覆盖acdL4所有测试用例得取法不唯一;注意有例外情况,例如,如果把上例中第二个判定中的条件x>1错写成x<1,那么利用上面两组测试用例,仍能得到同样的结果;这表明,只是判定覆盖,还不能保证一定能查出在判断得条件中存在得错误;因此还需要更强的逻辑覆盖准则检验判断内部条件;(c)条件覆盖所谓条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次;上例中,我们事先可对所有条件得取值加以标记;例如:对于第一个判断:条件A>1取真值为T1,取假值为T1条件B=1取真值为T2,取假值为T2对于第二个判断:条件A=2取真值为T3,取假值为T3条件x>1取真值为T4,取假值为T4断中所有条件得可能取值;但是后一组测试用例虽满足了条件覆盖,但只覆盖了第一个判断得取假分支和第二个判断得取真分支,不满足判定覆盖得要求;为了解决这一矛盾,需要对条件和分支兼顾,有必要考虑以下得判定-条件覆盖;(d)判定-条件覆盖所谓判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件得所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次;上例中可,但是事实并非如此;因为往往某些条件掩盖了另一些条件;对于条件表达式A>1and B=0来说,若A>1的测试结果为真,则还有测试B=0,才能决定表达式得值;而若A>1的测试结果为假,可以立刻确定表达式得结果为假;这时往往就不再测试B=0的取值了;因此,条件B=0就没有检查;同样,对于条件表达式A=2or X>1来说,若A=2得测试结果为真,就可以立即确定表达式的结果为真;这时,条件X>1就没有检查;因此,采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来;(e)条件组合覆盖所谓条件组合覆盖就是设计足够得测试用例,运行被测程序,使得每个判断得所有可能得条件取值组合至少执行一次;上例中,先对各个判断得条件取值组合加以标记;如下:记① A>1,B=0 作T1 T2,属第一个判断得取真分支;② A>1,B≠0 作T1 T2,属第一个判断得取假分支;③ A≯1,B=0 作T1 T2,属第一个判断得取假分支;④ A≯1,B≠0 作T1 T2,属第一个判断得取假分支;⑤ A=2,x>1 作T3 T4,属第二个判断得取真分支;⑥ A=2,x≯1 作T3 T4,属第二个判断得取真分支;⑦ A≠2,x>1 作T3 T4,属第二个判断得取真分支;⑧ A≠2,x≯1 作T3 T4,属第二个判断得取假分支;,但路径漏掉了L4;测试还不完全;六种白盒子测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组...白盒测试的概述由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比;由于我们经常相信某逻辑路径不可能被执行, 而事实上,它可能在正常的情况下被执行;由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试;白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试;白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的;白盒的测试用例需要做到:·保证一个模块中的所有独立路径至少被使用一次·对所有逻辑值均需测试 true 和 false·在上下边界及可操作范围内运行所有循环·检查内部数据结构以确保其有效性白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致;白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试;白盒测试的实施步骤:1.测试计划阶段:根据需求说明书,制定测试进度;2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例;3.测试执行阶段:输入测试用例,得到测试结果;4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误;白盒测试的方法:总体上分为静态方法和动态方法两大类;静态分析是一种不通过执行程序而进行测试的技术;静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义;动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后 , 对软件系统行为的分析;动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行;它显示了一个系统在检查状态下是正确还是不正确;在动态分析技术中,最重要的技术是路径和分支测试;下面要介绍的六种覆盖测试方法属于动态分析方法;黑盒测试black—box testing又称功能测试、数据测试或基于规范的测试;用这种方法进行测试时,被测程序被当作看不见内部的黑盒;在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性;因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对;完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”;由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试;黑盒测试首先是程序通常的功能性测试;要求:每个特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能包括精度、时间、容量等;不仅要考核“程序是否做了该做的”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常;这些情况包括数据类型和数据值的异常等等;下述几种方法:a等价类划分,b因果图方法,c边值分析法,d猜错法,e随机数法,就是从更广泛的角度来进行黑盒测试;每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集;1.等价类划分等价类划分是一种典型的黑盒测试方法;等价类是指某个输入域的集合;它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的;因此我们只要在一个集合中选取一个测试数据即可;等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例;这样就可使用少数测试用例检验程序在一大类情况下的反映;在考虑等价类时,应该注意区别以下两种不同的情况:有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合;在具体问题中,有效等价类可以是一个,也可以是多个;无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合;对于具体的问题,无效等价类至少应有一个,也可能有多个;确定等价类有以下几条原则:如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类;例如,程序的规范中提到的输入条包括“……项数可以从1到999……”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”;输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类;如某程序涉及标识符,其输入条件规定“标识符应以字母开头……”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类;如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小等价类;输入条件有效等价类无效等价类;;;;;;;;;;;; ;;;;;;;;;;;; ;;;;;;;;;;;;根据已列出的等价类表,按以下步骤确定测试用例:为每个等价类规定一个唯一的编号;设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类;重复这一步,最后使得所有有效等价类均被测试用例所覆盖;设计一个新的测试用例,使其只覆盖一个无效等价类;重复这一步,使所有无效等价类均被覆盖;这里强调每次只覆盖一个无效等价类;这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视;等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例;后面介绍的边值分析法可以弥补这一缺点;2.因果图等价类划分法并没有考虑到输入情况的各种组合;这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略;采用因果图方法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规范的描述中存在什么问题;利用因果图导出测试用例需要经过以下几个步骤:分析程序规范的描述中哪些是原因,哪些是结果;原因常常是输入条件或是输入条件的等价类;结果是输出条件;分析程序规范的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”;由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的;为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件;把因果图转换成判定表;把判定表的每一列写成一个测试用例;3.边值分析法边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的方法;典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等;边值分析法不是一类找一个例子的方法,而是以边界情况的处理作为主要目标专门设计测试用例的方法;另外,边值分析不仅考查输入的边值,也要考虑输出的边值;这是从人们的经验得出的一种有效方法;人们发现许多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高;用边值分析法设计测试用例时,有以下几条原则:如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例;如有规范“某文件可包含l至255”个记录……“,则测试用例可选1和255及0和256等;针对规范的每个输出条件使用原则〔a〕;如果程序规范中提到的输入或输出域是个有序的集合如顺序文件、表格等就应注意选取有序集的第一个和最后一个元素作为测试用例;分析规范,尽可能找出可能的边界条件;一个典型的边值分析例子是三角形分类程序;选取a,b,c构成三角形三边,“任意两边之和大于第三边”为边界条件;边值分析相等价类划分侧重不同,对等价类划分是一个补充;如上述三角形问题,选取a=3,b=4,c=5,a=2,b=4,c=7则覆盖有效和无效等价类;如果能在等价类划分中注入边值分析的思想;在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例;4.猜错法猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的;一个采用两分法的检索程序,典型地可以列出下面几种测试情况:被检索的表只有一项或为空表;表的项数恰好是2的幂次;表的项数比2的幂次多1等;猜错法充分发挥人的经验,在一个测试小组中集思广益,方便实用,特别在软件测试基础较差的情况下,很好地组织测试小组也可以有外来人员进行错误猜测,是有效的测试方法;5.随机数法即测试用例的参数是随机数;它可以自动生成,因此自动化程度高;使用大量随机测试用例测试通过的程序会提高用户对程序的信心;但其关键在于随机数的规律是否符合使用实际;。