【论文速读】|FuzzAug:探索模糊测试作为神经网络测试生成的数据增强

news2025/1/17 3:50:23

图片

本次分享论文:FuzzAug: Exploring Fuzzing as Data Augmentation for Neural Test Generation

基本信息

原文作者:Yifeng He, Jicheng Wang, Yuyang Rong, Hao Chen

作者单位:University of California, Davis

关键词:软件测试,数据增强,模糊测试,大语言模型,单元测试,测试生成

原文链接:https://arxiv.org/pdf/2406.08665

开源代码:暂未提供

论文要点

论文简介:在现代软件工程中,测试是确保程序可靠性的关键。然而,测试过程既重要又昂贵,促使自动化测试用例生成方法的兴起。传统的基于覆盖率的模糊测试和基于神经网络的测试生成各有优缺点。本文提出了一种名为FuzzAug的新型数据增强技术,结合模糊测试和大语言模型的优势,生成语法和语义上有效的多样化测试数据。实验结果表明,使用FuzzAug增强的数据集训练的模型,测试用例准确率提高了11%,分支覆盖率也显著提升。

图片

研究目的:本文旨在解决软件工程中单元测试不足的问题。单元测试是确保软件组件满足设计规范的重要手段,但编写高质量单元测试既困难又耗时。为了提高自动化测试生成的有效性和多样性,本文提出了FuzzAug技术,结合模糊测试和大语言模型,自动生成语义丰富且语法正确的测试数据。通过在现有数据集上应用FuzzAug,期望改善模型的测试生成性能,提升软件测试的覆盖率和准确性,从而助力开发人员更高效地进行软件验证。

研究贡献:

1. 提出了一种新颖的数据增强方法FuzzAug,专为神经测试生成模型设计。该数据增强方法解决了代码库中测试代码不足和被测函数精确且多样化输入缺乏的问题。据悉,FuzzAug是第一个用于神经测试生成的数据增强方法。

2. 构建并发布了一个新的Rust函数数据集,包含功能级别的代码-测试对,用于训练Rust程序的测试生成模型。在该数据集上应用了FuzzAug并发布了生成的增强数据集。

3. 通过在数据集上训练自回归语言模型验证了FuzzAug的质量。添加FuzzAug后,模型性能的提升展示了在训练语料库中添加模糊测试增强测试函数的必要性和好处。

引言

在软件工程中,测试是确保大型软件应用程序质量和稳定的重要过程。单元测试是开发人员编写和执行的自我评估测试,旨在证明软件中的组件符合设计规范中的要求。然而,尽管测试的重要性,开发人员并不总是贡献新的测试,因为很难确定要测试的代码,将其隔离为单元,以及找到相关的输入。自动化单元测试生成是解决这些问题的方法,通过将所有函数视为被测单元(焦点函数),但生成的测试在可读性和相关输入输出对的正确性方面并不令人满意。

最近,利用机器学习模型特别是大语言模型(LLMs)的强大功能来缓解这些问题的研究逐渐兴起。尽管LLMs可以生成有意义的程序,但由于训练数据中单元测试数量和多样性不足,其在生成高质量测试方面的能力受到限制。本文提出了FuzzAug,一种结合模糊测试和LLMs优势的新颖数据增强技术,以改善单元测试生成的数量和多样性,从而提升软件测试的自动化水平。

FUZZAUG设计

FuzzAug旨在通过模糊测试增强神经测试生成模型的数据集。该方法通过随机生成有效输入来提高训练数据的多样性和覆盖率。首先,模糊测试生成具有程序行为特征的随机输入,确保数据在软件测试上下文中的有效性和意义。其次,通过代码转换,将模糊测试的目标转换为语法和语义正确的单元测试模板。这些模板在执行过程中通过模糊器验证其语法正确性,并保持测试函数的语义完整性。最终,FuzzAug生成的单元测试数据不仅丰富了训练集,还增强了模型处理多样化测试场景的能力,从而提高自动化测试生成的效果和覆盖率。

图片

实验设置

数据收集:选择Rust语言进行研究,因为Rust项目结构化良好,便于构建和运行。从GitHub上收集了249个符合要求的Rust开源项目,确保这些项目活跃且包含单元测试和模糊测试目标。通过这些项目,收集了12452个函数调用和6481个单元测试对。为了增强数据,使用LLVM的libFuzzer工具对每个模糊测试目标进行模糊测试,生成了20504个增强后的测试对,最终构建了一个包含64579个测试对的综合数据集。

图片

模型训练:选用了SantaCoder作为基础模型,这是一个最先进的开源代码生成模型,具有1.1B参数。训练过程中,采用因果语言建模(CLM)技术,对焦点函数和单元测试函数的组合进行训练。训练过程设置最大序列长度为2048,批量大小为16,学习率为5e-5,使用Adam优化器。首先用基础数据集训练模型,随后用增强后的数据集进行继续训练,确保模型能够充分学习到模糊测试增强带来的数据多样性和复杂性。

