Coco Test Engine:代码覆盖率分析的新时代

news2024/11/20 6:36:40

本文翻译自:Coco Test Engine – The New Era of Code Coverage Analysis

原文作者:Qt Group首席软件工程师Sébastien Fricker

审校:Felix Zhang

我们的Coco 7重大更新带来了一个长期以来备受期待的功能——测试数据生成(即Coco Test Engine),这为代码覆盖率分析工具Coco增添了强大的新工具。为此,我们采访了Coco的首席开发者Sébastien Fricker,深入探讨了这次更新及其如何使代码覆盖率分析得到改善。

简而言之,测试数据生成功能通过以下方式简化代码分析流程,使代码质量保障变得更加简单:

  1. 快速达到尽可能高的覆盖率
  2. 在代码覆盖率分析中消除重复
  3. 自动收集包括边缘案例的测试数据

采访Coco的首席开发者Sébastien Fricker

问:你们想通过代码覆盖率分析解决什么问题?  

过去,软件开发者必须自行创建单元测试和测试数据。这本身就是一项艰巨的任务,效果也并非最佳,因为自己创建的数据往往覆盖不到应该测试的所有边缘案例。

比如说,你正在开发一个计算器应用。为了测试它,你可能会为简单的表达式编写单元测试,然后手动输入测试数据:1+2、3*4、3/2、3-2等,来看计算器输出什么结果。

即使是这样简单的案例,以前也需要花费大量手工努力去准备测试案例和进行分析。通常,测试代码可能比实际的产品代码还要庞大。对于一小段源代码,可能需要写一大堆单元测试来达到100%的覆盖率。

这就是为什么开发者通常只关注常规的测试案例(比如典型用法、正常流程、正确数据等),而忽略许多边缘案例(比如错误案例、非法输入、中断的流程等)。举个例子,对于我们的计算器应用,可能会忽略除以零(1/0)、空表达式或不合法的输入(如一个带有多个小数点的数字1.2.3)。

最终,你可能会花费大量时间寻找测试案例来提高对代码质量的信心,但由于在测试中忽略或遗漏了一些案例,最终还是无法实现高覆盖率。由此,功能质量和开发功能所花费的时间之间的权衡也让人难以取舍。

测试数据生成是如何帮助解决这个问题的呢? 

测试数据生成功能正如其名,Coco Test Engine能够自动生成测试数据,有助于提升测试质量,覆盖广泛的边缘或错误案例。通过运行算法,Coco Test Engine能够发现那些通常难以覆盖到的案例,或补充完善现有测试套件。

Coco的测试数据生成通过三种方式简化编写数据驱动的测试:

  1. 将测试代码与测试数据分离。许多测试框架并不支持数据驱动测试,这意味着开发者需要为每个测试数据编写单独的函数。如果支持,测试数据生成和单元测试代码就需要放在同一个文件中,这就要求数据符合C++语法,同时也增加了单元测试代码的体积。
  2. 数据编辑器让在电子表格格式中查看和编辑测试变得简单。
  3. 这一套工具不仅能够帮助发现新的测试案例,还简化了随代码变化更新测试数据和测试者进行数据验证的流程。

“Coco Test Engine让您更有信心地去进行代码重构。你可以专注于常规案例,让Coco覆盖其他所有案例。”

在哪些情况下,测试数据生成特别有用?

比如说,您打算重写一段代码——这种重构工作是常有的事。如果您在没有适当单元测试的情况下进行修改,可能会引入许多问题。

Coco通过测试数据生成自动执行单元测试和验证代码修改。这得益于我们有一份参考代码:被重构的代码本应该是能够正常运行的。因此,测试案例生成便能产生有效的测试数据,用于测试的参考。

这本质上能够让您在重构代码更加得心应手。您只需让它自动产生一套测试,等到覆盖率达到较高水平后,就可以全心修改代码,而让测试引擎自动处理那些需要检测的各种异常数据。

问:哪些行业能从改善的代码覆盖率分析中获得最大的价值?

无论你正在开发的应用或软件多简单,这种方法都是有用的。简单的代码在许多关键系统中起着至关重要的作用,比如医疗设备、航空和汽车等。一般来说,对于安全性要求极高的行业和软件,高代码覆盖率以及测试数据生成功能是必不可少的。

以航空业为例。这个行业有着非常高的标准,某些情况下要求100%的代码覆盖率。如果无法实现,则每一行未覆盖的代码都需要有充分的解释。

