其中:

  Tx是用测试过程或测试用例表示的已执行的测试(Test)数。

  RfT是测试需求(Requirement for Test)的总数。

  成功的测试覆盖(已执行的)=Ts/RfT

  Ts是用完全成功、没有缺陷的测试过程或测试用例表示的已执行测试(Test)数。

  RfT是测试需求(Requirement for Test)的总数。

  如将以上比率转换为百分数,则以下基于需求的测试覆盖的陈述成立:

  x%的测试用例(上述公式中的T(p,i,x,x))已经覆盖,成功率为y%

  2、基于代码的测试覆盖

  基于代码的测试覆盖,评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。具体而言代码覆盖率分析是这样一个过程:

  ● 找出程序经过一系列测试而没有执行的部分代码

  ● 创建一个附加的测试用例来增加覆盖率

  ● 决定代码覆盖的定量度量。

  针对代码的测试覆盖率有许多种度量方式,例如:

  语句覆盖(Statement Coverage ):也称为行覆盖(line coverage),段覆盖(segment coverage)和基本块覆盖(basic block coverage)。它度量每一个可执行语句是否被执行到了,这个覆盖度量的主要好处是它可以直接应用在目标代码上,不需要对源代码进行处理,主要缺点是对一些控制结构很迟钝。

  判定覆盖(Decision Coverage ):也被称为分支覆盖(branch coverage),所有边界覆盖(all-edges coverage),基本路径覆盖(basis path coverage ),C2覆盖,判定路径覆盖(decision-decision-path或DDP testing)。它度量是否每个BOOL型的表达式取值true 和false在控制结构中都被测试到了。这个度量有语句覆盖的简单性,但是没有语句覆盖的问题,缺点是忽略了在BOOL型表达式内部的BOOL取值。

  条件覆盖(Condition Coverage ):它独立的度量每一个子表达式,报告每一个子表达式的结果的true 或false。这个度量和判定覆盖(decision coverage)相似,但是对控制流更敏感。不过,完全的条件覆盖并不能保证完全的判定覆盖。

  路径覆盖(Path Coverage ):也称为断言覆盖(predicate coverage),它度量了是否函数的每一个可能的分支都被执行了。路径覆盖的一个好处是:需要彻底的测试。但有两个缺点:一是,路径是以分支的指数级别增加的,例如:一个函数包含10个IF语句,有1024个路径要测试。如果加入一个IF语句,路径数达到2048;二是,许多路径不可能与执行的数据无关。

  •; 循环覆盖(Loop Coverage ):这个度量报告你是否执行了每个循环体零次、只有一次还是多余一次(连续地)。对于do-while 循环,循环覆盖报告你是否执行了每个循环体只有一次还是多余一次(连续地)。这个度量的有价值的方面是确定是否对于while循环和for循环执行了多于一次,这个信息在其它的覆盖率报告中是没有的。

  三、总结

  测试覆盖分析是一种对测试阶段度量及测试工作情况分析的很好的方法,可以使测试程度更为明确,阶段进度一目了然,其统计值也便于管理部门对当前测试状态进行了解与把握。