测试覆盖补充
测试覆盖是对测试完全程度的评测,是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。通过覆盖指标,就可以回答“测试的完全程度如何”这一问题。 现阶段,随着软件开发过程的规范化,越来越多的软件公司加强了对软件测试的重视,希望通过测试,能够使发布的系统更安全、更稳定、更符合用户的需求。然而大家都知道,从理论上讲测试是永无止境的,只要不断测试就一定能不断发现问题。那究竟如何度量测试的进度,如何判断测试可以完结,这些,可以依靠测试覆盖率的分析来实现。
软件测试覆盖包括分支覆盖,语句覆盖以及条件覆盖,这是白盒测试中一个很基本的测试概念。
一、最常用的覆盖评测
目前最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。简单的说,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测,如已设定测试 用例的核实(基于需求的)或所有代码行的执行(基于代码的)。
1、基于需求的测试覆盖
如果需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度的可计量评测。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了75%的性能测试需求。基于需求的测试覆盖在测试生命周期中要评测多次,并在测试生命周期的里程碑处提供测试覆盖的标识(如已计划的、已实施的、已执行的和成功的测试覆盖)。
测试覆盖通过以下公式计算:
测试覆盖=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循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。
二、总结
测试覆盖分析是一种对测试阶段度量及测试工作情况分析的很好的方法,可以使测试程度更为明确,阶段进度一目了然,其统计值也便于管理部门对当前测试状态进行了解与把握。
说明:这个一般都是在最后缺陷分析报告中体现出来的。
软件测试覆盖包括分支覆盖,语句覆盖以及条件覆盖,这是
目前最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖
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循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。
测试覆盖分析是一种对测试阶段度量及测试工作情况分析的很好的方法,可以使测试程度更为明确,阶段进度一目了然,其统计值也便于管理部门对当前测试状态进行了解与把握。
说明:这个一般都是在最后缺陷分析报告中体现出来的。