本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

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

时间:2017-08-06 01:31来源:天下彩论坛 作者:118开奖 点击:
让AI自动修复程序中的bug:微软亚洲研究院新研究 | 附论文 2017-08-05 12:59 来源:量子位 程序设计/微软 原标题:让AI自动修复程序中的bug:微软亚洲研究院新研究 | 附论文 李林 编译自

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

2017-08-05 12:59 来源:量子位 程序设计 /微软

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

李林 编译自 微软官方博客

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

人工智能完全学会自己编程,可能说起来还有一种科幻感,但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来确保返回的值是正数。但是,j2直播,这个程序有缺陷,有时候还是会返回负值。

我们可以创建一个测试来找到其中的错误。测试的输入是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()

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

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

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

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

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

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

论文地址:

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

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

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

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容