ASSERTIFY: Utilizing Large Language Models to Generate Assertions for Production Code

📄 arXiv: 2411.16927v1 📥 PDF

作者: Mohammad Jalili Torkamani, Abhinav Sharma, Nikita Mehrotra, Rahul Purandare

分类: cs.SE, cs.AI

发布日期: 2024-11-25

备注: 20 pages, 10 figures, 10 listings, 2 tables, preprint


💡 一句话要点

ASSERTIFY:利用大型语言模型为生产代码生成断言,提升代码质量。

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

关键词: 大型语言模型 生产断言生成 提示工程 少样本学习 代码质量 软件开发 自动化测试

📋 核心要点

  1. 现有断言生成方法主要集中于单元测试,难以满足生产代码断言的需求,后者在调试、文档和代码理解方面作用不同。
  2. Assertify利用大型语言模型和提示工程,通过少样本学习生成生产断言,模拟开发者编写断言的思路,提升断言质量。
  3. 实验结果表明,Assertify生成的断言与开发者编写的断言具有较高的结构相似性,ROUGE-L平均分数为0.526,验证了方法的有效性。

📝 摘要(中文)

本文介绍了一种名为Assertify的自动化端到端工具,它利用大型语言模型(LLMs)和提示工程,通过少样本学习来生成生产断言。该工具通过创建上下文丰富的提示,模拟开发人员为其代码创建生产断言的方法。为了评估该方法,我们从GitHub上的22个成熟的Java存储库中抓取了2,810个方法,构建了一个数据集。实验表明,少样本学习是有效的,生成的断言的平均ROUGE-L分数为0.526,表明与开发人员编写的断言具有相当高的结构相似性。这项研究证明了LLM在自动化生成类似于原始断言的生产断言方面的潜力。

🔬 方法详解

问题定义:论文旨在解决生产代码中自动生成断言的问题。现有的断言生成方法主要集中在单元测试上,而生产断言在代码调试、文档编写和代码理解方面具有不同的作用。因此,需要一种能够自动生成高质量生产断言的方法。

核心思路:论文的核心思路是利用大型语言模型(LLMs)的强大能力,通过提示工程和少样本学习,使LLM能够模仿开发人员编写生产断言的方式。通过构建包含丰富上下文信息的提示,引导LLM生成更准确、更符合实际需求的断言。

技术框架:Assertify是一个端到端的自动化工具,其主要流程包括:1) 从代码库中提取代码片段(例如,Java方法);2) 构建包含代码片段上下文信息的提示;3) 将提示输入到LLM中,生成断言;4) 对生成的断言进行评估。该框架的关键在于提示的设计和LLM的选择。

关键创新:该论文的关键创新在于将大型语言模型应用于生产断言的自动生成,并提出了基于提示工程和少样本学习的方法。与传统的基于静态分析或深度学习的方法相比,该方法能够更好地理解代码的语义,生成更自然、更符合开发人员意图的断言。

关键设计:在提示设计方面,论文强调了上下文信息的重要性,例如,代码片段的注释、周围的代码结构等。在少样本学习方面,论文通过提供少量示例断言,引导LLM学习生成断言的模式。具体的LLM选择和参数设置在论文中可能没有详细说明,属于未知的技术细节。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,Assertify通过少样本学习生成的断言与开发者编写的断言具有较高的结构相似性,平均ROUGE-L分数为0.526。该结果验证了利用大型语言模型生成生产断言的可行性和有效性,为后续研究提供了有价值的参考。

🎯 应用场景

该研究成果可应用于软件开发过程的代码质量保证环节,通过自动生成生产断言,帮助开发人员尽早发现潜在错误,提高代码的可维护性和可理解性。未来,该技术可集成到IDE或代码审查工具中,实现断言的自动推荐和验证,从而提升开发效率和软件质量。

📄 摘要(原文)

Production assertions are statements embedded in the code to help developers validate their assumptions about the code. They assist developers in debugging, provide valuable documentation, and enhance code comprehension. Current research in this area primarily focuses on assertion generation for unit tests using techniques, such as static analysis and deep learning. While these techniques have shown promise, they fall short when it comes to generating production assertions, which serve a different purpose. This preprint addresses the gap by introducing Assertify, an automated end-to-end tool that leverages Large Language Models (LLMs) and prompt engineering with few-shot learning to generate production assertions. By creating context-rich prompts, the tool emulates the approach developers take when creating production assertions for their code. To evaluate our approach, we compiled a dataset of 2,810 methods by scraping 22 mature Java repositories from GitHub. Our experiments demonstrate the effectiveness of few-shot learning by producing assertions with an average ROUGE-L score of 0.526, indicating reasonably high structural similarity with the assertions written by developers. This research demonstrates the potential of LLMs in automating the generation of production assertions that resemble the original assertions.