研究问题:本研究主要围绕以下两个问题展开:

1. FuzzAug是否能够提高生成测试用例的准确性?通过评估生成测试用例的正确性和编译率来验证这一点。

2. FuzzAug是否能够提高生成单元测试的实用性?通过评估生成的单元测试函数的分支覆盖率和通过率来验证这一点。此外,还考察了FuzzAug对不同模型的泛化能力,评估其在其他代码生成模型中的效果。

评估设置

HumanEval-X被选择作为评估基准,这是一套手工制作的多语言代码生成基准,包含164个不同的问题。根据每个问题的描述提示模型生成相应的单元测试函数。为了确保评估的公平性,所有实验中使用相同的提示方法和基本的后处理步骤,仅对生成的测试函数进行必要的语法修正。记录了生成测试用例的准确性、编译率、通过率和分支覆盖率,综合评估FuzzAug对测试生成性能的提升。

研究结果

实验结果显示,FuzzAug显著提升了生成测试用例的准确性和单元测试的实用性。与基线模型相比,使用FuzzAug训练的模型在测试用例准确率上提高了11%。此外,FuzzCoder在生成的单元测试函数中达到了更高的分支覆盖率,是未使用FuzzAug训练模型的两倍。FuzzAug对不同的代码生成模型同样有效,在其他模型(如CodeLlama)上也表现出色,进一步验证了其泛化能力和实用性。综合来看,FuzzAug通过增强训练数据的多样性和复杂性,显著提升了自动化测试生成的性能,为提高软件测试的覆盖率和准确性提供了有效的方法。

研究讨论

FuzzAug显著提升了神经测试生成模型的性能,通过引入多样化且有效的测试数据,改善了测试用例的准确性和单元测试的覆盖率。尽管如此,FuzzAug的实现依赖于预定义的模糊测试目标,这可能限制其在某些项目中的应用。此外,在生成长输入时,模型有时会消耗所有令牌限制,导致生成的测试函数无法编译。未来的研究可以进一步优化FuzzAug的方法,减少对预定义模糊目标的依赖,并改进模型在处理长输入时的效率。总体而言,FuzzAug在提升自动化测试生成的质量和实用性方面展现了巨大的潜力。

相关工作

模糊测试和神经测试生成是自动化软件测试的两个重要领域。模糊测试通过随机生成输入,探索程序的新路径,发现潜在漏洞。AFL++和libFuzzer是其中最著名的工具。神经测试生成利用大语言模型(如SantaCoder和CodeLlama)生成语义丰富的测试用例。此前的研究如UniTSyn和CAT-LM,通过收集和对齐代码和测试对,改进了测试生成模型的性能。然而,现有方法在处理测试数据不足和多样性方面仍存在局限性。FuzzAug结合了模糊测试和语言模型的优势,提出了一种新颖的数据增强方法,显著提升了测试生成的效果。

论文结论

本文提出的FuzzAug方法,通过结合模糊测试和大语言模型,有效解决了测试数据不足和多样性缺乏的问题。实验结果表明,使用FuzzAug增强的数据集训练的模型在测试用例准确性和单元测试覆盖率方面显著优于基线模型。FuzzAug不仅提高了神经测试生成的性能,还展示了良好的泛化能力,适用于不同的代码生成模型。未来的研究可以进一步优化此方法,扩大其应用范围。总体而言,FuzzAug为自动化软件测试生成提供了一种高效且实用的解决方案,具有重要的应用价值。

原作者:论文解读智能体

校对:小椰风

图片

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

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

相关文章

springboot 篮球馆管理系统-计算机毕业设计源码21945

目 录 摘要 1 绪论 1.1选题背景 1.2研究意义 1.3论文结构与章节安排 2 篮球馆管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 …

分子AI预测赛笔记

#AI夏令营 #Datawhale #夏令营 Taks1 跑通baseline 根据task1跑通baseline 注册账号 直接注册或登录百度账号,etc fork 项目 零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 启动项目 选择运行环境,并点击确定,没…

因果推断前沿研究方向都在这了!

【因果推断】是研究如何从观测数据中识别和估计变量之间因果关系的领域。它在医学、经济学、环境科学等多个领域有着广泛的应用,帮助科学家和决策者理解复杂现象背后的因果机制。通过使用统计方法、机器学习技术以及逻辑推理,因果推断能够揭示变量间的潜…

Frrouting快速入门——OSPF组网(一)

FRR简介 FRR是FRRouting的简称,是一个开源的路由交换软件套件。其作者源自老牌项目quaga的成员,也可以算是quaga的新版本。 使用时一般查看此文档:https://docs.frrouting.org/projects/dev-guide/en/latest/index.html FRR支持的协议众多…

Objection 对命令的批量操作

