FEA-Bench: A Benchmark for Evaluating Repository-Level Code Generation for Feature Implementation

TL;DR

FEA-Bench评估大模型在仓库级特征增量开发中的能力,表现较差。

cs.SE 🔴 高级 2025-03-10 52 次浏览
Wei Li Xin Zhang Zhongxin Guo Shaoguang Mao Wen Luo Guangyue Peng Yangyu Huang Houfeng Wang Scarlett Li
代码生成 软件工程 大模型 基准测试 增量开发

核心发现

方法论

本研究基于从83个GitHub仓库的Pull Request数据构建任务集,采用规则过滤和意图分类筛选出以新增特征为目标的任务实例。每个任务配备对应的单元测试文件,确保验证。模型需同时完成新组件的代码补全和相关代码的编辑,评估其仓库级增量开发能力。采用多种大模型(如GPT-4、CodeLlama、DeepSeek-Coder)在不同提示和检索策略下进行评估,指标包括任务解决率和单元测试通过率。结果显示,模型表现极差,最高解决率仅约10%。

关键结果

  • 最优模型DeepSeek-R1在Oracle条件下解决率为9.92%,远低于理想水平,显示出仓库级增量开发的巨大挑战。
  • 模型参数越大表现越好,Qwen2.5-Coder表现优于部分通用模型,GPT-4表现亦接近最优,但整体仍不足以满足实际需求。
  • 引入详细提示和检索文件略微提升性能,但整体解决率仍低,表明模型在理解复杂仓库结构和多文件协作方面存在明显不足。

研究意义

本研究首次系统评估大模型在仓库级特征增量开发中的能力,填补了现有基准多偏重代码片段补全或修复的空白。结果揭示模型在复杂、多文件、多步骤的实际软件工程任务中的局限,为未来模型优化和自动化软件开发提供重要参考。该基准有助于推动大模型在软件工程中的应用,从单一代码生成向完整特征实现的转变,具有深远的行业和学术意义。

技术贡献

提出仓库级增量开发任务,构建首个专门针对特征实现的基准数据集,结合规则过滤和意图分类确保任务质量。设计多模型、多策略评估框架,采用执行验证指标,系统分析模型在复杂场景下的表现。此工作突破了以往仅关注代码补全的限制,推动模型理解和编辑多文件、多步骤软件工程的能力提升,为自动化软件开发提供新的技术路径。

新颖性

首次提出仓库级特征增量开发任务,区别于传统代码补全和修复基准。利用Pull Request数据自动构建任务实例,结合意图分类和执行验证,全面评估模型在真实开发场景中的能力。该方法创新性地将模型能力评估从局部代码片段扩展到完整特征实现,具有较强的创新性和实用价值。

局限性

  • 模型在长上下文理解和多文件协作方面仍表现不足,受限于训练数据和模型架构的局限。
  • 评估仅基于单轮生成,未考虑多轮交互和持续开发的复杂场景。
  • 数据集偏向Python生态,跨语言迁移存在一定难度。

未来方向

未来将探索多轮交互和持续开发场景,提升模型理解和编辑能力。计划引入强化学习和多模态信息,增强模型对复杂仓库结构的理解。还将扩展多语言支持,丰富任务类型,推动模型在实际软件工程中的应用落地。

AI 总览摘要

随着大规模语言模型(LLMs)在代码生成领域的突破,自动化软件工程迎来了新的发展机遇。现有评测多集中于单一函数或脚本的代码片段生成,难以反映真实项目中多文件、多步骤的特征增量开发需求。为此,本文提出了FEA-Bench,一项专门针对仓库级特征实现的基准测试,旨在评估LLMs在复杂软件开发场景中的能力。

FEA-Bench基于从83个GitHub仓库的Pull Request中自动筛选出以新增功能为目标的任务实例,结合规则过滤和意图分类,确保任务的真实性和多样性。每个任务都配备对应的单元测试文件,模型需同时完成新组件的代码补全和相关代码的编辑,验证其在实际开发中的应用能力。该基准涵盖了多种模型(如GPT-4、CodeLlama、DeepSeek-Coder),在不同提示策略和检索方法下进行评估。

实验结果显示,当前模型在此任务中的表现极为有限,最高解决率仅约10%。模型参数越大,表现略有提升,但仍远未达到实际开发需求。这反映出模型在理解复杂仓库结构、多文件协作和多步骤开发中的巨大挑战。研究结果强调,未来模型需要更强的上下文理解和编辑能力,才能真正实现自动化特征开发。

该工作不仅丰富了代码生成的评测体系,也为自动化软件工程提供了新的研究方向。通过持续优化模型架构和训练策略,未来有望实现更智能、更高效的自动化软件开发流程,推动行业数字化转型。尽管如此,模型在长上下文理解、多任务协作和跨语言迁移方面仍存在不足,未来研究需在数据多样性、模型规模和交互能力上持续突破。

深度分析

研究背景

软件工程的自动化一直是研究热点,从早期的静态分析到现代的深度学习模型,目标是提升开发效率和代码质量。近年来,LLMs如GPT-4和CodeLlama在代码生成、调试和翻译方面取得显著进展,推动了开发助手的普及。然而,现有评测多集中于单一函数或脚本的生成,缺乏对复杂仓库级、多文件、多步骤场景的系统评估。SOTA如HumanEval、MBPP、CodeX等,虽在局部任务表现优异,但难以反映实际开发中的增量特征实现需求。近年来,SWE-bench等新基准开始关注仓库级修复任务,但对新增功能的评估仍不足。随着自动化开发工具(如GitHub Copilot)逐渐普及,评估模型在真实项目中的能力变得尤为重要。

