AutoCodeRover: Autonomous Program Improvement

AutoCodeRover:自主程序改进

Abstract

过去几十年来,研究人员在软件开发过程自动化方面取得了重大进展。大型语言模型 (LLM) 的最新进展对开发过程产生了重大影响,开发人员可以使用基于 LLM 的编程助手来实现自动化编码。然而,软件工程除了编码之外还涉及程序改进的过程,特别是为了实现软件维护(例如错误修复)和软件演化(例如功能添加)。在本文中,作者提出了一种解决 GitHub 问题的自动化方法,以自主实现程序改进。在我们称为 AutoCodeRover 的方法中,LLM 与复杂的代码搜索功能相结合,最终导致程序修改或补丁。与人工智能研究人员和从业者最近的法学硕士代理方法相比,我们的前景更加面向软件工程。致力于程序表示(抽象语法树),而不是将软件项目视为单纯的文件集合。代码搜索利用类/方法形式的程序结构来增强 LLM 对问题根本原因的理解,并通过迭代搜索有效地检索上下文。只要有可用的测试套件,使用测试进行的基于频谱的故障定位可以进一步增强上下文。在由 300 个现实 GitHub 问题组成的 SWE-bench-lite 上进行的实验表明,解决 GitHub 问题的效率有所提高(SWE-bench-lite 上的效率为 22-23%)。在包含 2294 个 GitHub 问题的完整 SWE-bench 上,AutoCodeRover 解决了大约 16% 的问题,这高于最近报告的来自 Cognition Labs 的 AI 软件工程师 Devin 的效率,同时与 Devin 花费的时间相当。作者的工作流程能够实现自主软件工程,未来LLM自动生成的代码可以得到自主改进。

1. 超越自动程序编程 

这一章节讨论了自动化软件工程任务的历史和背景。作者指出,尽管自动程序编程已经取得了一定的进展,如自动生成测试、程序修复等,但自然语言需求的模糊性仍然是一个挑战。文章介绍了利用大型语言模型(LLM)如Github Copilot来增强自动编程的可能性,并探讨了这些自动生成的代码在被集成进软件项目前所需的改进和信任建立。

2. 相关文献 

作者回顾了自动程序修复(APR)技术的研究历史,详细讨论了基于测试套件的APR技术。介绍了几种APR技术,包括基于搜索的APR(如GenProg)、基于语义的APR、以及基于模式/学习的APR。此外,文中也提到了最近关于如何利用LLM进行APR的研究,这表明了解决实际bug报告中的错误定位问题的重要性。

3. 动机示例

本节通过一个具体示例展示了AutoCodeRover的操作流程。以Django项目的一个实际问题为例,说明了如何从问题描述中提取关键信息,如何通过调用不同的API收集代码上下文,最终如何生成解决问题的补丁。特别强调了上下文检索和补丁生成两个阶段的详细步骤和考量。

4. AI程序改进框架

这一章节详细讨论了AutoCodeRover的设计和功能框架。作者描述了AutoCodeRover在软件开发生命周期中的应用,如何分析提交的问题,如何自动检索相关的代码上下文,并如何生成补丁。此外,还详细介绍了上下文检索阶段使用的API和补丁生成阶段的流程。

5. 结论与未来工作

作者总结了AutoCodeRover在自动化解决GitHub问题方面的表现,并讨论了未来的研究方向,如进一步整合自动化测试和程序分析技术,以增强软件工程的自动化程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ne4j图数据库入门笔记2】数据导入详解

2.1 导入 CSV 文件 Cypher中 LOAD CSV 的命令允许我们指定文件路径、标头与否、不同的值分隔符以及 Cypher 语句,用于我们如何在图形中对表格数据进行建模。 CSV 是逗号分隔值的文件,通常在 Excel 或其他电子表格工具中查看。可以有其他类型的值作为分…

spring.factories中配置ApplicationContextInitializer实现类却不起作用

