如何提高测试用例覆盖率?阿里测试工程师是这样说的

2023-11-04

我们将讨论测试覆盖率的相关问题,以及它如何帮助提高软件质量的。

测试覆盖率概述
测试覆盖率被定义为一种测试技术指标,它表明我们的测试用例是否真正完全覆盖了应用程序代码中的各种可能以及在运行这些测试用例时执行了多少代码。

如果有10个需求并创建了100个场景测试用例,并且执行了90个测试用例,则测试覆盖率为90%。现在,基于这个指标,测试人员可以为其余需求创建其他测试用例。以下是测试覆盖率的更多优势。

1.可以在早期和代码级别发现需求、测试用例和BUG之间的差距。

2.可以使用测试覆盖率分析来防止BUG的遗漏。

3.测试覆盖率还有助于进行回归测试、测试用例优先级划分、测试套件扩展和测试套件颗粒化。

测试覆盖技术
语句覆盖
语句覆盖率确保源代码中的所有场景都经过至少一次测试用例中执行。它提供了全部代码块中已执行和未执行的代码块的详细信息。

让我们通过流程图示例来了解它。在给定的示例中,此路径1A-2C-3D-E-4G-5H涵盖了所有语句,因此仅需要一个测试用例即可满足所有要求。一个测试用例意味着一个语句覆盖。

在复杂的代码中,单个路径不足以覆盖所有语句。在这种情况下,测试工程师需要根据实际情况编写多个测试用例来覆盖所有场景。

好处:

1.它可以直接应用于目标代码,并且不需要处理源代码。

·它可以验证代码功能中对于需求是否满足。

缺点:

·语句覆盖率仅涵盖每个语句的条件。

·语句覆盖率范围对逻辑运算符(比如||和&&)完全不敏感,很容易漏掉。

·语句覆盖率是基本覆盖率,因此不能保证100%语句覆盖率。

分支覆盖
几乎没有一个业务场景是可以不需要进行判断的,在任何时候他们都需要分支出代码来满足功能要求。代码中的分支实际上是从一个决策点到另一决策点的跳转。分支覆盖范围检查代码中每个可能的路径或分支是否被覆盖。

分支覆盖率可以通过找到确保覆盖所有边缘的最小路径数来计算。在给定的示例中,没有一条路径可以确保一次覆盖所有边缘。

例如,如果您沿此路径1A-2C-3D-E-4G-5H覆盖最大边缘数A,C,D,E,G和H,则仍然会错过两个边缘B和F。测试人员需要遵循另一条路径1A-2B-E-4F覆盖其余两个边缘分支。通过组合以上两条路径,可以确保在所有分支均被测试用例覆盖到。

好处:

·分支覆盖涵盖了所有条件判断。

·分支覆盖验证是否所有分支都已测试。

缺点:

·分支覆盖忽略布尔表达式中由于短路算子而出现的分支。

路径覆盖
路径测试是一种结构测试方法,涉及使用程序的源代码来查找每个可能的可执行路径。路径覆盖范围可确保从头到尾覆盖所有路径。在此示例中,有四种可能的路径:

·1A-2B-E-4F

·1A-2B-E-4G-5H

·1A-2C-3D-E-4G-5H

·1A-2C-3D-E-4F

好处:

·它有助于减少冗余测试。

·路径覆盖率提供了较高的测试覆盖率,因为它覆盖了代码中的所有语句和分支。

缺点:

·测试每条路径既困难又费时,因为许多路径与分支的数量成指数关系。

·在实际业务中,由于数据的关系,许多路径很可能是不通的。

条件覆盖
条件覆盖率检查每个条件的两个结果(true或false)是否均已执行。逻辑判断点的结果仅与检查条件有关。每个条件需要两个测试用例才能实现两个结果。

好处:

·条件覆盖范围相互独立地测量条件。

·条件覆盖对控制流具有更好的敏感性。

缺点:

·类似于分支机构/决策范围,决策点和测试用例指数关系。

·对于多条件测试经常,很难避免用例重复

