50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:049479
用户头像

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

关注

评论

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

Go 语言入门很简单:Go 如何面向对象

宇宙之一粟

面向对象 Go 语言 2月月更

卫星商业价值的尽头,谁来善后?

脑极体

「架构实战营」模块八《如何设计贴合业务的高性能高可用中间件系统》作业

DaiChen

作业 「架构实战营」 模块八

Java线程池进阶

木小风

Java 线程池

Vue3 过10种组件通讯方式

德育处主任

Vue 3 vuex 组件通信 Pinia mitt.js

2022 ARTS|Week 08

MiracleWong

算法 写作 ARTS 打卡计划

架构实战营4期-模块八作业

木几丶

「架构实战营」

基于STM32+ESP8266+华为云IoT设计的健康管理系统

DS小龙哥

2月月更

架构实战营 模块八

架构实战营 「架构实战营」 模块八

EventBridge消息路由|高效构建消息路由能力

阿里巴巴云原生

阿里云 云原生 消息队列 EventBridge

模块八

Geek_59dec2

一文入门rollup!13组demo带你轻松驾驭

摸鱼的春哥

前端 vite Rollup webpack 构建

什么是开源的「第一性原理」?

腾源会

开源 腾源会

设计消息队列存储消息数据的 MySQL 表格

AUV

「架构实战营」

【安全漏洞】深入剖析CVE-2021-40444-Cabless利用链

H

Thinkphp最新版本漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

01-《生活中的心理学》读书笔记

清凌渡

读书笔记 心理学

[架构实战营]模块八 消息队列Mysql表格设计

Vincent

「架构实战营」

XSS练习小游戏和答案参考

喀拉峻

网络安全

Lyft微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格

俞凡

研发效能 大厂实践 2月月更 lyft

【Python】面试官:元组列表都分不清,回去等通知pa

謓泽

Python 元组 2月月更

架构实战营第 4 期 -- 模块八作业

烈火干柴烛灭田边残月

架构实战营

架构实战模块八作业

Anlumina

「架构实战营」

模块八作业

李晓笛

「架构实战营」

模块八-设计消息队列存储消息数据 作业

novoer

「架构实战营」

架构实战营 4 期第八模块作业

jialuooooo

架构实战营

Meta启示:AI是通往元宇宙的关键变量

脑极体

架构训练营模块八作业

zhongwy

云原生训练营-Week02

jjn0703

云原生训练营

极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点

阿里巴巴云原生

阿里云 Serverless 云原生 冬奥会 函数计算FC

工作想法小计(3):2/21 - 2/25

非晓为骁

个人成长 工作

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