让AI自动修复程序中的bug:微软亚洲研究院新研究 | 附论文

李林 编译自 微软官方博客 量子位 报道 | 公众号 QbitAI

人工智能完全学会自己编程,可能说起来还有一种科幻感,但AI帮程序员找bug这件事,已经达到了不错的水平。

北京大学、微软亚洲研究院和中国电子科技大学就一起尝试着让AI找bug。微软亚洲研究院的Lily Sun在微软官方博客上介绍称,他们开发的精确状态系统(Accurate Condition System, ACS),能在人类不加干预的情况下自动修复软件系统中的Bug。

他们关于ACS的论文Precise Condition Synthesis for Program Repair发表在世界软件工程大会ICSE 2017上。

ACS会自动修复什么样的bug呢?Lily Sun举了个例子:

int lcm=Math.abs(mulAndCheck(a/gdc(a,b), b));
 return lcm;

这是Apache Math中的一段代码,用来计算两个数的最小公倍数,并且引入了Math.abs来确保返回的值是正数。但是,这个程序有缺陷,有时候还是会返回负值。

我们可以创建一个测试来找到其中的错误。测试的输入是a=Integer.MIN_VALUE、b=1,预期的输出是throw ArithmeticException。

把这个程序和相应的测试输入到ACS中,ACS会自动生成第2、3行的路径,修复程序缺陷:

int lcm=Math.abs(mulAndCheck(a/gdc(a,b), b));
 + if (lcm == Integer.MIN_VALUE) {
 +  throw new ArithmeticException();
 + }
 return lcm;

让算法自己改bug这件事,从2009年开始就有研究,弗吉尼亚大学计算机系的Westley Weimer、新墨西哥大学的Stephanie Forrest和卡耐基梅隆大学的Claire Le Goues,就一起开发了Genprog(http://dijkstra.cs.virginia.edu/genprog/)。

而ACS,在前人研究的基础上大幅提升了准确率。在Defects4J基准上的测试结果显示,ACS生成的23个补丁中,有18个是正确的,准确率近80%。

ACS准确率的提升主要得益于有更多的信息来源,特别是网上的大量代码。与以往的方法相比,ACS有以下三种新的信息来源:

一是用局部性原则信息对补丁中的变量进行排序;

二是用自然语言分析技术来分析Javadoc,然后用Javadoc中的信息来过滤不正确的补丁;

三是通过对网上的开源程序进行统计分析,发现对变量进行操作的条件概率,进而生成正确的补丁。

论文地址: https://www.microsoft.com/en-us/research/publication/precise-condition-synthesis-program-repair/

论文部分作者:微软亚洲研究院Shi Han(左一)、微软亚洲研究院Lily Sun(中)、北京大学熊英飞(右)

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2017-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏tkokof 的技术,小趣及杂念

代码小记

  前一阵子一直在制作一款小游戏,虽说最终的成果并不完美,但也算是花了不少精力,网上批评的声音不少,但更多的则是鼓励,这也让我们颇感欣慰,自省之余,也算拾得一些...

7720
来自专栏用户2442861的专栏

笔试面试的小结 反

原文  http://blog.csdn.net/suky520/article/details/39641783

17630
来自专栏我是攻城师

Lucene/Solr/ElasticSearch搜索问题案例分析

34940
来自专栏java工会

每个程序员要注意的 9 种反模式

有一个健康的自我批评对于专业和个人成长是很重要的。对于编程而言,自我批评的意义就是需要能查明设计中、代码中、开发中和行为中的无效或反效果的模式。这就是为什么反面...

10320
来自专栏数据小魔方

leaflet在线地图之热力密度图

之前在练习leaflet的时候没有找到R语言leaflet中的热力密度图接口函数,一直感觉很遗憾。

18220
来自专栏钱曙光的专栏

一周极客热文:8张图理解Java

图:equals()方法、hashCode()方法的区别 HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于: 如果两...

21270
来自专栏牛客网

阿里一面

【每日一语】当你厌恶你身边的人,你表达厌恶最好的方式不是和他们争吵,而是自己勤快点儿,加把劲离开他们。那样,他们就永远从你的生活中消失,和死了差不多。

20730
来自专栏AI科技大本营的专栏

丢人了!英伟达抄代码也就算了,竟然把人家的License都改成自己的

今天一早,营长像往常一样打开手机,来Reddit上看看大家都在讨论啥。 网友Ouitos被人抄代码并改License的声讨,顿时激起了营长的义愤。 ? 仔细看...

32680
来自专栏PHP在线

编程命名看编程质量问题

很多人以为提高编码质量,需要很多激动人心的创新,需要明显的飞跃,这也许对,但我个人感觉项目中提高编码质量是个水磨功夫,要一步步积累,方法论大多时候帮助不大。 这...

34340
来自专栏日常学python

用python来分析一波股票

Python是一门广泛在各个行业应用的语言,包括计算机,生物学,金融。可以说,python除了不会生孩子,其他啥都行。本文将使用python来玩转股票数据,让你...

98630

扫码关注云+社区

领取腾讯云代金券