语句覆盖率\条件覆盖率\路径覆盖率\分支覆盖率的区别您知道吗

news2024/11/24 3:15:55

 

代码覆盖率

代码覆盖率是一种度量,它描述了程序源代码已经过测试的程度,它可以帮助我们评估测试执行的效率, 简单来理解代码覆盖率就是单元测试中代码执行量与代码总量之间的比率。代码覆盖率主要包括语句覆盖率、分支覆盖率、条件覆盖率和路径覆盖率。Java常用的单元测试覆盖率框架有:JaCoCo、EMMA和Cobertura,其中jacoco使用最为广泛。

实例

为了让大家了解不同语句覆盖率的区别,接下来讲解的语句覆盖率、分支覆盖率、条件覆盖率和路径覆盖率都是根据下面这个实例讲解的。

如果满足条件A and B 执行 事件1

如果满足条件C or D 执行 事件2

语句覆盖率

只需要让程序中的语句都执行一遍即可 。上例中只需设计测试用例使得A=true B=true C=true 即可。

总结

必要的、最简单的,但也是最弱的标准

无法检测到缺失的语句

但能发现无法执行到的语句(死代码)

覆盖率:
语句覆盖 = 已执行的语句数目 / 所有语句的总数目 * 100%

分支覆盖率

分支覆盖又称判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例使其分别满足下列条件即可

(1)A=true,B=true,C=true,D=false 真分支覆盖

(2)A=true,B=false,C=false,D=false。假分支覆盖

总结

在控制流程图内的每一条控制流都至少被执行一次!每一条边即每一条控制流(有向线)都走过了,才为 100% 分支覆盖

在实践中作为最小的测试标准

能发现无法执行到的程序分支

无法发现缺失的分支

没有测试到分支的组合

覆盖率:
分支覆盖 = 已执行的分支数目 / 分支总数目 * 100%

条件覆盖率

程序各判定中的每个条件获得各种可能的取值至少满足一次即可,不考虑路径的覆盖。

上例中第一个判断应考虑到A=true,A=false,B=true,B=false;

第二个判断应考虑到C=true,C=false,D=true,D=false

所以设计出下面2条测试用例就能够满足条件覆盖

(1)A=true,B=true,C=true,D=true 满足 ABCD都取true

(2)A=false,B=false,C=false,D=false。满足 ABCD都取false

总结

条件覆盖率是一种测试方法,用于测试和评估条件语句中的变量或子表达式。条件覆盖的目标是检查每个逻辑条件的单个结果。与分支覆盖相比,条件覆盖对控制流的敏感性更高。

条件覆盖比较复杂,具体包括:

 简单条件覆盖

判定/条件覆盖

 复合条件覆盖

它们的区别是测试的深度从上往下越来越深入,需要的测试用例数越来越多,能发现缺陷越来越多,这里就不再一一展开了。

覆盖率

条件覆盖 = 已执行的条件数目 / 条件总数目 * 100%

路径覆盖率

要求覆盖程序中所有可能的路径,我们可以设计测试用例,如下:

(1)A=true,B=true,C=true,D=true

(2)A=false,B=false,C=false,D=false

(3)A=true,B=true,C=false,D=false

(4)A=false,B=false,C=true,D=true。

总结

路径覆盖率比前面讲的几种方法覆盖度都要高,缺点是我们需要设计数量非常巨大的而且较为复杂的测试用例。

代码覆盖率优缺点总结

代码覆盖率的优点

· 有助于评估量化的代码覆盖率

· 可以创建额外的测试用例以增加覆盖范围

· 可以找到一组测试用例无法执行的程序区域

代码覆盖率的缺点

· 即使在设计中未实现任何特定功能,代码覆盖率仍然可能报告为100%覆盖率。

· 无法确定是否在代码覆盖率的帮助下测试了功能的所有可能值

· 无法告诉大家覆盖逻辑的程度

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

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

相关文章

【Linux】实现守护进程 | 以tcpServer为例

本文首发于 慕雪的寒舍 本文将以tcp服务器代码为基本,讲述如何将进程守护进程化,后台运行 1.守护进程 所谓守护进程,就是和其他进程没有关系的进程;其独立运行于系统后台,除非自己退出或收到信号终止,否则…

逆向-还原代码之(*point)[4]和char *point[4] (Arm 64)

// source code #include <stdio.h> #include <string.h> #include <stdlib.h> /* * char (*point)[4] // 数组指针。 a[3][4] // 先申明二维数组,用它来指向这个二维数组 * char *point[4] // 指针数组。 a[4][5] // 一连串的指针…

编程语言,TIOBE 4 月榜单:黑马出现了

TIOBE 4 月榜单已经发布了&#xff0c;一起来看看这个月编程语言排行榜有什么变化吧&#xff01; C 发展依旧迅猛 在本月榜单中&#xff0c;TOP 20 的变动不大&#xff0c;Python、C、Java 、 C 和C#依然占据前五。甚至排名顺序都和上个月一样没有变动。 同时&#xff0c;Rus…

【图形学】多边形裁剪算法综述

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本文是个人学习多边形裁剪知识整理的&#xff0c;整理期间努力理解论文作者含义&#xff0c;并增加了自己的详述和注解。 &#x1f970;来源&#xff1a;材料主要源于多边形裁剪相关论文进行的&#xff0c;每个知识点的学习…

第三十一天 Linux介绍和基础命令

目录 1.前言 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.Linux简介 2.1 主流操作系统 2.2 Linux发展历史 3. Linux安装 3.1 安装方式介绍 3.2 安装VMware 3.3 安装Linux 3.4 网卡设置 3.5 安装SSH连接工具 3.6 Linux目录结构 4.Linux常用命令…

