程序员的福音,AI可以自动修复bug了!_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > 程序员的福音,AI可以自动修复bug了!

程序员的福音,AI可以自动修复bug了!

 2017/8/7 15:31:23    程序员俱乐部  我要评论(0)
  • 摘要:编者按:本文来自微信公众号“量子位”(ID:QbitAI),由李林编译自微软官方博客。人工智能完全学会自己编程,可能说起来还有一种科幻感,但AI帮程序员找bug这件事,已经达到了不错的水平。北京大学、微软亚洲研究院和中国电子科技大学就一起尝试着让AI找bug。微软亚洲研究院的LilySun在微软官方博客上介绍称,他们开发的精确状态系统(AccurateConditionSystem,ACS),能在人类不加干预的情况下自动修复软件系统中的Bug
  • 标签:程序 程序员 修复

<a href=程序员的福音,AI 可以自动修复 bug 了!" />

  编者按:本文来自微信公众号“量子位”(ID: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。

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

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

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

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

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

  论文地址

上一篇: 2017软件开发薪酬调查:Go和Scala是最赚钱的语言 下一篇: 没有下一篇了!
发表评论
用户名: 匿名