边界值覆盖
对于那些由于输入数字而发生错误的应用程序,边界值覆盖率指标非常有用。大多数BUG都是发生在边界值处。在边界值覆盖范围内,在等效类的端点处选择测试用例。对于此测试覆盖率示例,以下是需要3位数字作为输入的应用程序的边界值。

·100(最低)

·99(仅低于最小边界值)

·999(最大)

·1000(仅在最大边界值之上)

好处:

·测试小组使用边界值覆盖数据代替测试大量数据集是很容易的。

·边界值覆盖易于使用,因为它易于自动化已识别测试的性质和一致性。

缺点:

·边界值覆盖无法测试两个输入之间的依赖关系。

·边界值覆盖不能覆盖包含布尔函数的代码。

什么是测试覆盖率指标

下面是是5个关键的测试覆盖率指标。

代码级指标
测试执行覆盖率,它也称为已执行测试,是已通过/已执行测试在总测试数量中所占的百分比。

·优点是可以通过统计通过和失败的测试次数来获得测试进度的直观描述。

·缺点是计数通过的测试用例并不能说明这些测试的质量。例如,某些测试可能会通过,但是在某些非正常时候,程序会触发一些BUG。

功能测试指标
需求范围
需求覆盖率用于确定测试用例满足软件需求的程度。为此,测试工程师只需要将发布或项目的需求数量除以范围需求的总数即可。

测试范围
在需求模块中,可以通过将测试用例链接到需求来统计测试覆盖率。测试覆盖率评估测试或需求变更的影响。通过覆盖多个用例,用需求覆盖测试配置可以提供更精细的粒度。

用例质量
此度量标准用于查看要测试的功能以及符合要求的测试数量。大多数需求包含多个测试用例。了解特定需求正向和逆向的测试场景对于编写特定需求的测试用例非常重要。

测试范围
此标准对利益相关者非常重要,因为它直观展示了应用程序/软件开发对于需求的完成度。

应用程序级别指标

缺陷密度
缺陷密度是对已知缺陷总数的度量除以要测量的软件实体(通常是代码行数、模块数、功能数)的数量。

测试范围
它可以被用于标识需要自动化的模块。如果特定功能的缺陷密度很高,则需要重新测试。为了减少重新测试的工作,可以将已知缺陷的测试用例自动化。

在评估缺陷时,考虑缺陷的优先级很重要。通常较高优先级的缺陷会作为此度量标准的极其重要的一部分而获得更高的权重。

如何衡量测试覆盖率
许多质量检查团队在衡量测试覆盖率时不会考虑的一件事:如何衡量测试覆盖率?如何测量测试覆盖率?

测试覆盖率是根据代码行测得的。这是上面讨论的测试执行覆盖率。例如,如果测试工程师已经通过测试用例执行了800行代码,那么在1000行代码中,改项目的测试覆盖率为80%。

如果需要按需求衡量测试的覆盖率,以专注于测试用例库中的更高效的测试用例。一个好的测试用例可以追溯到实现的需求(包括正向和反向的流程),拥有良好的测试用例所要做的就是建立需求可追溯性。

当然也可以通过涵盖某个版本项目迭代范围内的所有要求,从而实现在项目中的可追溯性。通过建立需求可追溯性,可以在任何时间点了解需求需要的测试范围。

提高测试覆盖率
1.删除无效代码

总覆盖率可以定义为代码覆盖率和测试覆盖率的比率(covered/total)。可以通过减少作为总代码的分母来增加覆盖范围。这可以通过删除Dead代码来实现。良好覆盖率测试可以找到死代码,同样需要删除调试代码和开发人员遗留的测试代码。

可以通过手动测试或使用自动化工具轻松找到无效代码。在删除无效代码之前,测试工程师需要执行功能测试,如果测试完全按照要求执行,则可以删除未使用的代码。测试工程师还可以使用静态测试覆盖率分析工具从源代码中识别未使用的无效代码。

2.删除冗余代码

删除复制的代码可以像删除无效代码一样提高测试覆盖率。

