更新时间:2022-08-12 来源:黑马程序员 浏览量:
逻辑覆盖法是白盒测试最常用的测试方法,它包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖5种,今天先来介绍一下语句覆盖。
语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式。语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。
为了让读者更深刻地理解语句覆盖,下面结合一段小程序介绍语句覆盖方法的执行,程序伪代码如下所示。
IF x>0 AND y<0 //条件1 z=z-(x-y) IF x>2 OR z>0 //条件2 z=z+(x+y)
在上述代码中,AND表示逻辑运算&&,OR表示逻辑运算Ⅱ,第1~2行代码表示如果x>0成立并且y<0成立,则执行z=z-(x-y)语句;第3~4行代码表示如果x>2成立或者z>0成立,则执行z=z+(x+y)语句。该段程序的流程图如图3-1所示。
在图3-1中,a、b、c、d、e表示程序执行分支,在语句覆盖测试用例中,使程序中每个可执行语句至少被执行一次。根据图3-1程序流程图中标示的语句执行路径设计测试用例,具体如下。
Test1: x=1 y=-1 z=2
图3-1 程序执行流程图
执行上述测试用例,程序运行路径为acd。可以看出程序中acd路径上的每个语句都能被执行,但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不能进行全面覆盖,因此,语句覆盖是弱覆盖方法。
语句覆盖虽然可以测试执行语句是否被执行到,但却无法测试程序中存在的逻辑错误,例如,如果上述程序中的逻辑判断符号“AND”误写成了“OR”,使用测试用例Test1同样可以覆盖acd路径上的全部执行语句,但却无法发现错误。同样,如果将x>0误写成x>=0,使用同样的测试用例Test1也可以执行acd路径上的全部执行语句,但却无法发现x>=0的错误。
语句覆盖无须详细考虑每个判断表达式,可以直观地从源程序中有效测试执行语句是否全部被覆盖,由于程序在设计的时候,语句之间存在许多内部逻辑关系,而语句覆盖不能发现其中存在的缺陷,因此语句覆盖并不能满足白盒测试的测试所有逻辑语句的基本需求。