- 覆盖率是用来度量测试完整性的一个手段,本身并不包含测试技术,知识测试技术有效性的一个度量。覆盖率 = (至少被执行一次的 item 数)/ item 的总数
- 白盒覆盖
- 逻辑覆盖
- 语句覆盖
- 语句覆盖是在测试时,运行被测程序后,程序中被执行到的可执行语句的比率。语句覆盖 = (至少被执行一次的语句数量)/ (可执行的语句总数)
- 判定覆盖
- 判断覆盖是在测试时,运行被测程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率。判断覆盖 = (判断结果被评价的次数)/ (判定结果的总数)
- 条件覆盖
- 条件覆盖是测试时,运行被测程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率。条件覆盖 = (条件操作数值至少被评价一次的数量)/ (条件操作数值的总数)
- 判定条件覆盖
- 判断条件覆盖是在测试时,运行被测程序后,所有判断语句中每个条件的所有可能值(为真为假)和每个判断本身的判断结果(为真为假)出现的比率。判断条件覆盖 = (条件操作数值或判定结果至少被评价一次的数量)/ (条件操作数值总数+判定结果总数)
- 条件组合覆盖
- 条件组合覆盖是在测试时,运行被测程序后,所有语句中原有条件所有可能的取值组合出现过的比率。条件组合覆盖=(至少被执行一次的条件组合)/ (总的可能的条件组合数)
- 路径覆盖
- 路径覆盖是在测试时,运行被测程序后,程序中所有可能的路径被执行过的比率。路径覆盖 = (至少被执行一次的路径数)/(总的路径数)
- 基本路径测试是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
- 基本路径测试的主要步骤如下:
- 根据测试对象的源程序得到控制流图
- 计算控制流图的圈复杂度
- 流图中区域的数量对应圈复杂度
- 给定流图 G 的圈复杂度 V(G) ,定义为 V(G) = E-N+2,E 是流图中边的数量,N 是流图中节点的数量
- 给定流图 G 的圈复杂度 V(G),定义为 V(G) = P+1,P 是流图 G 中判定节点的数量。
- 选择基本路径
- 为每条基本路径创建一个测试用例
- 执行测试用例
- 语句覆盖
- 其他覆盖
- 指令块覆盖
- 指令块覆盖是语句覆盖的一个变体,其唯一的区别是计算方式的不同。指令块表示函数内部的一个系列语句,在这一个系列语句中不存在控制语句(会引起分支)。指令块覆盖 = (至少被执行一次的指令块数量)/ (系统中指令块总数)
- 判定路径覆盖
- 判定路径覆盖是判定覆盖的一个变体。这里的判定指的是一个序列语句,其起始位置是函数入口或一个判定的开始,结束位置是下一个判定的开始。判定路径覆盖 = (至少被执行一次的判定路径覆盖数量)/(系统中判定路径总数)
- 指令块覆盖
- 逻辑覆盖
- 灰盒覆盖
- 函数覆盖
- 函数覆盖是针对一个系统或一个子系统测试的,它表示在该测试中,有哪些函数被测试到了,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大。函数覆盖 = (至少被执行一次的函数数量)/(系统中函数的总数)
- 接口覆盖
- 接口覆盖也称为入口点覆盖,要求通过设计一定的用例使得系统中的每个接口被测试到。接口覆盖 = (至少被执行一次的接口数量)/(系统中接口的总数)
- 函数覆盖
- 黑盒覆盖
- 实际测试中与黑盒相关的测试率比较少,主要是功能覆盖率。
- 功能覆盖率中最常见的是需求覆盖,其含义是通过设计一定的测试用例,要求每个需求点都被测试到。需求覆盖 = (被验证到的需求数量)/(总的需求数量)
- 面向对象的覆盖率
- 继承上下文覆盖:改覆盖率用于度量在系统中的多态调用被测试得多好
- 继承上下文判定覆盖 = (累加每个上下文内执行到的判定结果数)/(上下文内的判断结果总数 * 上下文数)
- 注意:基类的程序不要在重写的派生类中被测试
- 基于状态的上下文覆盖:改覆盖用于改进对带有状态依赖行为的类的测试
- 一个有状态行为依赖的例子:一个有边界的栈
- 基于状态上下文入口点覆盖 = (累加每个状态内执行到的方法数)/(类内方法总数 * 状态数)。注意:为了使用基于状态的上下文覆盖,构造器不被认为是类的方法,因为当它们被调用时对象还不存在,也就没有相应的状态。(在新的研究中,为了考虑构造函数和析构函数的测试,增加了两个状态,α 状态和 ω 状态)
- 已定义用户上下文覆盖:该度量允许上下文覆盖的方法被应用到逻辑覆盖率无法使用的地方,例如多线程应用
- 继承上下文覆盖:改覆盖率用于度量在系统中的多态调用被测试得多好
欢迎扫码关注微信公众号「一朵儿的软件测试之旅」一起学习交流