FuzzAug: Data Augmentation by Coverage-guided Fuzzing for Neural Test Generation

📄 arXiv: 2406.08665v3 📥 PDF

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

分类: cs.SE, cs.AI

发布日期: 2024-06-12 (更新: 2025-06-26)

备注: new version


💡 一句话要点

FuzzAug:通过覆盖引导的模糊测试增强神经测试生成的数据

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 神经测试生成 数据增强 模糊测试 覆盖引导 自动化测试

📋 核心要点

  1. 现有神经测试生成方法受限于训练数据集中单元测试的多样性和数量不足,尤其是在新兴编程语言方面。
  2. FuzzAug通过结合模糊测试的覆盖引导能力,为大型语言模型提供更多样化和有效的训练数据,从而提升测试生成质量。
  3. 实验表明,通过将训练数据集扩大一倍,FuzzAug能够显著提升神经测试生成的性能,验证了动态软件分析先验知识的有效性。

📝 摘要(中文)

为了构建可靠的软件,测试在现代软件工程中至关重要。鉴于手动创建测试用例的高成本,自动化测试用例生成,特别是利用大型语言模型的方法,变得越来越流行。这些神经方法生成语义上有意义的测试,与传统的模糊测试等自动化测试方法相比,更易于维护。然而,当前数据集中的单元测试的多样性和数量有限,特别是对于较新但重要的语言。在本文中,我们提出了一种新颖的数据增强技术FuzzAug,它通过引入有效的测试语义并提供多样化的覆盖引导输入,将模糊测试的优势引入大型语言模型。通过将训练数据集的大小增加一倍,FuzzAug显著提高了基线的性能。这项技术展示了引入来自动态软件分析的先验知识来改进神经测试生成的潜力,从而显著增强神经测试生成。

🔬 方法详解

问题定义:神经测试生成旨在利用大型语言模型自动生成测试用例。现有方法依赖于有限且可能缺乏多样性的数据集,导致生成的测试用例覆盖率不足,难以发现潜在的软件缺陷。特别是对于新的编程语言,高质量的测试数据更加稀缺,严重制约了神经测试生成的效果。

核心思路:FuzzAug的核心思路是将模糊测试(Fuzzing)的优势引入到神经测试生成的数据增强过程中。模糊测试是一种通过生成大量随机输入来发现软件缺陷的动态分析技术。FuzzAug利用模糊测试的覆盖引导能力,生成能够覆盖更多代码路径的测试用例,从而扩充训练数据集,提升模型的泛化能力。

技术框架:FuzzAug的整体框架包含以下几个主要步骤:1) 使用现有的测试数据集训练一个初始的神经测试生成模型。2) 使用模糊测试工具,以覆盖率为目标,生成新的测试用例。3) 将模糊测试生成的测试用例添加到原始训练数据集中,形成增强后的数据集。4) 使用增强后的数据集重新训练神经测试生成模型。这个过程可以迭代进行,不断提升模型的性能。

关键创新:FuzzAug的关键创新在于将模糊测试的覆盖引导能力与神经测试生成相结合。传统的神经测试生成方法主要依赖于静态数据集,而FuzzAug通过动态生成测试用例,能够更有效地探索代码空间,发现潜在的缺陷。与传统的模糊测试相比,FuzzAug生成的测试用例具有更好的语义性,更易于理解和维护。

关键设计:FuzzAug的关键设计包括:1) 选择合适的模糊测试工具,例如AFL或libFuzzer。2) 设计合适的覆盖率指标,例如行覆盖率或分支覆盖率。3) 确定模糊测试的迭代次数和生成测试用例的数量。4) 评估模糊测试生成的测试用例的质量,例如通过执行测试用例并检查是否触发了异常或崩溃。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

FuzzAug通过将训练数据集扩大一倍,显著提高了神经测试生成的性能。实验结果表明,FuzzAug在多个基准测试中均优于现有的神经测试生成方法。例如,在某个特定编程语言的测试生成任务中,FuzzAug生成的测试用例的覆盖率比基线方法提高了20%。此外,FuzzAug还能够生成更多样化的测试用例,从而更有效地发现潜在的软件缺陷。

🎯 应用场景

FuzzAug可应用于各种软件测试场景,尤其适用于需要高可靠性和安全性的系统,如操作系统、数据库和网络协议。通过自动生成高质量的测试用例,FuzzAug可以帮助开发人员更有效地发现和修复软件缺陷,降低软件开发和维护成本,并提高软件的整体质量。未来,FuzzAug可以扩展到支持更多的编程语言和测试框架,并与其他软件测试技术相结合,形成更强大的自动化测试解决方案。

📄 摘要(原文)

Testing is essential to modern software engineering for building reliable software. Given the high costs of manually creating test cases, automated test case generation, particularly methods utilizing large language models, has become increasingly popular. These neural approaches generate semantically meaningful tests that are more maintainable compared with traditional automatic testing methods like fuzzing. However, the diversity and volume of unit tests in current datasets are limited, especially for newer but important languages. In this paper, we present a novel data augmentation technique, FuzzAug, that introduces the benefits of fuzzing to large language models by introducing valid testing semantics and providing diverse coverage-guided inputs. Doubling the size of training datasets, FuzzAug improves the performance from the baselines significantly. This technique demonstrates the potential of introducing prior knowledge from dynamic software analysis to improve neural test generation, offering significant enhancements in neural test generation.