作者 | 琥珀、非主流
出品 | AI科技大本营(公众号ID:rgznai100)
“如果 Facebook 没有 AI,那它将失去根基。”去年@Scale软件工程大会上,Facebook AML 实验室负责人 Joaquin Candela 在演讲中坦露。
Scale,顾名思义,即规模化设计 AI。由 Joaquin Candela 领导的 AML 实验室主要负责的,就是将 AI 应用在 Facebook 的各种产品上。值得一提的是,Facebook 另一支由 Yann LeCun 领导的 FAIR 实验室,更专注于 AI 的基础研究。两支队伍相辅相成,共同推动着 AI 在 Facebook的发展和应用。如今,Facebook 利用 AI 再推新款代码调试工具 SapFix。
近日,在加州旧金山湾区的圣何塞举办的 Facebook @Scale 2018 大会上,Facebook 宣布了它的新款工具 SapFix,可针对特定的 bug 自动生成修复程序,然后将其提交给工程师,经确认之后,然后再部署到生产环境中。相比其一年前已投入大规模使用的智能自动化软件测试工具 Sapienz,SapFix 能够在没有 Sapienz 的情况下运行,主要用于修复 Sapienz 在生产前发现的程序 bug。不过,目前SapFix 仍在开发阶段。
SapFix 是如何 debug 的呢?
从发现 bug 到修复 bug,Facebook 有一套完整的流程:首先 Sapienz 以及 Facebook 的静态分析工具 Infer,会帮助定位代码中需要修补的点;一旦 Sapienz 和 Infer 精确定位与崩溃相关的特定代码部分之后,就会将该信息传递给 SapFix;最后,SapFix 会参考几种不同的策略,自动生成补丁。
SapFix如何为软件bug生成补丁
为了解决高触发错误,SapFix 会创建修补程序,该修补程序可以完全或部分恢复原来提交的代码。对于更复杂的崩溃错误,SapFix 系统会通过根据模板修复集合中来生成补丁。这些模板是从人类工程师基于过去的修复库创建的模板中自动获取的。
当人类设计的模板不适合时,SapFix 将尝试基于突变的修复,从而对导致崩溃的语句的抽象语法树(AST)执行小的代码修改,对补丁进行调整,直到找到潜在的解决方案。
自主验证和人工审核
找到特定的补丁,并不意味着 SapFix 的工作已经结束。SapFix 会针对每个 bug 生成多个可能的修复程序,然后通过下面三个问题来评估他们的质量:
是否存在编译错误?
崩溃是否依然存在?
修复程序是否引入新的崩溃?
为了解决以上后两个问题,SapFix 会在修补后的版本上运行现有的开发人员编写的以及 Sapienz 创建的测试程序。和前面的补丁生成步骤一样,这个验证过程是自主进行的,而且会与更大的代码库隔离开来。这个过程相当于人们目前所做的调试工作,但是它并不是为了自己将修复程序部署到生产代码中。
当修补程序经过全面测试之后,SapFix 会将它们发送给人类审查者进行审核。这非常类似于人工生成的报告由其他开发人员检查和批准的方式,除了系统自动跟踪审阅者的反馈外,它还会接受经批准的补丁,然后清理其他补丁。在某些情况下,SapFix 可以从几个选项中选择最佳解决方案,并向工程师提出建议。
SapFix如何基于生成的补丁寻求工程师的反馈
虽然 SapFix 还不能自己部署自己提出的修复方案,但它帮助工程师节省了大量的时间和精力,且具备很大的技术潜力。
根据 Facebook 的数据,Sapienz 报告的大约四分之三的错误都需要开发者来修复。自 Facebook 今年 8 月开始测试 SapFix 之后,该工具已经成功生成了被人类审核者接受并部署于生产的补丁。
写在最后
据 Facebook 的开发人员称,“这标志着机器生成的修复程序(具有自动端到端测试和修复)首次被部署到 Facebook 规模的代码库中。这是 AI 与人类工程师结合的一个重要里程碑。SapFix 的成功也表明基于搜索的软件工程可以减少软件开发中的阻碍。”
作为可以处理不同类型的错误和软件的工具, SapFix 有可能改变代码生成的速度和质量。该款工具不仅适用于大规模运营的公司,也适用于需要编程的个人或小公司。无论是一起使用还是单独使用, SapFix 和 Sapienz 都可以让开发人员花更少的时间进行调试。
接下来,Facebook团队将与工程社区分享 SapFix,因为这是自动化调试发展的下一步,有为广泛的公司和研究组织提高新代码的生产和稳定性的巨大潜力。
此次@Scale 2018 大会上,除了公布 SapFix 外,Facebook 还宣布了与顶级芯片制造商的合作,包括Cadence、Esperanto、Intel、 Marvell、高通,它们承诺将在未来芯片产品的制造上提供支持 Facebook 机器学习编辑器 Glow 的解决方案。这反映出 Facebook 正诉诸于利用社区推进其围绕自身机器学习软件重新定位计算硬件生态系统的战略,而这也有助于合作伙伴快速设计和优化新款芯片产品在人工智能和机器学习上的能力。
参考链接:
https://code.fb.com/developer-tools/finding-and-fixing-software-bugs-automatically-with-sapfix-and-sapienz/