测试理论 - 代码覆盖率

  1. 概述

    1. 整理一下我对 代码覆盖率 的认识
  2. 背景

    1. 理解了 白盒测试 用例设计
    2. 设计完了, 总需要一个 标准, 来评估用例的某些方面
      1. 这个可能, 是 覆盖率 提出的意义吧
      2. 至于这个是谁最先提出, 又是出于 什么目的, 现已无从考证
        1. 主要是我 懒得考证...

1. 回顾: 白盒测试用例设计思路

  1. 概述

    1. 回顾一下白盒测试用例的设计思路
  2. 思路

    1. 代码覆盖
    2. 分支覆盖
    3. 条件覆盖
    4. 分支条件覆盖
    5. 多重条件覆盖
  3. ref

    1. 后面会有

2. 覆盖率

  1. 概述

    1. 简单介绍 覆盖率
  2. 覆盖率

    1. 作用

      1. 度量 测试用例 对 代码 测试程度
    2. 意义

      1. 找出那些地方没有测
        1. 重视没有覆盖的部分
        2. 重点是解释这些问题
          1. 为什么没有覆盖
          2. 能否覆盖
      2. 对于 测试质量, 没有任何的表述
        1. 是的, 覆盖率高, 未必就是 测试得好
    3. 计算方式

      1. 代码覆盖率

        1. 覆盖率 = 被测代码行数 / 代码总行数
      2. 当然还有其他的 覆盖率

        1. 那些怎么算的, 后面可能会有讲

3. 常见的 覆盖率 指标

  1. 概述

    1. 以 jacoco 的指标为例, 简单说明一下
  2. jacoco 执行结果

    1. 概述

      1. 简单描述下 jacoco 执行结果
      1. Element
        1. 被测的包
      2. Missed Instructions & Cov
        1. 指令覆盖
      3. Missed Branhes & Cov
        1. 分支覆盖
      4. Missed & Cxty
        1. 圈复杂度
      5. Missed & Lines
        1. 代码覆盖
      6. Missed & Method
        1. 方法覆盖
      7. Missed & Classes
        1. 类覆盖

1. 指令覆盖

  1. 概述

    1. 指令级别的覆盖率
  2. 指令

    1. Java 代码最后被编译得出的 二进制码
      1. 这么说的话, 就和 代码格式 没有关系
  3. 指令覆盖率

    1. 这个覆盖率, 是个比较底层的覆盖率
      1. 感觉跟 之前提到的一些覆盖方法, 没有那么直接的关联
        1. 所以理解上, 会有些 陌生的感觉
    2. 代码无关
      1. 代码格式, 不会影响这个覆盖率
        1. 只有最终的 二进制码, 会有影响
      2. 甚至没有 代码源文件, 都可以拿来一试 的覆盖率
    3. 其他
      1. 简单查了查资料, 发现基本都是说的 比较模糊
        1. 就说了 代码无关, 以及 覆盖的粒度
        2. 具体怎么用, 几乎没人提

2. 分支覆盖

  1. 概述

    1. 分支级别的覆盖率
  2. 分支

    1. 包含
      1. if
      2. switch
  3. 分支覆盖率

    1. 意义
      1. 度量 分支 的测试程度
  4. 提示

    1. 没有覆盖
      1. 代码附带 红色 背景
    2. 部分覆盖
      1. 代码附带 黄色 背景
    3. 完全覆盖
      1. 代码附带 绿色 背景

3. 圈复杂度

  1. 概述

    1. 循环相关的覆盖率
  2. 圈复杂度

    1. 概述

      1. 这是一个 图论 相关的概念
        1. 离散数学...
    2. 描述对象

      1. 代码整体
        1. 并不是 循环
    3. 意义

      1. 描述代码整体的 复杂度
        1. 越低代码越容易看懂
  3. jacoco 的 圈复杂度

    1. 抱歉我真的没看懂

      1. 感觉像是 分支覆盖率 有点像
      2. 但实际又有差别
    2. 这块只能先留下遗憾了

4. 代码覆盖

  1. 概述

    1. 行级别的代码覆盖率
    1. 就是一行 java 代码
  2. 代码覆盖率

    1. 意义
      1. 度量 代码行 的测试程度
  3. 提示

    1. 同 分支测试

5. 方法覆盖

  1. 概述

    1. 方法级别的代码覆盖率
  2. 方法

    1. 方法

      1. 某些特定的方法不会算在里面
      2. 这个有空会 补充, 比如, 这些我都会考虑, 目前没有结果
        1. 抽象方法
        2. 接口方法
        3. 构造方法
        4. finalize
    2. 方法覆盖

      1. 一个方法, 只要被执行了一行代码, 就算是 覆盖了
  3. 方法覆盖率

    1. 意义
      1. 度量 方法 的测试程度

6. 类覆盖

  1. 概述

    1. 类级别的代码覆盖率
      1. 某些特定的类不会算在里面
      2. 这个有空会 补充
    1. 类覆盖

      1. 一个类, 只要被执行了一行代码, 就算是 覆盖了
      2. 这个有空会 补充, 比如, 这些我都会考虑, 目前没有结果
        1. 抽象类
        2. 接口类
        3. 接口直接实现没有的无名类
  2. 类覆盖率

    1. 意义
      1. 度量 类 的测试程度

ps

  1. ref

    1. 测试理论 - 白盒测试 - 测试用例设计

      1. 我之前整理的 白盒测试用例设计思路
    2. 有赞测试 浅谈代码覆盖率

      1. 对 覆盖率意义 的理解, 我觉得很不错, 值得思考
      2. 对 覆盖率工具机制 的讲解, 我觉得不怎么样
        1. 感觉有点随便, 讲得断断续续的
    3. jacoco

      1. jacoco 原理的一些解释
      2. 目前还没看, 有时间 细细品味
        1. jacoco 报告里, 对于参数的描述, 是官网文档翻译的
        2. jacoco
    4. 增量代码覆盖率工具

      1. 有赞测试团队对 jacoco 做的改进
        1. 增量代码测试覆盖率工具
          1. 有时间 细细品味
    5. Cyclomatic Complexity

      1. 圈复杂度
  2. 后续

    1. 理解一些工具
      1. JaCoCo
        1. ide
        2. maven
        3. jenkins
      2. IDEA Code Coverage
        1. ide
      3. SonarQube
        1. jenkins
posted @ 2019-11-23 13:37  轩辕拾銉  阅读(552)  评论(0编辑  收藏  举报