`
jinnianshilongnian
  • 浏览: 21434423 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405044
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2997694
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631469
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257571
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593160
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:248971
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847542
Group-logo
跟我学Nginx+Lua开...
浏览量:698161
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780453
社区版块
存档分类
最新评论

Google是如何做测试的?(一、二)【转载】

 
阅读更多

 

导读:本文译自 James Whittaker 在 Google 测试官方博客发表的文章《How Google Tests Software 》。

在所有我被问及的问题中,最多的就是关于谷歌是如何测试的。尽管在博客中(google testing blog)中有过零碎的解释说明,但还是需要更多的系统阐述。虽然谷歌的技术路线在执行的过程中不断地进化,但公司的测试策略却从来没有变化过。谷歌现在 是一家拥有搜索、应用、广告、移动、操作系统等产品的公司,我们在这些涉及到的产品领域里发挥着非常有意义的作用。当我们涉及到一些新的领域或者在旧领域 里快速成长的时候,必须要求我们的测试也在同步的扩张和改进。在这个系列文章中提及的测试技术,多数是我们当前正在使用的,还有一些是希望以后在不久的将 来可以用到。

首先,先介绍一下组织结构,这一部分也可能会让你感到惊奇。其实在谷歌没有真正的测试部门,测试依托在各个产品领域部门里,我们称之为“工程生产 力”(Engineering Productivity)。工程生产力部门拥有数量不等的水平或者垂直的工程学科,测试是其中的大头。简单地说,工程生产力部门由以下几部分构成:

1. 一个工具产品团队(a product team),负责内部和外部开源的促进生产力的工具开发与维护,这些工具会被公司范围内的各种工程师使用。这些工具包括代码分析工具、IDE、测试用例管 理系统、自动化测试工具、Build系统、源码管理系统、代码审核调度系统、缺陷管理系统等等。 这些工具的都是为了提高工程师效率的,并且这些工具在策略上的目标多数是为了防止问题的发生,而不是发现问题本身。

2. 一个服务团队(a services team),给产品部门(注:这里的产品部门团队是和工程生产力部门平级的,例如Search、Gamil、Chrome等产品部门)提供一些专业的建 议,包括一系列工具、文档、测试、发布管理、培训等方面,这些专家建议涵盖可靠性、安全、国际化等,甚至包括产品团队面对的功能问题。所有的其他产品领域 也都会得到这样的建议指导。

3. 嵌入式的工程师(Embedded engineers),在需要的时候被产品部门高效地“借”去使用,这些工程师有些会和产品部门的团队坐在一起工作数年,另外一些当他们被需要的时候会被 借调到其他的产品团队。谷歌鼓励所有他们的工程师更换产品团队,用以保持团队忙绿且不断有新面孔,并如实地不带有任何偏见与政治。测试人员也是这样,但是 可以有节奏地选择更换产品团队的频率。我的下属里,有测试人员已经在Chrome团队工作了好几年,也有一些待了一年半后就换到了其他团队。对于测试经理 来说,必须在团队的产品经验和新鲜度上做出很好的平衡。

所以这意味着测试同学向工程生产力部门的经理汇报,但是他们会把自己看成产品部门团队的一员,像搜索、邮箱、和Chrome部门。从组织架构上看, 测试都是两个团队的一部分。测试和产品团队坐在一起,参与计划,一起吃饭,共享奖金,享受像全职的产品团队成员一样的待遇。这种单独的组织汇报关系的好处 是可以给测试人员之间提供良好的共享信息的讨论机会,好的测试思路可以很容易的在工程生产力部门内部蔓延,无论公司内的哪条产品线,都可以很快地使用这些 最好的测试技术。

测试人员的这种项目分离和汇报组织结构也有它的缺点,目前来看,最大的问题是测试人员被看做外部资源。产品部门团队不能对测试人员有太多的依赖,他 们自己必须要合理地控制产品质量。是的,没错,在谷歌,是产品部门团队对产品质量负责,而不是测试人员。每个产品部门的开发人员都需要做测试工作,测试人 员的任务是为产品部门团队搭建自动化测试基础设施和流程,测试人员让开发可以自给自足地、独立地做完成测试工作。

在这种模式下,我比较喜欢的是,开发和测试将有相同的地位。在质量方面,开发和测试成为了真正的伙伴,最大的质量重担交给本应属于的开发人员,开发 的职责就是正确地实现产品功能。另外这样可以保持多对一的开发测试比率,开发人员在数量上远超测试人员,并且测试工作做的越多,开发测试比率就会越大。产 品部门团队也会对这样的高开发测试比率而感到骄傲。

好,现在好像大家都是好朋友了,对吧? 相信你已经看到这种模式的一个问题,开发人员不能很好地驱动缺陷(Bug)的运转,开发不会测试。难道我要否认这一点么?不管怎样,我都不会否认,特别是 去年在GTAC talk (GTAC 2010: Turning Quality on its Head,linkhttp://www.youtube.com/watch?v=cqwXUTjcabs) 上做了一个开发和测试对抗的游戏后。(友情提示:测试赢了游戏)(这里感觉翻译的不好,原文是: No amount of corporate kool-aid could get me to deny it, especially coming off my GTAC talk last year where I pretty much made a game of developer vs. tester (spoiler alert: the tester wins).)

在谷歌,解决这个问题的办法是将角色再细分,我们通过设立不同的测试角色来解决这两种不同的测试问题。在下一篇文章里,我将详细阐述这些测试角色和谷歌是怎样将测试问题分成两部分来分别解决的。

为了实现”谁的屁股谁自己擦”这句名言所说的那样,在传统的软件开发人员的之上,有必要增加了几个角色,特别是需要工程技术方面的特殊角色,这种角 色可以让开发更高效低做测试。在谷歌,这样角色的职责是让其他人工作的更有效率,这样的工程师通常会把自己当做测试人员,但他们真正的使命是提高生产力/ 生产率。他们的存在是为了让开发人员效率提升,特别是在质量方面的提升,因为产品质量是生产率中最重要的一部分。这里是这些角色的总结:

(译注:“you build it, you break it”, you build it ,you break it , you fix it, 原意指在Build Lab的人永远不会去修复build break的问题,只有开发人员自己才能修复。这里的意思是开发人员自己要对自己写的代码负责,比专职的测试人员更适合做测试工作。这里意译为”谁拉的 shi,谁的屁股谁自己擦”)

Google是如何做测试的?

 

软件开发工程师(SWE,Software Engineer), 就是传统的开发人员。软件工程师实现一些功能代码并把最终产品提供给用户使用,他们创建设计文档、设计数据结构和总体的架构搭建,他们大多数时间都在写代 码和评审代码。同时,他们也会写很多的测试代码,包括测试驱动设计,单元测试,并参与后面的文章会讲到的小、中、大型测试的创建工作。软件工程师需要对他 们自己写的代码、修复缺陷的代码、改进的代码,只要是他们接触过的代码的质量负责。

软件测试开发工程师(SET or Software Engineer in Test),和软件开发工程师一样是开发工程师,主要负责软件的可测试性。他们参与设计评审,近距离地关注代码质量和风险,对代码做重构为了系统有更好的 可测试性,同时他们负责写单元测试框架和自动化测试的框架。在代码级别上他们和软件开发工程师是合作伙伴,但如果和增加新功能或提升性能相比较,他们更关 心产品的质量和测试覆盖率的提升。

软件测试工程师(Test Engineer),和软件测试开发工程师(SET)恰恰相反,他得主要工作是做测试而不是开发。许多谷歌的软件测试工程师会花很多的时间在写测试代码 上,包括自动化脚本、使用场景的代码、甚至模拟最终用户的操作方面的代码。他们对软件开发工程师和软件测试开发工程师的测试工作做一些组织安排,解释测试 结果、驱动测试的执行,特别是在项目即将发布的后期将起到非常重要的作用。软件测试工程师既是产品专家也是质量顾问更是风险分析师。

从质量的角度来看,软件开发工程师对功能开发和质量负有全责。同时,他们还负责容错设计、故障恢复、TDD、单元测试、和在软件测试开发工程师的帮助下写测试代码,这些测试代码会验证开发的功能。

软件测试开发工程师是提供测试支持的开发人员。他们提供一种能够将新添加的代码通过模拟其依赖的方式做功能验证的技术框架,并应用在代码提交之前的 提交队列管理之中(注,这样可以在代码check in 的时候保证新代码的功能完备)。可以这样说,软件测试开发工程师就是为了让软件工程师可以测试他们的功能代码,所有真正的测试都是软件开发工程师完成的, 软件测试开发工程师是保证这些功能有很好的可测试性,这样可以让软件开发工程师很积极地参与到测试用例代码的编写中去。

现在所有的一切很清楚了,软件测试开发工程师就是服务人员,他们的主要职责就让开发人员很方便简单的做测试并保证模块级别的产品质量。读者可能已经意识到一个问题,在这样的研发流程下,使用软件的最终用户会怎样?

在谷歌,软件测试工程师的职责就是最终用户级别的测试。如果软件开发工程师和软件测试开发工程师很好地做了模块级别的功能测试,下一个工作就是看许 多功能集成和数据的组合是否能够满足最终用户的使用需求。软件测试工程师在这里就是扮演一个双重确认开发工程师测试工作的角色,任何明显的缺陷都会说明之 前一轮的开发自测不够或比较草率,如果没有出现这种情况之后,软件测试工程师会将注意力转移到普通用户的使用场景测试上,保证性能、安全、国际化等方面没 有问题。软件测试工程师们需要做大量的测试工作,并在测试工程师、测试合同工、吃狗粮的尝鲜者、beta测试用户、早期最终用户之间做很多沟通交流的工 作,他们会和基础设计、功能复杂度、避免错误的方法等方面遇到问题的人做确认。一旦软件测试工程师开始介入,总是会没完没了。

英文出自:googletesting

 

转载自 伯乐在线 http://blog.jobbole.com/15277/

分享到:
评论

相关推荐

    Google软件测试之道--学习笔记--转载

    Google软件测试之道--学习笔记--转载,网上关于《Google软件的测试之道》一书的学习笔记摘要,帮助读者理解此书的内容和Web软件测试理论。

    RAM Stress Test(RST)内存测试软件img

    于是在Google上查找相关说明,经过跋山涉水,终于找到一片,但是很不幸,在一家被挡在墙外的网站上,也就只好半转载、半理解得写出了这一篇使用说明。 先看软件介绍。这个可以从网络上搜索。例如,它是一个独立...

    RAM Stress Test(RST)内存测试软件 nero光盘镜像文件

    于是在Google上查找相关说明,经过跋山涉水,终于找到一片,但是很不幸,在一家被挡在墙外的网站上,也就只好半转载、半理解得写出了这一篇使用说明。 先看软件介绍。这个可以从网络上搜索。例如,它是一个独立...

    Ajax 模仿google百度提示输入框 v1.8

    Ajax模仿google提示输入框 使用说明 v1.8 本程序由飞飞asp乐园编写 ************************************************* 特别感谢: 一杯白开水 网友 的帮助 版本所提的修改建议 *********************************...

    论坛弹幕播放器(DZ测试可用,可以简单修改移植到PHPwind)

    注: 下载后发现问题很多,所以我自己修改了一遍,剔除了代码中的大部分不合理的地方加入了控制最大弹幕数的,编码GBK测试无问题,utf-8未测试(应该是不会有问题的)。 此源码为最初版,后来还重写了记录吐槽者IP、...

    google search client api for c/c++

    演示程序中的key是一个网友给我的,仅供测试用,演示程序中的代理可能连接不上,由于没有设置超时,可能处于等待状态(sorry.....) 函数中各个参数的意义和http://www.google.com/apis/reference.html的说明一样,对此不...

    Learning Google Apps Script 无水印pdf

    Learning Google Apps Script 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者...

    Google Apps Script(2nd) 无水印pdf

    Google Apps Script(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传...

    springmybatis

    创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` ...

    The Definitive Guide to Firebase Build Android Apps on Google's Mobile 无水印原版pdf

    The Definitive Guide to Firebase Build Android Apps on Google's Mobile Platform 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络...

    Programming Google App Engine with Java 无水印pdf

    Programming Google App Engine with Java 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,...

    关于人工智能的随笔-谈人工智能时代的学习.doc

    Siri和Google Now已经比几年前的测试版先进很多,这要归功于它们在使用期间收到的数百万个语音请 求,而语音请求已经成为改善系统的训练数据。Siri的创始团队在离开苹果公司后纷纷 成立新的公司,Viv实验室就是其中...

    absl-py-0.9.0.tar.gz

    这些代码从谷歌自己的Python代码基地中搜集而来,已经过全面的测试并广泛用于生产中。 特点: 简单的应用创建 分布式的命令行标志系统 用户自定义的记录模块,并拥有额外的功能。 拥有测试工具 ————...

    asp.net知识库

    从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...

    如何运用LoadRunner脚本关联的动态数据

    百度或Google一下“如何在loadrunner/"target="_blank">LoadRunner脚本中做关联(Correlation)”,你会搜索到在网上相互转载的很经典的一篇文章。洋洋洒洒近6000汉字,像个小百科全书。对于关联Correlation的概念,...

    安装IIS时,添加删除组件中没有IIS的解决办法

    你会发现,有几句中都有OCEntry,不过书写不一样,第二个字母C是小写的,OcEntry,于是就改掉C,没想到竟然解决了,别人写教程的一个小错误也能导致关键性错误。汗一个! 我还是更正下正确的解决方法 代码: 1、提取...

    php调用mysql存储过程

    前面转载了一篇《php调用mysql存储过程的文章》经过测试,发现文章中的方法似乎不可行! 调用带有select语句的存储过程就出现 PROCEDURE p can’t return a result set in the given context的错误。...

    google location 补丁包,适合没有集成的room

    已安装测试正常!其他版本应该不能通用,安装时一定要注意版本对应。 来电据库版可以按照网上googlelocation.apk方法更新!声明:转载自网络,因为这个刷机包特别难找,因此,特别收藏 另外,对于菜鸟,刷补丁包时...

    nlp with PyTorch - 2019.zip

    自然语言处理(NLP)为解决人工智能问题提供了无限机会,使亚马逊Alexa和谷歌翻译等产品成为可能。如果您是NLP和深度学习新手的开发人员或数据科学家,本实用指南将向您展示如何使用PyTorch(一种基于Python的深度...

    FreeSWITCH-1.10.2-Release-x64 (1).msi

    FreeSWITCH 支持多种通讯技术标准,包括 SIP, H.323, IAX2 以及 GoogleTalk ,可以方便的与其他开源的PBX系统进行对接,例如 sipX, OpenPBX, Bayonne, YATE 或者 Asterisk.  FreeSWITCH 支持许多高级的 SIP 特性,...

Global site tag (gtag.js) - Google Analytics