FeatureBench: Benchmarking Agentic Coding for Complex Feature Development¶
会议: ICLR 2026
arXiv: 2602.10975
代码: https://github.com/LiberCoders/FeatureBench
领域: Agent
关键词: agentic coding, software development, feature development, benchmark, code agent
一句话总结¶
提出 FeatureBench——面向特征级软件开发的 Agent 编程基准,200 个任务/24 个开源仓库,平均需实现 790 行代码跨 15.7 个文件。即便是 Claude Opus 4.5(SWE-bench 74.4%)也仅解决 11.0%,揭示了当前 Agent 在真实特征开发场景中的巨大能力缺口。
研究背景与动机¶
-
领域现状:LLM 驱动的 coding agent(Claude Code、Qwen Code 等)正从辅助工具转变为自主开发者。SWE-bench 是最广泛使用的评估基准,但解决率已从<10% 快速提升到>70%,评估区分度不足。
-
现有痛点:(a) SWE-bench 以单 PR bug 修复为主(78-82% 的任务),平均仅 32.8 行代码/1.7 文件,远不能代表真实特征开发的复杂度;(b) 特征开发通常跨越多个 PR 散布在时间线上,基于 PR 的收集方法无法完整捕获;(c) 很多基准依赖人工标注或无法自动扩展更新。
-
核心矛盾:Agent 在 bug 修复上接近饱和,但真实软件开发的核心是特征实现——需要理解全局架构、管理跨文件依赖、实现大量代码。这一能力完全未被现有基准评估。
-
本文要解决什么? (a) 构建面向特征级开发的基准;(b) 提供自动化、可扩展的任务收集工具;(c) 确保执行式评估(非 LLM judge)。
-
切入角度:以单元测试为起点反向追踪——通过运行 F2P 测试并动态追踪依赖图,自动定位特征相关代码,将其从代码库中提取出来作为待实现部分。
-
核心 idea 一句话:测试驱动的功能提取——从单元测试出发追踪运行时依赖图,自动从仓库中分离出完整的特征实现作为 Agent 待完成的任务。
方法详解¶
整体框架¶
四阶段自动化流水线:(1) 环境配置——Docker 化仓库,人工仅需指定安装命令(~3 分钟/仓库);(2) 测试构建——验证并选择 F2P 和 P2P 测试;(3) 依赖图追踪——动态追踪构建对象依赖图,BFS 遍历分类节点;(4) 代码提取+问题生成——从代码库中提取特征实现,自动生成问题描述+接口定义。
关键设计¶
- 测试驱动的代码补丁提取:
- 做什么:从完整仓库中自动分离出特征相关代码
- 核心思路:执行 F2P 测试和 P2P 测试,利用 Python trace 捕获函数调用事件和依赖关系,构建对象依赖图。LLM 分析 F2P 测试导入的函数,区分目标特征函数和辅助测试函数。从特征入口开始 BFS 遍历:P2P 测试中出现的节点标记为 "remained"(其他功能依赖,不能移除),未出现的标记为 "extracted"(待实现的特征代码)
-
设计动机:P2P 测试的引入确保提取特征代码后不会破坏现有功能——这是关键的工程约束
-
问题描述自动生成:
- 做什么:生成明确的接口定义和功能描述
- 核心思路:从提取的代码片段中提取函数签名、输入输出类型、导入路径。有 docstring 则直接使用,无则用 LLM 从代码生成。明确指定"解决方案必须可直接调用"
-
设计动机:消除实现歧义——明确的接口定义确保正确实现能通过所有测试,实现自动化执行式评估
-
两难度级别设计:
- L1(增量开发):在现有代码库基础上扩展实现新功能
- L2(从零开发):完全从零实现相同功能
-
设计动机:反映真实开发中的两种场景
-
后验证流程:
- 修改后的代码库必须通过所有 P2P 测试(现有功能完好)+ 失败所有 F2P 测试(目标功能已移除)
- 恢复补丁后所有测试必须通过
- 确保所有 F2P 测试所需的工具函数在修改后的代码库中仍可访问
损失函数 / 训练策略¶
FeatureBench 是评估基准而非训练方法。评估指标: - Resolved Rate:任务完全解决的比例 - Passed Rate:F2P 测试平均通过比例(软指标) - Token I/O:输入输出 token 消耗(效率指标)
实验关键数据¶
主实验¶
| Scaffold + Model | Lite Resolved | Full Resolved | Token I/O |
|---|---|---|---|
| OpenHands + Qwen3-Coder-480B | 6.7% | 3.5% | 2.0M/14k |
| OpenHands + DeepSeek-V3.2 | 6.7% | 5.5% | 3.1M/23k |
| Gemini-CLI + Gemini-3-Pro | 10.0% | 5.0% | 2.5M/12k |
| Claude Code + Claude Opus 4.5 | 20.0% | 11.0% | 7.5M/34k |
| Codex + GPT-5.1-Codex | 20.0% | 12.5% | 6.3M/39k |
| OpenHands + Claude Opus 4.5 | 20.0% | 10.5% | 8.1M/29k |
与 SWE-bench 对比¶
| 维度 | SWE-bench | FeatureBench |
|---|---|---|
| 问题描述长度 | 195 words | 4818 words |
| Gold Solution 行数 | 32.8 | 790.2 |
| Gold Solution 文件数 | 1.7 | 15.7 |
| 函数数 | 3 | 29.2 |
| 测试点 | 6.3 | 62.7 |
关键发现¶
- Claude Opus 4.5 在 SWE-bench 上 74.4% → FeatureBench 上仅 11.0%,特征级开发比 bug 修复难一个数量级
- Passed Rate 远高于 Resolved Rate(如 Claude 45.53% vs 11.0%),说明 Agent 能产生"看起来合理"但实际不完整的代码,需要大量调试
- Token 消耗巨大:所有 LLM 输入超过 100 万 token,但解决率很低——效率是关键瓶颈
- 常见失败模式:NameError(跨文件依赖未正确导入)、AttributeError(缺失原型方法)——都是跨文件理解不足的表现
- L2(从零开发)远难于 L1(增量开发),暗示 Agent 严重依赖已有代码的上下文提示
亮点与洞察¶
- 测试驱动的功能提取:从测试出发反向追踪依赖图来分离特征代码,这是一种优雅的工程方法——既能自动化又能确保提取后代码库的完整性
- 可持续更新:基于自动化工具包,FeatureBench 可以持续从新仓库生成任务,避免数据泄露
- 揭示 Agent 的真实能力边界:SWE-bench 饱和不代表 Agent 接近人类水平——特征开发才是真正的试金石
- 3825 可执行环境可用于训练:不仅是评估基准,也是 Agent RL 训练的高质量数据源
局限性 / 可改进方向¶
- 仅限 Python 仓库,其他语言的软件开发场景未覆盖
- 200 个任务的规模虽然比手工基准大,但相比 SWE-bench 的 500 个仍偏少
- L2 从零开发的评估可能过于严格——真实场景中很少完全从零实现
- 未评估 Agent 的迭代调试能力——只看最终结果,不看中间过程
相关工作与启发¶
- vs SWE-bench: SWE-bench 以 bug 修复为主(78-82%),平均 32 行;FeatureBench 专注特征开发,平均 790 行,难度高一个数量级
- vs PaperBench/MLE-bench: 这些专注 ML 领域,人工策划,不可自动扩展;FeatureBench 覆盖通用 Python 开发且全自动
- vs SWE-Smith/SWE-Flow: 合成任务但不保证特征级别或现有功能完整性;FeatureBench 的 P2P 测试约束确保了真实开发场景的保真度
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 填补特征级编程基准空白,测试驱动的功能提取方法新颖实用
- 实验充分度: ⭐⭐⭐⭐ 7 种 scaffold+模型配置,24 个真实仓库,与 SWE-bench 深度对比
- 写作质量: ⭐⭐⭐⭐ 方法描述清晰,图表直观
- 价值: ⭐⭐⭐⭐⭐ 揭示了 Agent 编程的真实差距,为社区提供了更有区分度的评估工具