程序员的福音,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 来确保返回的值是正数。但是,这个程序有缺陷,有时候还是会返回负值。
我们可以创建一个测试来找到其中的错误。测试的输入是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 中的信息来过滤不正确的补丁;
三是通过对网上的开源程序进行统计分析,发现对变量进行操作的条件概率,进而生成正确的补丁。
最新文章
- [译]Profile and debug your ASP.NET MVC app with Glimpse
- purge mysql自带命令清除binlog
- bootloader制作过程
- Visual Studio安装过程
- ios滤镜
- Git 安装与使用(一)
- javascript基础学习(八)
- Timus 1777. Anindilyakwa 奇怪的问题计数
- java发布项目后注意小点,以及对于金额在java中的处理
- POI-处理大Excel文件(xls)
- 从template到DOM(Vue.js源码角度看内部运行机制)
- 使用WebApiClient请求和管理Restful Api
- python基础——继承与派生、组合
- Django 项目搭建(ubuntu系统)
- ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)
- mac下php开发环境的搭建
- android sdk manager更新地址
- int**a = new int[5][6] 怎么delete
- Java_myBatis_XML代理_动态SQL
- 缓存 - 内存数据库Redis
热门文章
- Direct3d 设备丢失 (device lost) (转载)
- fritshoogland 大神ORACLE :pga-memory-operation latch
- WordPress主题开发实例:查询单篇文章
- mongodb常用查询
- ImageView和onTouchListener实现,点击查看图片细节
- java通过Stream对list集合分组
- Mysql 编译安装并使用自定义用户启动
- .NET零基础入门之01:开篇及CSharp程序、解决方案的结构
- django数据模型中 null=True 和 blank=True 有什么区别?
- intellij idea 如何一键清除所有断点