这就是Facebook开发和部署软件的方式。 你应该照顾吗?

希伯来大学的Dror Feitelson教授,Facebook的研究科学家Eitan Frachtenberg和Kent Beck(也在Facebook从事工作)最近发表的学术论文描述了Facebook开发和部署其前端软件的方法 。 虽然了解后端开发的完成方式会更有趣(这是真正的繁重工作,可以扩展到可容纳数亿用户的地方),但本文中还有一些事情值得了解。

Facebook上的持续部署不是持续部署

Facebook开发人员不是计划项目中的工作或将工作分散到有时间限制的Sprint中,而是将其大部分工作以独立的小更改(经常发布)进行。 在Facebook的在线商业模式中,这是有意义的,每个人都在不断调整平台,并在不同的用户社区中尝试新的选项和应用程序,看看有什么用。 他们的体系结构值得信赖,因此实际上可以独立且廉价地完成许多小的独立更改。

Facebook表示,他们遵循持续部署 ,但并不是持续部署是IMVU流行的一种方式, IMVU会立即将所有更改推向客户,甚至不会Etsy这样的公司进行持续部署

在Facebook上,代码可以释放一天两次,但这主要是做了错误修复和内部代码。 新的生产代码每周发布一次:数百名开发人员的数千个更改在星期天由其小型发布团队打包,通过自动回归测试运行,并在星期二发布(如果存在所做更改的开发人员在场)。 发布工程师根据变更的大小,代码审查中的讨论量(通过内部代码审查工具记录下来)以及每个开发人员的“推动因果关系”来评估变更的风险:他们看到了多少个问题之前由该开发人员编写的代码。

名为“ Gatekeeper”的工具控制着哪些客户可以使用哪些功能来支持暗启动 ,并且所有代码都以增量方式发布-逐步升级,然后是一部分用户,依此类推。 如有必要,可以将更改回滚–单独或作为最后的选择,将整个代码发布。 但是,就像许多硅谷的开发商店一样,他们大多遵循“只有真正的男人向前滚动”的座右铭。

代码所有权

Facebook文化的关键在于,开发人员应对自己编写的代码,测试代码以及​​在生产中提供支持负有各自的责任。 这反映在他们的代码所有权模型中

开发人员还必须支持其软件的操作使用-这种组合被称为“开发人员”。 这进一步激励编写好的代码并对其进行彻底的测试。 开发人员在保持系统平稳运行方面的个人利益补充了工程程序,并使系统保持大规模的质量。 方法和工具本身还不够,因为它们总是会被滥用。 因此,个人责任文化至关重要。

因此,大多数源文件仅由少数工程师修改。 尽管至少有另一位工程师在提交所有更改之前先进行了审核,但三分之一的源文件仅由一位工程师编辑,另一位则由两位编辑。 只有10%的文件由7位以上的工程师处理。 另一方面,每个文件的工程师分布情况繁重,共享最多的文件由至少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不好。 否则,我不确定我们其他人可以从中学到什么或想从中学到什么。


翻译自: https://www.javacodegeeks.com/2013/09/this-is-how-facebook-develops-and-deploys-software-should-you-care.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值