逻辑覆盖
Posted qiuye98
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逻辑覆盖相关的知识,希望对你有一定的参考价值。
参考内容:
百度词条
https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E8%A6%86%E7%9B%96/3231015?fr=aladdin#1_1
逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。
逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。 [1]
根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为:
1.语句覆盖(SC)
2. 判定覆盖(DC)
3. 条件覆盖(CC)
4. 条件/判定覆盖(CC)
5. 条件组合覆盖(CDC)
6.路径覆盖
7.修正判定条件覆盖(MCDC)
语句覆盖
语句覆盖 SC(Statement Coverage),就是设计若干个测试用例,运行被测程序,使得程序中每一可执行语句至少执行一次。测试用例越少越好。语句覆盖在测试中主要发现缺陷或错误语句。
覆盖率公式:语句覆盖率=被评价到的语句数量/可执行的语句总数*100%
缺点:对程序执行逻辑的覆盖很低。
判定覆盖(分支覆盖)
判定覆盖DC(Decision coverage),有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少评价一次。
覆盖率=被评价到的判定路径数量/判定路径的总数*100% 。
判定覆盖的缺点:判定覆盖虽然把程序所有分支均覆盖到了,但其主要对整个表达式最终取值进行度量,忽略了表达式内部取值。
条件覆盖
条件覆盖CC(Condition Coverage),设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
覆盖率公式:条件覆盖率=被评价到的条件取值的数量/条件取值的总数*100%
缺点:只考虑到每个判定语句中的每个表达式,没有考虑到各个条件分支(或者涉及不到全部分支),即不能够满足判定覆盖。
判定条件覆盖
判定条件覆盖CDC(Condition/ Decision Coverage),设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。
覆盖率公式: 条件判定覆盖率=被评价到的条件取值和判定分支的数量/(条件取值总数+判定分支总数)
缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误。
补充:修正判定条件覆盖
修正判定条件覆盖单元的入口与出口必须至少被调用一次,程序中判断的每一个分支必须至少被执行一次。对于程序中通过逻辑运算(AND,OR等)组成判断的基本布尔条件,每个条件必须取遍所有可能的值且每一个条件对判断的结果具有独立的作用。
条件组合覆盖
条件组合覆盖,也称多条件覆盖MCC (Multiple Condition Coverage),设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
这种方法包含了“分支覆盖”和“条件覆盖”的各种要求。满足条件组合覆盖一定满足判定覆盖、条件覆盖、判定条件覆盖。
覆盖率的公式:条件组合覆盖率=被评价到的条件取值组合的数量/条件取值组合的总数
缺点:判定语句较多时,条件组合值比较多。
路径覆盖
路径覆盖,设计足够多的测试用例,使得执行程序所有可能的路径。
覆盖率的公式:路径覆盖率=被执行到的路径数/程序中总的路径数。
优点:路径覆盖是覆盖率最高的一种覆盖技术。
测试步骤:
1. 将程序流程图转换成控制流图;
2. 经过语法分析求的路径表达式;
3. 生成路径图;
4. 进行路径编码;
5. 经过译码得到执行的路径;
6. 通过路径枚举产生特定路径测试用例。
修正条件判定覆盖(MC/DC)
每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;程序的判定被分解为通过逻辑操作符(and,or)连接的bool条件,每个条件对于判定的结果值是独立的。
以上是关于逻辑覆盖的主要内容,如果未能解决你的问题,请参考以下文章