如何计算单元测试的覆盖率

news2025/1/12 12:09:38

一、概念

单元测试的覆盖率有:语句覆盖率(即行覆盖率)、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率等。

  • 语句覆盖率
    所谓语句就是那些非分支、非判断的语句。
    计算公式:程序执行到的语句总数 / 全部语句的总数

  • 分支覆盖率
    有判定语句的地方都会出现2个分支。
    计算公式:程序执行到的分支总数 / 全部分支总数

  • 条件覆盖率
    分支覆盖率与条件覆盖率有细微差别,条件覆盖率在判定语句的组合上有更细的划分。判定结果为True 或 False即为一个条件,例如: a = 1,依据判定的结果(True 或 False)可作为2个条件。再举个例子,代码如下:

    	public void demo(int aa, int bb) {
    		int a = aa;
    		int b = bb;
    		if (a == 1 && b = 1) {
    			...
    		}
    	}
    

    以上代码中总共有多少个条件呢?a == 1有 True 或 Fasle 2 个条件,b == 1 同样有 True 或 False 2个条件,所以,总共有 4 个条件。

    计算公式:程序执行到的条件总数 / 全部条件总数

  • 分支条件覆盖率
    分支条件覆盖率是根据分支覆盖率和条件覆盖率得出的。
    计算公式:分支覆盖率分子/分母 + 条件覆盖率分子/分母,如:1/4 + 2/6 = 1+2 / 4+6 = 3/10

  • 路径覆盖率
    程序从开始到结束的过程为路径
    计算公式:程序执行的路径数 / 全部路径数

二、计算覆盖率

我们来基于下边的代码段来进行详细的说明,如下:

    public void demo(int aa, int bb) {
        int a = aa; // 语句1
        int b = bb; // 语句2
        
        if (a == 0 && b == 0) {
            System.out.println("a = 0 and b = 0"); // 语句3
        } else if (a == 1 || b == 1) {
            System.out.println("a = 1 or b = 1"); // 语句4
        } else {
            System.out.println("a = " + a+ ", b = " + b); // 语句5
        }
    }

让我们来分别计算下以上的代码段中的语句总数、分支总数、条件总数、路径总数。

  • 语句总数

    总共有 5 条语句

    序号描述
    语句1int a = aa
    语句2int b = bb
    语句3System.out.println(“a = 0 and b = 0”)
    语句4System.out.println(“a = 1 or b = 1”)
    语句5System.out.println("a = " + a+ ", b = " + b)
  • 分支总数

    总共有 4 条分支

    序号描述
    分支1a == 0 && b == 0 判定结果为 True
    分支2a == 0 && b == 0 判定结果为 False
    分支3a == 1 || b == 1 判定结果为 True
    分支4a == 1 || b == 1 判定结果为 False
  • 条件总数

    总共有 8 个条件

    序号描述
    条件1a == 0 判定结果为 True
    条件2a == 0 判定结果为 False
    条件3b == 0 判定结果为 True
    条件4b == 0 判定结果为 False
    条件5a == 1 判定结果为 True
    条件6a == 1 判定结果为 False
    条件7b == 1 判定结果为 True
    条件8b == 1 判定结果为 False
  • 路径总数

    总共有 3 条路径

    序号描述
    路径1a == 0 && b == 0 判定结果为 True
    路径2a == 0 && b == 0 判定结果为 False,a == 1 || b == 1 判定结果为 True
    路径3a == 0 && b == 0 判定结果为 False,a == 1 || b == 1 判定结果为 False

总数都已经统计好了,下边通过两张图例(也是两种情况)来说明,如果计算各个覆盖率。

  1. 入参为 aa = 0、bb = 0
    在这里插入图片描述
  2. 入参为 aa = 1、bb = 0
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言程序设计易混、易错知识点(中篇)

注:个别题目未给ABCD,只需要了解知识点即可;另外排版可能有点乱,望知悉 在printf中的%作为转义符,两个%才相当于1个% free掉一个指针后,指针的值是不会自动置为NULL的,当然其指向的内存已经被释…

C语言从入门到放弃——字符串和内存操作函数

字符串,是一种由双引号引起的一整串字符,在C语言中,字符串是没有类型的,通常我们将字符串放在字符数组当中,同时,我们对于字符串的操作是很频繁的,因为对于字符串的操作频繁,所以C语…

为什么需要预选器?

无论是采用模拟IF处理的传统频谱仪,还是采用数字IF处理的现代频谱仪,都是扫频式架构,通过第一级本振(LO)的调谐实现射频的扫频测试。熟悉频谱仪架构的朋友都了解,在第一级混频器之前都会存在一个预选器,如图1所示&…

点成分享|器官芯片——小白鼠的拯救者?

