一、 kieran覆盖率概念
覆盖率=(至少被执行一次的item数)/item的总数。
这个公式是对item的覆盖情况进行计算,item可以是需求,语句,分支,条件,路径等等。
覆盖率是用来度量测试完整性的一个手段,不是测试的目的。通过覆盖率数据,我们可以知道我们测试的是否充分,测试的弱点在哪些方面,进而指导我们去设计能够增加覆盖李率的测试用例。
二、逻辑覆盖率(白盒测试覆盖率)
1.语句覆盖(statement coverage)
在测试时,运行被测试程序后,程序中被执行到的可执行语句的比率。
语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句总数)
注意:可执行的语句不包括:以#开头的#include、宏定义、预处理语句和注释语句
缺点:不能发现判定的逻辑结果错误;不能发现判定的条件中的错误。
2.分支覆盖(branch coverage侠盗罗宾汉主题曲)也叫 判定覆盖(decision coverage)
在测试时,运行被测试程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率
判定覆盖率=(判定结果至少被评价一次的数量)/(判定结果的总数)
出现在分支的情况下,如if、while、for、switch、和三目运算符a?b:c
缺点:发现不了判定的条件的错误。
3.条件覆盖(condition coverage)
在测试时运行被测试程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率
条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)
条件操作数是条件的具体取值(真或者假)。
4.分支-条件覆盖(英语等级考试报名branch condition coverage)也叫 判定-条件覆盖(decision condition coverage)
在测试时运行被测试程序后,所有判断语句中每个条件的所有可能值(为真为假)和每个判断本身的判定结果(为真为假)出现的比率
分支-条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数)
5.路径覆盖(path coverage)
在测试时运行被测试程序后,程序中所有可能的路径被执行过的比率。
路径覆盖率=(至少被执行到一次的路径数)/(总的路径数)
tips分析英文:N个测试用例最多执行了儿童动画N条路径。
6 逻辑覆盖小结
分支覆盖可以保证语句覆盖,条件覆盖和分支覆盖不能互相保证,路径覆盖可以保证分支覆盖,路径覆盖不能保证条件覆盖。
三、功能覆盖率(黑盒测试覆盖率)
功能覆盖中最常见的需求覆盖,通过设计一定的测试用例,要求每个需求点都被测试到。
需求覆盖率=(被验证到的需求数量)/(总的需求数量)
功能测试覆盖方面的自动化工具比较少。
四、面向对象的覆盖率
1.继承上下文覆盖:用于度量在系统中的多态调用被测试的情况。
继承上下文判定覆盖率=bec商务(累加每个上下文内执行到的判定分支数)/(上下文数*上下文内的判定分支总数)
通俗的公式为:继承上下文判定覆盖=(不同上下文被验证到的方法的和)/(不同上下文下的所有方法数的和)
2.基于状态的上下文覆盖:在绝大多数面向对象系统中,存在许多类,它们可以被描述为状态机,某一类的方法在不同的状态下,结果不同。
比如堆栈,它的状态有“空”,“半满”,“满”,栈的行为在不同的状态下是不同的。
基于状态的上下文入口点覆盖率=(累加每个状态内执行到的方法数)/(状态数*类内方法总数)
即=(被验证到的不同状态下方法数之和)/(不同状态下得方法数之和)
3.基于线程的上下文覆盖
口译天下五、其他覆盖率
1.函数覆盖率(灰盒测试覆盖率),它是一个比较容易自动化的技术
函数覆盖率=(至少被执行一次的函数数量)/(系统中函数的总数)
美国达特茅斯学院2接口覆盖(入口点覆盖),接口覆盖=(至少被执行一次的接口数量)/(系统中接口的总数)
2.lavinia指令块覆盖
指令块表示函数内部的一个序列语句,以分支来断点,划分指令块。
指令块覆盖率=(至少被执行一次的指令块数量)/(系统中的指令块总数)
3.判定路径覆盖
DDP覆盖=(至少被执行到一次的判定路径数量)/(系统中的判定路径总数)
判定路径:
a.函数入口——>判定开始
b.判定开始——>下一次判定开始
c.判定开始——>判定结束
4.此外还有 更改条件判定覆盖、分支条件组合覆盖、过程到过程路径覆盖、Z路径覆盖、weather shanghaiESTCA覆盖、LCSAJ覆盖
六、如何使用覆盖率
1.基本原则
a.覆盖率不是目的,只是一种度量测试充分性的手段
b.不可能针对所有的覆盖率指标去进行测试;相反,只考虑一种覆盖率指标也是不恰当的
c.不要追求绝对100%的覆盖率
2.使用最少的测试用例来达到覆盖
根据N-S图来计算:
测试用例数=上层测试用例数*下次测试用例数