洛谷P8772 [蓝桥杯 2022 省 A] 求和 C语言/C++

[蓝桥杯 2022 省 A] 求和 题目描述 给定 nnn 个整数 a1,a2,⋯,ana_{1}, a_{2}, \cdots, a_{n}a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 Sa1⋅a2a1⋅a3⋯a1⋅ana2⋅a3⋯an−2⋅an−1an−2⋅anan−1⋅anSa_{1} \cdot a_{2}a_{1} \cdot a_{3}\cdotsa_{1} \cd…

SpringCloud学习(五)——Nacos配置管理

文章目录1. Nacos实现配置管理2. 微服务拉取配置2.1 拉取优先级2.2 导入依赖2.3 添加注解2.4 配置热更新3. 使用 ConfigurationProperties3.1 使用注解3.2 测试4. 多环境共享配置4.1 添加依赖4.2 配置文件4.3 更改属性4.4 测试4.5 配置优先级1. Nacos实现配置管理 当微服务部署…

【测试面试】吐血整理,大厂测试开发岗面试题(1~4面),拿下年40w...

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 自动化测试面试题&am…

scConverter 文档转换 DLL / SDK 2023.3.21 Crack

scConverter 转换 DLL / SDK scConverter 是一个DLL&#xff0c;可以将PDF、DWF、Gerber、CGM、TIFF、CALS、PLT、PNG和JPEG文件转换为大量输出格式。可用的输出格式列表包括Adob​​e PDF、PDF/A、DXF、DWF、CALS、TIFF、PLT和PNG。您将在下面找到所有可用输入和输出格式的完整…

计算机算法设计与分析(第5版)PDF

《计算机算法设计与分析&#xff08;第5版&#xff09;》是2018年电子工业出版社出版的图书&#xff0c;作者是王晓东。 整本书的结构是&#xff1a;先介绍算法设计策略思想&#xff0c;然后从解决经典算法问题来学习&#xff0c;通过实践的方式去学习算法。 网络上许多的算法…

天梯赛-模拟赛-4.16

L2-041 插松枝 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。 每人面前有用不完的松枝干和一个推送器&#x…

【鸿蒙应用ArkTS开发系列】- Web组件使用讲解

目录 一、Web组件介绍 二、创建组件 权限列表 三、设置样式和属性 四、添加事件和方法 五、访问本地Html 1、本地html文件创建 2、本地html文件加载 2、JS对象注入&#xff0c;Html使用JS对象调用客户端方法 3、客户端调用本地Html网页中的JS方法 使用鸿蒙的ArkUI框架…

Lesson 10.1 超参数优化与枚举网格的理论极限和随机网格搜索 RandomSearchCV

文章目录一、超参数优化与枚举网格的理论极限1. 超参数优化 HPO&#xff08;HyperParameter Optimization&#xff09;2. 网格搜索的理论极限与缺点3. 建立 benchmark&#xff1a;随机森林中枚举网格搜索的结果二、随机网格搜索 RandomizedSearchCV1. 基本原理2. 随机网格搜索的…

使用chatgpt实现微信聊天小程序(秒回复),github开源(附带链接)

文章目录前言效果展示原理说明服务器端代码说明微信小程序代码说明代码链接总结前言 我在前一段时间突发奇想&#xff0c;就使用java来调用chatgpt的接口&#xff0c;然后写了一个简单小程序&#xff0c;也上了热榜第一&#xff0c;java调用chatgpt接口&#xff0c;实现专属于…

select 排序qsort排序

目录 1.希尔排序的时间复杂度 3.有技巧的选择排序&#xff1a;堆排序 4.排序的种类 5.直接插入排序和冒泡排序 6.快速排序 7.希尔排序 堆排序 和快排的区别 8.为什么相遇位置一定比key小 9.快排的优化 11.快排递归写法的不足 12.快排的非递归解法 1.希尔排序的时间复杂…

C++11新特性(上)

357089 文章目录1. 统一的列表初始化1.1 &#xff5b;&#xff5d;初始化1.2 std::initializer_list2. decltype3. 右值引用和移动语义3.1 左值引用和右值引用3.2 左值引用与右值引用比较3.3 右值引用使用场景和意义3.4 右值引用引用左值及更深入的使用场景3.5 完美转发4. 新的…

“编程式 WebSocket” 实现简易 online QQ在线聊天项目

目录 一、需求分析与演示 1.1、需求分析 1.2、效果演示 二、客户端、服务器开发 2.1、客户端开发 2.2、服务器开发 一、需求分析与演示 1.1、需求分析 需求&#xff1a;实现一个 online QQ在线聊天项目&#xff0c;当用户登录上自己的账号后&#xff0c;将会显示在线&…

我用nodejs和electron实现了一个简单的聊天软件-----chat 开源

翎&#x1f3a5;项目演示地址 &#x1f517;https://www.bilibili.com/video/BV1Fg4y1u76d/ 希望观众老爷给个免费的三连支持一下新人up主 ♻️项目基本介绍 翎是基于electron(vue2)和nodejs实现的简单聊天软件,其中用websocket和http进行通讯传递,数据库使用了mysql数据库,…

二进制插入与查找组成一个偶数最接近的两个素数

二进制插入 链接&#xff1a;二进制插入_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a;给定两个32位整数n和m&#xff0c;同时给定i和j&#xff0c;将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零&#xff0c;且m的二进制位数小于等于i-j1&#xff…

Qt Quick - Popup

Qt Quick - Popup使用总结一、概述二、Popup 的布局三、弹出分级四、弹出定位五、定制化一、概述 Popup是类似弹出式用户界面控件的基本类型。它可以与Window或ApplicationWindow一起使用。 import QtQuick.Window 2.2import QtQuick.Controls 2.12ApplicationWindow {id: win…