作者 | 琥珀、非主流

出品 | 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 生成多个可能的修复程序,然后通过下面三个问题来评估他们的质量:

  1. 是否存在编译错误?

  2. 崩溃是否依然存在?

  3. 修复程序是否引入新的崩溃?

为了解决以上后两个问题,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/

2018AI开发者大会

最新进展

AI热潮下,技术和落地相辅而进。

2018 AI开发者大会以『AI技术与应用』为核心,力邀国内外一线大牛,带你从项目中贯通AI。

即刻扫码,抢购福利票!

点击「阅读原文」,精彩信息抢先看

@程序员,终于可以放心写bug了!Facebook的debug神器你值得拥有相关推荐

  1. OSChina 周二乱弹 ——寡人不是程序员,不去写bug。

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @焕焕 :一根冰棍分两半分享FLOW的单曲<Sign> &l ...

  2. 千万不要相信程序员在加班时间写的代码!

    其中最重要的就是这条:不要相信一个程序员在加班时间写出来的代码. (软件工程的学说表明,连正常时间好好写的代码,也不要太相信.不过这不是本文的重点,略过不提.) (不懂代码的人,看到本文中的Java代 ...

  3. 当程序员说“这代码写的可真烂”,他们的意思是“这烂代码不是我写的”。而当他们说这段代码有些“小问题”时,很可能这代码是他们自己写的...

    英文原文:What Programmers Say vs. What They Mean 你是否听到过同事说"这段代码不言自明"?你的同事的这句话的实际意思是这段代码不需要写注释. ...

  4. 不要相信程序员在加班时间写的代码

    http://www.cocoachina.com/programmer/20161215/18359.html 不要相信程序员在加班时间写的代码 2016-12-15 00:01 编辑: suili ...

  5. 程序员百万高薪,写给准备转行的朋友:非科班出身,怎么成为程序员!(建议收藏)

    热度还蛮高 歧视? 现在,确实有很多"专业"程序员歧视非科班出身的程序员.其中主要原因是,非科班出身的程序员缺少某些必要的课程和训练,因而会在团队合作时产生一些困扰. 既然知道这个 ...

  6. java开发有不加班的吗_千万不要相信程序员在加班时间写的代码!

    作为一个最底层的程序员,我先记录一些只有底层程序员才会知道的事情.如果多年后,我违背自己进入这个行业的初心,走上管理岗位,也能回想起一些禁忌,避免一些错误. 其中最重要的就是这条:不要相信一个程序员在 ...

  7. (转载)不要相信程序员在加班时间写的代码

    作为一个最底层的程序员,我先记录一些只有底层程序员才会知道的事情.如果多年后,我违背自己进入这个行业的初心,走上管理岗位,也能回想起一些禁忌,避免一些错误. 其中最重要的就是这条:不要相信一个程序员在 ...

  8. 别以为程序员的工作就是写代码

    大家好,我是鱼皮,今天给大家分享一个开发小经验. 很多没有实际工作过的同学,可能都会认为程序员的工作只有写代码 + 和产品经理 "拉扯",也会习惯性地用代码量来评价一个程序员的工作 ...

  9. 前端程序员福利 利用node写接口

    Code is never die ! 前端程序员为什么要自己写接口?

最新文章

  1. POJ 2387 Til the Cows Come Home
  2. Java解码vhd的磁盘文件,VHD Java library
  3. 宿主机windows Xp部署virtualBox虚拟机并在其上安装linux ubuntu操作系统
  4. 1.1 Java异常(Exception)处理及常见异常
  5. 【转载】java中泛型使用详解
  6. 使用Leopard Jdbc
  7. powerpoint文字教程
  8. oracle中prad函数_等保测评2.0:Oracle身份鉴别
  9. 智能卡门禁管理系统_出入口门禁控制系统与消防火灾报警系统怎么联动?
  10. es6 export 命令
  11. Bootstrap3 排版-地址
  12. 构造java_Java构造方法
  13. 新塘linux启动过程,NUC972调试笔记之NAND分区调整新增
  14. ArcSDE:C#创建SDE要素数据集
  15. 【信息安全导论】HIT2022春季学期《信息安全导论》复习概要
  16. 计算机辅助设计cad实训总结,CAD画图的心得体会
  17. 指定网络名不可用——终于解决啦!
  18. RuntimeError: Cannot re-initialize CUDA in forked subprocess解决方法之一
  19. oppo系统工程师暑期实习生面经(已OC)
  20. 复盘 2019 ,展望 2020

热门文章

  1. OpenMLDB 开源一周年,感恩遇见
  2. mybatis 详细配置及使用(Maven项目)
  3. 求职表格简历模板-Word简历可编辑下载
  4. Netra基于Rdk平台的软件框架设计
  5. 农村污水处理物联网解决方案
  6. 为什么在MatLab中使用(^-1)矩阵连续求逆会出现问题?而使用inv函数计算的话,就没问题。
  7. 计算机教师幽默介绍,教师幽默自我介绍
  8. 5G时代下的创新技术和应用场景
  9. 5G来啦!!技术指标和三大应用场景
  10. 【UV打印机】PrintExp打印软件教程(八)-厂家模式(上)