自定义了一个ApplicationContextInitializer的实现类如下 public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {Overridepublic void initialize(ConfigurableApplicationContext applicationCon…

Vue3 Vite配置环境变量

Vue3 Vite配置环境变量 相关文档配置.env文件vite.config.jspackage.json 使用 相关文档 Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/环境变量和模式&#xff1a;https://cn.vitejs.dev/guide/env-and-mode.html#env-file在配置中使用环境变量&#xff1a;https://c…

SCADA系统通过巨控GRM模块实现OPC协议远程监控PLC

SCADA系统和PLC不在同一个地方&#xff0c;需要远程监控和控制PLC&#xff0c;可以通过巨控GRM模块来实现&#xff0c;通过OPC协议转巨控服务器远程读写PLC寄存器&#xff0c;从而完成远程监控PLC。 要实现SCAKDA系统远程监控PLC&#xff0c;关键是要实现SKADA能通过互联网访问…

vue3+leaflet开发地图入门教程(超级详细)

vue3leaflet开发地图01 1.离线地图下载 ​ 离线地图下载器有很多&#xff0c;网络上也很多文档&#xff0c;这里不再详细说明&#xff0c;根据项目要求下载对应的瓦片地图就好 2.leaflet官网及地图加载 ​ Leaflet - 一个交互式地图 JavaScript 库 (leafletjs.cn) ​ 官网…

Java动态代理与Spring AOP中的Cglib动态代理详解

在Java编程中&#xff0c;动态代理是一种在运行时动态创建代理类及其对象的技术。通过动态代理&#xff0c;我们可以在不修改原有类代码的情况下&#xff0c;为这些类添加新的行为或功能。Java提供了两种主要的动态代理机制&#xff1a;基于接口的Java动态代理和基于类的Cglib动…

密钥派生算法介绍 及 PBKDF2(过时)<Bcrypt(开始淘汰)<Scrypt< Argon2(含Argon2d、Argon2i、Argon2id)简介

密钥派生算法介绍 https://blog.csdn.net/xcxhzjl/article/details/127297263 一、定义 密钥派生函数(Key Derivation Function)就是从一个密码产生出一个或多个密钥&#xff0c;具体就是从一个master key&#xff0c;password或者passphrase派生出一个或多个密钥&#xff0…

HCIP-Datacom-ARST必选题库_23_SNMP【1道题】

一、单选 1.某中型规模园区网络通过SNMP协议管理网络,该园区对于网络安SNMP哪个版本进行管理? 所有版本均可以实现 BSNMPV1 SNMPV2C SNMPV3

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中&#xff0c;庞大的插件市场提供了丰富多样的扩展功能&#xff0c;以增强编码体验和效率。然而&#xff0c;如果你安装了很多插件&#xff0c;就可能会导致&#xff1a; 性能下降&#xff1a;过多的插件可能导致 VS Code 的启动速度变慢&#xff0c;特别是在启动或…

[2021最新]大数据平台CDH存储组件kudu之启用HA高可用(添加多个master)

今天在做kudu高可用的时候没有参考官网&#xff0c;直接按照常规方式&#xff08;添加角色—>编辑属性—>启动&#xff09;结果发现报错&#xff1f;然后参考了一下文档之后发现这玩意儿还有点玄学&#xff0c;做一下记录。 1.添加两个master。kudu master有leader和foll…

薪酬调整流程:规范流程并确保公平合理

薪酬调整是企业人力资源管理中不可或缺的一环&#xff0c;它直接关系到员工的切身利益和企业的发展。为了确保薪酬调整的公平性和合理性&#xff0c;制定一套规范的薪酬调整流程至关重要。本文将详细阐述薪酬调整流程的各个环节&#xff0c;以及如何确保流程的合理性和公平性。…

用云手机运营TikTok有什么好处?

在数字化浪潮的推动下&#xff0c;社交媒体平台正重塑商业推广与品牌建设的面貌。TikTok&#xff0c;这款全球热门的短视频应用&#xff0c;已经吸引了亿万用户的瞩目。对于出海电商和品牌推广而言&#xff0c;借助云手机运营TikTok&#xff0c;能够解锁更多潜在可能&#xff0…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包&#xff1a; 安装jdk 安装步骤&#xff1a; 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中&#xff0c;解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…

时间搜索

时间搜索 vue2antd <a-form-item label"订单开始时间:"><a-range-picker v-model"date" valueFormat"YYYY-MM-DD" change"onChange" /></a-form-item> onChange (date) {if (date.length > 0) {this.queryParam.…

li 与 li 之间有看不见的空白间隔是什么原因引起的?如何解决?

浏览器会把inline内联元素间的空白字符&#xff08;空格、换行、Tab等&#xff09;渲染成一个空格。 为了美观&#xff0c;通常是一个放在一行&#xff0c;这导致换行后产生换行字符&#xff0c;它变成一个空格&#xff0c;占用了一个字符的宽度。 解决办法&#xff1a; &…

【MySQL | 第六篇】数据库三大范式

文章目录 6.数据库设计三大范式6.1第一范式6.2第二范式6.3第三范式6.4反范式设计 6.数据库设计三大范式 6.1第一范式 第一范式&#xff08;1NF&#xff09;&#xff1a;确保每列的原子性(强调的是列的原子性&#xff0c;即列不能够再分成其他几列)。实际上&#xff0c;第一范式…

MATLAB初学者入门(10)—— 粒子群算法

粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体协作的优化技术&#xff0c;它由社会行为模型&#xff08;如鸟群觅食行为&#xff09;启发而来。PSO 通过模拟一群粒子&#xff08;候选解&#xff09;在解空间中的移动来寻找最优解。每个粒…

react学习(一)之初始化一个react项目

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件&#xf…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样&#xff0c;可以在配置路由的时候&#xff0c;定义路由的元信息(附加信息)&#xff1f;答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息&#xff0c;然后通过useRouteLoaderData 钩子…

Java使用百度翻译接口开发app

到网站&#xff1a;百度翻译开放平台下载Java版本的demo 使用demo中的三个文件&#xff0c;main不用 默认返回的result内容是这样的: {"from":"en","to":"zh","trans_result":[{"src":"Sure! Heres a sh…