Py学习  »  Git

厉害了!AI成功伪装人类贡献GitHub修复补丁

AI前线 • 5 年前 • 281 次点击  

策划编辑 | Natalie
整理 | Vincent
编辑 | Natalie
AI 前线导读: 天啊!Bug 好多!地啊!头发好秃!妹啊!没空去撩!时间啊!哗啦啦流淌,难道你的一生就要被 Bug 缠住吗?难道就要当一辈子单身狗了吗?不!你的 Bug 将被 AI 拯救!

近日,据 MIT Technology Review 报道,一位名为“Repairnator”的机器人在 GitHub 上“卧底”数月,查找错误并编写和提交修复补丁,结果有多个补丁成功通过并被采纳,这位 Repairnator 到底是如何拯救程序员于水火的呢?

更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

现代计算机程序非常复杂,在开发过程中不可避免地会出现 Bug,找到它们并编写补丁来进行修复是大部分程序员的日常工作。

但是,查找和修复 Bug 是一项需要耗费大量资源和时间的任务。研究人员已经开发出了不少能让修复 Bug 过程自动化的机器人,但是它们往往效率很低,或者只能产生一些质量低下的代码,反而会拖慢工作的进度。因此,开发人员非常希望能够依靠快速、高质量的机器人来搜索错误代码,并编写补丁修复这些错误。

就在不久前,瑞典皇家理工学院的研究人员宣称:该学院的软件技术教授 Martin Monperrus 及其朋友构建的机器人 Repairnator 经过测试和实验,已经可以发现错误并编写高质量补丁。

神秘用户 Luc Esape

如果不是特别关注,你或许根本注意不到 GitHub 上这个名为 Luc Esape(GitHub:https://github.com/lucesape )的用户,表面上看起来,这位用户就像是一位渴望在 GitHub 上做贡献的初级开发者,但是实际上,它的背后是 Repairnator 程序自动修复机器人。

“是的,我是个人造程序员”

Repairnator 的任务是在 GitHub 上扫描并修复一些代码的 Bug,开发者团队共进行了两轮测试,第一轮是在 2017 年 2 月到 12 月,Repairnator 在 14188 个 GitHub 项目的修复列表上运行并扫描错误,期间 Repairnator 总共分析了超过 11500 个失败的构建,其中有 3000 多个能被重现。然后,Repairnator 生成了针对其中 15 个问题的补丁,遗憾的是由于补丁质量低、花费时间过长等问题,这些补丁均未被接受。

第二轮测试是在 2018 年 1 月至 6 月,该团队没有具体说明他们对 Repairnator 做了哪些改进,但 Repairnator 在 1 月 12 日成功编写出了第一个被人类开发者接受的补丁。在之后的 6 个月里,Repairnator 陆续又有 5 个补丁被采纳。

GitHub 上采纳了 Repairnator 修复建议的人类用户评论

至此,神秘用户 Luc Esape,或者说 AI 程序 Repairnator 成功发现并修改出了可被人类开发者接受的 Bug,那么问题来了:它到底是怎么做到的呢?

Repairnator 是如何工作的?

Repairnator 专门用于修复持续构建过程中出现的 Bug。它会持续监控被 Push 到 GitHub 上的数千次代码提交,并分析相应的构建过程。每一分钟,它都会启动新的修复尝试,以便在人类程序员之前修复 Bug。Repairnator 被设计为要尽可能快地提交修复,因为如果它能够比人类程序员更快找到并提交修复方案,那么我们就可以认为它可以与人类程序员相媲美。

下面通过一张流程图来看看 Repairnator 的工作流程:

Repairnator 的测试流程

Repairnator 的输入主要来自持续集成构建,当开发人员在 GitHub 项目提交代码的时候(a)就会触发(图中的上半部分(a)和(b))。 Repairnator 的输出包括两部分:(1)如果检测到持续构建的 Bug,则自动生成修复补丁(g);(2)收集有价值的数据用于未来的程序 Bug 修复和研究(h)和(k)。

Repairnator 会监控 GitHub 项目的所有持续性活动(c)。持续集成(CI)构建作为整个包含三个步骤的流程的输入:(1)第一阶段收集和分析持续集成构建的日志(e); (2)第二阶段在本地复现持续集成过程中出现的构建失败(f); (3)第三阶段运行来自最新学术研究的不同程序修复原型。

找到补丁后,Repairnator 会执行快速检查,以避免浪费开发人员宝贵的时间。如果经过检查后(i)确认补丁不会引入新的问题,则将其作为 GitHub 的拉取请求提交(j)给项目的原始开发者。接下来开发人员就会遵循他们通常的惯例进行代码审查和合并。

Repairnator 必须在特定的软件生态系统中才能运行。 由于我们在过去的研究项目中专业知识更偏向 Java,因此 Repairnator 的原型实现 更侧重于修复那些用 Java 编写的 GitHub 开源项目,这些项目一般都是基于 Maven 工具链和 Travis CI 持续集成平台构建的。

结   语

你已经是个成熟的软件了,要学会自己调参修 Bug。

这本来是一句网络上的段子,却在 AI 不断发展的今天,逐渐变成了现实。不过对于广大程序员来说,这绝对是一项福利,不用被 Bug 逼到头秃,节省出来的时间用来撩妹脱单,啧啧啧~ 简直不要太爽,不过在此之前,可能还得拜托各位研发人员,牺牲一些发量和撩妹的时间,让这一程序普及开来,解救更多被 Bug 所困的同胞吧!

BTW,请问有没有哪位开发大神来做一个自动码字的软件,来满足一下小编的这个愿望,小编在此感激不尽!!!

论文原文链接:

https://arxiv.org/pdf/1810.05806.pdf

参考链接:

https://www.technologyreview.com/s/612336/a-bot-disguised-as-a-human-software-developer-fixes-Bugs/

今日荐文

点击下方图片即可阅读

港珠澳大桥采用人脸识别,无需证件一秒通关



推   荐

有大量的软件工程师有能力利用数据来处理工作,但不知道在工程中如何使用 AI 和机器学习解决问题。什么时候应该使用机器学习算法?什么时候规则引擎是正确的方法?

这里有来自 Google、BAT、美团、京东、小米、今日头条等 40+ 一线技术专家,给大家带来关于机器学习、知识图谱、搜索推荐、计算机视觉、NLP 等热门方向的最新落地案例分享。

目前大会 8 折报名火热进行中,AI 前线给大家带来了一波优惠福利,凭此优惠码“AICon-aifront ”,购买大会门票可以享受 8 折再减 200 元的优惠哦!更多大会详情欢迎咨询票务小姐姐:18514549229(同微信),点击“阅读原文”更精彩。


如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/FiOVkovS7t
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/25566
 
281 次点击