核心问题

当前大模型在仓库级特征增量开发中的能力不足,主要表现为对多文件、多步骤、多阶段任务的理解和编辑能力有限。现有基准多关注代码补全或修复,难以衡量模型在完整特征实现中的表现。实际开发中,新增功能涉及多文件协作、复杂逻辑和连续修改,模型需理解上下文、生成多文件代码、进行多轮交互。缺乏系统评估工具限制了模型优化和行业应用的推进,亟需建立针对特征实现的专门基准,推动模型能力的全面提升。

核心创新

本研究创新性提出仓库级增量开发任务,结合Pull Request数据自动构建任务实例,涵盖新功能的实现、代码编辑和验证。引入意图分类确保任务真实性,采用多模型、多策略评估框架,结合执行验证指标,全面衡量模型能力。区别于传统只关注代码片段的基准,FEA-Bench强调多文件、多步骤的复杂场景,推动模型理解和编辑能力的突破。此方法为自动化软件工程提供了新的评估标准和技术路径,具有较强的创新性和实用价值。

方法详解

  • �� 数据采集:从83个GitHub仓库自动抓取Pull Request,筛选出涉及新增功能的任务实例。• 过滤策略:利用规则筛选出包含新组件的PR,确保新增内容占比超过25%。• 意图分类:采用GPT-4对PR描述进行分类,筛选出明确的“新功能”意图。• 任务构建:结合代码变更和单元测试,确保任务的可验证性。• 模型评估:使用多种大模型(如GPT-4、CodeLlama、DeepSeek-Coder)在不同提示和检索策略下进行测试,指标包括任务解决率和测试通过率。• 结果分析:统计模型在不同条件下的表现,分析影响因素,提出改进建议。

实验设计

采用从GitHub采集的83个仓库,构建1401个任务实例,涵盖多样化的开发场景。模型包括GPT-4、CodeLlama、Qwen2.5-Coder等,采用不同提示(详细/简略)和检索(Oracle/BM25)策略。指标包括任务解决率、单元测试通过率和检索召回率。实验还设计了不同上下文长度和输出格式的对比,评估模型在复杂场景中的适应性。通过多轮实验验证模型能力的局限性,提供改进方向。

结果分析

模型在FEA-Bench中的最高解决率约为10%,远低于理想水平。参数规模较大的模型表现略优,DeepSeek-R1在Oracle条件下达到了9.92%的解决率。引入详细提示和检索文件略微提升性能,但整体仍不足以满足实际需求。结果显示,模型在理解多文件、多步骤的复杂任务中存在明显不足,尤其在长上下文理解和多轮交互方面表现欠佳。这些数据强调模型在真实软件开发场景中的局限性,为未来模型优化提供了明确的目标。

应用场景

该基准可用于评估和优化自动化特征开发模型,推动智能开发助手在实际项目中的应用。企业可以借助此工具提升代码维护和新功能实现效率,减少人力成本。未来,结合持续集成和多轮交互,将实现更智能的自动化开发流程,助力软件行业数字化转型。

局限与展望

模型在长上下文理解、多文件协作和多步骤任务中表现不足,受限于训练数据和模型架构。评估仅涵盖单轮生成,未考虑多轮交互和持续开发场景。数据集偏向Python生态,跨语言迁移存在难度。未来需增强模型理解能力,扩展多语言支持,并考虑多轮交互的复杂性。

通俗解读 非专业人士也能看懂

想象你在厨房里做饭。每次做菜都需要准备各种食材、调料,还要按照步骤操作。现在,假设你有一个智能助手,它可以帮你准备食材、告诉你下一步怎么做,还能帮你调整菜谱。这个助手就像大模型一样,能理解你要做的菜(功能),帮你准备所有材料(代码),并确保每一步都正确完成。刚开始,它可能只会帮你切菜(补全代码),但随着学习,它能帮你设计新菜(新功能),甚至帮你改良菜谱(编辑代码)。这个过程就像软件开发中的“增量开发”,需要助手不断理解、调整和完善菜谱(代码库),让菜越做越好。

简单解释 像给14岁少年讲一样

想象你在学校的科学实验室里做实验。每次你都需要准备不同的材料,按照步骤操作,最后得到一个实验结果。有时候,你的老师会让你试试不同的方法,或者改进实验步骤。现在,假设你有一个聪明的机器人助手,它可以帮你准备材料、告诉你下一步怎么做,还能帮你改进实验方案。刚开始,它可能只会帮你把材料准备好(生成代码),但随着时间,它能帮你设计新实验(新功能),甚至帮你改正错误(编辑代码)。这个机器人就像大模型一样,能理解你要做的事情,帮你一步步完成。软件开发也是这样,程序员不断添加新功能,修改旧代码,机器人助手也在学习如何更好地帮忙,让软件变得更厉害。

原文摘要

Implementing new features in repository-level codebases is a crucial application of code generation models. However, current benchmarks lack a dedicated evaluation framework for this capability. To fill this gap, we introduce FEA-Bench, a benchmark designed to assess the ability of large language models (LLMs) to perform incremental development within code repositories. We collect pull requests from 83 GitHub repositories and use rule-based and intent-based filtering to construct task instances focused on new feature development. Each task instance containing code changes is paired with relevant unit test files to ensure that the solution can be verified. The feature implementation requires LLMs to simultaneously possess code completion capabilities for new components and code editing abilities for other relevant parts in the code repository, providing a more comprehensive evaluation method of LLMs' automated software engineering capabilities. Experimental results show that LLMs perform significantly worse in the FEA-Bench, highlighting considerable challenges in such repository-level incremental code development.

cs.SE cs.CL