假定现在需要对好多不同的类进行批量hook,逐个hook非常繁琐,那么可以要将这些hook的类放到一个文件里,并且在这些类的前面加上hook命令,内容如下 使用如下命令执行该文件中的命令 objection -g 测试 explore -c d:/hookData/toHoo…

go sync包(五) WaitGroup

WaitGroup sync.WaitGroup 可以等待一组 Goroutine 的返回,一个比较常见的使用场景是批量发出 RPC 或者 HTTP 请求: requests : []*Request{...} wg : &sync.WaitGroup{} wg.Add(len(requests))for _, request : range requests {go func(r *Reque…

深入解读:如何解决微调扩散模型时微调数据集和训练数据集之间的差距过大问题?

Diffusion Models专栏文章汇总:入门与实战 前言:在微调扩散模型的时候经常会遇到微调数据集和训练数据集之间的差距过大,导致训练效果很差。在图像生成任务中并不明显,但是在视频生成任务中这个问题非常突出。这篇博客深入解读如何…

采用B/S模式 可跨平台使用的数据采集监控平台!

数据采集监控平台是一款专注于工业企业生产设备管理、数据采集、数据分析、数据管理、数据存储、数据传输等的软件系统。系统具备丰富的接口,配置灵活,方便部署,通过采集企业生产设备的数据集中处理,将各个信息孤岛有机连接&#…

2024年上半年数据泄露风险态势报告-百度网盘下载

在快速崛起的数字经济时代,数据作为企业的核心资产及重要战略资源,在高速增长的同时,其背后的数据风险也在不断攀升,日渐复杂的数据泄露形势,已成为企业数字化发展赛道的严重阻碍。 《2024年上半年数据泄露风险态势报…

MySQL 8.0 架构 之 中继日志(Relay log)

文章目录 MySQL 8.0 架构 之 中继日志(Relay log)中继日志(Relay log)概述相关参数参考 【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 来源|WaltSQL和数据库技术(ID:SQLplusDB) MySQL 8.0 OCP …

软件测评中心▏软件验收测试方法和测试内容简析

在当今数字化转型的浪潮下,软件验收测试变得越来越重要。软件验收测试,顾名思义,是对软件进行验收的过程中进行的一项测试。它用于确保软件在满足需求、达到预期效果后才能正式交付给客户使用。软件验收测试是一项全面、系统的测试过程&#…

软信天成:您的数据仓库真的“达标”了吗?

在复杂多变的数据环境中,您的数据仓库是否真的“达标”了?本文将深入探讨数据仓库的定义、合格标准及其与数据库的区别,帮助您全面审视并优化您的数据仓库。 一、什么是数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、…

昇思25天学习打卡营第15天|ResNet50图像分类

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) ResNet50图像分类 图像分类是最基础的计算机视觉应用,属于有监督学习类别,如给定一张图像(猫、狗、飞机、汽车等等),判断图像所属的类别。本章将介绍使用ResN…

Spzhi知识付费社区主题免费下载

主题介绍 用typecho打造一款知识付费社区主题,带会员功能,为内容创业者提供知识变现一站式解决方案,让用户沉淀到自己的平台,形成自己的私域流量池,打造流量闭环,零门槛搭建你的移动网络课堂 主题功能 支…

收银系统源码-收银台营销功能-购物卡

1. 功能描述 购物卡:基于会员的电子购物卡,支持设置时效、适用门店、以及可用商品;支持售卖和充值赠送,在收银台可以使用; 2.适用场景 会员充值赠送活动,例如会员充值1000元,赠送面值100元购…

docker初始化运行mysql容器时自动导入数据库存储过程问题

问题:用navicat导出的数据库脚本,在docker初始化运行mysql容器时,导入到存储过程时出错。 ERROR 1064 (42000) at line 2452: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for t…

2065.力扣每日一题7/1 Java(深度优先搜索DFS)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先构建一个图…

【VIM的使用】

Vim 是一个非常强大的文本编辑器,尤其在 Linux 环境下被广泛使用。它基于 vi 编辑器开发而来,增加了许多功能和改进。下面是一个简化的 Vim 教程,帮助你快速上手: 启动 Vim 要启动 Vim,只需在终端中输入 vim [filen…

104.二叉树的最大深度——二叉树专题复习

深度优先搜索(DFS)是一种常用的递归算法,用于解决树形结构的问题。在计算二叉树的最大深度时,DFS方法会从根节点开始,递归地计算左右子树的最大深度,然后在返回时更新当前节点所在路径的最大深度。 如果我…

协程调度模块

什么是协程和协程调度? 基本概念 协程 协程是一种比线程更轻量级的并发编程结构,它允许在函数执行过程中暂停和恢复执行状态,从而实现非阻塞式编程。协程又被称为用户级线程,这是由于协程包括上下文切换在内的全部执行逻辑都是…