将覆盖率从10%提升到11%相对容易,但随着覆盖率的增加,提高到更高水平变得越来越困难。如果从50%提升到51%只需要几分钟,那么达到90%可能需要花费一个小时。当你试图实现100%的覆盖率时,测试所需的时间将呈指数级增加Coco能够帮你更快达到所需的覆盖水平,它利用测试者提供的数据,并通过自动寻找新的测试案例来补充完善。

但仅仅找到测试数据还不够,还需要对数据的质量进行审核。继续以计算器为例,用户可以轻松地提供“4/2”这样的除法输入数据,结果是“2”。通过让Coco发现新的测试,它可能会找到例如“1/0”的除法案例。但这个输出的正确结果是什么呢?是“无限大”?“非法表达式”?还是“错误:除数不可为零”?

输出结果需要符合用户的预期,只有人才能做出这样的决定——应用程序本身无法自行决定。这就是为什么每个测试数据实例都会添加一个验证标志,它允许你标记数据为已审核,而不只是因为它是之前函数调用的输出而默认它就是正确的。

“对于某些产品,将代码覆盖率提高到100%可能需要几个月的时间。Coco让你更快达到所需的覆盖率,并帮助对剩余代码进行解释。”

Coco Test Engine在实际中是如何工作的?

这里有一个流程的简化概述:

A. 使用两个宏编写一小段单元测试代码:

     1. FETCH来获取新的输入数据

     2. CHECK来比较输出和预期结果

B. 编译单元测试

C. 使用数据编辑器创建一些测试案例,并像正常应用程序那样调试它

D. 执行测试探索以找到新案例并提高覆盖率

E. 审查生成的数据,确认输出是否符合预期

在使用Coco的测试数据生成功能时,需要考虑的一点是:初始设置可能需要一些时间,因为你需要验证算法提供的更多测试数据。但随着时间的推移,你会发现它带来的好处绝对远大于投入。

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

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

相关文章

南充文化旅游职业学院领导一行莅临泰迪智能科技参观交流

6月18日,南充文化旅游职业学院旅游系副书记刘周、教务处教学运行与质量保障科科长及智慧旅游技术应用专业教研室主任李月娴、大数据技术专业负责人 龙群才、大数据技术专业专任教师 李昱洁莅临泰迪智能科技产教融合实训中心参观交流。泰迪智能科技董事长张良均、副总…

Mac安装 VirtualBox虚拟机

在Mac上安装VirtualBox虚拟机的步骤如下: 步骤1:下载VirtualBox 首先,你需要访问Oracle VM VirtualBox官网 https://www.virtualbox.org,然后在下载页面选择对应的Mac版本下载。 步骤2:打开下载的安装包 下载完成后…

Java预约家政5.0服务本地服务源码(APP+小程序+公众号+H5)

预约家政本地服务平台系统:一站式解决家居需求🏠💼 一、引言:开启便捷家居新时代 在快节奏的现代生活中,我们渴望拥有更多的时间和精力去享受生活,而不是被繁琐的家务所困扰。预约家政本地服务平台系统应…

人工智能--自然语言处理NLP概述

欢迎来到 Papicatch的博客 目录 🍉引言 🍈基本概念 🍈核心技术 🍈常用模型和方法 🍈应用领域 🍈挑战和未来发展 🍉案例分析 🍈机器翻译中的BERT模型 🍈情感分析在…

PDF密码暴力破解工具,Advanced PDF Password Recovery Enterprise

相信大家从网上下载或者购买PDF文件后,打开后发现被PDF被加密了,没有办法进行修改,也没有办法进行任何操作,这是不是让你很苦恼,今天分享的这个软件就可以很好的解决这个问题,他可以解锁被加密的PDF文件&am…

网络文件如何异地共享?

在数字化时代,文件的共享与访问已成为工作和生活中不可或缺的一部分。由于网络环境的限制,远程连接问题常常困扰着我们。而今,在这个问题的解决方案中,【天联】组网技术凭借其独特的优势崭露头角,成为了实现网络文件异…

Rapidfuzz,一个高效的 Python 模糊匹配神器

目录 01初识 Rapidfuzz 什么是 Rapidfuzz? 为什么选择 Rapidfuzz? 安装 Rapidfuzz 配置 Rapidfuzz 02基本操作 简单比率计算 03高级功能 查找单个最佳匹配 查找多个最佳匹配 使用阈值优化性能 04实战案例…

