引言
BUG是软件程序员的“天敌”。修复BUG的改动往往是微小的,只需要修改几行代码,但是精准定位哪一行的代码需要修改,是十分耗费时间的,并且让人很沮丧,特别是在大项目中。麻省理工学院开发的新软件,借鉴其他程序自动修复软件BUG,适用于不同的编程语言,无须访问源代码。这个可以节省程序员大量的时间,并且有利于构建更稳定的软件。
麻省理工学院开发的新软件,被称为CodePhage的系统,可以通过变量检查来解决BUG,并且可以很快地被扩展应用来解决更多类型的错误。麻省理工学院的研究者Stelios Sidiroglou-Douskos称,这个软件可以做动态的代码翻译和移植(被称为“水平的代码移植”,和遗传学上的过程类似),通过直接分析执行文件,不需要访问源代码,并且跨不同的编程语言。
它如何工作?
举例说,我们假设你已经写好一个简单电脑程序,这个程序让用户输入两个数字,并且输出第一个数字除以第二数字。让我们也假设,在你的代码里,你忘记检查第二个数字是否为零(除零是数学上未定义的)。
CodePhage开始运行一个有BUG的程序,并且进行两个输入,一个不会触发错误(“安全输入”),而另外一个触发错误(“不安全输入”)。然后,它使用大数据库,找到了一个函数可以读取并且正确的处理所有输入。在我们例子中,系统将搜索一个巨大的函数版本库,安全地完成两数相除。
“我们有大量开源套件库的源代码可利用,数以百万计的工程,并且许多的项目用相似的文档实现,”Sidiroglou-Douskos称,“尽管这样,这个并不是程序的核心功能,它们经常有子构件,可以在大量工程间分享函数。”
系统在区分出“供体”程序 :软件修复所借鉴的程序, 和“受体”程序 – 系统将尝试修复充斥着BUG的程序。
第一步就是提供“安全”输入给供体代码,并且动态的跟踪哪个常量被赋予输入变量。然后,软件再同样的做第二遍,提供“不安全”的输入,并且比较两组常量。两者之间的区别,说明了常量是否是安全的输入,这样可以判断,这很可能是受体代码的安全性检查所遗失的。
在我们的例子中,安全的输入可以是任何不为零的除数,而不安全的输入将会是为零的除数。麻省理工学院的系统将检查条件“除数必须不为零”,是否满足安全输入,正确辨别检查在受体程序里面遗失的特定条件,是引起程序BUG的可能原因。
在这个意义上,CodePhage将在供体程序里进行所有的输入差异检查,并且将他们转化为受体软件的编程语言。系统将尝试在受体程序不同部分的代码里面增加新的检查,直到不安全的输入被正确的处理(当检查测试用例的时候,程序仍然按照期望的运行)。
向着没有BUG软件发展?
“长期愿景是,你从来不必须写一段任何别人已经写过的代码,”麻省理工大学的教授,这项研究的人员Martin Rinard说,“系统将找到那段代码,自动合入程序运行所需要的代码段中。”
Rinard以及团队称:开发者可以减少开发以及测试的工作量,通过省略非法输入检查,然后使用它们的工具,引入更鲁棒的软件(包括闭源的专有应用程序)所需要的运行时检查。
在现代的商业软件中,安全检查可以占用百分之八十的代码。对编程时间的影响是很大的。更进一步的说,系统目前被限制,用于作变量检查分析。而同样的技术也将用于跟踪,提取并且插入任何的计算,条件是系统能够正确辨认供体软件中分配给变量的数值。
麻省理工学院的系统,可用于在同一个应用程序不同版本的软件之间进行检查,预防新发布的软件补丁和更新中,引入的BUG。
CodePhage在7个开源程序中进行测试,能够修补易受攻击的代码,每次修补占用10分钟时间。在以后版本中,研究人员希望尽可能的减少这个延迟时间。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!