你是一个测试工程师(Test Engineer - TE)还是测试软件工程师(Software Engineer in Test - SET)?你认为这两者有差别吗?

  目前而言我是一个测试工程师,但是这两个角色是很相似的。作为一个测试工程师,你更关注产品的总体质量和发布速度,而作为一个测试软件工程师,你可能更关注测试框架,自动化以及为了可测试性的代码重构。我认为差别在于工作的侧重点而不是能力的差异,因为这两个角色在谷歌都需要编写产品代码。例如作为测试工程师我的工作是开发一个自动化的发布流程,找出团队在哪些方面提高了代码覆盖率,并且减少手工验证代码有效性的步骤。

  一个典型的工作日?

  当我坐到位子上后的第一件事是检查以下事项:1)有没有需要我回复的code review;2)有没有高优先级的产品问题。如果一切安好,那开始coding。我目前的工作重点是提高大规模集成测试(Integration Test))框架的效率和代码覆盖率。同时我还会为产品添加一些新的功能来改善可测试性。大约有50%到75%的工作时间是用来coding和参加code review。

  你只写测试代码?

  不,我写的很多代码终也进入了发布的产品。在谷歌作为TE或SET很开心的一件事是你能很轻易的参加产品代码的编写而不仅是测试代码。我的测试代码集中在提高测试框架的能力以及方便开发人员编写集成测试用例。我编写的产品代码主要用于提高在极端情况下对输入数据的验证,这直接提高了产品本身的质量而不是等待测试代码来发现这些问题。

  你使用哪些编程语言?

  大多数的测试和产品代码都使用Java(注:从我同事的博客看也是如此。)。偶尔也会使用Python和C++。

  你有多少时间做手工测试?

  目前大约5%左右。虽然一些探索性测试能够帮助提高产品知识并发现一些有风险的区域,但这无法做到简单大规模重复(注:人肉的能力是有限的,找外包也是要花钱的。)。现在我正在努力减少为数不多的手工测试步骤来节约宝贵的时间。

  你会为不是你的代码写单元测试吗?

  在谷歌,测试的责任为所有的产品工程师分享,而不仅仅在于测试工程师。每个人都有责任为他们的部件编写单元测试和集成测试。这也是说,我为不属于我开发的部件之外的其它部件编写单元测试。(注:这里原文有点搞,我的理解是单元测试人人有则,虽然不是你的,但只要和你有关系你必须发扬白求恩精神。)

  你喜欢为谷歌的广告产品工作吗?

  我喜欢面对为解决可扩展性问题带来的挑战,从分析大规模数据到对海量并发请求的毫秒级响应。我也喜欢我们产品的影响力,因为它改变了很多人的生活。这是对我们工作好的奖励。

  在谷歌的测试工作和你之前的公司有什么不同?

  我觉得在谷歌这个角色更有弹性(flexible)。在我们组STE和TE对开发者的比例比通常情况要低,所以你必须先从重要的工作做起。例如,我编写了很多产品代码来修复错误,提高可测试性并改善了数据迁移过程出错信息的显示。(注:原文是increasing the visibility into error encounted ...)另外,在谷歌开发工程师也花费很多时间编写测试用例,所以测试不仅仅是测试工程师的事情。

  谷歌在科克兰(Krikland)的办公室和山景城(Mountain View)有什么区别?

  我觉得两个办公室都非常有自己的特色。在谷歌个性是得到鼓励的!例如在Kirkland的办公室里你可以玩室内攀岩,划船,而且所有的会议室都以本地的乐队命名。在西雅图的办公室则有皮划艇,而在纽约办公室的休息区则有真的食品卡车。(注:上海微软和VMware的食品饮料供应做得还是不错的,恶魔城的黑店则卖得比超市还贵!)

  你对测试在谷歌的未来怎么看?

  前途是光明的!(注:废话,道路还是曲折的呢!)我们有很多自由来提高产品质量,可测试性和加快产品发布进度。我们需要在提高发布节奏的同时保证产品的质量。我们面临的主要问题是超大规模系统带来的复杂性。这需要我们的工程师团队努力提高效率来模拟和测试我们的系统。在谷歌,这个领域永远需要测试和开发人员来关注。

  注:对话中反复出现testability这个词,我的工作经验而言,大多数公司都很难做好。这需要测试对产品的深入了解,也需要开发人员话费时间和精力来不断提高。