How Propense Are Large Language Models at Producing Code Smells? A Benchmarking Study

📄 arXiv: 2412.18989v2 📥 PDF

作者: Alejandro Velasco, Daniel Rodriguez-Cardenas, Luftar Rahman Alif, David N. Palacio, Denys Poshyvanyk

分类: cs.SE, cs.AI

发布日期: 2024-12-25 (更新: 2025-01-18)


💡 一句话要点

CodeSmellEval:评估大语言模型生成代码异味的基准测试

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

关键词: 代码生成 大型语言模型 代码异味 基准测试 软件质量

📋 核心要点

  1. 现有LLM代码生成评估侧重准确性,忽略了生成代码的质量问题,特别是代码异味。
  2. 论文提出CodeSmellEval基准,包含异味倾向评分(PSC)和CodeSmellData数据集,用于评估LLM生成代码异味的倾向。
  3. 实验表明,CodeLlama和Mistral等先进LLM倾向于生成包含代码异味的代码,验证了基准的有效性。

📝 摘要(中文)

大型语言模型(LLM)在自动化软件工程任务,特别是代码生成方面,展现出巨大的潜力。然而,当前的评估基准主要关注准确性,未能充分评估这些模型生成代码的质量,特别是它们产生代码异味的倾向。为了解决这一局限性,我们推出了CodeSmellEval,这是一个旨在评估LLM生成代码异味倾向的基准测试。我们的基准包括一个新的指标:异味倾向评分(PSC),以及一个精选的方法级别代码异味数据集:CodeSmellData。为了展示CodeSmellEval的使用,我们对两个最先进的LLM,CodeLlama和Mistral进行了案例研究。结果表明,这两个模型都倾向于生成代码异味,例如可简化的条件和考虑合并实例。这些发现突出了我们的基准在评估LLM方面的有效性,为它们的可靠性以及它们在代码生成任务中引入代码异味的倾向提供了有价值的见解。

🔬 方法详解

问题定义:论文旨在解决现有大型语言模型(LLM)在代码生成过程中产生代码异味的问题。现有评估方法主要关注代码的准确性,而忽略了代码质量,特别是代码中存在的潜在问题,如可简化条件、重复代码等。这些代码异味会降低代码的可读性、可维护性和可扩展性,长期来看会增加软件开发的成本。因此,如何有效评估LLM生成代码中代码异味的倾向是一个重要的研究问题。

核心思路:论文的核心思路是构建一个专门用于评估LLM生成代码异味的基准测试,即CodeSmellEval。该基准包含一个精心策划的代码异味数据集(CodeSmellData)和一个新的评估指标:异味倾向评分(Propensity Smelly Score, PSC)。通过使用CodeSmellEval,可以量化LLM生成代码中代码异味的程度,从而更全面地评估LLM在代码生成任务中的表现。

技术框架:CodeSmellEval主要包含两个核心组成部分:CodeSmellData数据集和PSC指标。CodeSmellData是一个方法级别的代码异味数据集,包含了多种常见的代码异味类型,例如可简化条件、考虑合并实例等。PSC指标用于量化LLM生成代码中代码异味的程度。具体来说,给定一段由LLM生成的代码,首先使用静态代码分析工具检测其中存在的代码异味,然后根据检测到的异味类型和数量计算PSC得分。

关键创新:论文的关键创新在于提出了CodeSmellEval基准,该基准是首个专门用于评估LLM生成代码异味的工具。与现有评估方法相比,CodeSmellEval更加关注代码的质量,而不仅仅是代码的准确性。此外,论文还提出了一个新的评估指标PSC,该指标可以量化LLM生成代码中代码异味的程度,从而更全面地评估LLM在代码生成任务中的表现。

关键设计:CodeSmellData数据集的构建需要仔细选择和标注代码异味。PSC指标的设计需要考虑不同类型代码异味的严重程度,并进行合理的加权。实验中,需要选择合适的静态代码分析工具来检测代码异味,并对检测结果进行验证。此外,还需要选择具有代表性的LLM进行评估,并对实验结果进行统计分析。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,CodeLlama和Mistral等先进LLM在生成代码时倾向于产生代码异味,例如可简化的条件和考虑合并实例。这表明即使是当前最先进的LLM,在代码质量方面仍有很大的提升空间。CodeSmellEval基准能够有效识别这些问题,为LLM的改进提供有价值的反馈。

🎯 应用场景

该研究成果可应用于软件开发工具和流程中,帮助开发者评估和选择更可靠的代码生成模型。通过集成CodeSmellEval基准,可以有效降低LLM生成代码中代码异味的风险,提高软件质量和可维护性。未来,该研究可以扩展到更多编程语言和代码异味类型,进一步提升LLM在软件工程领域的应用价值。

📄 摘要(原文)

Large Language Models (LLMs) have shown significant potential in automating software engineering tasks, particularly in code generation. However, current evaluation benchmarks, which primarily focus on accuracy, fall short in assessing the quality of the code generated by these models, specifically their tendency to produce code smells. To address this limitation, we introduce CodeSmellEval, a benchmark designed to evaluate the propensity of LLMs for generating code smells. Our benchmark includes a novel metric: Propensity Smelly Score (PSC), and a curated dataset of method-level code smells: CodeSmellData. To demonstrate the use of CodeSmellEval, we conducted a case study with two state-of-the-art LLMs, CodeLlama and Mistral. The results reveal that both models tend to generate code smells, such as simplifiable-condition and consider-merging-isinstance. These findings highlight the effectiveness of our benchmark in evaluating LLMs, providing valuable insights into their reliability and their propensity to introduce code smells in code generation tasks.