Facebook的bug终结者!程序员再也不用加班熬夜了!

原创 AI科技大本营

“如果 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 正诉诸于利用社区推进其围绕自身机器学习软件重新定位计算硬件生态系统的战略,而这也有助于合作伙伴快速设计和优化新款芯片产品在人工智能和机器学习上的能力。

对于此神器,大家有何想法呢?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

可视化微服务:设计微服务系统

原文地址:https://dzone.com/articles/visualizing-microservices-designing-a-microservi...

4637
来自专栏腾讯云数据库(TencentDB)

腾讯智造,新一代云数据库CynosDB,“C”位出道!

CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限...

4.6K10
来自专栏DevOps时代的专栏

赵成:蘑菇街 DevOps 实践和转型之路

2664
来自专栏python开发者

软件测试基本理论-IBM模式

软件测试基本理论(1) IBM生产模式 1   参考书目 《IBM-从菜鸟到测试架构师-一个测试工程师的成长日记》 出版社:电子工业出版社 印次:2013年6月...

2546
来自专栏蓝天

电信系统架构方案

撰文/青润(本文来自《程序员》杂志2003年3期) 国内软件业曾有人对行业性软件进行划分,在几个较大的行业中,排行前几位的分别是:通信、电力、金融…… 但从...

2154
来自专栏IT技术精选文摘

规则引擎-BRMS在企业开发中的应用

1. 什么是规则 复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技...

1K6
来自专栏PPV课数据科学社区

如何快速学习Tableau Desktop

这个要慌,问题有点大! 严格来说我只是Tableau众多粉丝中的一员,而且是一个不怎么会Excel的。三年前一次偶然的机会在领导推荐下接触了Tableau,开始...

6527
来自专栏嵌入式程序猿

freeRTOS-&OpenRTOS-&SafeRTOS

在很早之前我们就曾在公众号里给大家介绍过freeRTOS,并且还介绍过在NXP kenitis KV46上的移植,相信很多猿友应该还有印象,freeRTOS因其...

3456
来自专栏云计算与大数据

研发:安全的软件开发框架

随着软件研发经验的丰富,会逐渐将关注点从功能性需求转移到非功能性需求上。而安全又是软件生命周期的关键。特别是在云计算环境,涉及金融支付场景、区块链应用场景时。安...

1681
来自专栏互联网数据官iCDO

你是否需要Google Data Studio 360?

译者:吴昊、审校:骆姿亦 本文长度为2079字,预估阅读时间4分钟。 我们今天要向大家介绍的是谷歌发布的一款可视化工具GoogleData Studio 360...

4469

扫码关注云+社区

领取腾讯云代金券