大规模测试管理和调试工作从此变得容易了一点。
Facebook设备测试
Facebook周三计划推出一套开源开发工具,以简化应用程序开发测试和缺陷查找工作。
Facebook在伦敦的Dev Tools @Scale大会上打算大秀一把:
OneWorld(http://code.facebook.com/posts/1708075792818517),这种系统用于跨多个设备和环境测试软件;
Jupiter(http://code.facebook.com/posts/222017798302928),这种工具用于将后端作业与计算资源相匹配;
以及AL(http://code.facebook.com/posts/277643589367408),这种声明式编码语言用于编写可与Facebook的开源静态代码分析工具Infer结合使用的自定义缺陷查找器。
工程主管布莱恩·奥沙利文(Bryan O'Sullivan)在接受英国IT网站TheRegister的电话采访时表示,虽然Facebook可能因Oculus和Aquila之类的知名项目而家喻户晓,但该公司有大批工程师致力于设法提高软件开发效率。
OneWorld体现了这个目标。OneWorld旨在补充Facebook的移动设备实验室,让开发人员得以在数千个移动设备上同时进行测试,它提供了一套API来管理远程测试资源,比如手机、浏览器和仿真器。
在Facebook,OneWorld每天协调大约20000个终端资源,处理100多万个作业。
奥沙利文说:“这个系统旨在帮助工程师处理Android设备、iPhone以及模拟这些设备的仿真器,还有浏览器。我们的目标是,让这些资源处理起来尽量简单明了。”
OneWorld包括运行时worker服务(在连接到远程资源的计算机上运行的守护程序)、调度程序(这里是指Jupiter)以及让工程师可以将本地资源连接到One World云的卫星服务。
奥沙利文说:“这些不同的环境往往有点怪异。在OneWorld出现之前,工程师常常获得或收到硬件,但代码在硬件上运行不了,或者他们无法获得所需的资源。OneWorld把所有这些细节隐藏了起来。”
Jupiter与OneWorld配合使用,还支持软件工程师提交的其他作业,比如构建新的软件包、安装应用程序依赖项以及运行测试。
该服务试图将工作请求与可用于处理该工作的计算资源相匹配,并跟踪作业流程,确保资源高效分配。
Facebook的开发人员编写了大量测试,确保代码正常运行。Jupiter帮助那些测试尽快加以提交和处理。Facebook的软件工程师阿德里安娜·利博里奥(Adriana Liborio)解释道:“借助Jupiter,我们将调度作业的时间由数百秒缩短到了几毫秒。”
与此同时,AL是一种新的声明式语言,可用于为Facebook的静态代码分析工具Infer(https://code.facebook.com/posts/1648953042007882/open-sourcing-facebook-infer-identify-bugs-before-you-ship/)编写自定义缺陷查找器,这是一种查找源代码中缺陷的工具。
Facebook的软件工程师朱尔斯·维拉德(Jules Villard)说:“Infer可以在不必运行源代码的情况下,了解源代码执行什么样的功能,试图发现不一致的地方。”他表示,静态分析与测试相辅相成,通常会在源代码进入到在Facebook用户的手机上运行的应用程序之前,每个月发现源代码存在的成千上万个问题。
维拉德表示,Infer试图证明代码没有缺陷,不过并不给出证据。
奥沙利文说:“Infer能够在代码片段中找到工程师不一定能想到的缺陷。这非常有价值,因为它能执行透彻的分析。”
AL代表AST(抽象语法树)语言,它为在不调整或改动Infer源代码的情况下定义错误查找器提供了一种方法。这使得扩展Infer不那么复杂。
比如说,开发人员使用AL,就可以声明下列规则,然后检查代码是否符合要求:“包含单词‘delegate’但不包含单词‘queue’的属性不应被声明为是strong属性。”
奥沙利文表示,这些工具“节省了大量的时间,它们直接提高了Facebook工程师每月向20亿人交付的软件的质量。”
它们还可能对其他企业组织大有用处。
相关阅读:
中高端IT圈人群,欢迎加入!
赏金制:欢迎来爆料!长期有效!