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

图片

本次分享论文: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.mzph.cn/pingmian/41224.shtml

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

相关文章

使用随机生成的随机数过程中,保存数据到数组中 出现很多null

如果 randomId 是一个较大的数字,那么会在 temp 数组中留下很多空位。可能会导致很多 null 值。将 temp 从数组改为对象,以避免稀疏数组的问题。 稀疏数组:当一个数组中大部分元素为0,或者为同一值(也就是说可以不是0…

【鸿蒙学习笔记】Image迭代完备

Image Image($r(app.media.zhibo)).width(96) // 图片宽度.height(96) // 图片高度.borderRadius(12) // 图片圆曲度.objectFit(ImageFit.Fill) // 不明objectFit Column({ space: 20 }) {Row() {Image($r(app.media.startIcon)).width(66).height(66).borderRadius(12)}.bac…

结合现货黄金mt4平台 谈谈止损的使用

现在我们做现货黄金交易都可以通过MT4平台来实现从入场到出场的全程操作。所以利用这种网上交易平台,我们能更加好地做止损,下面我们就来讨论一下基于现货黄金MT4平台的止损技巧。 要在现货黄金MT4平台中做好止损,首先我们要确定风险的口子是…

160行代码实现代码雨效果

效果 序言 很喜欢黑客帝国里面那种代码雨的效果,为了锻炼自己的特效编写能力就尝试了一下,花了一下午写出来了。有需要的小伙伴拿去参考. 代码 package com.zgh.myapplication;import android.content.Context; import android.graphics.Canvas; impo…

File类常用构造方法及方法详解

File类是对文件或者目录的一系列操作。如文件和目录的创建、检查、删除、路径获取等。现介绍下常用构造方法和方法。 一、构造方法。 File类提供了多个构造方法来创建File对象,以表示文件或目录。 1. File(String pathname) 通过指定文件路径名创建File对象。 参…

Linux命令大全(面试必备)

前两节有说Git命令,反馈还不错,看来大家对这些必备的命令还挺感兴趣哈,这节就罗列一些Linux必须掌握的命令。 干货满满哦,直接发车... 一、常用的基本命令 1、关机开机 关机 shutdown-h now 立刻关机shutdown-h 3 3分钟后…

文件操作及部分文件函数的介绍学习(上)

目录 前言 1.为什么要要使用文件? 2.什么是文件? 2.1程序文件 2.2数据文件 2.3文件名 4.文件的打开和关闭 4.1 流和标准流 4.1.1流 4.1.2标准流 4.2文件指针 4.3文件的打开和关闭 结语 前言 Hello,亲爱的小伙伴们,作…

Dungeonborne卡顿怎么办 快速解决Dungeonborne卡顿问题

随着Dungeonborne游戏剧情的深入,玩家将逐渐解锁更多的地图和副本,每个区域都有其独特的生态和敌人。在探索的过程中,玩家不仅可以获得强大的装备和道具,还能结识到志同道合的伙伴,共同面对更强大的敌人。不过也有玩家…

新加坡很火的slots游戏代投Facebook广告新流量趋势

新加坡很火的slots游戏代投Facebook广告新流量趋势 在新加坡这片充满活力的土地上,Slots游戏以其独特的魅力和吸引力,迅速成为了许多玩家的心头好。而Facebook,作为全球最大的社交媒体平台之一,为Slots游戏的推广提供了得天独厚的…

三、数据库系统(考点篇)

1、三级模式一两级映像 内模式:管理如何存储物理的 数据 ,对数据的存储方式、优化、存放等。 模式:又称为概念模式, 就是我们通常使用的表这个级别 ,根据应用、需求将物理数据划分成一 张张表。 外模式:…

【算法:贪心】:贪心算法介绍+基础题(四个步骤);柠檬水找零(交换论证法)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 前言: 暑假马上就要留校学习算法了,现在先学习一下基本的算法打打基础。本篇要讲的是…

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本&#xf…

基于DMAIC降低气缸体水套芯磕碰伤率

在制造业的激烈竞争中,产品质量的提升一直是企业追求的目标。气缸体作为汽车发动机的核心部件,其生产过程中的质量控制尤为重要。今天,深圳天行健企业管理咨询公司就来分享一下如何运用DMAIC(定义、测量、分析、改进、控制&#x…

基于java+springboot+vue实现的电影院购票系统(文末源码+Lw)274

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装电影院购票系统软件来发挥其高效地信息处理的作用&#xf…

光电液位传感器在宠物洗澡机的应用

光电液位传感器在宠物洗澡机中的应用,为洗澡机的智能化管理提供了重要支持和保障。这种先进的传感技术不仅提升了设备的操作便捷性,还大幅度提高了洗澡过程的安全性和效率。 宠物洗澡机作为宠物护理的重要设备,其水位的控制至关重要。光电液…

C语言 do while 循环语句练习 中

练习: 4.编写代码,演示多个字符从两端移动,向中间汇聚 // 编写代码,演示多个字符从两端移动,向中间汇聚 //welcome to china!!! //w ! //we !! //wel !!! //.... //welco…

【图卷积网络】GCN基础原理简单python实现

基础原理讲解 应用路径 卷积网络最经典的就是CNN,其 可以提取图片中的有效信息,而生活中存在大量拓扑结构的数据。图卷积网络主要特点就是在于其输入数据是图结构数据,即 G ( V , E ) G(V,E) G(V,E),其中V是节点,E是…

graphviz 报错: No module named ‘graphviz‘

在使用完命令 conda install graphviz 后此时已经显示已安装,但仍然报错! 我是使用以下命令解决的。 conda install python-graphviz

Python爬虫教程第0篇-写在前面

为什么写这个系列 最近开发了个Python爬虫的脚本,去抢一个名额,结果是程序失败了,中间有各种原因,终究还是准备不足的问题。我想失败的经验或许也可贵,便总结一下当初从0开始学Python,一步步去写Python脚本…

【docker nvidia/cuda】ubuntu20.04安装docker踩坑记录

docker nvidia 1.遇到这个错误,直接上魔法(科学上网) OpenSSL SSL_connect: Could not connect to nvidia.github.io:443 这个error是运行 NVIDIA官方docker安装教程 第一个 curl 命令是遇到的 2. apt-get 更新 sudo apt update遇到 error https://download.do…