专栏名称: 机器之心
目录
相关文章推荐
爱可可-爱生活  ·  《爱可可微博热门分享(2.26)》 ... ·  昨天  
爱可可-爱生活  ·  本文创新性地提出了名为 Slam ... ·  2 天前  
爱可可-爱生活  ·  【[143星]getomni-ai/benc ... ·  3 天前  
51好读  ›  专栏  ›  机器之心

哟,写Bug呢?Facebook发布AI代码调试工具SapFix

机器之心  · 掘金  · AI  · 2018-09-14 04:55

正文

阅读 46

哟,写Bug呢?Facebook发布AI代码调试工具SapFix

选自code.Facebook,作者:Yue Jia、Ke Mao、Mark Harman,机器之心编译。

请注意:这不是你写 Bug 的理由。

调试代码是件很无聊的事,但是由 Facebook 工程师创建的新型人工智能混合工具——SapFix 可以大大节约工程师的时间,同时还加快了新软件的推出过程。该工具可以为特定 Bug 自动生成修复程序,然后将其提交给工程师批准并部署到生产中。

SapFix 被用来加速向装有 Facebook Android 应用程序的数百万设备传输稳定代码更新的过程,这是人工智能测试和调试工具在此类大规模生产中的首次应用。Facebook 打算与工程界分享 SapFix,因为这是自动化调试发展的下一步,可能为很多公司和研究机构促进新代码的产量和稳定性。

SapFix 被设计成一个独立的工具,无论有或没有 Sapienz(Facebook 的一款智能自动化软件测试工具,在 F8 版本时发布,已部署到生产中),它都可以运行。在目前的概念验证状态,SapFix 在部署到生成前专注于修复 Sapienz 发现的 Bug。此过程从 Sapienz 开始,连同 Facebook 的推断静态分析工具一起,能帮助定位代码中需要修复的 Bug。一旦 Sapienz 发现并推断出与 Bug 相关的特定部分代码,它就可以将该信息传递给 SapFix,后者会自动参考一些策略并生成补丁。

SapFix 是如何 debug 的

上图说明 SapFix 如何为软件 Bug 生成补丁。

为了解决高触发 bug,SapFix 创建的补丁可以完全或部分还原初始代码。对于更复杂的问题,SapFix 通过从模板修复集合中提取素材生成补丁。这些模板是从人类工程师创建的模板中自动获取的,而后者则是基于过去的修复库创建的。

当以前用过的由人类设计的模板不合适时,SapFix 将尝试基于突变进行修复。为此,它将对导致崩溃的语句的抽象语法树(AST)执行小型代码修复,调整补丁,直到找到可能的解决方案。

自主验证和人工审批

即使 SapFix 找到了特定的补丁,它的工作还远远没有结束。该工具为每个 Bug 生成多个潜在的补丁,并通过三个问题评价补丁的质量。即是否存在编译错误、程序是否仍然会崩溃,以及补丁是否引入了新的冲突?

为了解决最后两个问题,SapFix 在修复版本上运行已存的、开发者编写的测试,同时还会运行由 Sapienz 创建的测试。与之前补丁生成步骤一样,验证过程会自动执行,且与更大的代码库实现分离。SapFix 正在复制目前由人工完成的调试工作,但它并不是为了将补丁部署到产品代码中而设计的。

当自动生成的补丁经过全面测试后,SapFix 会将它们发送给人工评审员进行批准。这有些类似于人工生成的报告需要由其他开发者进行检查与审批,此外系统除了会自动追踪评审者的反馈外,它还会接受经批准的补丁、清理其它未经批准的补丁。在某些情况下,SapFix 可以从多个候选补丁中选择最佳的解决方案,并向工程师提出建议。







请到「今天看啥」查看全文