跟谷歌测试工程师的对话
Alan Faulkner 是谷歌的测试工程师,他的工作对象是谷歌的 DoubleClick 广告报价管理系统(Bid Manager),这个系统提供让广告代理商和广告客户在多个广告上进行报价竞标的功能。Bid Manager 是谷歌 2010 年收购的 Invite Media 系统的下一代产品。 Alan Faulkner 的主要工作负责 Bid Manager 系统用来移植数据的组件,这些组件用来把 Invite Media 中的广告客户信息转换到 Bid Manager 系统中。Alan Faulkner 2011 年进入谷歌,工作地点是位于华盛顿的柯克兰办公室。
本文的主人公 alan
英文原文:Conversation with a Test Engineer
你是测试工程师,还是编写测试代码的软件工程师?这两者之间有什么区别?
目前我是测试工程师,但这两种角色非常的相似。作为测试工程师,你更多的是专注于产品的总体质量和软件发布的速度,而编写测试代码的软件工程师 更多的是关注测试框架,自动化测试和为测试重构代码。我想这两者之间的不同更多的是关注点,而不是能力问题,因为在谷歌,这两种角色都需要能写出产品级质 量的代码。例如,我所做的测试工程师的任务是引入自动化的发布过程,为团队划分模块来提高测试覆盖率,减少校验数据正确性时需要的手工操作步骤。
你的典型的一天的工作是个什么样的情形?
当来到公司,我首先去看哪些代码审查是需要回复的,看看哪些从技术客户经理发过来的 bug 是具有高优先级的,然后开始写代码。在当前的职务上,我的主要精力是放在提高大规模集成测试和测试框架上的测试有效性和覆盖率。我也会在我们的产品中增加 一些功能特征,来改进测试有效性。我的时间的 50% 到 75% 会花在写代码上或代码审查上。
你只写测试代码吗?
不是的,我写的很多代码会留在发布的产品中。在谷歌做 SET 或 TE 的一个最大的好处是:你写产品代码就像写测试代码一样简单。我两者都写。我写的测试代码主要是用来改进测试框架,让开发人员能写出集成性好的测试程序。我 写的产品代码主要是来改进对外部输入数据的验证。我还会写一些来提高可测试性的功能代码。这些代码能给产品带来质量更高的功能特征,避免了让产品依赖于测 试程序来发现其中的问题。
你用什么语言开发?
测试代码和产品代码大部分都是使用 Java。偶尔也会使用 Python 或C++。
手工测试会占用你多少时间?
目前,在这个岗位上,我手工测试的时间少于5%。经过某些探索式的测试能帮助提高对产品的认识、发现某些风险的存在,但这些不会反复的出现,也不多。需要手工的步骤很少,我的任务就行帮助减少这种操作,所以团队不会让我去做那些数据迁移中反复的手工测试工作。
你不是给自己的代码写测试代码吧?
在谷歌,测试的任务是在所有工程师间交叉分摊的,并不是只由测试工程师来做。每个人都要为他们的组件写出单元测试代码,就像集成测试工作一样。 这就是说,我写的测试用例针对的组件并不是我开发的,但这些组件需要有说明如何为它写测试代码。这些组件通常牵涉到非常复杂的代码或需要用新的模拟框架, 例如 Mockito。
开发谷歌的广告产品,哪些是你喜欢的?
我喜欢我们需要解决的问题中的海量或高性能所带来的挑战——从处理海量数据到在毫秒级间实时对大量的广告请求进行响应。我还喜欢我们产品的影响力,因为这些产品会牵涉到很多的用户。这是工作在这样的产品上获得的回报。
依你的经验,谷歌的测试工作和你干的其它公司里有什么不同?
我感觉在谷歌,这个角色非常的灵活。在我的团队里很少区分这是 SET 的那是 TE 的,每个人可以灵活的选择他们认为最重要的工作去做。例如,我写了很多的产品代码,修改了很多产品中的 bug,提高代码的可测试性,增加在迁移数据中对错误数据的可观察性。同时,谷歌的很多开发人员却在花大量的时间测试代码,所以说,测试不是我的唯一任 务。
在谷歌柯克兰工作区工作和在谷歌总部工作有什么不同?
我真正喜欢谷歌的地方是它的各个办公区各有自己本地风格和个性。谷歌提倡这样。例如,位于柯克兰的办公区有攀岩和划船设施,我们办公大楼里的所有会议室都是以本地品牌命名的。位于西雅图的办公室有皮划艇,而纽约的办公区里在自主餐厅里有食品车。
谷歌的这种测试文化有前途吗?
我觉得前途一片光明。我们有很大的灵活性,能对产品的质量和可测试性产生重大积极的影响,能提高产品发布的速度。我们需要快速的产品发布和高质 量的产品发布。问题是我们面对的问题很复杂,而且要求很苛刻。我们需要用技术来确保团队有有效的测试方式。这是所有在谷歌的测试人员和工作中这个领域的开 发人员的努力目标。
对谷歌的测试工作感兴趣吗?