软件测试覆盖包括分支覆盖,语句覆盖以及条件覆盖,这是
目前最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖
1、基于需求的测试覆盖
如果需求已经完全分
测试覆盖通过以下公式计算:
测试覆盖=T(p,i,x,x)/RfT
其中:
T是用测试过程或测试用例表示的测试(Test)数(已计划的、已实施的或成功的)。
RfT是测试需求(RequirementforTest)的总数。
在制订测试计划活动中,将计算测试覆盖以决定已计划的测试覆盖,其计算方法如下:
测试覆盖(已计划的)=Tp/RfT
其中:
Tp是用测试过程或测试用例表示的已计划测试(Test)数。
RfT是测试需求(RequirementforTest)的总数。
在实施测试活动中,由于测试过程正在实施中(按照测试脚本),在计算测试覆盖时使用以下公式:
测试覆盖(已执行的)=Ti/RfT
其中:
Ti是用测试过程或测试用例表示的已执行的测试(Test)数
RfT是测试需求(RequirementforTest)的总数。
在执行测试活动中,使用两个测试覆盖评测,一个确定通过执行测试获得的测试覆盖,另一个确定成功的测试覆盖(即执行时未出现失败的测试,如没有出现缺陷或意外结果的测试)。
这些覆盖评测通过以下公式计算:
测试覆盖(已执行的)=Tx/RfT
其中:
Tx是用测试过程或测试用例表示的已执行的测试(Test)数。
RfT是测试需求(RequirementforTest)的总数。
成功的测试覆盖(已执行的)=Ts/RfT
Ts是用完全成功、没有缺陷的测试过程或测试用例表示的已执行测试(Test)数。
RfT是测试需求(RequirementforTest)的总数。
如将以上比率转换为百分数,则以下基于需求的测试覆盖的陈述成立:
x%的测试用例(上述公式中的T(p,i,x,x))已经覆盖,成功率为y%
2、基于代码的测试覆盖
基于代码的测试覆盖,评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。具体而言代码覆盖率分析是这样一个过程:
2.1找出
2.2创建一个附加的测试用例来增加覆盖率
2.3决定代码覆盖的定量度量。
针对代码的测试覆盖率有许多种度量方式,例如:
2.4语句覆盖(StatementCoverage):也称为行覆盖(linecoverage),段覆盖(segmentcoverage)和基本块覆盖(basicblockcoverage)。它度量每一个可执行语句是否被执行到了,这个覆盖度量的主要好处是它可以直接应用在目标代码上,不需要对源代码进行处理,主要缺点是对一些控制结构很迟钝。
2.5判定覆盖(DecisionCoverage):也被称为分支覆盖(branchcoverage),所有边界覆盖(all-edgescoverage),基本路径覆盖(basispathcoverage),C2覆盖,判定路径覆盖(decision-decision-path或DDPtesting)。它度量是否每个BOOL型的表达式取值true和false在控制结构中都被测试到了。这个度量有语句覆盖的简单性,但是没有语句覆盖的问题,缺点是忽略了在BOOL型表达式内部的BOOL取值。
2.6条件覆盖(ConditionCoverage):它独立的度量每一个子表达式,报告每一个子表达式的结果的true或false。这个度量和判定覆盖(decisioncoverage)相似,但是对控制流更敏感。不过,完全的条件覆盖并不能保证完全的判定覆盖。
2.7路径覆盖(PathCoverage):也称为断言覆盖(predicatecoverage),它度量了是否函数的每一个可能的分支都被执行了。路径覆盖的一个好处是:需要彻底的测试。但有两个缺点:一是,路径是以分支的指数级别增加的,例如:一个函数包含10个IF语句,就有1024个路径要测试。如果加入一个IF语句,路径数就达到2048;二是,许多路径不可能与执行的数据无关。
2.8循环覆盖(LoopCoverage):这个度量报告你是否执行了每个循环体零次、只有一次还是多余一次(连续地)。对于do-while循环,循环覆盖报告你是否执行了每个循环体只有一次还是多余一次(连续地)。这个度量的有价值的方面是确定是否对于while循环和for循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。
测试覆盖分析是一种对测试阶段度量及测试工作情况分析的很好的方法,可以使测试程度更为明确,阶段进度一目了然,其统计值也便于管理部门对当前测试状态进行了解与把握。
说明:这个一般都是在最后缺陷分析报告中体现出来的。