程序中包含基本代码和代码块,这些代码块在程序中具有很搞重复性。如果找到这些复制的代码并将其删除。通过从源代码中删除复制的代码,可以将测试覆盖率提高5-10%。

3.增加设备覆盖率

移动设备和操作系统版本投放市场的节奏具有很强的节奏感,而浏览器(例如Chrome和Firefox)也具有相同的特性。每个发行版不仅带来了测试范围方面的挑战,而且还引入了需要额外测试工作的新特性和功能。为了提高最大的测试覆盖范围,就必需提高设备的覆盖率(硬件和软件)。

衡量移动测试覆盖率的方法是通过使用情况和客户分析来了解。列出软件正式环境中最常用的设备,还需要确保其中包括各个版本的iOS的设备。

测试工程师要关注即将发布的设备、操作系统版本和浏览器版本,将其与现有分析结合使用,保证测试设备库的及时更新。

结论
如今,开发工作越来越系统化,企业寻求测试完整性和有效性的方法,用来评估测试工作完成程度和工作完成质量。在所有的标准中,测试覆盖率被认为是最优价值的指标之一。为了确保的软件测试具有较高水平,就需要采用结构化方法,因为软件测试覆盖率是衡量和确保软件质量的关键因素。
 下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提高测试用例覆盖率?阿里测试工程师是这样说的 的相关文章

  • 测试用例评审流程优化

    测试用例 评审是QA日常工作流程中的关键一环 是QA同学完善测试用例 交流测试经验的好机会 负责组内测试用例建设以来 作者对于评审流程做了一些优化工作 本文作者将整个优化过程中的心得体会做了一个总结 希望能给大家带来帮助 01 原始流程 1
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|使用matplotlib绘制多种折线图

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|Pydantic处理时间类型数据

    简介 我们之前介绍过使用 pydantic 验证数据 比如校验数据的格式等 但是在我们的日常工作中 还有一种数据是需要我们验证的 比如时间数据 时间数据不同于字符串 列表等数据 与他们的验证不一样 本文就来为大家介绍一下 pydantic
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 开眼了,自动化测试还能这样用?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自