在新药研发的漫长过程中,实验动物模型是药物从临床前试验阶段进入到临床试验阶段的金标准。实验动物模型有助于人们了解疾病的起源、病理生理特征、疾病机制、识别药物靶标、评估新药物的疗效和人体毒性以及进行药代动力学评价等。常用的实验动物模型包括小鼠、大鼠…

黑马学ElasticSearch(七)

目录: (1)RestClient查询文档-快速入门 (2)RestClient查询文档-match、term、range、bool查询 (3)RestClient查询文档-排序和分页 (4)RestClient查询文档-高亮显示 &…

git版本回退(git reset、git revert、git stash)

文章目录回退的两种情况1.已 commit,未push到远程仓库。git reset --soft (撤销commit)git commit --amend(修改commit 提交的内容)git reset --mixed(撤销 commit 和 add 两个动作)2.已 commit…

联合证券|左手消费,右手TMT!超270只股票新年获“买入”“推荐”

2023年开年A股商场交投继续火热,出资组织在活跃呼吁出资者布局的一起,自己又更加看好哪些标的和赛道? Wind数据显现,2023年头,券商关于大消费、TMT等方向装备价值更为喜爱,到1月10日,给予“买入…

LOAM、LEGO-LOAM与LIO-SAM的知识总结

文章目录LOAM、LEGO-LOAM与LIO-SAM的知识总结1.概要2.传感器信息读取3.数据的预处理4.激光雷达里程计4.1特征点提取4.2特征点关联匹配4.2.1 标签匹配4.2.2 两步LM优化4.2.3 LIO-SAM优化4.2.3.1 IMU预积分4.2.3.2 关键帧的引入4.2.3.3 因子图4.2.3.4 GPS因子4.2.3.5 回环因子5. …

代码随想录算法训练营第十五天字符串 java : 层序遍历 226.翻转二叉树 101. 对称二叉树

文章目录前言Leetcode 102 二叉树的层序遍历题目讲解Leetcode 226.翻转二叉树题目讲解Leetcode 101. 对称二叉树题目讲解递归法总结前言 递归三定律 确定参数和返回值确认终止条件确认单层递归的逻辑 Leetcode 102 二叉树的层序遍历 题目讲解 /*** Definition for a binar…

大批量数据需要导出导入时,使用mysql 快速导出和导入 csv

使用MYSQL命令行模式 导出into outfile 导入load data导出 into outfile:mysql> select * from cdkeyduihuan into outfile d:/cdk.csv FIELDS TERMINATED BY ,;Query OK, 1049990 rows affected (1.16 sec)d:/cdk.csv 导出数据保持的文件目录。FIELDS TERMINATE…

windows ngnix 配置https

因为客户需求,需要把原来的http换成https,还不能影像原来http的访问。 看了许多网上的资料,经过实践。我总结下相关步骤及怎么配置的。 第一步,把http换成https这里需要ssl证书 ssl证书生成,我接触的有2种免费方式。…

Kettle的安装以及简单使用

Kettle是一款开源免费的ETL工具,ETL全称 Extract - Transform - Load 意味着数据抽取,转换,装载的过程。 ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到…

二叉树19:最大二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:654. 最大二叉树 题目: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地…

【ElementUI】一.axios拦截器;二.ElementUI

目录 一.axios拦截器 1.axios模块的作用:是对基于http请求的封装。在浏览器端对异步请求对象XMLHttpRequest进行封装 2.拦截器: (1)请求拦截器:对客户端发起的请求进行统一的前期处理(token、时间戳、co…

分支与循环语句 - 练习题

目录 一、分支语句 1. 判断一个数是否为奇数 2. 输出1-100之间的奇数 法1:遍历1-100所有的数字,判断是否为奇数,再输出 法2:奇数从1开始,等差为2,所以循环2 二、循环语句 1. 计算 n的阶乘。 2. 计算…

ArcGIS基础实验操作100例--实验84查找面到直线的最近点位置

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验84 查找面到直线的最近点位置 目录 一、实验背景 二、实验数据 三、实验步骤 &#…

Acwing---1015.摘花生

摘花生1.题目2.基本思想3.代码实现1.题目 Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。 地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经…

Hudi集成Spark(二)Spark SQL方式

文章目录环境准备创建表插入数据查询数据更新数据删除数据覆盖数据修改表结构(Alter Table)修改分区存储过程(Procedures)Catalog:可以和Spark或者Flink中做一个共享,共享之后,计算引擎才可以去…

跨域与Nginx总结

跨源资源共享(CORS)是一种机制,他使浏览器可以访问由其他域提供的Web资源。通常,浏览器会使用同源策略来限制从脚本中发出的HTTP请求。例如,如果一个网站的资源位于https://haha.com,那么它就不能发出对htt…

使用ResNet50实现CIFAR10数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…