TikTok电商带货指南:策略、技巧与流量获取全解析

随着短视频平台的迅猛发展,TikTok已成为品牌和个人进行带货营销的主要阵地之一。通过有创意的内容、有效的互动方式和精准的流量获取策略,品牌和个人都能在TikTok上取得显著的带货效果。本文Nox聚星将和大家探讨在TikTok上进行带货营销的有效策略和技巧&…

搜维尔科技:SenseGlove虚拟训练、VR/AR 模拟和研究中的触觉反馈

训练 传统培训成本高昂且风险大,需要重复资产或停产。在培训中使用虚拟现实可以轻松解决这些问题。借助 SenseGlove,终于可以研究和评估与传统培训效果相同的虚拟培训技术。体验低成本的定制 VR 培训,同时保留现实世界的肌肉记忆和记忆力。 …

【STM32】使用标准库检测按键

按键检测使用到GPIO外设的基本输入功能。 1.硬件设计 作者使用的硬件没有按键模块。故使用了一个引脚模拟按键,将PWM1引脚拉低表示按键按下。思路如下:PWM1配置为输入,默认拉高,PWM1手动接地来模拟按下按键,此时PWM&a…

深度学习在岩土工程应用及PFC离散元数值模拟应用

在深度学习与岩土工程融合的背景下,科研的边界持续扩展,创新成果不断涌现。从基本物理模型的构建到岩土工程问题的复杂模拟,从数据驱动的分析到工程问题的智能解决,深度学习正以前所未有的动力推动岩土工程领域的革新。据调查&…

EE trade:现货黄金的计量单位及转换

在现货黄金市场中,计量单位的不同会影响投资者对价格的理解和对交易的操作。因此,了解现货黄金的计量单位是每一位投资者的必修课。对于那些刚刚踏入黄金投资的新手们来说,掌握这些知识尤为重要。本文将为您详细介绍现货黄金的主要计量单位及…

Nginx Rewrite技术

一:理解地址重写 与 地址转发的含义。二:理解 Rewrite指令 使用三:理解if指令四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能。 一:理解地…

抖音短剧看剧系统是怎么做的?怎么样搭建上线运营?

前言: 当前热门短剧已深入大家的日常,针对一些好的短剧更是吸金无数。今天给大家介绍一下短剧这个项目整个运作模式。 一、一部短剧是怎么样呈现到观众眼前的? 首先影视作品公司拍摄剪辑好短剧 ,弄好一切审核后,放到…

【Python】类和对象的深入解析

目录 前言 什么是类? 定义一个类 创建对象 访问和修改属性 方法 类的继承 多态 封装 特殊方法 属性装饰器 总结 前言 Python 是一种面向对象的编程语言,它允许程序员通过类和对象来组织和管理代码。面向对象编程(OOP&#xff09…

【数据结构与算法】最小生成树

文章目录 最小生成树(MST)定义 构造最小生成树Prim算法Kruskal算法 最小生成树(MST) 连通图的生成树包含图的所有顶点,并且只含有尽可能少的边。对于生成树来说,若砍去它的一条边,则会使生成树…

Linux中的文本编辑器vi与vim

摘要: 本文将深入探讨VI和VIM编辑器的基本概念、特点、使用方法以及它们在Linux环境中的重要性。通过对这两款强大的文本编辑器的详细分析,读者将能够更全面地理解它们的功能,并掌握如何有效地使用它们进行日常的文本编辑和处理任务。 引言&…

智慧之选:Vatee万腾平台,引领未来的创新引擎

在数字化浪潮席卷全球的今天,我们身处一个信息爆炸、技术革新的时代。在这样的大背景下,选择一个能够引领我们走向未来的平台显得尤为重要。而Vatee万腾平台,正是这样一个不容错过的智慧之选。 Vatee万腾平台,作为一个集创新、科技…

yolov8图像分割训练

1.背景 最近在做一个AI项目,需要用到yolov8的实例分割功能来确定一个不规则区域,从而找出不规则区域的坐标完成大致定位,以前有用过yolov8的目标检测功能,实际上yolov8的分割功能和检测功能大同小异。本博客将仔细分享使用yolov8图…

【C++提高编程-10】----C++ STL常用拷贝和替换算法

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…