编辑推荐
软件测试泰斗传道解惑,Google软件测试精髓完美呈现。
淘宝测试技术专家翻译,测试界知名专家鼎力推荐。
内容简介
《Google软件测试之道》从内部视角告诉你这个世界上知名的互联网公司是如何应对21世纪软件测试的独特挑战的。《Google软件测试之道》抓住了Google做测试的本质,抓住了Google测试这个时代复杂软件的精华。《Google软件测试之道》描述了测试解决方案,揭示了测试架构是如何设计、实现和运行的,介绍了软件测试工程师的角色;讲解了技术测试人员应该具有的技术技能;阐述了测试工程师在产品生命周期中的职责;讲述了测试管理及在Google的测试历史或在主要产品上发挥了重要作用的工程师的访谈,这对那些试图建立类似Google的测试流程或团队的人受益很大。
最后,《Google软件测试之道》还介绍了作者对于Google测试如何继续演进的见解、Google乃至整个业界的测试方向的一些预言,相信很多读者都会感受到其中的洞察力,甚至感到震惊。本书可以作为任何从事软件测试人员到达目标的指南。
《Google软件测试之道》适合开发人员、测试人员、测试管理人员使用,也适合大中专院校相关专业师生的学习用书,以及培训学校的教材。
作者简介
惠特克(JamesWhittaker),Google的工程总监,负责Google部分产品的测试,包括Chrome、地图、GoogleWebApp。在加盟Google之前,James在Microsoft工作,再之前是一名大学教授。James在全球测试领域闻名遐迩。
阿尔邦(JasonArbon),Google的一名测试工程师(TE),曾参与负责Google桌面、Chrome和ChromeOS的测试。同时,Jason也是一系列开源测试工具和个性化实验的开发负责人。在加入Google之前,他在Microsoft工作。
卡罗洛(JeffCarollo),Google的一名测试开发工程师(SET),曾参与负责GoogleVoice、工具框、Chrome、ChromeOS产品的测试。Jeff为许多Google内部的开发团队提供咨询服务,帮助提升这些团队初期的代码质量。在2010年,Jeff转岗为软件开发工程师(SE),并领导负责Google+API的开发。在加入Google之前,Jeff在Microsoft工作。
内页插图
目录
第1章 Google软件测试介绍
1.1 质量不等于测试
1.2 角色
1.2.1 软件开发工程师(SWE)
1.2.2 软件测试开发工程师(SET)
1.2.3 测试工程师(TE)
1.3 组织结构
1.4 爬、走、跑
1.5 测试类型
第2章 软件测试开发工程师
2.1 SET的工作
2.1.1 开发和测试流程
2.1.2 SET究竟是谁
2.1.3 项目的早期阶段
2.1.4 团队结构
2.1.5 设计文档
2.1.6 接口与协议
2.1.7 自动化计划
2.1.8 可测试性
2.1.9 SET的工作流程:一个实例
2.1.10 测试执行
2.1.11 测试大小的定义
2.1.12 测试规模在共享测试平台中的使用
2.1.13 测试规模的益处
2.1.14 测试运行要求
2.2 测试认证
2.3 SET的招聘
2.4 与工具开发工程师Ted Mao的访谈
2.5 与Web Driver的创建者Simon Stewart的对话
第3章 测试工程师
3.1 一种面向用户的测试角色
3.2 测试工程师的工作
3.2.1 测试计划
3.2.2 风险
3.2.3 测试用例的生命周期
3.2.4 bug的生命周期
3.2.5 TE的招聘
3.2.6 Google的测试领导和管理工作
3.2.7 维护模式的测试(Maintenance Mode Testing)
3.2.8 质量机器人(Quality Bot)实验
3.2.9 BITE实验
3.2.10 Google Test Analytics
3.2.11 零成本测试流程
3.2.12 外部供应商
3.3 与Google Docs测试工程师林赛·韦伯斯特(Lindsay Webster)的访谈
3.4 与YouTube测试工程师安普·周(Apple Chow)的访谈
第4章 测试工程经理
4.1 测试工程经理的工作
4.2 获得项目和人员
4.3 影响力
4.4 Gmail测试工程经理Ankit Mehta的访谈
4.5 Android测试工程经理Hung Dang的访谈
4.6 Chrome测试工程经理Joel Hynoski的访谈
4.7 测试总监
4.8 搜索和地理信息测试总监Shelton Mar的访谈
4.9 工程工具总监Ashish Kumar的访谈
4.10 印度Google测试总监SujaySahni访谈
4.11 工程经理Brad Green访谈
4.12 James Whittaker访谈
第5章 Google软件测试改进
5.1 Google流程中的致命缺陷
5.2 SET的未来
5.3 TE的未来
5.4 测试总监和经理的未来
5.5 未来的测试基础设施
5.6 结论
附录A Chrome OS测试计划
A.1 测试主题概述
A.2 风险分析
A.3 每次构建版本的基线测试
A.4 最新可测试版本(Last Known Good,LKG)的每日测试
A.5 发布版本测试
A.6 手工测试与自动化测试
A.7 开发和测试的质量关注点
A.8 发布通道
A.9 用户输入
A.10 测试用例库
A.11 测试仪表盘
A.12 虚拟化
A.13 性能
A.14 压力、长时运行和稳定性测试
A.15 测试执行框架(Autotest)
A.16 OEM厂商
A.17 硬件实验田
A.18 端到端测试自动化集群
A.19 测试浏览器的应用管理器
A.20 浏览器的可测试性
A.21 硬件
A.22 时间线
A.23 主要的测试驱动力
A.24 相关文档
附录B Chrome的漫游测试
B.1 购物漫游
B.2 学生漫游
B.3 国际长途电话漫游
B.4 地标漫游
B.5 通宵漫游
B.6 公务漫游测试
B.7 危险地带漫游
B.8 个性化漫游
附录C 有关工具和代码的博客文章
C.1 使用BITE从bug和冗余的工作中解脱出来
C.2 发布QualityBot
C.3 RPF:Google的录制回放框架
C.4 Google测试分析系统(Google Test Analytics)——现在开源了
附录D 术语表
精彩书摘
第1章 Google软件测试介绍
在许多场合下,不管是在国外访问还是出席会议期间,我总是毫无例外地被问及一个问题。甚至是刚刚加入公司的新员工也会问到同样的问题:“Google是如何测试的?”
虽然我已经不太确定曾经多少次回答过这个问题,以及给出了多少个不同版本的答案,但可以确定的是,随着我在Google工作的时间越来越长,发现Google的各种测试实践的不同之处也越来越多,答案也一直在变化。这些测试实践总是浮现在脑海里,并幻想着有朝一日能够将它们整理成书。直到有一天,Alberto(译注:Albert0Savoia,(~oogle的测试总监,详细介绍参见本书序言中的A1berto部分),这个一贯认为所有测试相关的书籍都要为自己的存在找一个理由,否则就应该被扔掉做成纸尿裤的人,当他建议我应该写这样一本书的时候,我觉得时机已经成熟,是时候开始考虑写这样一本书了。
然而,我依旧还在等待。第一,我并非是写这样一本书的最佳人选。在Google,有很多我的前辈,我想先把机会让给他们宋写;第二,我只是Chrome和ChromeOS产品的测试总监(现在这个职位被我之前的一个下属担任着),我看到的也只是Google所有测试实践中很小的一部分,我还需要去了解很多其他Google产品的测试方法。
在Google,软件测试团队归属于一个被称为“工程生产力”(译注:EngineeringProductivity,也译为工程效率或工程生产率)的中心组织部门,这个部门的职责横跨开发测试人员使用工具的研发、产品发布和各种级别的测试,从单元级别的测试到探索性级别的测试。Google拥有大量针对互联网产品的共享工具与测试基础框架,服务于包括搜索、广告、Apps、YouT‘ube视频和其他我们在Web上提供的产品。Google已经成功解决了许多有关速度和扩展性方面的问题,使得Google作为一个大公司,却依然能以创业公司的速度来发布产品。正如Patrick(30peland在本书的序言中所说的那样,拥有如此的魔力,Google的测试团队功不可没。
ChromeOS在2010年12月发布以后,我把团队顺利地交接给我的一个直接汇报者,然后开始把自己的工作重点慢慢转移到其他产品上。在这本书刚开始准备的阶段,我使用博客的方式做了一些尝试,发布了第一篇“Google是如何测试的”的系列文章(注:参见hup://googletesting.blogspot.com/20〕I/01/how。google—tests.soffware.html)。6个月之后,本书终于完成,希望没有拖太长的时间。在这六个月的时间里,我了解到的Google测试实践比我过去两年在。Google学到的都要多。现在有了这本书,Google的新员工们也可以通过阅读此书来熟悉Google的环境。
这并不是第一本介绍关于大公司是如何做测试的书籍.当我还在Microsoft的时候,AlanPage.BTRollison和Ken.Johnston合著了《微软的软件测试之道》(译注:I-lowWe.TestSoftwareatMicrosoft),我当时亲身经历了他们书中写的许多事情。Microson在测试领域独步全球,也是一个测试精英云集的圣地。Microsoft的测试工程师在各种技术大会中也是广受欢迎的演讲嘉宾。Microsoft的第…任测试总监一一RogerSherman,吸引了来自全球的测试精英加入华盛顿的雷德蒙德(译注:微软总部所在地)。那是一个软件测试的黄金时代。
因此,Microsoft写了这样一本书来记录其发生的一切。
我没能赶上参与《微软的软件测试之道》的编写,但是在300gle却有幸得到这样的机会。我来Google的时候,其测试正处于一个蓬勃发展的上升期。工程生产力团队的员工数量正以火箭喷发般的速度增长,从几百人迅猛发展到今天的1.200人。正如Patrick在本书序言中所说的那样,这种增速随之而宋的是成长的烦恼,这也是他们最后的阵痛,此后这个组织开始了前所未有的井喷式增长。Google的测试博客每月吸引了成千上万的人来浏览阅读,GI’AC(注:G.I‘AC:是GoogleTestAutomationConference的缩写,即Google测试自动化大会,参见大会也已经成了测试行业的旗帜性会议。在我来到Google不久之后,Patrick也得到了晋升,手下有十几个总监和工程经理直接汇报给他。如果你认为软件测试又进入到新的文艺复兴时期,那么Google一定就是位于中心的罗马。
这意味着Google背后的测试故事其实可以写成一本很厚的书。但问题是,我并不想这样做。Google之所以闻名于世,在于其实现软件的方法:简单和直截了当。或许这本书也可以保持这样的风格。
((Google软件测试之道》这本书的核心内容包括:详细讲述了作为一个Google的测试人员究竟意味着什么,同时也包含Google是如何解决软件在扩展性、复杂性和大并发方面的问题。如果想知道这些,阅读本书将是你的最佳获取途径。如果书中的内容还是不能满足你想要充分了解GOOgle是如何测试的需求,互联网上还有更多的信息,你只需要“GOOle一下”。
关于本书由来的故事,不得不说的大概就是这些了。我也终于做好了准备来讲述GOogle是如何进行测试的。随着越来越多的软件公司从桌面应用转向网络应用,G00gle测试软件的方法也很有可能成为其他公司的榜样。如果你已经读了《微软测试之道》,那么千万不要试图在这本书中找一些共同点。除了两本书的作者都是三个人,且都是在讲述大型软件公司的测试实践之外,这两本书中所描述的测试方法可谓大相径庭。
PatickCOpeland在本书的序言中解释了G00gle测试方法演变的历史,随着公司的不断成长,它也在不停地、有组织地进化着。G00gle是个大熔炉,许多来自其他公司的工程师被抛进来熔炼。在前雇主公司使用的技术,如果被证明效率低下,该技术要么被遗弃,要么通过G00gle的创新文化再进行改良。随着测试工程师队伍的不断膨胀,就有了许多新的想法和实践的尝试,那些在实践中被证明很有用的技术会被GOogle保留下来,并成为GOOgle的一部分;另外一些被证明是负担的,则会被抛弃掉。G00gle的测试者很愿意去尝试新技术,但有些技术一旦被发现并不实用,就会立刻被抛弃。
G00gle是一家以创新和速度为基础的公司,快速地发布有用的代码(如果失败,也只有少数早期用户会失望)、迭代地增加早期用户希望使用的功能(最大化用户反馈)。在这样的环境下,测试不得不变的异常灵活,并且在技能上要做许多前期的规划,只是不停地简单维护并不能真正解决问题。有时,测试和开发互相交织在一起,达到了无法区分彼此的程度,而在另外一些时候,测试和开发又是完全分离,甚至开发人员都不知道测试在做些什么。
……
前言/序言
毫无疑问,在当前这个时代,处于浪潮之巅的伟大公司非Google莫属。很长一段时间以来,Google的技术一直被外界所觊觎,其所宣扬的工程师文化氛围也成为了许多工程师梦寐以求的技术殿堂,其内部的工程实践更是技术分享大会中最热门的话题之一。但迄今为止,没有一本书系统地介绍Google内部产品的研发流程与模式,包括开发、测试、发布、团队成员如何分工协作等细节,直到《How Googleests Software))的出现,才使得我们有机会管中窥豹,了解Google技术神秘之处。这也是我们翻译这本书的第一个原因。
正如本书中所提及的那样,互联网的出现改变了许多软件研发的模式。许多曾经红极一时的传统测试书籍里提及的最佳测试实践,在当前的环境下,效率会大大下降,在一些极端的情况下甚至会适得其反。我自己就是一名测试工程师,从事互联网方面的测试工作,对此深有体会,也经常焦虑如何在制约质量和快速发布之间寻找平衡,所以,也特别想从一些主流互联网公司的测试模式中得到启发和借鉴,特别是想看一下这个世界上最成功、增长速度最快的互联网公司——oogle,是如何应对互联网测试挑战的。通过翻译这本书,自己学到了更多感兴趣的知识。这也是我们翻译这本书的第二个原因。
JamesWhittaker在正式撰写本书英文版之前,于2011年1月在GoogleestingBlog上尝试发表了towGoogle.1estSoftware”系列文章。当看到第一篇时我就被深深地吸引住了,第一感觉就是,太棒了!Google测试团队居然是这样组织的!之后,随着这个系列文章的逐一公开,Google也逐渐揭开了其神秘面纱,让我对其测试实践也有了越来越多的了解,但了解的越多,疑惑也就越多。不得不承认,这几篇文章就像正餐前的开胃小菜,它完全勾起了大家的食欲,仅仅依赖这几篇文章完全不能满足窥探Google测试体系的需求。在2011年11月的G.TALCGoogleest Automation C0nference)大会上,我见到了James本人,便聊起了《Htow Goog leest Software》这本书,James一听到又有人在打探这本书的下落,乐呵得嘴都合不拢了,却卖起了关子来,只是说书快出版了。大约在2012年9月,这本书的英文版终于问世之后,突然接到李中杰(本书的合译者之一)的电话,问我为什么不去翻译一下这本书呢。之前虽然是兴趣使然,做过那几篇文章的翻译,但与翻译一本书相比,还是有些微不足道的。但几经转辗,还是机缘巧合地去做了这件事情,这也是翻译这本书的第三个原因吧。
最后要说的,也是最重要的一个原因。我原本根本没有这么大的勇气来完成这件事情。众所周知,James不仅是测试领域的泰山北斗,而且他颇具文学功底,语言诙谐幽默,妙笔生花,翻译他的书籍,让我诚惶诚恐,以至于焦虑得昼夜不安。但两位合译者,李中杰博士和薛明,他们的乐观与自信让本书的翻译得以完成。与他们两位的合作,幸福之感难以言表,所收获的也不仅仅是长知识那么简单,更有许多惊喜深藏内心。翻译别人的书,像是在反刍,再精彩也是在讲别人的故事,还是期待有朝一日,能够也有机会讲讲自己的故事。
最后祝愿国内的读者能够从这本书中有所借鉴,找到适合自己现状的开发测试模式。由于译者水平有限,错漏之处在所难免,若有欠妥之处,欢迎指正。
《卓越工程的基石:解锁Google软件测试的智慧》 在当今瞬息万变的数字世界中,软件的质量已不再是锦上添花,而是决定成败的关键。用户对流畅、可靠、安全的应用体验有着近乎苛刻的要求,任何微小的bug都可能引发用户流失、品牌声誉受损,乃至巨大的经济损失。然而,在软件开发的光鲜外表下,隐藏着无数复杂而精密的测试环节,它们是保障软件质量的无名英雄。本文将深入探讨这一至关重要的领域,揭示那些塑造了业界标杆的软件测试理念与实践。 一、 理解测试的本质:从“找虫”到“构建信心” 长久以来,软件测试常常被视为一种“事后诸葛亮”的角色,其主要任务是发现并修复开发过程中产生的bug。这种“找虫”的思维模式,虽然不可或缺,却未能完全展现测试的价值。真正的软件测试,其核心在于构建信心。它是一个持续的、贯穿软件生命周期各个阶段的系统性过程,旨在为软件的质量提供客观的证据,从而让开发者、产品经理、管理者乃至最终用户对软件的可靠性、性能、安全性等方面充满信心。 这种从“找虫”到“构建信心”的转变,意味着测试不再仅仅是代码编写完成后的一个附加环节,而是软件工程不可分割的一部分。它需要在需求分析阶段就开始介入,确保需求定义的清晰、可测试;在设计阶段,关注设计的可测试性,并规划测试策略;在编码阶段,开发者主动进行单元测试,以“测试驱动开发”(TDD)等模式,将测试融入编码流程;在集成、系统、验收等各个阶段,运用不同的测试方法和技术,层层递进,直至产品发布。 “构建信心”的理念也要求测试人员具备更广阔的视野。他们不仅要关注功能是否正确,还要考虑非功能性需求,如性能、可伸缩性、安全性、易用性、兼容性等。这些方面往往对用户体验和业务成功有着更为深远的影响。一个功能齐全但运行缓慢、容易崩溃、存在安全隐患的软件,即使通过了所有功能测试,也无法赢得用户的青睐。 二、 规模化测试的艺术:在复杂的系统中游刃有余 随着软件系统的规模和复杂度的不断增长,传统的测试方法往往捉襟见肘。一个庞大的分布式系统,可能包含数千个微服务,部署在数以万计的服务器上,每天处理着海量的数据和请求。在这种环境下,如何有效地测试,如何确保整个系统的健壮性,成为一个巨大的挑战。 规模化测试的艺术,在于系统性的方法和智能化的工具。 测试策略的设计: 需要根据系统的架构、业务流程、风险点等,制定详细的测试策略。这包括确定测试的范围、优先级、测试类型(单元测试、集成测试、端到端测试、性能测试、安全测试等),以及不同测试层级的投入比例。例如,对于关键业务路径,需要投入更多的资源进行端到端的验证;对于独立的组件,单元测试的覆盖率则更为重要。 自动化测试的广泛应用: 自动化是应对规模化测试挑战的必然选择。从单元测试、API测试到UI自动化测试,都需要建立健壮的自动化测试框架。这不仅能显著提高测试效率,减少人工成本,更能保证测试的一致性和可重复性,使回归测试变得可行。自动化测试的成功,依赖于高质量的测试脚本、稳定的测试环境以及有效的测试报告。 持续集成/持续部署(CI/CD)与测试的融合: CI/CD流水线是现代软件开发的核心。测试在CI/CD中的作用至关重要,它需要在每一次代码提交后自动触发,快速反馈代码质量。通过自动化测试套件,可以实现在代码合并前、部署到各个环境前进行严格的质量校验。这种“尽早测试,频繁测试”的模式,能够极大地缩短问题定位和修复的时间,减少“集成地狱”。 数据驱动的测试: 在复杂的系统中,测试数据管理是一个棘手的难题。采用数据驱动的测试方法,可以将测试逻辑与测试数据分离,通过管理大量的、多样化的测试数据,来覆盖更广泛的场景,模拟真实的业务负载。这对于性能测试、边界值测试、异常场景测试尤为重要。 模拟与虚拟化: 在集成和系统测试阶段,常常会遇到依赖外部服务或复杂基础设施的情况。利用模拟(Mocking)和虚拟化(Virtualization)技术,可以创建独立的测试环境,隔离被测系统与外部依赖,从而提高测试的稳定性和可控性,加速测试进程。 三、 测试的“左移”与“右移”:贯穿全生命周期的质量保障 软件质量的保障并非一蹴而就,也不是仅仅在开发后期进行的活动。它是一个贯穿软件整个生命周期的动态过程,通常用“左移”和“右移”来描述。 测试左移 (Shift-Left Testing): “左移”强调将测试活动尽早地推向软件开发流程的前端。这意味着测试人员需要更早地参与到需求评审、原型设计、架构设计等环节。通过在早期发现需求的不明确、不一致或潜在的技术风险,可以避免在后期付出高昂的修改成本。例如,测试人员可以基于需求文档设计出初步的测试用例,验证需求的逻辑性和可实现性。开发者也可以通过单元测试和代码审查,在编码阶段就发现并修复大部分bug。 测试右移 (Shift-Right Testing): “右移”则关注软件发布后的质量监控与持续改进。在软件上线运行后,通过各种监控工具、日志分析、用户反馈等方式,持续收集生产环境中的行为数据。这些数据可以帮助我们发现隐藏在复杂场景下的问题,了解用户实际的使用情况,并据此进行进一步的优化和迭代。例如,通过A/B测试来评估新功能的上线效果,通过分布式追踪来诊断生产环境中的性能瓶颈。 “左移”和“右移”并非相互排斥,而是相辅相成的。充分的“左移”可以显著减少发布后的潜在问题,而“右移”则能弥补“左移”的不足,形成一个闭环的质量保障体系,实现持续的质量提升。 四、 创新测试方法与技术:应对未来挑战 随着人工智能、机器学习、大数据等技术的飞速发展,软件测试也在不断演进,涌现出许多创新的测试方法和技术。 AI辅助的测试: 人工智能正在被越来越多地应用于测试领域,例如,利用机器学习来预测bug可能出现的区域,从而优化测试资源的分配;通过自然语言处理(NLP)技术来解析需求文档,自动生成测试用例;利用AI驱动的UI自动化测试,能够更好地适应UI的变化,提高测试脚本的鲁棒性。 混沌工程 (Chaos Engineering): 混沌工程是一种主动注入故障,以验证系统在异常条件下的弹性的工程实践。它通过在生产环境中模拟各种灾难性场景(如服务器宕机、网络延迟、磁盘故障等),来发现系统中潜在的弱点,并促使团队采取措施增强系统的韧性。 开发者测试(Developer Testing): 强调开发者在编码过程中主动承担更多的测试责任。除了单元测试,还包括开发者在代码审查(Code Review)中进行的同行评审,以及开发者对自身代码编写的测试。这有助于实现“一次编写,多次测试”,提高代码质量和开发效率。 可观测性 (Observability): 可观测性是指系统内部状态的可查询性。与传统的监控(Monitoring)不同,可观测性更侧重于从系统的输出(日志、指标、追踪)中推断出系统内部的复杂行为,尤其是在分布式系统中,它能帮助我们快速诊断和理解生产环境中的未知问题。 五、 构建以质量为中心的文化:团队的共同责任 最终,卓越的软件测试并非仅仅是测试团队的任务,而是整个工程团队的共同责任。要实现高水平的软件质量,需要建立一种以质量为中心的文化。 跨职能协作: 测试人员、开发人员、产品经理、运维人员等,需要紧密协作,共同为软件质量负责。信息共享、早期反馈、相互理解是这种协作的关键。 持续学习与改进: 软件和技术都在不断发展,测试方法和工具也需要不断学习和更新。鼓励团队成员参加培训、分享知识、进行技术交流,保持技术上的领先。 赋能测试人员: 为测试人员提供必要的工具、资源和培训,使他们能够胜任日益复杂的测试任务。鼓励他们发挥创造力,探索新的测试方法和技术。 数据驱动的决策: 利用测试数据和生产环境数据,来指导质量改进的方向,评估测试策略的有效性,并持续优化开发和测试流程。 结语 软件测试是一个充满挑战与机遇的领域。它不仅仅是代码的“橡皮擦”,更是构建高质量、高性能、高可靠性软件的“设计师”和“工程师”。通过深入理解测试的本质,掌握规模化测试的艺术,积极拥抱“左移”与“右移”的理念,运用创新的测试方法与技术,并最终在团队中构建起以质量为中心的文化,我们就能为用户提供卓越的软件体验,从而在激烈的市场竞争中立于不败之地。这不仅仅是理论的探讨,更是对每一个追求卓越的工程团队的殷切期盼。