zoukankan      html  css  js  c++  java
  • 软件工程之美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。

    完善的发布和监控流程

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

    事后总结,不断改进

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

  • 相关阅读:
    UVa 568 Just the Facts
    UVa 253 Cube painting
    百钱买百鸡问题Java
    jsp-4 用cookie实现记住密码
    (动态规划)有 n 个学生站成一排,每个学生有一个能力值,从这 n 个学生中按照顺序选取kk 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 kk 个学生的能力值的乘积最大,返回最大的乘积
    c++ 根据生产日期,保质期求出过期时间
    汉诺塔的非递归解决办法
    链表实现多项式的加法和乘法
    暗时间--刘未鹏
    hdoj1013(数根,大数,九余数算法)
  • 原文地址:https://www.cnblogs.com/15248252144dzx/p/14322893.html
Copyright © 2011-2022 走看看