白盒测试逻辑覆盖法

本文探讨了软件测试中的语句覆盖和分支覆盖率,指出100%语句覆盖并不等同于100%分支覆盖率。通过实例解释了即使语句覆盖达到100%,分支覆盖率仍可能低于100%的情况。同时,介绍了软件工程中不同级别的逻辑覆盖测试,如判定覆盖、条件覆盖和路径覆盖等,强调在实际测试中通常采用条件组合覆盖并补充路径覆盖以确保更全面的测试效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看新定的测试覆盖率标准,有点晕。

1、语句覆盖率达到100%
2、分支覆盖率不低于70%
开始觉得,这两个限制有点矛盾,语句覆盖率都达到100%了,分支覆盖率还没达到100%?答案:是。举个例子说明:

if A and B then Action1
if C or D then Action2

就拿这个来说,A=true B=true C=true,语句覆盖率是100%,可分支覆盖率是50%,并没有走false的分支。从而引发一个理解,分支并不一定是实际的代码,而是逻辑上的分支,而分支覆盖率并不是指的是对实际代码句的覆盖。

温习一下软件工程里测试逻辑覆盖的分类:

(1)语句覆盖。
为了个提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。
(2)判定覆盖。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。
(3)条件覆盖。
条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
(4)判定/条件测试。
该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
(5)条件组合覆盖。
条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。
(6)路径覆盖。
路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。
在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。

### 白盒测试中的逻辑覆盖法 #### 逻辑覆盖概述 逻辑覆盖是一种基于程序内部逻辑结构的测试方法,通过检查程序控制流图中的不同路径和条件组合来评估代码的质量。这种方法不仅考虑了语句的执行情况,还深入到了决策点的选择过程。 #### 不同级别的逻辑覆盖标准 ##### 1. 语句覆盖 (Statement Coverage) 这是最基本的覆盖级别,只要求每条可执行语句至少被执行一次。然而,这种简单的覆盖方式可能无法发现某些隐藏错误,因为它并不关心分支的结果如何影响后续流程[^1]。 ##### 2. 判定/分支覆盖 (Decision/Branch Coverage) 除了确保所有语句都被访问外,还需要验证每个判断表达式的真假两种可能性都得到检验。这意味着不仅要遍历所有的节点还要经历各个边上的转移操作。 ##### 3. 条件覆盖 (Condition Coverage) 此等级进一步细化到构成复合布尔表达式的单个子表达式层面,即保证组成复杂命题的每一个简单谓词都要取过真值也要取假值。这有助于识别那些仅靠判定覆盖难以察觉的问题所在之处。 ##### 4. 多重条件覆盖 (Multiple Condition Coverage, MCC) 为了更彻底地检测潜在缺陷,在满足上述三种要求的基础上增加了对多个独立输入变量之间相互作用关系进行全面考察的要求。具体而言就是让每一组不同的条件组合都能被实际运行所触发。 ##### 5. 路径覆盖 (Path Coverage) 最高层次的目标是使程序内的任何一条可行路径都能够按照预定顺序依次走过一遍;理论上讲如果实现了这一点也就意味着其他形式的覆盖自然得到了保障。不过由于循环等因素的存在使得完全达到这一目标往往十分困难甚至不可能实现。 ```python def example_function(a, b): result = False if a > 0 and b < 10: # 需要测试两个条件a>0 和b<10 的各种组合 result = True elif not (a == 0 or b >= 5): # 测试not、==、or以及>=运算符的不同结果 result = "Special Case" return result ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值