Bootstrap

语句覆盖和判定覆盖测试设计-实验七例题

目录

语句覆盖

判定覆盖

实验内容

实验步骤

1. 测试分析

2. 测试设计

3. 测试设计


语句覆盖

        语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式。语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。为了让大家更深刻地理解语句覆盖,下面结合一段小程序介绍语句覆盖方法的执行,程序伪代码如下所示。

IF x>0 AND y<0 #条件1
    z=z-(x-y)
IF x>0 OR z>0 #条件2
    z=z+(x+y)

        在上述代码中,AND 表示逻辑运算&&,OR 表示逻辑运算||,第1~2 行代码表示如果x>0 成立并且 y2 成立或者z>0 成立,则执行 z=z+(x+y)语句。该段程序的流程图如图 1 所示。

        在图 1 中,a、b、c、d、e 表示程序执行分支,在语句覆盖测试用例中,使程序中每个可执行语句至少被执行一次。根据图 1 程序流程图中标示的语句执行路径设计测试用例,具体如下。         Test1:x=1 y=-1 z=2

        执行上述测试用例,程序运行路径为 acd。可以看出程序中 acd 路径上的每个语句都能被执行,但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不能进行全面覆盖,因此,语句覆盖是弱覆盖方法。

        语句覆盖虽然可以测试执行语句是否被执行到,但却无法测试程序中存在的逻辑错误,例如,如果上述程序中的逻辑判断符号“AND”误写成了“OR”,使用测试用例Test1 同样可以覆盖 acd 路径上的全部执行语句,但却无法发现错误。同样,如果将x>0 误写成x>=0,使用同样的测试用例 Test1 也可以执行 acd 路径上的全部执行语句,但却无法发现x>=0 的错误。

        语句覆盖无须详细考虑每个判断表达式,可以直观地从源程序中有效测试执行语句是否全部被覆盖,由于程序在设计时,语句之间存在许多内部逻辑关系,而语句覆盖不能发现其中存在的缺陷,因此语句覆盖并不能满足白盒测试的测试所有逻辑语句的基本需求。


判定覆盖

        判定覆盖(Decision Coverage)又称为分支覆盖,其原则是设计足够多的测试用例,在测试过程中保证每个判定至少有一次为真值,有一次为假值。判定覆盖的作用是使真假分支均被执行,虽然判定覆盖比语句覆盖测试能力强,但仍然具有和语句覆盖一样的单一性。以图 1 及其程序为例,设计判定覆盖测试用例,如表 1 所示。

        由表 1 可以看出,这 4 个测试用例覆盖了 acd、abd、ace、abe 4 条路径,使得每个判定语句的取值都满足了各有一次“真”与“假”。相比于语句覆盖,判定覆盖的覆盖范围更广泛。判定覆盖虽然保证了每个判定至少有一次为真值,有一次为假值,但是却没有考虑到程序内部的取值情况,例如,测试用例 test4,没有将 x>2 作为条件进行判断,仅仅判断了z>0 的条件。

        判定覆盖语句一般是由多个逻辑条件组成的,如果仅仅判断测试程序执行的最终结果而忽略每个条件的取值,必然会遗漏部分测试路径,因此,判定覆盖也属于弱覆盖。 


实验内容

        针对保险产品投保业务逻辑代码进行分析,运用语句覆盖和判定覆盖法进行测试用例设计。

        某个人税收优惠型保险产品 A/B1/B2/C 款承保规则:

(1)凡 16 周岁以上且投保时未满法定退休年龄的(男性为 59 周岁、女性为54 周岁,后续将随国家相关法规做相应调整),适用商业健康保险税收优惠政策的纳税人,可作为本合同的被保险人。保险公司根据被保险人是否参加公费医疗或基本医疗保险确定适用条款。

(2)被保人为健康体,或者参加医疗保险的,可选择 A 款、B1 款或B2 款。

(3)未参加公费医疗的非健康体(有既往症)只能选择 C 款。

        以下为个人税收优惠型保险产品承保的部分伪代码实现:

实验步骤

1. 测试分析

(1)根据保险产品的承保业务描述,分析产品承保流程,包括主流程、分支流程以及正常流程、异常流程。

(2)模拟保险产品承保场景:触发允许产品承保的条件,不同条件是否走不同的承保流程。 (3)数据项检查:数据项的计算规则,数据项后台判断逻辑。

2. 测试设计

根据产品承保代码,设计出程序流程图,并对程序流程图做节点标记。

分析伪代码得到两个判定:

判定 A:(性别="男"AND 16<年龄<59)OR(性别="女"AND 16<年龄<54)

判定 B:健康体 OR 有医疗保险 

3. 测试设计

        根据业务场景与流程逻辑判定,运用语句覆盖法进行用例设计,运用判定覆盖法来进行用例设计。

        语句覆盖是一个比较弱的逻辑覆盖标准,通过选择足够多的测试用例,使得被测试程序中的每个语句至少被执行一次。根据如图 1 所示的流程图,为使程序中的每个语句至少执行一次,只需设计两个测试用例,覆盖语句 A、B、C、E,即覆盖判定 A“成立”、判定B“成立”或“不成立”各被覆盖一次,如表 1 所示。

 

        接下来我们运用判定覆盖法来进行用例设计。判定覆盖又称为分支覆盖,判定覆盖语句覆盖的标准稍强一些,它是指通过设计足够多的测试用例,使得被测试程序中的每个判定(即上述判定 A、判定 B)都获得一次“真”“假”值,如表 2 所示。 

 

;