机器人系统
程序员的福音,AI可以自动修复bug了!
2024-04-17

  北京大学、微软亚洲研究院和中国电子科技大学就一同尝试着让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));

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

  + 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中的信息来过滤不正确的补钉;

  三是经过对网上的开源步伐开展统计分析,发明对变量开展操纵的前提几率,进而生成精确的补钉。