论文学习_Getafix: learning to fix bugs automatically

news2024/11/15 13:28:17

1. 引言

研究背景:现代生产代码库极其复杂并且不断更新。静态分析器可以帮助开发人员发现代码中的潜在问题(在本文的其余部分中称为错误),这对于在这些大型代码库中保持高代码质量是必要的。虽然通过静态分析尽早发现错误是有帮助的,但修复这些错误的问题在实践中仍然主要是手动任务,阻碍了静态分析工具的采用。

现存问题:大多数静态分析器都会查找常见错误类别的实例,例如潜在的空取消引用、流行 API 的错误使用或特定语言结构的误用。研究团队观察到,针对特定错误类别的修复通常彼此相似:它们有一个模式。也就是说,过去人类对同一错误类别的修复可能会提供有关如何修复该错误类别的未来实例的见解。鉴于这一观察,是否可以通过学习过去的修复来自动修复发现的错误?

研究内容:论文通过学习过去的修复来解决自动修复常见错误类别实例的问题。论文假设两个输入:(1)修复特定类型错误的一组更改,例如来自代码库的版本历史记录。这些变化可以作为训练数据来学习修复模式。(2) 一段带有我们要修复的静态分析警告的代码。仅给出这两个输入,问题是预测解决方案,以类似于或等于人类开发人员所做的方式解决静态分析警告。通过自动生成修复程序并仅将是否应用修复程序的最终决定留给人类,可以大大减少解决静态分析器指出的错误所花费的总体工作量。

论文专注于那些具有不平凡但重复性修复的错误。一方面,有些错误类别通常意味着特定的修复。例如,对于建议某个字段为最终结果的警告,实施自动修复建议非常简单。这种自动修复可以由该规则的作者在静态分析器中定义,而不需要知道应用该规则的特定上下文;事实上,有些容易出错规则带有自动修复功能。另一方面,一些错误需要复杂的、特定于应用程序的修复,例如用户进行一系列特定交互后 UI 选项卡不显示的问题。在这里,论文的目标是介于这两个极端之间的错误类别,其中找到修复程序并非易事,但典型的修复程序属于一组重复出现的修复模式。对于此类错误类别,通常存在不止一种方法来解决问题,并且解决错误类别的特定实例的正确方法取决于上下文,例如,静态分析警告周围的代码。

作为本工作中针对的错误类别的一个示例,请考虑 NullPointerExceptions 仍然是 Java 和其他语言中最普遍的错误之一。如果静态分析器警告潜在的空取消引用,开发人员可以通过各种方式解决该问题。上图显示了空取消引用错误修复的三个匿名示例,这些示例分别向现有 if 条件添加了一个连接、用三元运算替换了调用以及添加了提前返回。虽然所有这些修复都引入了某种空检查,但确切的修复在很大程度上取决于现有的代码。除了这些示例之外,还有更多方法可以修复空取消引用错误,例如,通过添加新的 if 语句或以分离方式扩展现有的 if 条件。学习所有这些修复模式并决定将哪一种模式应用于给定的错误代码是一个不小的问题。论文的工作旨在自动修复大规模工业软件开发中的错误。 这种设置会带来一些有趣的挑战:

  • 为了减少修复错误所花费的人力时间,该方法可能只提出少量潜在的修复方案,最好只提出一个修复方案。
  • 为了使此修复为开发人员所接受,建议的修复应该类似于人类:与人类开发人员将实现的修复非常相似或完全相同。

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

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

相关文章

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下,化工厂作为工业领域的重要组成部分,其环保管理显得尤为重要。然而,化工厂在追求经济效益的同时,也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

一阶线性微分方程应用实例:并联RC电路恒定电流求解电压

对于并联RC电路,我们可以通过求解微分方程来找出电压 V(t)。 微分方程求解 我们开始于给定的表达式: 重写方程: 将方程的形式调整为标准的线性微分方程形式: 这是一个一阶线性微分方程,我们可以使用积分因子法来解…

ROS服务通信自定义srv

服务通信自定义srv 流程:创建ROS功能包按照固定格式创建srv文件编译配置文件编译生成中间文件 流程: srv 文件内的可用数据类型与 msg 文件一致,且定义 srv 实现流程与自定义 msg 实现流程类似,需查阅msg文件的可以浏览ROS话题通信流程自定义数据msg格式…

红日靶场----(三)2.漏洞利用

上期的通过一句话木马实现对目标主机的持久后门 我使用的是蚁剑,蚁剑安装及使用参考: 下载地址: GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 安装即使用: 1. 快速入门 语雀 通过YXCMS的后台GETSHELL 利用…

【测开能力提升-fastapi框架】介绍简单使用

0. 前期说明 立了很多flag(开了很多专题),但坚持下来的没几个。也干了很多测试工作(起初是硬件(Acoustic方向)测试 - 业务功能测试 - 接口测试 - 平台功能测试 - 数据库测试 - py自动化测试 - 性能测试 - 嵌入式测试 - 到最后的python测试开发),最终还是…

