- 什么是有效负载?如何控制您的库卡机器人?
- KUKA库卡机械手KR360维修保养技巧分享
- 维修保养|库卡KUKA机器人KR 210维修保养经验丰富
- 库卡KUKA机器人维修保养小手册
- 维修保养|KUKA库卡机器人维修保养干货知识
程序员的福音,AI可以自动修复bug了!
程序员的福音,AI可以自动修复bug了!
人工智能完全学会自己编程,可能说起来还有一种科幻感,但AI帮程序员找bug这件事,已经达到了不错的水平。
北京大学、微软亚洲研究院和中国电子科技大学就一起尝试着让AI找bug。微软亚洲研究院的LilySun在微软官方博客上介绍称,他们开发的精确状态系统(AccurateConditionSystem,ACS),工业机器人维修,能在人类不加干预的情况下自动修复软件系统中的Bug。
他们关于ACS的论文PreciseConditionSynthesisforProgramRepair发表在世界软件工程大会ICSE2017上。
ACS会自动修复什么样的bug呢?LilySun举了个例子:
intlcm=Math.abs(mulAndCheck(a/gdc(a,b),b));
returnlcm;
这是ApacheMath中的一段代码,用来计算两个数的最小公倍数,并且引入了Math.abs来确保返回的值是正数。但是,这个程序有缺陷,有时候还是会返回负值。
我们可以创建一个测试来找到其中的错误。测试的输入是a=Integer.MIN_VALUE、b=1,预期的输出是throwArithmeticException。
把这个程序和相应的测试输入到ACS中,ACS会自动生成第2、3行的路径,修复程序缺陷:
intlcm=Math.abs(mulAndCheck(a/gdc(a,b),b));
+if(lcm==Integer.MIN_VALUE){
+thrownewArithmeticException();
+}
returnlcm;
让算法自己改bug这件事,从2009年开始就有研究,弗吉尼亚大学计算机系的WestleyWeimer、新墨西哥大学的StephanieForrest和卡耐基梅隆大学的ClaireLeGoues,库卡机器人,就一起开发了Genprog。
而ACS,www.zr-kuka.com,在前人研究的基础上大幅提升了准确率。在Defects4J基准上的测试结果显示,ACS生成的23个补丁中,有18个是正确的,准确率近80%。
ACS准确率的提升主要得益于有更多的信息来源,特别是网上的大量代码。与以往的方法相比,ACS有以下三种新的信息来源:
一是用局部性原则信息对补丁中的变量进行排序;
二是用自然语言分析技术来分析Javadoc,然后用Javadoc中的信息来过滤不正确的补丁;
三是通过对网上的开源程序进行统计分析,发现对变量进行操作的条件概率,进而生成正确的补丁。