• Facebook如何提高软件质量?
    时间:2012-11-07   作者:郑柯   出处:infoq.com

    刘彪是微软测试技术团队的一名软件设计工程师,他在自己的博客上分享了Facebook如何提高软件质量的原则、手段和背后的原因。

    在文章开头,刘彪指出:

    虽然facebook已经早已不是创业公司,但是不难看出它在产品研发和质量控制仍然保持着创业公司的风格。

    他提到,Facebook

    以小的研发团队为核心,遵循几个非常重要的原则:

    ■ Be there from start to ship: 每个工程师自始至终负责产品。从最开始的一个想法,到开发原型,到内部审核,反馈,到产品开发,上线和维护,全部有工程师自己搞定。
    ■ Show work early and often: facebook非常看重反馈,尤其早期内部反馈。他们鼓励工程师有了想法后,尽快开发出原型,尽快得到反馈。
    ■ Gets your hands dirty: 动手去做,去实现。
    ■ Don’t fall in love: 互联网产品是不断变化的,不需要等到把一个产品设计的很完美了才发布。

    接下来,他举出了Facebook为了遵循上述原则而采取的质量控制机制:

    ■ 开发对质量负责: 开发从设计,实现,测试,到部署都要自己做。其它做工具,流程的工程师通过开发工具和流程来帮助开发人员更为简单方便地做测试,做部署和做监控。每个开发人员有自己单独的测试环境,测试环境就是运行在开发本地机器上,部署非常简单快速。测试环境用的是真实的用户数据。
    ■ 持续集成和测试自动化:每周发布一次。星期天晚上,要发布的构建从主线上分支出来到发布分支,到星期二的中午如果没有大的问题,就可以上线了。所有的测试运行控制在10分钟以内,所以不需要考虑不运行哪些测试用例。运行所有测试用例。 (只是听说,没有经过考证。)
    ■ 内测 (dog food):发布之前,公司员工使用要发布的功能。2-3天之内可以有几百个或上千个人在使用新功能。负责要发布功能的开发人员在星期天晚上到星期二中午之间会做大量的测试 。
    ■ 发布风险控制:新功能本身质量可能有问题,新功能也可能影响其它现有功能。为了减少或控制这些风险。Facebook开发了一整套完善的发布,控制,监控流程和工具。做到:1.测试通过后,产品质量基本有保证。2.即使有漏测的bug,只会影响很少量的用户。3.及时监控到问题。4.及时修复。
    ■ 产品监控:监控产品的系统的运行状态。

    刘彪指出:

    Facebook之所以采取这种质量控制策略和它的产品特点密切相关:

    ■ 用户对社交产品质量的容忍度相对较高。比如发微博,现在连不上,等一会在连接也可以,现在发布不出去可以等一会再发,粉丝数量统计有误,没有人太关心。其实Facebook并不认为自己的质量差。他们认为产品的质量高低不是有多少个failed测试用例,有多少个bug来确定的,而是有用户对质量的期望值来决定的。如果用户对产品质量的期望值很高很高,一个bug漏掉了都会照成质量差的印象,用户很有可能放弃使用。相反,如果用户的期望值一般,100个bug漏掉了都不会影响用户继续使用。所以facebook产品发布的条件是满足用户对质量的期望值即可。
    ■ 相对宽松的产品发布周期。不像微软或google很多产品已经在市场上,用户对下一版本的发布时间和新增加功能的期望很高,这往往给产品开发组的压力很大。Facebook基本没有这个问题,它有适合自己的发布期限,不用受到外界干扰。
    ■ 产品发布和监控流程比较完善,即使有漏测的bug,对用户的影响可以控制在最小而且可以及时发现及时修复。

    “没有专职测试工程师”,刘彪认为这是Facebook质量控制中引以为豪而且倍受瞩目的的一点:

    ■ 什么是“专职测试工程师”? 头衔里面有“测试”的工程师?专门找bug的工程师?专门做质量控制的工程师?等等。
    ■ Facebook的确没有带“测试”头衔的工程师,也没有专门运行产品找bug的工程师。每个人都是开发工程师。但是他们的实际工作有区别,有的专门做面对用户的产品,有的专门做测试,开发工具,有的专门做产品的构建和持续集成工具和流程,有的专门做发布和监控的工具和流程。如果按照传统意义上的开发和测试的划分的话,除了第一类外,其他都可以看做专职测试工程师。
    ■ Facebook不是惟一一个没有带“测试”头衔工程师的公司,很多软件公司都没有,比如Twitter。
    ■ 很多人把专职测试工程师指专门运行产品找bug的工程师。微软在2005年去掉STE (software test engineer )岗位,就已经没有这一类型的专职测试工程师了。

    对于专职测试工程师,刘彪的看法是:

    专职测试工程师是个非常模糊的结论。尤其现在我们对产品质量控制方法的不断演变和提高,“测试”的概念不仅仅是指找bug了,所有围绕提高产品质量的工作都是测试。头衔上有没有“测试”不重要,有没有“测试”岗位不重要,重要的是如何有效保证和提高产品质量。

    刘彪曾在多个技术大会上做过微软相关开发技术和流程的演讲,同时也主编了《详解Windows Azure云计算平台》一书,在他的博客中,还分享了Amazon、Google和微软如何提升软件质量,感兴趣的读者可以移步一观。

    网友留言/评论

    我要留言/评论

    相关文章

    程序员如何保持优秀:优秀便接近成功,金钱和名望比较难以控制。
    关于实施有效站会(Stand-Up Meeting)的三个技巧:通常的站会(tand-Up meetings)的形式总是让我感觉有点怪怪的。它有时会造成一些并不期望的效果。这篇文章里,我将向大家介绍一些在我们blossom公司里经过修改后的站会措施。
    软件项目管理中的“免坑”指南:“谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日。”这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的。就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去。
    如何有效地报告Bug?:自由软件开发者Simon Tatham针对如何有效地报告Bug发表了自己的看法,他列举了一系列拙劣Bug报告的例子,并提出了改正建议。
    项目相关的10点感悟:作过也参与过一些项目,有成功的,有失败的,以下是在我眼里,认为比较重要的一些点,分享出来,也帮自已理理思路!
    社交网络心得50条:金鹏远,1968书吧老板,社交网络实践者
    Fab CEO:我在创办4家公司中学到的90件事:本文来自创意闪购网站Fab的CEO Jason,发表于他的个人博客Betashop。本文中他谈了在创办4家(科技)公司的过程中学到的一些事情,特别总结了Fab从一个同性恋网站转型到现在创意闪购网站过程中学到的一些经验。这些经验对于创业者、投资人、行业从业者都具有很大参考价值。
    主动消费和被动消费:由于工作原因,以下我所说的话只能停留在“道”的层面上,没有具体的做法和实际案例,内容较“虚”。如果您想看到具体的实在的操作层面内容,请止步。
    淘宝校招鸡蛋篮子算法题标准答案:又到一年校招时,阿里集团虽然今年休养生息,缩紧招聘,但是现在继续开放校招,不过只招a类学生,也就是重点学校的最优学生(面试官认为),以往多半是研究生居多,本科生录用比率减少,但是编程逻辑思维好的学生仍然是不多的,这是去年出的一道原创题和它的标准答案,做对的人非常少。
    铁道部新客票系统设计(三):最近只是一时兴起,觉得无聊,正好要到买票的时候,写了这个一系列文章,首先是对自己这些年来的工作经验的总结,其次是把分布式事务性系统的设计思想进行分析和整理,最后也就是和想集大家的智慧,讨论系统的设计。我不是铁道部的工程师,我只是一家互联网金融类公司的屌丝工程师,级别不高,能力也一般,就是喜欢技术而已。