链表---头插法+尾插法

本博客介绍了单链表的实现,以及头插法尾插法的代码实现 1.定义一个结点类 class ListNode{int value;ListNode next;public ListNode(int value) {super();this.value value;}Overridepublic String toString() {return "ListNode{" "value" …

Android 自定义Edittext 和TextView 提示文字和填入内容不同的粗细组件

近期项目中又EditText 以及TextView 这两个组件需要用到提示文字 以及 填入文字要保持不同的粗细程度,所以记录一下 首先 是EditText 组件的自定义 BLEditText 继承的这个组件是一个三方的组件,可以在很大程度上减少drawable的编写,有兴趣的可以去相关的Git去看一下 点击查看,…

excel有条件提取单元格特定文本(筛选纯文字的单元格或含有数字的单元格、单元格提取不同的文本长度)

实际工作背景 需要对导出的银行流水中的数十个村以及对应的村小组进行分组统计,但是初始的表格中村和小组是混在一起的,如下图所示: 目的:将大树村和大树村小组名称分别筛选出来 1.观察发现,大树村小组的单元格第4…

构建与操作顺序栈

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝黑暗的笼罩更会凸显光明的可贵! 顺序栈是数据结构中栈(Stack)的一种具体实现方式,它使用一段地址连续的内存空间(通…

电子电气架构 --- 关于DoIP的一些闲思 下

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看! 关键词:2024深圳eVTOL展 动力电池 高能量密度电池 高性能电池材料 作为2024深圳eVTOL展重要组成部分,2024深圳eVTOL动力电池展将于9月23-25日在深圳坪山燕子湖国际会…

Mac的系统数据怎么删除 cleanmymac会乱删东西吗 cleanmymac有用吗

作为一款专业级的苹果电脑清理软件,CleanMyMac可以精准识别系统垃圾,有效防止Mac系统数据被误删。软件可以深入系统底层,清理无用的系统数据,优化苹果电脑设置,提升Mac系统性能。有关Mac的系统数据可以删吗&#xff0c…

基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库

研究背景 随着互联网和移动设备的普及,音乐流媒体服务成为人们获取音乐的主要方式。这些平台如Spotify、Apple Music和网易云音乐等,提供了海量的音乐资源,使用户能够随时随地聆听各种类型的音乐。然而,如何在海量的音乐资源中快…

笔试算法刷题

猿辅导2021校园招聘笔试(算法一) 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com) 第一眼看到这个题想到的是蓝桥杯飞机降落,贪心题。但是这样算的是最大不相交区间数量&#xff0…

米家立式学习灯怎么样?书客、米家、孩视宝三款护眼大路灯巅峰PK!

米家立式学习灯怎么样?不知从什么时候开始,青少年成为了近视重灾区,主要促成近视的原因有长时间接触电子产品、学习时的不正确姿势、不良的灯光环境等,除了减少电子产品的使用以及多室外活动之外,剩下的就是室内孩子经常学习的光…

致远CopyFile文件复制漏洞

复现版本 V8.0SP2 漏洞范围 V5&G6_V6.1至V8.0SP2全系列版本、V5&G6&N_V8.1至V8.1SP2全系列版本。 漏洞复现 上传文件 POST /seeyon/ajax.do?methodajaxAction&managerNameportalCssManager&rnd57507 HTTP/1.1 Accept: */* Content-Type: applicatio…

GD32F303之CAN通信

1、CAN时钟 GD32F303主时钟频率最大是120Mhz,然后APB1时钟最大是60Mhz,APB2时钟最大是120Mhz,CAN挂载在APB1总线上面 所以一般CAN的时钟频率是60Mhz,这个频率和后面配置波特率有关 2、GD32F303时钟配置 首先我们知道芯片有几个时钟 HXTAL:高速外部时钟&#xff1…

Python打开Excel文档并读取数据

Python 版本 目前 Python 3 版本为主流版本,这里测试的版本是:Python 3.10.5。 常用库说明 Python 操作 Excel 的常用库有:xlrd、xlwt、xlutils、openpyxl、pandas。这里主要说明下 Excel 文档 .xls 格式和 .xlsx 格式的文档打开和读取。 …

STMF4 硬件IIC(天空星开发板)

前言:笔记参考立创开发文档,连接放在最后 #IIC概念介绍 #IIC介绍 IIC通信协议,一种常见的串行通信协议,英文全程是 Inter-Integrated Circuit 使用这种通信方式的模块,通常有SCL(Serial Clock Line&…

请编写函数,删除字符串中指定位置下的字符,删除成功函数返回被删字符,否则返回空值

char arr_del(char* p, int pos) {if (pos> strlen(p) || pos<0){printf("这是一个无效下标\n");exit(1);}//到这里就是有效下标char ch p[pos];//把要删除的下标存储for (int i pos; p[i] ! \0; i){p[i] p[i 1];}return ch; } int main() {char arr[100];…