写点什么

Google 的产品质量之道

  • 2011-03-14
  • 本文字数:2148 字

    阅读完需:约 7 分钟

James Whittaker 是 Google 的测试总监,曾任微软构架师,也是“实用软件测试指南”系列图书中好几本书的作者。他最近写了一系列的博文,介绍 Google 是如何进行测试。Google 把开发和测试紧密结合在一起,测试人员相对较少,每个产品在正式上线前都要经过好几个不同的版本。

Google 保证产品质量的方法和很多公司是不一样的。Google 没有一个庞大的测试部门,相反,部分测试工作委派给了开发人员。Whittaker 写道:

测试和开发同时进行。编写一些代码,马上进行测试和构建。接着,编写更多的代码,继续测试。更好的是,在你编码的时候或者编码之前,就计划好你的测试。测试不是一个独立分开的过程,它是开发的一部分。质量不等同于测试;要想有高质量的产品,就要把开发和测试紧密捆绑在一起,直到不分彼此。

这是因为,Google 认为要保证质量,预防胜于检查:

质量来自开发,而不是测试。为了拓宽开发环节,我们可以把测试融入到开发中去。我们已经建立了一个超高效的增量流程,只要有一个增量被证明缺陷太多,我们就可以回滚这些错误。我们不仅预防了很多产品级问题,还大大地减少了那些为确保消除“召回级别”缺陷而安排的测试人员的人数。

因此,在 Google,测试人员不用做测试是众所周知的,他们只要“确保他们【开发人员】有自动框架和相关流程”进行测试即可。开发人员进行必要的测试,他们对他们的代码质量负责。这其实就是强调了一点:“质量的重担落在那些负责交付正确产品的开发人员的肩上。”为了实现他们的质量哲学,Google 有三种类型的工程师,Whittaker 解释道:

  • SWE或者软件工程师是传统的开发角色。SWE 编写最终交付给客户的功能代码。他们编写设计文档,设计数据结构以及整体架构,花绝大部分时间编写和审查代码。SWE 会编写很多测试代码,包括测试驱动设计,单元测试,以及在未来的几篇博文中我们会具体解释的,如何参与到简单、中等甚至复杂的测试集成中去。SWE 们对他们参与的一切的质量负责,不管是他们编写的、修复的或者是修改的。
  • SET或者测试软件工程师(Software Engineer in Test)也是开发角色,只是他们专注于易测性。他们审查设计,密切关注代码质量和风险。他们重构代码,让代码更加易于测试。SET 需要编写单元测试框架和自动化测试。他们的代码也会提交到 SWE 所工作的代码库 (code base),但是他们更加关注提高质量和测试覆盖率,而不是增加新功能或者提高性能。
  • TE或者测试工程师则跟 SET 恰恰相反。他们这个角色会把测试放在首位,而把开发放其次。很多 Google 的 TE 会花很多时间来编写模拟了实际使用场景甚至是模拟了用户的自动化脚本和代码。他们也整理 SWE 和 SET 的测试工作,解读测试结果从而驱动测试,他们也会在项目后期参与到项目中去,来强力推动项目发布。TE 是产品专家,质量顾问也是风险分析员。

换句话说,SWE 负责软件功能特性和它们的质量。SET 提供代码支持,从而使 SWE 能测试这些产品特性。TE 快速地测试系统或者再次检查那些被开发人员忽略的主要缺陷。并且,他们协助用户测试,还进行性能、安全以及其他类似的测试。

在公司级别,Google 有几个关注域(Focus Areas)——搜索、广告、应用程序、移动服务、操作系统等等。其中有一个关注域是工程生产力(Engineering Productivity,EP),它包括了一些“横向和纵向的工程规范(horizontal and vertical engineering disciplines)”,测试是其中最大的一块。 EP 包括

  1. 产品团队——为整个 Google 的所有工程师提供能提高生产力的工具,包括开源项目,比如“代码分析器、IDE、测试用例管理系统、自动测试工具、构建发布系统、版本控制系统、代码审查安排系统、缺陷数据库。”
  2. 服务团队——为任何 Google 员工提供关于可靠性,安全,国际化等领域的专业知识,包括“工具、文档、测试、发布管理、培训”等等。
  3. 派遣式的工程团队(Embedded Engineers Team)——在 Google,测试人员会被借调去不同的产品团队。他们可以选择为一个团队服务很多年,但公司鼓励他们去不同的团队轮岗,从而能够“在产品知识和新鲜视野之间”保持一个良好的平衡。这些测试人员参与到产品团队中的很多不同的关注域,但是从组织关系上来说,他们汇报给 EP 管理层。这样做的理由是能够建立一个“让测试人员共享知识和信息的论坛。好的测试想法在 EP 内部很容易传播开来,从而使所有测试人员,不管他们为哪个产品服务,都能够了解到公司内最好的技术。”

