ProgramBench: Can Language Models Rebuild Programs From Scratch?
ProgramBench评估语言模型从零构建完整软件的能力,最佳模型仅通过95%测试,任务涵盖从CLI工具到复杂软件。
核心发现
方法论
本研究提出ProgramBench基准,利用开源GitHub仓库生成200个多样化任务,模型需在无源代码的情况下,设计架构并实现行为一致的程序。通过自动化行为测试(fuzzing)生成验证用例,确保评估的行为等价性。采用9个大型语言模型(如Claude、GPT系列)进行测试,模型需自主决策架构、模块划分和抽象设计,突破传统局限。评估指标包括任务完成率和测试通过率,揭示模型在软件设计复杂性上的不足。
关键结果
- 所有模型未能完全解决任何任务,最高模型在95%以上测试通过率的任务中仅达3%。模型偏好单文件、单块实现,偏离人类设计的模块化结构。Claude Opus 4.7在部分任务中表现优异,能通过95%的测试,但整体解决率仍不足。
- 复杂软件(如FFmpeg、PHP解释器)远超模型能力范围,模型在简单CLI工具上表现较好(如fzf、jq),但在大型项目上表现极差。模型生成的代码多为单一文件、长函数,缺乏模块化设计,偏离人类开发习惯。
- 行为验证通过自动生成的测试套件实现,测试覆盖率与人类开发的测试相当,验证了模型方案的行为一致性,但在架构和抽象层面差异明显。模型在不同任务中的表现差异显著,反映出软件设计能力的不足。
研究意义
本研究首次系统性评估语言模型在软件架构设计和完整程序重建中的能力,揭示当前模型在复杂软件开发中的局限,为未来智能软件工程提供基准和方向。通过行为驱动的测试机制,突破了传统基准对结构的限制,更贴近实际软件开发场景,推动模型从代码生成向系统设计转变。这对于自动化软件开发、代码维护和软件创新具有深远意义,尤其在无人值守的持续集成和自动化开发流程中具有潜在应用价值。
技术贡献
提出基于行为测试的端到端评估体系,结合自动化fuzzing生成验证用例,确保行为一致性。引入多样化任务集,涵盖从CLI工具到大型系统,展示模型在软件架构决策上的能力差异。分析模型偏好单文件实现的趋势,揭示其在抽象和模块化方面的不足。公开数据集和评估流程,为后续研究提供标准化平台,推动模型在软件设计中的应用研究。
新颖性
首次系统性将行为驱动测试引入程序重建评估,突破传统基准对代码结构的限制,强调功能行为一致性。提出多任务、多语言、多复杂度的评估框架,全面衡量模型的设计与实现能力。与以往仅关注代码片段或单功能任务的研究不同,本研究关注软件工程的整体设计能力,具有较强创新性。
局限性
- 模型偏好单文件、长函数的实现方式,缺乏模块化设计,难以推广到实际大型软件开发中。
- 测试覆盖虽广,但仍无法完全捕捉程序的全部行为和设计意图,存在一定的评估偏差。
- 当前模型在复杂任务中的表现仍极为有限,尚未实现从架构决策到完整实现的突破。
未来方向
未来将探索多模态输入(如设计图、架构图)结合模型能力,提升架构决策能力。加强模型在大型软件中的模块化设计和抽象能力,结合强化学习优化设计流程。推动自动化测试生成与模型交互的深度融合,逐步实现从行为模拟到自主设计的跨越。
AI 总览摘要
随着人工智能技术的发展,利用语言模型自动生成完整软件项目成为研究热点。传统方法多关注代码片段或单一功能,难以衡量模型在软件架构和系统设计中的能力。本研究提出ProgramBench基准,旨在全面评估模型从零构建软件的能力。通过自动化行为测试和多样化任务集,模型需要在没有源代码的情况下,设计架构、实现功能,并保证行为一致。实验中,采用9个先进的语言模型,涵盖Claude、GPT系列等,测试范围包括从CLI工具到复杂软件如FFmpeg和PHP解释器。结果显示,所有模型都未能完全解决任何任务,最高模型在95%以上测试通过的任务中仅达3%。模型偏好单文件、长函数的实现方式,偏离人类设计的模块化思想。行为验证通过自动生成的测试套件实现,验证了模型在行为一致性方面的能力,但在架构设计和复杂任务处理上仍显不足。这一发现突显了当前模型在软件工程中的局限性,也为未来研究提供了明确方向。ProgramBench的引入,为自动化软件开发提供了新的评估平台,推动模型从代码生成向系统设计的转变,具有深远的学术和工业意义。未来工作将聚焦于增强模型的模块化设计能力,结合多模态输入,推动智能软件工程的实现。
深度分析
研究背景
软件工程领域近年来经历了从传统手工开发向自动化、智能化的转变。早期研究如CodeX、GPT-3在代码生成方面取得突破,但多集中于片段或特定任务。随着模型能力提升,研究逐步关注系统设计与架构决策,强调模型在软件生命周期中的作用。现有基准如HumanEval、MBPP主要评估代码片段,缺乏对整体软件架构的衡量。近年来,自动化测试、模仿学习和强化学习等技术推动了软件自动生成的边界,但在复杂软件的完整重建方面仍面临巨大挑战。本研究借鉴行为驱动测试、自动化fuzzing等技术,提出全新评估体系,旨在突破现有局限,推动模型在软件设计中的应用。
核心问题
当前模型在软件重建任务中表现有限,尤其在架构设计、模块划分和抽象层面缺乏能力。传统基准多关注代码片段,难以反映实际软件开发的复杂性。实际开发中,架构决策、模块化设计和行为一致性是核心难点,模型在这方面的能力尚未得到系统评估。缺乏统一的、行为导向的评估体系,使得模型在复杂任务中的表现难以量化。如何设计一个既能反映软件整体设计能力,又能保证评估公平性和可扩展性的方法,成为亟待解决的问题。
核心创新
本研究的创新点在于引入行为驱动测试作为评估核心,结合自动化fuzzing技术,生成大规模验证用例,确保模型设计的行为一致性。提出多任务、多语言、多复杂度的任务集,全面衡量模型在软件架构、抽象和实现能力上的差异。分析模型偏好单文件实现的趋势,揭示其在模块化设计上的不足。公开数据集和评估流程,为后续研究提供标准化平台,推动模型在软件工程中的应用创新。
方法详解
- �� 任务生成:从开源GitHub仓库筛选出可编译的项目,提取程序和文档作为任务起点。
- �� 编译与构建:利用模型(SWE-agent)自动编译源代码,生成构建脚本。
- �� 行为测试:通过模型探索程序行为,自动生成验证用例,覆盖不同输入。
- �� 测试验证:用生成的测试套件验证模型输出,行为一致性作为评判标准。
- �� 评估指标:任务完成率、测试通过率、代码结构偏好。
- �� 结果分析:统计模型在不同任务中的表现差异,分析偏好和不足。
实验设计
采用9个先进语言模型,涵盖Claude、GPT系列等,测试范围包括CLI工具、数据库、媒体处理软件等。每个模型在受控环境中运行,限制步骤数和时间。指标包括任务解决率和测试通过率。通过多场消融实验,分析不同资源、语言限制对模型表现的影响。数据集涵盖多样化软件类型,确保评估的代表性。模型行为和代码结构差异被详细分析,揭示模型偏好和能力瓶颈。
结果分析
所有模型未能完全解决任何任务,最高在95%以上测试通过率的任务中仅达3%。模型偏好单文件、长函数实现,偏离人类模块化设计。行为验证显示模型在复杂软件上表现不足,但在简单CLI工具上表现较好。模型在不同任务中的表现差异显著,反映出架构设计和抽象能力的不足。自动生成的测试套件覆盖率与人类开发的测试相当,验证了模型方案的行为一致性,但在架构层面仍有差距。
应用场景
该评估体系可用于自动化软件开发、代码维护、系统设计优化等场景。可帮助开发者评估模型在软件架构决策上的能力,推动智能化软件工程工具的发展。未来结合持续集成平台,实现无人值守的自动软件生成和优化,提升软件开发效率。
局限与展望
模型偏好单文件实现,缺乏模块化设计,难以应对大型复杂软件。测试覆盖虽广,但仍无法完全捕捉程序全部行为和设计意图。模型在复杂任务中的表现有限,尚未实现从架构设计到完整实现的突破。未来需增强模型的抽象能力和模块化设计能力,结合多模态输入,提升整体性能。
通俗解读 非专业人士也能看懂
想象一个工厂里,工人要建一台新机器。工厂老板只告诉工人这台机器的功能(比如能做什么、怎么用),没有详细的设计图纸。工人需要自己决定用什么材料、怎么组装、每个部分怎么连接,还要确保机器能按要求工作。现在,假设有个聪明的助手(类似模型),它可以观察已有的机器(程序)和说明书(文档),然后自己设计一台新机器。这个助手可以试着组装、测试,直到新机器和原来的表现一样。这个过程就像程序重建,助手需要自己做设计、组装和验证,才能确保新机器的功能和原来的一模一样。
原文摘要
Turning ideas into full software projects from scratch has become a popular use case for language models. Agents are being deployed to seed, maintain, and grow codebases over extended periods with minimal human oversight. Such settings require models to make high-level software architecture decisions. However, existing benchmarks measure focused, limited tasks such as fixing a single bug or developing a single, specified feature. We therefore introduce ProgramBench to measure the ability of software engineering agents to develop software holisitically. In ProgramBench, given only a program and its documentation, agents must architect and implement a codebase that matches the reference executable's behavior. End-to-end behavioral tests are generated via agent-driven fuzzing, enabling evaluation without prescribing implementation structure. Our 200 tasks range from compact CLI tools to widely used software such as FFmpeg, SQLite, and the PHP interpreter. We evaluate 9 LMs and find that none fully resolve any task, with the best model passing 95\% of tests on only 3\% of tasks. Models favor monolithic, single-file implementations that diverge sharply from human-written code.