厉害了!AI成功伪装人类贡献GitHub修复补丁
导读: 天啊!Bug 好多!地啊!头发好秃!妹啊!没空去撩!时间啊!哗啦啦流淌,难道你的一生就要被 Bug 缠住吗?难道就要当一辈子单身狗了吗?不!你的 Bug 将被 AI 拯救!
近日,据 MIT Technology Review 报道,一位名为“Repairnator”的机器人在 GitHub 上“卧底”数月,查找错误并编写和提交修复补丁,结果有多个补丁成功通过并被采纳,这位 Repairnator 到底是如何拯救程序员于水火的呢?
现代计算机程序非常复杂,在开发过程中不可避免地会出现 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,请问有没有哪位开发大神来做一个自动码字的软件,来满足一下小编的这个愿望,小编在此感激不尽!!!