软件测试实践教程电子白盒测试剖析.ppt
文本预览下载声明
第2章 白盒测试 2.1 白盒测试概述 2.2 白盒测试的测试用例设计方法 2.3 白盒测试的典型案例 2.4 白盒测试的工具 2.1 白盒测试概述 白盒测试又称为结构测试,主要是根据被测程序的内部结构设计测试用例。白盒测试根据测试方法可以分为静态白盒测试和动态白盒测试。 静态白盒测试是指在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。 动态白盒测试是指测试运行中的程序,并利用查看代码功能和实现方式得到的信息来确定哪些需要测试,哪些不要测试,如何开展测试,从而设计和执行测试,找出软件缺陷的过程。 2.2 白盒测试的测试用例设计方法 白盒测试的测试用例设计方法主要为逻辑覆盖测试,逻辑覆盖测试包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和路径覆盖 . 2.3 白盒测试的典型案例 例1 If (a1) and (b=0) then x=x/a if(a=2) or (x1) then x=x+1 语句覆盖 选择足够的测试用例,使程序中的可执行语句至少执行一次。 例子中要设计一个能通过ace的测试用例即可,a=2 b=0 x=3 语句覆盖较弱,测试不充分,无法发现程序中某些逻辑运算符和逻辑条件的错误。 判定覆盖 执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”和“假”值,或者说使得程序中取“真”分支和取“假”分支至少经历一次。 例子:路径ace和abd,或通过路径acd和abe,即可达到判定覆盖标准。 X1错写为x1无法测试出来。 条件覆盖 设计若干测试用例,要使每个每个判定中每个条件的可能取值至少满足一次。 例子:第一个判定:a1,为真,记为t1; a1,为假,记为-t1; b=0,为真,记为t2; b=0 ,为假,记为-t2; 第二个判定:a=2,为真,记为t3; a=2,为假,记为-t3; x1,为真,记为t4; x1 ,为假,记为-t4; 下面第一组测试用例既判定覆盖,又条件覆盖;第二组测试用例条件覆盖,但没有判定覆盖。 判定/条件覆盖 条件组合覆盖 执行足够的测试用例,使得每个判定种条件的各种可能组合都至少出现一次。 例子中的条件组合: 1)a1,b=0 记为t1,t2 2)a1,b0 记为t1,-t2 3)a=1,b=0 记为-t1,t2 4)a = 1,b0 记为-t1,-t2 5) a = 2,x1记为t3,t4 6) a = 2,x=1记为t3,-t4 7) a 2,x1记为-t3,t4 8) a 2,x=1记为-t3,-t4 路径覆盖 设计足够多测试用例,要求覆盖程序中所有可能的路径。 例子: 路径1:ace 路径2:abd 路径3:abe 路径4:acd 测试用例 2.3 白盒测试的典型案例 例2 void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x3)(z10) ) { k=x*y-1; j=sqrt(k); } //语句块1 if ( (x==4)||(y5) ) { j=x*y+10; } //语句块2 j=j%3; //语句块3 } 语句覆盖 要实现DoWork函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的所有可执行语句。 测试用例输入为:{ x=4、y=5、z=5 } 程序执行的路径是:abd 分析: 语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。例如在第一个判定((x3)(z10))中把“”错误的写成了“||”,这时仍使用该测试用例,则程序仍会按照流程图上的路径abd执行。可以说语句覆盖是最弱的逻辑覆盖准则。 判定覆盖 要实现DoWork函数的判定覆盖,需要设计两个测试用例。 测试用例的输入为:{x=4、y=5、z=5};{x=2、y=5、z=5} 程序执行的路径分别是:abd;ace 分析: 上述两个测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误。例如把第二个判定中的条件y5错误写为y5,使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要有更强的逻辑覆盖准则去检验判定内的条件。 条件覆盖 在实际程序代码中,一个判定中通常都包含若干条件。 条件覆盖的目的是设计若干测试用例
显示全部