随机推荐

  • 华为服务器格式化系统,服务器操作系统格式化

    服务器操作系统格式化 内容精选 换一换 本文以云服务器的操作系统为 Windows Server 2008 R2 Standard 64bit 磁盘容量为3 TB举例 提供容量大于2 TB的Windows数据盘的初始化操作指导 MBR格式分
  • Microsoft 365的密钥

    Microsoft 365 的密钥是一个字符串 用于激活 Microsoft 365 订阅 它是唯一的 并且需要在订阅期间进行激活 以便可以使用所订阅的服务 如果您没有密钥 或者密钥无效 您将无法使用 Microsoft 365 服务
  • 高并发之API接口限流

    在开发高并发系统时有三把利器用来保护系统 缓存 降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时 需要暂时屏蔽掉 待高峰或者问题解决后再打开 限流 限流的目的是通过对并发访问
  • cadence allegro 封装焊盘编号修改 (引脚编号修改)

    1 打开dra文件在find里面 off all 然后只点击text 2 点击需要更改的焊盘 3 菜单栏edit text 4 弹出窗口修改即可 注意 按照网上的其他操作并没有执行步骤1操作 我尝试过不好使 由于项目需要应用多年的AD软件转
  • 【面试】linux && gdb

    Linux Linux开发你们怎么上传文件的 gdb linux断点所有线程都会停住吗 GDB查看所有线程栈命令 当程序在gdb下因任何原因停止时 例如达到断点 所有执行线程都将停止 而不仅仅是当前线程 Linux上传文件的方法 mac s
  • C# NPOI 创建Excel

    C NPOI 创建Excel NPOI是一个供给C 操作导入或导出Excel的开源工具 NET版本 NET 5 NPOI版本 2 6 0 基本使用思路 创建工作薄 Workbook 工作薄 Workbook 中创建工作表 WorkSheet
  • MySQL 深度分页性能急剧下降,该如何优化?

    1 背景 mysql使用select limit offset rows分页在深度分页的情况下 性能急剧下降 例如 select 的情况下直接 limit 600000 10 扫描的是约60万条数据 并且是需要回表60W次 也就是说 部分性
  • 《Effective C++》学习笔记——区分接口继承和实现继承

    派生类public继承自基类 其中函数均是接口继承 实现继承又分为缺省继承与强制继承 对应着虚函数与非虚函数 我们在做项目时 对于任何事物都要抱有先描述再组织的心态 因此 当描述事物为其构建框架尤其是存在继承 is a 关系时 一定要搞清楚
  • centos配置telnet

    安装telnet yum install xinetd y yum install telnet server y yum install telnet y 2 启动xinetd服务和telnet服务 systemctl start xin
  • Vue双向数据绑定指令——v-mode

    前面我讲了V bind指令 该指令只能实现数据的单向绑定 从M自动绑定到V 无法实现数据的双向绑定 不能将数据传回mv控制的m中 也就是不能将数据传回逻辑层 这样前端和逻辑层便不能进行数据交互 为解决此问题 v model指令应运而生 v
  • 用生成数据做好隐私保护|Betterdata

    近年来 数据隐私保护正成为人们高度关注的问题 而匿名性并不能够从根本上解决数据泄露的困扰 此时 合成数据集 的方式正在成为数据保护的有效方法 Betterdata Betterdata 是一款生成合成数据的工具 在不影响准确度和隐私安全的前
  • SAR动目标检测系列:【2】多通道动目标检测

    在SAR的动目标检测应用中 要到达更好的检测性能 必须依赖于多通道检测方案 前文讲了单通道MTI的方法 与单通道系统相比 多通道SAR系统增加了系统自由度 可以通过杂波抑制提高运动目标的图像信杂噪比 改善系统的最小可检测速度和定位能力 同时
  • 将DataFrame某列中的空值填充为0

    客户需求 将空值填充为0 数据存储情况如下 python代码如下 import pandas as pd 获取数据 df pd read excel test xlsx sheet name test print 查看数据 print df
  • 十大程序员最实用的技术社区网站

    今天给大家整理一份国内程序员最实用的开源社区网站清单 希望可以给大家带来一点帮助 第一名 CSDN 中国专业IT社区CSDN Chinese Software Developer Network 创立于1999年 致力于为中国软件开发者提供
  • 【C语言链表实现】学生成绩管理系统(功能全面,通俗易懂)

    学生成绩管理系统 1 问题描述 2 概要设计 2 1 系统主要执行逻辑 2 2 函数调用关系 3 函数实现 3 1 头文件 3 2 核心数据结构设计 3 3 密码登录 3 4 界面菜单 3 5 保存学生信息 3 6 读取学生信息 3 7 录
  • pydantic学习与使用-13.Field 定制字段使用别名alias

    前言 pydantic 里面json是一个内置属性 我想定义一个字段名称是json 这就会引起报错 Field name json shadows a BaseModel attribute use a different field na
  • C++的智能指针如何赋值

    随着C 语言的发展 出现了一个新的功能 那便是 智能指针 而智能指针如何赋值 我来在此探讨一下 目录 1 如何给新创建的智能指针赋值 2 将普通指针赋值给智能指针 3 智能指针赋值给智能指针 shared ptr互相之间赋值 unique
  • go : GoLand安装及环境配置

    前因后果 新学期新气象 开学的第一节课是zw老师的区块链技术与应用领域 congratulations 涉及编程实验 使用Go语言 需要安装GoLand软件进行下一步 Go语言下载地址 golang下载链接 进去之后选择对应的版本下载 这里
  • linux 开启审计功能及规则配置

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 查询审计功能 service auditd status 审计日志文件目录 var log a
  • 如何提高测试用例覆盖率?阿里测试工程师是这样说的

    我们将讨论测试覆盖率的相关问题 以及它如何帮助提高软件质量的 测试覆盖率概述 测试覆盖率被定义为一种测试技术指标 它表明我们的测试用例是否真正完全覆盖了应用程序代码中的各种可能以及在运行这些测试用例时执行了多少代码 如果有10个需求并创建了