您好,欢迎访问三七文档
白盒测试白盒测试以程序的结构为依据,所有又称为结构测试。早期的白盒测试把注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度。随着测试技术的发展,人们越来越重视对程序执行路径的考察,并且用程序图代替流程图来设计测试用例。为了区分这两种白盒测试技术,以下把前者称为逻辑覆盖测试,后者称为路径测试。一、逻辑覆盖测试逻辑覆盖测试法(LogicCoverageTesting)考察的重点是图中的判定框(菱形框)。因为这些判定若不是与选择结构有关,就是与循环结构有关,是决定程序结构的关键成分。按照对被测程序所作测试的有效程度,逻辑覆盖测试可由弱到强区分为5种覆盖标准:发现错误的能力弱强语句覆盖每条语句至少执行一次判定覆盖每一判定的每个分支至少执行一次条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次判定/条件覆盖同时满足判定覆盖和条件覆盖的要求条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次举例说明:有一个程序段如下:abFTcdFTe(A1)(B=0)(A=2)(x1)x=x/ax=x+1(a)语句覆盖:设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。例如在上图所给出的例子中,正好所有的可执行语句都在路径L1(a-c-e)上,所以选择路径L1设计测试用例,就可以覆盖所有的可执行语句。L1(a-c-e)={(A1)and(B=0)}and{(A=2)or(x/A1)}=(A=2)and(B=0)or{(A1)and(B=0)and(x/A1)}测试用例可以设计为:【(2,0,4),(2,0,3)】覆盖ace【L1】从程序中每个可执行语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面的检验每一个可执行语句。但与后面介绍的其它覆盖相比,语句覆盖是最弱的逻辑覆盖准则。(b)判定覆盖所谓判定覆盖就是设计若干个测试用例,运行被测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。如上例如果选择路径L1(a-c-e)和L2(a-b-d),可得满足要求得测试用例:L2(a-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)】覆盖ace【L1】【(1,1,1),(1,1,1)】覆盖abd【L2】如果选取路径L3(a-b-e)和L4(a-c-d)L3(a-b-e)={(A=1)or(B≠0)}and{(A=2)or(x1)}={(A=1)and(x1)}or{(B≠0)and(A=2)}or{(B≠0)and(x1)}L4(a-c-d)={(A1)and(B=0)}and{(A≠2)and(x/A=1)}还可以得到另一组可用得测试用例:【(2,1,1),(2,1,2)】覆盖abe【L3】【(3,0,3),(3,1,1)】覆盖acd【L4】所有测试用例得取法不唯一。注意有例外情况,例如,如果把上例中第二个判定中的条件x1错写成x1,那么利用上面两组测试用例,仍能得到同样的结果。这表明,只是判定覆盖,还不能保证一定能查出在判断得条件中存在得错误。因此还需要更强的逻辑覆盖准则检验判断内部条件。(c)条件覆盖所谓条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。上例中,我们事先可对所有条件得取值加以标记。例如:对于第一个判断:条件A1取真值为T1,取假值为T1条件B=1取真值为T2,取假值为T2对于第二个判断:条件A=2取真值为T3,取假值为T3条件x1取真值为T4,取假值为T4则可选取测试用例如下:测试用例通过路径条件取值覆盖分支【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4c,e【(1,0,1),(1,0,1)】abd(L2)T1T2T3T4b,d【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4b,e或测试用例通过路径条件取值覆盖分支【(1,0,3),(1,0,4)】abe(L3)T1T2T3T4c,e【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4b,d注意,前一组测试用例不但覆盖了所有判断得取真分支和取假分支,而且覆盖了判断中所有条件得可能取值。但是后一组测试用例虽满足了条件覆盖,但只覆盖了第一个判断得取假分支和第二个判断得取真分支,不满足判定覆盖得要求。为了解决这一矛盾,需要对条件和分支兼顾,有必要考虑以下得判定-条件覆盖。(d)判定-条件覆盖所谓判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件得所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。上例中可以设计如下测试用例:测试用例通过路径条件取值覆盖分支【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4c,e【(1,1,1),(1,1,1)】abd(L2)T1T2T3T4b,d判定-条件覆盖也有缺陷。从表面上来看,它测试了所有条件得取值,但是事实并非如此。因为往往某些条件掩盖了另一些条件。对于条件表达式(A1)and(B=0)来说,若(A1)的测试结果为真,则还有测试(B=0),才能决定表达式得值;而若(A1)的测试结果为假,可以立刻确定表达式得结果为假。这时往往就不再测试(B=0)的取值了。因此,条件(B=0)就没有检查。同样,对于条件表达式(A=2)or(X1)来说,若(A=2)得测试结果为真,就可以立即确定表达式的结果为真。这时,条件(X1)就没有检查。因此,采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。(e)条件组合覆盖所谓条件组合覆盖就是设计足够得测试用例,运行被测程序,使得每个判断得所有可能得条件取值组合至少执行一次。上例中,先对各个判断得条件取值组合加以标记。如下:记①A1,B=0作T1T2,属第一个判断得取真分支;②A1,B≠0作T1T2,属第一个判断得取假分支;③A≯1,B=0作T1T2,属第一个判断得取假分支;④A≯1,B≠0作T1T2,属第一个判断得取假分支;⑤A=2,x1作T3T4,属第二个判断得取真分支;⑥A=2,x≯1作T3T4,属第二个判断得取真分支;⑦A≠2,x1作T3T4,属第二个判断得取真分支;⑧A≠2,x≯1作T3T4,属第二个判断得取假分支;对于每个判断,要求所有可能得条件取值得组合都必须取到。测试用例如下:测试用例通过路径条件取值覆盖分支【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4①,⑤【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4②,⑥【(1,0,3),(1,0,4)】abe(L3)T1T2T3T4③,⑦【(1,1,1),(1,1,1)】abd(L2)T1T2T3T4④,⑧这组测试用例覆盖了所有条件得可能取值的组合,覆盖了所有判断得可取分支,但路径漏掉了L4。测试还不完全。六种白盒子测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组...白盒测试的概述由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的情况下被执行。由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。白盒的测试用例需要做到:·保证一个模块中的所有独立路径至少被使用一次·对所有逻辑值均需测试true和false·在上下边界及可操作范围内运行所有循环·检查内部数据结构以确保其有效性白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。白盒测试的实施步骤:1.测试计划阶段:根据需求说明书,制定测试进度。2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。3.测试执行阶段:输入测试用例,得到测试结果。4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。白盒测试的方法:总体上分为静态方法和动态方法两大类。静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。黑盒测试(black—boxtesting)又称功能测试、数据驱动测试或基于规范的测试。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。黑盒测试首先是程序通常的功能性测试。要求:每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。这些情况包括数据类型和数据值的异常等等。下述几种方法:(a)等价类划分,(b)因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。1.等价类划分等价类划分是一种典型的黑盒测试方法。等价类是指某个输入域的集合。它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。因此我们只要在一个集合中选取一个测试数据即可。等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。这样就可使用少数测试用例检验程序在一大类情况下的反映。在考虑等价类时,应该注意区别以下两种不同的情况:有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。确定等价类有以下几条原则:如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。例如,程序的规范中提到的输入条包括“……项数可以从1到999……”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”。输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。如某程序涉及标识符,其输入条件规定“标识符应以字母开头……”则“以
本文标题:软件工程白盒测试
链接地址:https://www.777doc.com/doc-1991045 .html