Facebook SapFix告诉我们:自动修复缺陷时代已经来临

SQA Lab 软件质量报道 2018-09-14


Facebook悄悄地构建并部署了一个名为SapFix的人工智能编程工具,可以扫描代码,自动识别错误,测试不同的补丁包(patches)并建议工程师可以选择最佳补丁包进行部署。这是在昨天(美国时间)的Facebook@Scale工程大会上公布的,SapFix已经在Facebook庞大的代码库上运行,该公司计划最终与开发者社区分享它。

Facebook的开发人员工具团队可以自豪地说:这标志着机器生成的修复程序 - 自动的端到端测试和修复 - 已首次部署到Facebook大规模的代码库中。这是AI混合动力车的一个重要里程碑,并提供了进一步的证据,证明基于搜索的软件工程可以减少软件开发中的摩擦。”SapFix可以在有或没有Sapienz( 一年前Facebook公布的能够自动测试、识别安卓软件漏洞的工具,每月能发现数百个 Bugs,并能精准定位存在Bug的代码行,Sapienz最初是由伦敦大学学院研发的)的情况下运行。但如果将Sapienz与SapFix结合起来使用,为Sapienz发现的问题提出了解决方案——即目前SapFix专注于修复 Sapienz 发现的 Bug。一旦 Sapienz 发现并推断出与 Bug 相关的特定部分代码,它就将该信息发送给 SapFix,SapFix会根据一些策略自动生成多个补丁包,并建议开发者选择其中最好的补丁包。其工作流程见下图:


这一类型的工具可以让小型团队构建更强大的产品或者让大公司节省大量的之前花在修复缺陷的时间。

对于高触发 bug,SapFix 创建的补丁可以完全或部分还原初始代码。SapFix 能够借助开发工程师之前创建的模板可以自动创建缺陷修复的模板,这样,当面对更复杂的问题时,SapFix从这些模板中提取素材生成补丁代码。

如果模板不合适时,SapFix 将尝试基于变异(mutation)的修复(变异测试的思想可以延伸至缺陷修复中),这样基于导致应用崩溃的代码行的抽象语法树( abstract syntax tree)来进行少量代码的修复,不断尝试来调整修复补丁,直到找到潜在的解决方案。

即使 SapFix 找到了Bug修复的补丁,其工作还没有结束,因为还需要评价补丁的质量,从而决定向人类工程师按一定的优先次序进行推荐。如何评价补丁的质量呢?主要从这三个方面来评估:

  • 是否存在编译错误?

  • 程序是否仍然会崩溃?

  • 补丁是否引入了新的崩溃?

“是否存在编译错误”容易认定,而程序是否崩溃,就需要测试,这可以针对修复版本自动执行开发人员之前编写的测试,并自动运行前面提到的工具Sapienz所创建的测试。这也就是说,SapFix 尝试之前由开发人员完成的调试工作。

SapFix 会将测试过的补丁发送给研发人员,进行人工评审,决定是否采用。甚至SapFix 可以从多个候选补丁中选择最佳的解决方案,向研发人员推荐。该工具依赖工程师的专业知识来确认是否应该部署提出的补丁,但系统会自动追踪评审者的反馈,接受补丁或丢弃补丁,在这过程中获得学习。


    本站仅按申请收录文章,版权归原作者所有
    如若侵权,请联系本站删除
    觉得不错,分享给更多人看到