这种测试策略带来的结果就是相对较少的测试人员。根据 Whittaker 的观点,这也可能是因为“我们很少尝试一次快速交付很多功能。事实上,我们的目标恰恰相反:构建一个产品的核心部分,一旦它对很多人有价值,我们就发布这个产品,随后我们收集反馈,继续迭代。”另外一个确保质量的关键元素是使用多重版本。Whittaker 以 Chrome 为例,介绍了四种不同的版本:

  1. 金丝雀版(Canary Channel)——还没有做好发布准备的代码
  2. 开发版——开发人员使用的版本
  3. 内部测试版(Test Channel)——为了准备 beta 发布的版本
  4. 测试(beta)或者发布版——这个版本的产品可供 Google 内部或者公众使用。

产品发布以后,如果发现了一个缺陷,我们会编写一个测试,并且在所有的版本中进行验证,看看这个缺陷是不是已经在某个版本里面被修复了。

简单来说,这就是 Google 用来测试他们的产品、确保代码质量的流程和组织结构。

2011-03-14 08:048923
用户头像

发布了 114 篇内容, 共 33.5 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

HTTP 中 ServletContext 对象,java软件工程师面试话术

爱好编程进阶

Java 面试 后端开发

银杏谷创始人陈向明博士谈云原生的投资策略与思考 | 云原生加速器观点

阿里巴巴云原生

【并发编程系列12】从Java线程池的常用4种写法深入分析线程池(Thread Pool)的实现原理

爱好编程进阶

Java 面试 后端开发

架构实战营 - 第 6 期 模块三课后作业

乐邦

「架构实战营」

Sentinel FlowSlot 限流实现原理(文末附流程图与总结),50家大厂面试万字精华总结

爱好编程进阶

Java 面试 后端开发

Docker编排利器DockerCompose,java面试题大汇总

爱好编程进阶

Java 面试 后端开发

SpringBoot+JWT+Shiro,linux高级编程面试题

爱好编程进阶

Java 面试 后端开发

SpringMVC之Interceptor拦截器之登录拦截器,阿里巴巴java面试题

爱好编程进阶

Java 面试 后端开发

Java 定时任务技术趋势

阿里巴巴云原生

世界级计算机大神花两年总结出2000页深入理解计算机系统文档

爱好编程进阶

Java 面试 后端开发

建议收藏!总结了42种前端常用布局方案

云智慧AIOps社区

CSS html 前端 大前端 HTML5, CSS3

百度程序员开发避坑指南(Go语言篇)

百度Geek说

后端

关于 MySQL 数据库学习的书籍有哪些值得推荐?

程序员万金游

MySQL 数据库 java 日志 MySQL 数据库 java

JavaEE框架学习笔记——SpringMVC篇,java集合详解和集合面试题目

爱好编程进阶

Java 面试 后端开发

无聊科技正经事(第1期):裁员毕业潮,你焦虑吗?

潘大壮

裁员 周刊 科技

阿里云强力贡献:如何让 StarRocks 做到极速数据湖分析

StarRocks

数据库 大数据 StarRocks

2021阿里总监最新整理:初级-中级-高级大厂面试真题(附答案解析

爱好编程进阶

Java 面试 后端开发

一天下载量突破9000000!限时分享:阿里Java架构师成长笔记

爱好编程进阶

Java 面试 后端开发

两个通宵熬出来的互联网大厂最新面试题收集整理1000道(七-并发编程-下篇),欢迎点赞收藏!!!

爱好编程进阶

Java 面试 后端开发

百度ToB垂类账号权限平台的设计与实践

百度Geek说

架构 后端

一键智能Mock,你值得拥有

Liam

前端 前端开发 Postman swagger web前端开发

90天吃透阿里P8推荐的625页Java编程兵书技术实战,直接入职阿里定级P6

爱好编程进阶

Java 面试 后端开发

Java-23种设计模式概述,手动实现一个简单的AOP框架

爱好编程进阶

Java 面试 后端开发

FastDFS入门,Java编程笔试题及答案

爱好编程进阶

Java 面试 后端开发

Github上都在疯找的阿里内部“全栈技能修炼”终于来了,中级java工程师面试题

爱好编程进阶

Java 面试 后端开发

【Java 基础语法】纯 Java,springmvc面试题常问2022

爱好编程进阶

Java 面试 后端开发

三面头条+四面阿里+五面腾讯拿offer分享面经总结,java最新多线程面试题及答案

爱好编程进阶

Java 面试 后端开发

星环科技春季新品发布周,4月19日-23日重磅内容等你来解锁!

星环科技

eclipse配置SVN和Maven插件,原生Java开发的路该怎么走

爱好编程进阶

Java 面试 后端开发

mybatis-plus如何自动填充字段创建时间和修改时间,10天拿到阿里Java岗offer

爱好编程进阶

Java 面试 后端开发

【阿里Java岗的魔鬼三面】狠心刷完这6份pdf,java关于异常的面试题

爱好编程进阶

Java 面试 后端开发

Google的产品质量之道_研发效能_Abel Avram_InfoQ精选文章