论文

ClozeMaster:利用 LLM 填充屏蔽真实程序来模糊 Rust 编译器

ClozeMaster: Fuzzing Rust Compiler by Harnessing LLMs for Infilling Masked Real Programs

摘要

由于 Rust 强调内存和线程安全,因此在关键系统开发中越来越多地采用 Rust,确保 Rust 编译器的可靠性至关重要。然而,考虑到 Rust 复杂的语法和严格的要求,为 Rust 编译器生成有效的测试程序提出了重大挑战。随着大语言模型(LLM)的日益普及,软件测试领域的许多研究都在探索使用LLM来生成测试用例。尽管如此,直接使用 LLM 生成 Rust 程序通常会导致大量无效的测试用例。现有研究表明,触发历史编译器错误的测试用例可以帮助软件测试。我们对 Rust 编译器错误问题的调查支持了这一观察结果。受现有工作和实证研究的启发,我们引入了一种基于括号的掩蔽和填充策略,称为 clozeMask。 clozeMask 策略包括从历史问题报告中提取测试代码,识别和屏蔽具有特定结构的代码片段,并使用 LLM 填充屏蔽部分以合成新的测试程序。这种方法利用了 LLM 的生成能力,同时保留了触发 Rust 编译器错误的能力。它可以对编译器的行为进行全面测试,特别是探索边缘情况。我们将我们的方法作为原型 CLOZEMASTER 实施。 CLOZEMASTER 已识别出 rustc 和 mrustc 的 27 个已确认的错误,其中 10 个已被开发人员修复。此外,我们的实验结果表明,CLOZEMASTER 在代码覆盖率和有效性方面优于现有模糊器。