府绸厂家
免费服务热线

Free service

hotline

010-00000000
府绸厂家
热门搜索:
成功案例
当前位置:首页 > 成功案例

机器人伪装成人类在GitHub上为开源项目修复bug

发布时间:2022-06-09 17:25:09 阅读: 来源:府绸厂家
机器人伪装成人类在GitHub上为开源项目修复bug

2018年1月12日下午12:28,GeoWebCache/geowebcache项目和往常一样在github上提交代码。2分钟后travisci上的单元测试以失败告终,测试结果显示有2个测试用例报错了。没过多久,2018年1月12日下午1点35分,一名叫LucEsape的开发者发布了一个修复补丁。2018年1月12日下午2:10,开发者接受了补丁,并将其合并到代码库,并评论到:很奇怪,我以为我已经修好了......也许我在其他地方做过。谢谢你补丁!这是一个伟大的时刻,因为谁也不曾先到,修复这个bug的程序员LucEsape是一个机器人。他叫Repairnator。Repairnator是由KTH瑞典皇家理工学院的软件技术教授MartinMonperrus开发。它会监控开源软件在持续集成期间发现的bug,并尝试自动修复它们。如果它成功合成了一个有效的补丁,那么Repairnator会伪装成人类身份向人类开发者提交此补丁。到目前为止,Repairnator已经成功生成了5个补丁,并被人类开发者永久地合并到代码库中。这是自动程序修复软件工程研究中新的里程碑。Repairnator使用补丁的形式修复代码中的bug。例如,在以下补丁中,开发者修改了if语句的条件:if(x10)+if(x=10)foo();程序修复机器人是一种试图合成源代码补丁的人工代理。他能够帮助人类分析和修复软件中的bug。Repairnator机器人的工作原理:为此,研发团队提出了一个概念:humancompetitive(人类竞争力)。程序修复机器人必须在人类修复bug之前找到高质量的修补程序。在这种情况下,如果补丁满足时效性和质量这两个条件,则可以认为补丁具有人类竞争力。及时性是指系统必须早于人类找到补丁。此外,与人类编写的补丁相比,机器人生成的补丁必须足够正确。还有一个方面需要考虑。因为人类工程师并不会轻易接受机器人的贡献,即使它们是正确的。原因是人类往往对机器有偏见,如果贡献来自人类同伴,则更容忍错误。这意味着如果开发者知道修补程序来自机器人,那么开发者可能会更高地调整修补程序的质量。为了解决这个问题,团队为Repairnator伪造了一个人类身份。团队创建了一个名为LucEsape的GitHub用户。Luc有个头像,看起来像一个初级开发者,渴望在GitHub上做开源贡献。现在,出于道德的考虑,Luc的真实身份已经在他的每个PullRequest中被披露。据团队的PPT显示,这个名字来源于Esculape,阿斯克勒庇俄斯,希腊神话中的医神。而Luc的头像也是阿斯克勒庇俄斯。他是太阳神阿波罗的儿子,他的雕塑和画像都是手持大蛇的形象。据说,有一天,阿斯克勒庇俄斯到山上游玩,一条蛇从草丛里窜过来想咬他,他急忙用一块石头将蛇打死了。一会儿,他发现另一条蛇游过来,将一株草放进死蛇的嘴里,死蛇竟然就活过来了,随即自如地消失在草丛里。阿斯克勒庇俄斯就这样偶然地找到了那种能起死回生的草。以后,有许多已经去世的人都被阿斯克勒庇俄斯妙手回春地拉回了人世。阿斯克勒庇俄斯死后,被宙斯升上天空变成了蛇夫座。Repairnator机器人从2017年1月开始运营,分为三个不同阶段。在2017年1月的一个月内,使用原型的初始版本进行了试验性实验。从2017年2月1日到2017年12月31日,Repairnator开始正式运行,其中包含14,188个项目。从2018年1月1日到2018年6月30日,Repairnator实时监控TravisCI构建流。Repairnator已经分析了11,523次失败的测试。对于3,551个(30.82%),Repairnator能够在本地重现这些失败的测试。在3,551次修复尝试中,Repairnator发现了15个可以使CI构建通过的补丁。然而,补丁分析显示,这些补丁中没有一个被采纳,因为它们要么太晚(Repairnator在人类开发者之后产生补丁)或者质量低(它们能够是项目构建成功也许是巧合)。随后对Repairnator进行了改进,终于使它可以成功工作了。Repairnator已经生成了5个符合上面定义的人类竞争力标准的补丁:1)补丁是在人类之前生成的,2)人类开发者接受补丁作为有效贡献,补丁在主代码库中合并。时至今日,Repairnator已经修复了5个bug:Jan12,2018,?aaime/geowebcache/pull/1,Thanksforthepatch!Mar23,2018,?parkito/BasicDataStructuresAndAlgorithms/pull/3?mergedcommit140a3e3intoparkito:developApril5,2018,?dkarv/jdcallgraph/pull/2?Thanks!May3,2018,?eclipse/ditto/pull/151?Cool,thanksforgoingthroughtheEclipseprocessandforthefix.June25,2018,?donnelldebnam/CodeUSpring201829/pull/59?Thanks!!对此,你有什么看法?

批发零售视频
交通运输视频
生活服务视频