facebook应用开发
希伯来大学的Dror Feitelson教授,Facebook的研究科学家Eitan Frachtenberg和Kent Beck(也在Facebook工作)的最新发表的学术论文描述了Facebook开发和部署其前端软件的方法 。 虽然了解后端开发的完成方式会更有趣(这是真正的繁重工作,可以扩展到可容纳数亿用户的地方),但本文中还有一些值得了解的事情。
在Facebook上的持续部署不是持续部署
Facebook开发人员不是在计划项目中进行工作或将工作分解为有时间限制的Sprint,而是大部分工作都是在独立的小变更中进行,这些变更经常发布。 在Facebook的在线业务模型中,这是有道理的,每个人都在不断调整平台,并在不同的用户社区中尝试新的选项和应用程序,看看有什么用。 他们的体系结构值得信赖,因此实际上可以独立且廉价地完成许多小的独立更改。
Facebook表示,他们遵循持续部署 ,但并不是持续部署是IMVU流行的一种方式, IMVU会立即将所有更改推向客户,甚至不会像Etsy这样的公司进行持续部署 。
可以释放一天两次,但这主要是做了错误修复和内部代码。 新的生产代码每周发布一次:数百名开发人员的数千个更改在星期天由其小型发布团队打包,通过自动回归测试运行,并在星期二发布(如果存在更改的开发人员在场)。 发布工程师根据变更的大小,在代码审查中进行的讨论量(通过内部代码审查工具记录下来)以及每个开发人员的“推动因果关系”来评估变更的风险:他们看到了多少个问题从此开发人员之前的代码中获取。
名为“ Gatekeeper”的工具控制着哪些客户可以使用哪些功能来支持暗启动 ,并且所有代码都以增量方式发布-进行登台,然后发布一部分用户,依此类推。 如有必要,可以将更改回滚–单独或作为最后的选择,将整个代码发布。 但是,就像许多硅谷的开发商店一样,他们大多遵循“只有真正的男人向前滚”的座右铭。
代码所有权
Facebook文化的关键在于,开发人员应对自己编写的代码,测试代码以及在生产中提供支持负有各自的责任。 这反映在他们的代码所有权模型中 :
开发人员还必须支持其软件的操作使用-这种组合被称为“开发人员”。 这进一步激励编写好的代码并进行彻底的测试。 开发人员在保持系统平稳运行方面的个人利益补充了工程程序,并使系统保持大规模的质量。 方法和工具本身还不够,因为它们总是会被滥用。 因此,个人责任文化至关重要。
因此,大多数源文件仅由少数工程师修改。 尽管至少有另一位工程师在提交所有更改之前先进行了审核,但三分之一的源文件仅由一位工程师编辑,另一位则由两位编辑。 只有10%的文件由七个以上的工程师处理。 另一方面,每个文件的工程师分布情况繁重,共享最多的文件由至少870个不同的工程师处理。 这些广泛共享的文件主要是库文件,还包括主要配置和顶级PHP文件。
我们不需要臭味测试...
Facebook没有独立的测试团队,因为他们说, 他们不需要一个 。
首先,他们在很大程度上依赖于代码审查来发现错误:
在Facebook,代码审查占据着中心位置。 编写的每一行代码均由与原始作者不同的工程师审查。 这具有多个目的:原始工程师有动力确保代码高质量,审阅者思想清新,可能会发现缺陷或提出替代方案,并且通常,有关编码实践和代码本身的知识遍及整个领域。公司
开发人员还负责编写单元测试和他们自己的回归测试–他们有“成千上万的回归测试”(听起来不足以容纳10+百万行大多数PHP代码编译成C ++ ,这两种语言都是容易造成编码错误)和自动性能测试。
开发人员还通过使用Facebook的开发版本供其个人Facebook使用来测试该软件。 这组作者说:“这仅仅是脱离传统软件开发的一个方面”。 但是,Facebook开发人员在内部使用自己的软件(并将其作为“测试”通过)与微软成立之初员工应“吃自己的狗粮”没什么不同,这种做法几乎没有做任何改进。 Microsoft产品的质量。
Facebook还依赖客户为他们测试软件。 无论用户是否愿意参与此测试,软件都会分阶段发布,以进行A / B测试以及对用户群的“实时实验”。 因为他们的客户群很大,所以即使只有很小比例的用户,他们也可以从测试中获得有意义的反馈,这至少可以最大程度地降低风险和给客户带来的不便。
安全???
尽管性能是Facebook开发人员的重要考虑因素,但在此关于Facebook如何开发和部署软件的描述中,没有提到安全检查或测试。 没有静态分析,动态分析/扫描,笔测试或安全团队和开发人员如何合作的解释,甚至没有“隐私敏感代码”的解释-尽管此代码“保持较高的标准”,但他们没有解释这是什么“更高的标准”是。 大概他们依靠库和框架来处理至少一些appsec问题,并可能在其代码审查中查找安全性错误,但他们没有说。
Facebook的appsec程序在任何地方都没有太多可用信息。 Facebook的安全团队似乎花了很多时间来教育人们如何安全地使用Facebook以及如何 安全地 开发Facebook应用程序以及运行其漏洞赏金计划 ,这使外部人员可以为其找到安全漏洞 。
在Facebook上进行安全性搜索后,大多数情况下会发现一连串的公共安全失败,隐私侵犯和应用程序安全漏洞,这些年来,这些问题一直持续到今天。 可能是缺少有效的appsec程序的原因。
你应该在乎吗?
看看像Facebook这样的高知名度组织以及他们如何进行大规模开发很有趣,但不清楚为什么撰写本文。 Facebook正在做什么(至少在前端开发方面)是独一无二的或创新的,除了他们使用BitTorrent来将代码更改推送到Twitter那样的数千台服务器上的方式之外 ,我已经听说过几年前在Velocity上 ,这之前已经写过 。
我喜欢开发人员负责他们的工作,一直到生产的想法,这也是我们遵循的原则。 代码审查是好的。 暗启动功能是一种很好的做法,并且在很长一段时间内(甚至在被称为“暗启动”之前)都已成为系统中的常见做法。 没有测试人员或执行appsec不好。 否则,我不确定我们其他人可以从中学到什么或想从中学到什么。
参考: 这是Facebook开发和部署软件的方式。 你应该在乎吗?
facebook应用开发