与谷歌测试工程师的对话 - from Google Testing Blog
Conversation with a Test Engineer by Alan Faulner
Alan Faulner谷歌的一名测试工程师,他工作在DoubleClick Bid Manager项目,该项目允许广告公司和广告客户对多个广告进行议价。
你是一个测试工程师(Test Engineer - TE)还是测试软件工程师(Software Engineer in Test - SET)?你认为这两者有差别吗?
就目前而言我是一个测试工程师,但是这两个角色是很相似的。作为一个测试工程师,你更关注产品的总体质量和发布速度,而作为一个测试软件工程师,你可能更关注测试框架,自动化以及为了可测试性的代码重构。我认为差别在于工作的侧重点而不是能力的差异,因为这两个角色在谷歌都需要编写产品代码。例如作为测试工程师我的工作是开发一个自动化的发布流程,找出团队在哪些方面提高了代码覆盖率,并且减少手工验证代码有效性的步骤。
一个典型的工作日?
当我坐到位子上后的第一件事就是检查以下事项:有没有需要我回复的code review;有没有高优先级的产品问题。如果一切安好,那就开始coding。我目前的工作重点是提高大规模集成测试框架的效率和代码覆盖率。同时我还会为产品添加一些新的功能来改善可测试性。大约有50%到75%的工作时间是用来coding和参加code review。
你只写测试代码?
不,我写的很多代码最终也进入了发布的产品。在谷歌作为TE或SET很开心的一件事就是你能很轻易的参加产品代码的编写而不仅是测试代码。我的测试代码集中在提高测试框架的能力以及方便开发人员编写集成测试用例。我编写的产品代码主要用于在极端情况下增强对输入数据的验证,这直接提高了产品本身的质量而不是等待测试代码来发现这些问题。
你使用哪些编程语言?
大多数的测试和产品代码都使用Java。偶尔也会使用Python和C++。
你有多少时间做手工测试?
目前大约5%左右。虽然一些探索性测试能够帮助提高产品知识并发现一些有风险的区域,但这无法做到简单大规模重复。现在我正在努力减少为数不多的手工测试步骤来节约宝贵的时间。
你会为不是你的代码写单元测试吗?
在谷歌,测试的责任为所有的产品工程师分享,而不仅仅在于测试工程师。每个人都有责任为他们的组件编写单元测试和集成测试。这也就是说,我不仅为直接工作的组件编写单元测试,而且也为我们依赖的一些其它组件编写单元测试。
你喜欢为谷歌的广告产品工作吗?
我喜欢面对为解决可扩展性问题带来的挑战,从分析大规模数据到对海量并发请求的毫秒级响应。我也喜欢我们产品的影响力,因为它改变了很多人的生活。这是对我们工作最好的奖励。
在谷歌的测试工作和你之前的公司有什么不同?
我觉得在谷歌这个角色更有弹性。在我们组STE和TE对开发者的比例比通常情况要低,所以你必须先从最重要的工作做起。例如,我编写了很多产品代码来修复错误,提高可测试性并改善了数据迁移过程出错信息的显示。另外,在谷歌开发工程师也花费很多时间编写测试用例,所以测试不仅仅是测试工程师的事情。
谷歌在Krikland的办公室和Mountain View有什么区别?
我觉得两个办公室都非常有自己的特色。在谷歌个性是得到鼓励的!例如在Kirkland的办公室里你可以玩室内攀岩,划船,而且所有的会议室都以本地的乐队命名。在西雅图的办公室则有皮划艇,而在纽约办公室的休息区则有真的食品卡车。
你对测试在谷歌的未来怎么看?
前途是光明的!我们有很多自由来提高产品质量,可测试性和加快产品发布进度。我们需要在提高发布节奏的同时保证产品的质量。我们面临的主要问题是超大规模系统带来的复杂性。这需要我们的工程师团队努力提高效率来模拟和测试我们的系统。在谷歌,这个领域永远需要测试和开发人员来关注。
与谷歌测试工程师的对话 - from Google Testing Blog的更多相关文章
- Google+团队如何测试移动应用 - from Google Testing Blog
How the Google+ Team Tests Mobile Apps by Eduardo Bravo Ortiz “移动第一”在当下已成为很多公司的口头禅.但是能够用一种合理的方法来测试移动 ...
- 为什么有如此多的C++测试框架 - from Google Testing Blog
Why Are There So Many C++ Testing Frameworks? by Zhanyong Wan (Software Engineer) 最近貌似有很多人正在开发他们自己的C ...
- 《Google软件测试之道》测试工程师
愿和我一样读过这本书的人有所共鸣或者启发,愿没读过这本书的人,能获得一点点收获... 说到软件测试工程师,首先我们需要明白一个问题,软件测试工程师的职责是什么? 关于这个话题,不同的人有不同的定义:抛 ...
- Facebook没有测试工程师,如何进行质量控制的?
Facebook从04年的哈佛校园的学生项目在短短的7-8年的时间中快速增长为拥有10亿用户的世界上最大的社交网络,又一次见证了互联网创业成功的奇迹.同时它的产品研发流程也成为了众多互联网产品公司的追 ...
- 谷歌三大核心技术(三)Google BigTable中文版
谷歌三大核心技术(三)Google BigTable中文版 Bigtable:一个分布式的结构化数据存储系统 译者:alex 摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海 ...
- 谷歌三大核心技术(二)Google MapReduce中文版
谷歌三大核心技术(二)Google MapReduce中文版 Google MapReduce中文版 译者: alex 摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据 ...
- 【转】谷歌三大核心技术(三)Google BigTable中文版
谷歌三大核心技术(三)Google BigTable中文版 摘要 Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据.Goo ...
- 测试工程师,选择python还是java?
问:“你平时工作中,用java多还是用python多”? 答:“都还可以,根据具体的场景选择不同的语言”. 问:“比如说呢”? 答:“开发自己的测试平台,肯定会选择java:在centos服务器跑一些 ...
- 测试工程师不懂AI,还有未来吗?
阿里妹导读:近几年人工智能.机器学习等词漫天遍地,似乎有一种无AI,无研发,无AI,无测试的感觉.有人说:不带上"智能"二字,都不好意思说自己是创新.我们先暂且不评论对错,只探讨这 ...
随机推荐
- 技术转载:Jni学习四:如何编写jni方法
转载:http://blog.chinaunix.net/u1/38994/showart_1099528.html 一.概述: 在这篇文章中将会简单介绍如何编制一些简单的JNI 方法.我们都知道JN ...
- python-appium手机自动化测试(仅需安装包)前期准备(pydev-eclipse编辑器)
1.jdk安装与环境变量配置教程http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 我本机安装的是1.6.043 2.sdk下 ...
- ASP.NET 5 之 错误诊断和它的中间件们
ASP.NET5包含若干个新的功能来辅助诊断错误,可以在Startup类中简单的为应用程序错误配置不同的处理程序或者显示关于应用程序的附加信息. 配置错误处理页面 在ASP.NET5中,在Startu ...
- opencv学习——兴趣区选取
在OpenCV中,普遍支持ROI和widthStep,函数的操作被限制于感兴趣的区域,要设置或者取消ROI,就要使用cvSetImageROI()和cvResetImage()函数.如过想设置ROI, ...
- django apache error.log过大
利用apache运行django框架,发现apache中error.log增长迅猛,寻找原因不得,于是手动清空... 但是当server遇到问题时,文件过大,导致定位问题十分不便 于是决定探个究竟 首 ...
- 【ITOO 1】将List数据导出Excel表
需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中.再进行判空处赋值处理,以及去重处理.这篇博客,主要介绍读取excel表和导出excel表的方法 ...
- adb调试命令详解-2016.02.01
adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息 adb ...
- Java中可变长参数的使用及注意事项
在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");print( ...
- 嵌入在C++程序中的extern "C"
1.extern的作用 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,可以告知编译器,用extern声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中 ...
- 对像转成 和 byte 互转类库方法
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serializatio ...