软件工程之美44讲——微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?

软件工程之美44讲——微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?

软件开发团队规模小

网上曾有一张流传甚广的关于各大公司的组织结构图。
96ac97cb581b79114f40c849fa83113e.png

没有专职测试在

就像专栏文章中介绍的,Facebook 能做到没有专职测试人员,是因为他们有大量的自动化测试;另外,Facebook 在功能发布之前,先在内部使用,上线之后能做到有效监控,出现问题能随时回滚或者打补丁。大厂替代专职测试的这些手段,对于普通公司来说,可能现阶段去实施是有难度的,但是随着这些发布、监控工具的不断普及,自动化测试的普及,开发团队不设置专职测试会逐步变成一种趋势,现在的手工测试将来也许会被逐步淘汰。

DevOps 文化

虽然好处是分工更明确,但是久而久之也造成了不同工种之间的隔离,尤其是各自目标不一致导致的利益冲突。所以微软也在前些年进行了转型,将运维团队合并到了工程师团队,运维人员和开发人员协作更加紧密了,有效提高了编码效率,质量和产量。除了微软,其他大厂也纷纷采用了类似的 DevOps 转型和实践。这里有两篇关于谷歌和阿里巴巴的 DevOps 实践文章可以参考:《孙宇聪:来自 Google 的 DevOps 理念及实践》《阿里研究员毕玄谈应用运维体系的变迁,DevOPS 是大势所趋》。如果你的团队也存在不同工种之间协作的矛盾和冲突,不妨借鉴一下大厂对 DevOps 的实践。

开发工具的使用

有一点倒是可以看得出:这些大厂舍得在工具上投入。

项目开发流程

迭代周期短

即使是像微软这样,以前要几年才发布一个版本软件的公司,现在也加快了迭代。现在 Windows 10,每半年就会更新一个大的版本,每天都会发布可以测试的版本。还有像谷歌的 Chrome 浏览器,也是每 6 周发布一个新版本,如果某个新功能还没准备好,那么放到下个版本发布。如果你的项目需要半年以上的开发周期,也要考虑一下,是否可以缩短开发周期,快速迭代起来。

严格的开发流程

在大厂,这些开发流程基本上都是硬性要求:要基于分支进行开发新功能或者修复 Bug;要遵守公司或者团队的代码规范;合并之前要有至少一个人 Review 通过;要写自动化测试代码,并且保证所有测试用例通过。

严谨的测试流程

以谷歌的 Chrome 浏览器为例,除了自动化测试以外,每个 Chrome 的版本发布之前,都要经历以下几个版本。

  • 金丝雀版本(Canary Channel): 金丝雀版本会频繁发布,但并不太可靠,就像金丝雀一样用来第一时间发现严重的问题。
  • 开发版本(Dev Channel):工程师日常使用的版本,一边开发一边使用,让工程师可以第一时间验证自己开发的功能。
  • 测试版本(Test Channel):给内部员工的版本,就像上一篇 VS Code 介绍的 Eat your own food,自己人先试用。
  • Beta 版本或发布版本(The Beta Channel or Release Channel):是给外部用户使用的测试版本,并不保证稳定,但是用户可以提前体验新功能,也能帮助开发团队及时发现 Bug。

完善的发布和监控流程

就算经过完整的测试,也不能保证质量就是可靠的。所以大厂们还会配合一套完善的发布和监控流程。发布前,先评估风险,增加相应的监控数据和设置报警的阈值。制定出现问题的应对方案。上线后,先推送一小部分用户,并同时进行线上数据的监控,如果没有发现异常,自动加大比例,直到完整覆盖;如果发现异常,自动报警通知相关负责人,上线处理,并直接关闭新功能。

事后总结,不断改进

对于大厂来说,复盘也是整个项目开发过程中很重要的一部分,正是因为有这样一次次的“事后诸葛亮”会议,才让团队成员能从中总结成功经验,吸取失败教训。

posted @ 2021-01-24 23:09  段志轩  阅读(11)  评论(0编辑  收藏