白盒测试覆盖率
软件的测试覆盖率,并不仅仅出现在我们熟知的IT软件行业。相反地,由于汽车软件的特殊性,对于软件测试覆盖率方面比别的行业更为严格。通过测试覆盖率我们可以知道测试是否充分,还存在哪些潜在的风险和弱点,指导测试人员有目的补充增加覆盖率的测试用例。当然,也不用一味的追求100%的覆盖率,因为这不仅提高了成本,而且即便覆盖率达到了100%也仍会有未被用例设计到潜在BUG。
软件测试覆盖率
-
定义:覆盖率是用来度量测试完整性的一个手段,同时也是测试技术有效性的一个度量。
-
计算:覆盖率 =(至少被执行一次的item数)/item的总数通过覆盖率数据,可以检测我们的测试是否充分分析出测试的弱点在哪方面指导我们设计能够增加覆盖率的测试用例,有效提高测试质量,但是测试用例设计不能一味追求覆盖率,因为测试成本随覆盖率的增加而增加。
覆盖率按照测试方法大体上可以划分为三大类,即白盒覆盖(white-Box Coverage)、灰盒覆盖(Gray-Box coverage)、黑盒覆盖(Black-Box Coverage)。白盒覆盖率中使用的最常见的就是逻辑覆盖率(Logical Coverage ),也叫代码覆盖率(Code Coverage)或者结构化覆盖率(Structural Coverage),我们常见的逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
C0 语句覆盖
-
定义:在测试时,运行被测程序后,程序中被执行的可执行语句的比率。
-
计算公式:语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句总数)
-
100%语句覆盖率含义:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。语句覆盖可以检验每个可执行语句,但是即使语句覆盖率达到了100%,也不能发现其中的逻辑错误。
C1 分支/判定覆盖
-
定义:在测试时,运行被测程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率。
-
计算公式:判定覆盖率=(判定结果被评价的次数)/(判定结果的总数)
-
100%条件覆盖率含义:在测试时,首先设计若干个测试用例,然后运行测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。若判定覆盖达到100%,则语句覆盖必为100%。分支/判定覆盖能发现逻辑错误,但不能发现判定的条件中的错误。
C2 条件覆盖
-
定义:在测试时,运行被测程序后,程序中所有判断语句中每个条件的可能取值(真值和假值)出现过的比率。
-
计算公式:条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)
-
100%条件覆盖率含义:在测试时,首先设计若干个测试用例,然后运行被测试程序,要使每个判断中每个条件的可能取值至少满足一次。覆盖条件的测试用例不一定覆盖判定。
条件-判定覆盖(Condition/Decision Coverage)
-
定义:在测试时,运行被测程序后,程序中所有判断语句中每个条件的可能取值(真值和假值)和每个判断本身的判定结果(为真为假)出现的比率。
-
计算公式:判定-条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值的总数+判定结果的总数)
-
100%判定-条件覆盖率含义:设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能结果至少执行一次。换言之,即是要求各个判断的所有的可能的取值组合至少执行一次。判定-条件覆盖率实际上就是判定覆盖率和条件覆盖率的组合。采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。
例如:if A and (B or C) then⋯ else⋯ 测试这条语句使用C/DC方法可以从表l(具有3个条件的真值表)中选择它的测试集为{ TTF,FFT},分析如下:当 ,B和C的值依次分别取T,T,F时判定A and(B or C)的值为T;当将A,B和C的值依次分别取F,F,T时,判定A and (B or C)的值为F;在测试中,3个条件A,B,C的所有可能取值T、F,都被测试,而判定 A and (B or C)的所有可能取值T和F也都被执行了一次,由此说明此测试集满足C/DC方法的要求,是C/DC方法的其中一个测试集合.
C3 条件组合覆盖
-
定义:在测试时,运行被测程序后,所有语句中原子条件所有的可能的取值结果组合出现过的比率。
-
计算公式:条件组合覆盖率=(至少被执行一次的条件组合)/(总的可能的条件组合数)
-
100%条件组合覆盖率含义:设计足够的测试用例,使得判断中条件的各种可能组合至少出现过一次。若条件组合覆盖率为100%,则语句覆盖率、判定覆盖率、条件覆盖率和判定-条件覆盖率必为100%。
C4 路径覆盖
-
定义:在测试时,运行被测程序后,程序中所有可能的路径被执行的比率。
-
计算公式:路径覆盖率=(至少被执行一次的路径数)/(总的路径数)
-
100%路径覆盖率含义:设计足够的测试用例,要求覆盖程序中所有可能的路径。路径覆盖比判定条件覆盖更强,但是不能包含判定条件覆盖。若路径覆盖率为100%,则语句覆盖率、判定覆盖率必为100%。
相互关系

路径覆盖在该图无法表示
从上例可以得出,单独采用任何一种逻辑覆盖方法都不能完全覆盖所有的测试用例。在白盒测试中,100%的语句覆盖C0是非常容易实现的,只能作为最弱标准。每一种覆盖类型,都针对特定的代码错误敏感。要想发现程序中更深的错误,就需要用更深的覆盖率测试方法!

在实际白盒测试中,就要先从代码分析,根据不同的代码逻辑规则、语句执行情况,选用适当的方法覆盖。将不同的设计方法结合起来,交叉使用,以实现最佳的测试用例输出。在下一篇,我将针对大家关心的C/DC以及MC/DC测试覆盖率进行介绍~
在本文的最后,给大家推荐两个非常优秀的公众号,两位都是汽车电子领域的大拿,千万不要太感谢我哦。
打浦桥程序员
一个专注于Matlab/Simulink知识分享、工具开发的能人!至于是不是在打浦桥工作,那就不知道了哈~❶ 知乎:打浦桥程序员❷ 知乎专栏:MATLAB如何

汽车ECU网络诊断技术
一位从事于汽车通讯诊断/网络管理的专家!在UDS、OBD等方面有着丰富的经验!❶ 知乎:张丁❷ 知乎专栏:汽车控制器(ECU)网络诊断技术交流


公众号:QCECUSJ
测试 · 目录
上一篇 下一篇
各种软件测试概念的区别 何为 MC-DC 测试 ?
阅读原文