测试覆盖率

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

欢迎扫码关注微信公众号「一朵儿的软件测试之旅」一起学习交流
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值