第5章白盒与黑盒测试的测试用例设计
51覆盖率的概念覆盖率是用来度量测试完整性的一个手段逻辑覆盖和功能覆盖覆盖率(覆盖率(至少被执行一次的item数)item总数52白盒测试的测试用例设计521逻辑覆盖逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计技术,属白盒测试。最彻底的白盒测试是覆盖程序中的每一条路径,但是由于程序中含有循环,要执行每一条路径是不可能的。因此我们只是希望采用的测试用例覆盖程序内部逻辑的程度尽量高些。为了衡量测试的覆盖程度,需要建立一些作为测试彻底度的定量衡量标准。目前常用的覆盖标准是:(1)语句覆盖;(2)判定覆盖;(3)条件覆盖;(4)判定条件覆盖;(5)条件组合覆盖。)一、引例图1是一个被测试的程序流程图,其中有两个判断,每个判断都包含复合条件的逻辑表达式。abNoYesc
A1a
dB0
XXA
d
No
A2orX1
Yese
XX1
图1测试用例程序流程图其源程序是:mai
floattextfloatAfloatBfloatXifA1B0XXAifA2X1XX1Retur
X下面结合引例,介绍按照不同覆盖标准设计测试用例的方法。二、语句覆盖语句覆盖就是设计若干个测试用例,运行所测的程序,使得每一可执行语句至少执行
f一次。对引例稍作分析就不难发现,只要设计一个能通过路径ace的测试用例即可,程序执行时就可以遍历流程图的所有框。因此,为引例设计满足语句覆盖的测试用例是:A2B0X3A2B0X3从程序执行过程来看,语句覆盖的方法似乎能够比较全面地检验每一个可执行语句。例外:如果在程序中第一个判断的“”均误写成“”,或第二个判断的“X1”均误写成“X0”,用上述的测试用例仍可覆盖所有可执行语句,这说明虽然做到了语句覆盖,但可能发现不了逻辑运算中出现的错误。因此这种覆盖实际是一个最弱的覆盖标准。三、判定覆盖判定覆盖就是设计若干个测试用例,使程序中的每个判断至少出现一次“真值”和一次“假值”,即程序中的每个分支都至少执行一次。对本引例,为在语句覆盖的基础上达到判定覆盖标准,要使程序流程能经过路径acd和abe或路径ace和abd,为此可设计两个满足要求的测试用例:A3B0X1执行)A3B0X1(沿acd执行)A2B1X3执行)A2B1X3(沿abe执行)判定覆盖比语句覆盖严格,因为它使得每一个判断都能获得每一种可能的结果,从而使每个语句都执行了。例外:(1)若将第二个判断的“X1”均误写成“X1”,用上述的测试用例仍能得到相同的结果;(2)上述r