白盒与黑盒测试的测试用例设计.docVIP

  • 4
  • 0
  • 约1.39万字
  • 约 16页
  • 2019-05-08 发布于江西
  • 举报
第5章 白盒与黑盒测试的测试用例设计 5.1 覆盖率的概念 覆盖率是用来度量测试完整性的一个手段 逻辑覆盖和功能覆盖 覆盖率=(至少被执行一次的item数)/item总数 5.2 白盒测试的测试用例设计 5.2.1 逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计技术,属白盒测试。最彻底的白盒测试是覆盖程序中的每一条路径,但是由于程序中含有循环,要执行每一条路径是不可能的。因此我们只是希望采用的测试用例覆盖程序内部逻辑的程度尽量高些。为了衡量测试的覆盖程度,需要建立一些作为测试彻底度的定量衡量标准。目前常用的覆盖标准是: 语句覆盖; 判定覆盖; 条件覆盖; 判定/条件覆盖; 条件组合覆盖。 一、引例 图1是一个被测试的程序流程图,其中有两个判断,每个判断都包含复合条件的逻辑表达式。 a (A1)and(B=0) b No Yes c (A1)and(B=0) X=X/A X=X/A d No Yes e X=X+1(A=2)or(X1) X=X+1 (A=2)or(X1) 图1 测试用例程序流程图 其源程序是: main() { float text(float A, float B, float X); if(A1)(B==0) X=X/A; if(A==2)||(X1) X=X+1; Return(X); } 下面结合引例,介绍按照不同覆盖标准设计测试用例的方法。 二、语句覆盖 语句覆盖就是设计若干个测试用例,运行所测的程序,使得每一可执行语句至少执行一次。 对引例稍作分析就不难发现,只要设计一个能通过路径ace的测试用例即可,程序执行时就可以遍历流程图的所有框。因此,为引例设计满足语句覆盖的测试用例是: [A=2,B=0,X=3] 从程序执行过程来看,语句覆盖的方法似乎能够比较全面地检验每一个可执行语句。 例外:如果在程序中第一个判断的“”均误写成 “|”,或第二个判断的“X1”均误写成“X0”,用上述的测试用例仍可覆盖所有可执行语句,这说明虽然做到了语句覆盖,但可能发现不了逻辑运算中出现的错误。因此这种覆盖实际是一个最弱的覆盖标准。 三、判定覆盖 判定覆盖就是设计若干个测试用例,使程序中的每个判断至少出现一次“真值”和一次“假值”,即程序中的每个分支都至少执行一次。 对本引例,为在语句覆盖的基础上达到判定覆盖标准,要使程序流程能经过路径acd和abe或路径ace和abd,为此可设计两个满足要求的测试用例: [A=3,B=0,X=1](沿acd执行) [A=2,B=1,X=3](沿abe执行) 判定覆盖比语句覆盖严格,因为它使得每一个判断都能获得每一种可能的结果,从而使每个语句都执行了。 例外:(1)若将第二个判断的“X1”均误写成“X1”,用上述的测试用例仍能得到相同的结果;(2)上述的测试用例在沿路径abd执行时,并不能检查X的值是否保持一致。 这表明,只用判定覆盖还不能保证一定能检查出所有的错误。因此,需要更强的逻辑覆盖标准去检验判断内部条件。 三、条件覆盖 条件覆盖是指利用若干个测试用例,使被测试的程序中,对应每个判断中每个条件的所有可能情况均至少执行一次。 在本引例中,共有4个判断条件: A1、B=0、A=2、X1 为达到条件覆盖标准,需要有足够的测试用例以形成:在a点出现有:A1、A≤1、B=0、B≠0的情况,在b点出现有:A=2、A≠2、X1、X≤1的情况出现。为此可以设计两个测试用例以满足这一标准: [A=2,B=0,X=4](沿ace执行) [A=1,B=1,X=1](沿abd执行) 例外: [A=1,B=0,X=3] (沿abd执行) [A=2,B=1,X=1] (沿abd执行) 它满足条件覆盖标准,却不满足判定覆盖。为解决这种例外,可采用下面介绍的判定/条件覆盖标准。 四、判定/条件覆盖 判定/条件覆盖就是设计足够多的测试用例,使得程序中每个判断条件的所有可能的结果至少取到一次,又使每次判断的每个分支至少通过一次。 可设计两个满足要求的测试用例: [A=2,B=0,X=4](沿ace执行) [A=1,B=1,X=1](沿abd执行) [A=2,B=1,X=1](沿abe执行) 判定/条件覆盖仍有缺陷,因为在程序执行过程中,某些条件掩盖了另一些条件。例如,对条件表达式(A1)(B=0),取A=1、B=0,此时(A1)为假,则目标程

文档评论(0)

1亿VIP精品文档

相关文档