CodeReviewQA: The Code Review Comprehension Assessment for Large Language Models

📄 arXiv: 2503.16167v2 📥 PDF

作者: Hong Yi Lin, Chunhua Liu, Haoyu Gao, Patanamon Thongtanunam, Christoph Treude

分类: cs.SE, cs.CL

发布日期: 2025-03-20 (更新: 2025-05-31)

备注: The paper is published in Findings of the Association for Computational Linguistics (ACL 2025)


💡 一句话要点

提出CodeReviewQA,用于评估大型语言模型在代码评审理解方面的能力。

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

关键词: 代码评审 大型语言模型 代码理解 软件工程 评估基准

📋 核心要点

  1. 现有方法依赖文本匹配评估代码改进,无法深入了解模型失败原因,且易受训练数据污染。
  2. CodeReviewQA将代码改进分解为变更类型识别、变更定位和解决方案识别三个推理步骤。
  3. 实验评估了72个LLM在9种编程语言上的代码评审理解能力,揭示了模型在特定方面的弱点。

📝 摘要(中文)

当前的大型语言模型(LLMs)在代码生成方面表现出色,但在实际软件工程任务(如根据代码评审修改代码)中表现不佳,阻碍了它们的实际应用。代码评审意见通常是隐式的、模糊的和口语化的,要求模型理解代码和人类意图。为了评估大型语言模型弥合技术和会话上下文的能力,我们提出了CodeReviewQA。它将代码改进的生成任务分解为三个基本推理步骤:变更类型识别(CTR)、变更定位(CL)和解决方案识别(SI)。每个步骤都被重新定义为具有不同难度级别的多项选择题,从而能够精确评估模型能力,同时降低数据污染风险。我们在9种编程语言的900个手动策划的高质量示例上,对72个最近发布的大型语言模型进行了全面评估。结果表明,CodeReviewQA能够揭示模型在代码评审理解方面的具体弱点,并将其与自动代码改进结果区分开来。

🔬 方法详解

问题定义:现有的大型语言模型在代码生成方面表现出色,但在根据代码评审意见修改代码等实际软件工程任务中表现不佳。现有的评估方法,如自动代码改进(ACR),依赖于文本匹配指标,无法提供对模型失败原因的深入了解,并且容易受到训练数据污染的影响。因此,需要一种更细粒度、更可靠的评估方法来衡量模型在代码评审理解方面的能力。

核心思路:CodeReviewQA的核心思路是将代码评审理解任务分解为三个关键的推理步骤:变更类型识别(CTR)、变更定位(CL)和解决方案识别(SI)。通过将每个步骤转化为多项选择题,可以更精确地评估模型在每个步骤中的表现,从而更好地理解模型的优势和劣势。这种分解还有助于降低数据污染的风险。

技术框架:CodeReviewQA的整体框架包括以下几个主要部分:首先,收集并整理高质量的代码评审数据集,包含代码片段、评审意见和修改后的代码。然后,将每个代码评审案例分解为三个推理步骤,并为每个步骤设计多项选择题。这些问题涵盖不同的难度级别,以全面评估模型的能力。最后,使用这些问题评估各种大型语言模型,并分析它们在每个步骤中的表现。

关键创新:CodeReviewQA的关键创新在于其细粒度的评估方法。与传统的基于文本匹配的评估方法不同,CodeReviewQA能够深入了解模型在代码评审理解过程中的具体弱点。通过将任务分解为多个推理步骤,并为每个步骤设计专门的评估问题,CodeReviewQA能够更准确地衡量模型的能力,并降低数据污染的风险。

关键设计:CodeReviewQA的关键设计包括:1)手动策划高质量的代码评审数据集,确保数据的准确性和多样性;2)将代码评审任务分解为三个关键的推理步骤,并为每个步骤设计多项选择题;3)设计不同难度级别的问题,以全面评估模型的能力;4)使用多种评估指标,包括准确率、召回率和F1值,来衡量模型在每个步骤中的表现。

🖼️ 关键图片

fig_0

📊 实验亮点

在9种编程语言的900个手动策划的高质量示例上,对72个最近发布的大型语言模型进行了评估。结果表明,CodeReviewQA能够有效揭示模型在代码评审理解方面的具体弱点,并将其与自动代码改进结果区分开来。该基准为评估和改进LLM在软件工程任务中的表现提供了一个新的工具。

🎯 应用场景

CodeReviewQA可用于评估和改进大型语言模型在软件工程领域的应用,例如自动化代码评审、代码修复和代码生成。通过识别模型在代码评审理解方面的弱点,可以针对性地改进模型,提高其在实际软件开发中的效率和质量。该基准还有助于推动代码理解和生成领域的研究。

📄 摘要(原文)

State-of-the-art large language models (LLMs) have demonstrated impressive code generation capabilities but struggle with real-world software engineering tasks, such as revising source code to address code reviews, hindering their practical use. Code review comments are often implicit, ambiguous, and colloquial, requiring models to grasp both code and human intent. This challenge calls for evaluating large language models' ability to bridge both technical and conversational contexts. While existing work has employed the automated code refinement (ACR) task to resolve these comments, current evaluation methods fall short, relying on text matching metrics that provide limited insight into model failures and remain susceptible to training data contamination. To address these limitations, we introduce a novel evaluation benchmark, $\textbf{CodeReviewQA}$ that enables us to conduct fine-grained assessment of model capabilities and mitigate data contamination risks. In CodeReviewQA, we decompose the generation task of code refinement into $\textbf{three essential reasoning steps}$: $\textit{change type recognition}$ (CTR), $\textit{change localisation}$ (CL), and $\textit{solution identification}$ (SI). Each step is reformulated as multiple-choice questions with varied difficulty levels, enabling precise assessment of model capabilities, while mitigating data contamination risks. Our comprehensive evaluation spans 72 recently released large language models on $\textbf{900 manually curated, high-quality examples}$ across nine programming languages. Our results show that CodeReviewQA is able to expose specific model weaknesses in code review comprehension, disentangled from their generative automated code refinement results.