acm-header
登录

ACM通信

BLOG@CACM

随机生成代码能修复软件bug吗?


杰克罗桑伯格

中国科学院高级编辑杰克·罗森伯格

进化的原则可以应用到软件代码中并用于改进它吗?斯蒂芬妮·福勒斯特我是这么认为的,而且有一些令人鼓舞的数据可以证明这一点。

福雷斯特,他是新墨西哥大学计算机科学系教授她最著名的工作是自适应系统,包括遗传算法、生物建模和计算机安全。她开始2010年轰动她发表了题为“可进化软件的案例”的主题演讲,在演讲中,她介绍了早期研究,由Westley魏玛在弗吉尼亚大学,他将进化生物学的原理融入到软件过程中。

在她的演讲中,Forrest展示了可进化软件是如何成功应用于自动bug修复的;优化和改进代码,包括程序集级代码;并创建现有软件功能的新组合。

当Forrest谈到进化时,她谈论的是将进化的基本原则——特别是随机变异、选择和继承——应用到软件代码中。虽然这个想法可能会让一些人觉得激进,但Forrest指出,将进化原则应用到软件代码的想法可以追溯到约翰•霍兰德1975年,他写了一本关于遗传算法的开创性著作《适应自然和人工系统》(Adaptation in Natural and Artificial Systems)。(霍兰德的论文:“以类似自然选择的方式‘进化’的计算机程序可以解决复杂的问题,即使它们的创造者也不能完全理解。”)同样,其他研究人员目前正在研究可进化软件,福瑞斯特简要地提到了三位计算机科学家的工作:安德里亚·阿库里迈克尔·奥洛夫,Moshe饮者

福雷斯特在新墨西哥大学的一个项目是进化程序修复在这种情况下,基因编程被用来进化程序变体,直到找到一个既保留所需功能又修复有问题的错误。(本项目涉及C语言软件。)到目前为止,Forrest, Weimer和他们的同事们已经将可进化软件应用到大约25个漏洞百出的程序中,并将它们全部修复。问题软件的复杂度从22行代码到35000多行代码不等。在22行代码中,错误是一个无限循环。在较大的示例中,问题涉及到受堆栈溢出困扰的FTP服务器代码。

Forrest认为使用可进化软件修复小错误的方法很有前途,因为大多数错误都很小。她引用了韦默的一些研究,韦默研究了20,000块补丁Eclipse结果发现,10%的斑块长度不超过2行,20%的斑块长度不超过5行,53%的斑块长度不超过25行。

可进化软件的另一个有利方面是,它不仅可以自动修复错误,而且可以及时这样做。例如,微软(Microsoft)的Zune 30音乐播放器就受到一个漏洞的困扰,当输入的是闰年的最后一天(2008年12月31日)时,就会出现无限循环。在这种情况下Zune错误这个可进化的软件补丁只花了42秒。根据Forrest的研究,可进化软件可以在平均6分钟内定位并修复一个漏洞。

可演化软件还可以应用于更复杂的软件。埃里克·舒尔特他曾使用可进化软件修复多种语言的直接编译汇编代码,包括Java。舒尔特的研究将在ASE 2010

此外,Forrest、Weimer和同事们已经将可进化软件应用到现有的软件程序中,以删除不必要的代码,使它们更简洁。在他的研究中,韦默发现可进化软件可以减少软件程序的指令数量高达40%,而对质量几乎没有明显的影响,福雷斯特说。

尽管所有这些结果都是令人鼓舞的,Forrest注意到一个与健壮性有关的重要问题:对原始程序应用突变是否会导致不受欢迎的突变?她说,答案有时是肯定的,有时不是。Forrest引用了一篇论文《突变鲁棒性和自动程序修复》伊桑快他发现30%的随机一步突变是中性的。

总之,Forrest认为“软件进化是一个可以实现的目标。”根据她在SPLASH 2010上的主题演讲,以及观众鼓励的反应和随后的讨论,Forrest很可能是对的。

杰克罗桑伯格是高级编辑,新闻,的ACM通信


评论


匿名

我已经写软件35年了,我想说,不,随机代码没有帮助!从来没有,在BASIC, Cobol, Fortran, WatFiv, dBase, Clipper, c++或SQL,永远不会- GIGO。

可进化的软件显然是用智能的方式编写的——决定无限循环是一件坏事,知道如何修复它,以什么顺序,以及如何修复它。这不是随机的。随机方法是随机插入随机字母和数字
没有特殊原因的随机地点,看看会发生什么。
如果没有情报,你就会一团糟!


显示1评论

登录为完全访问
»忘记密码? »创建ACM Web帐号
Baidu
map