本文是从 How Google Tests Software - Part Two 这篇文章翻译而来。本文作者 James Whittaker, 前微软架构师,是“How to Break Software”系列图书中好几部书的作者,现任Google测试工程主管,近他写了一系列的关于谷歌如何测试软件的文章,本文为其系列的第二部分。

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

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

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

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

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

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

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

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

  好了,现在大家对这些角色应该有比较好的理解了,接下来我会在他们之间是怎么分工合作做更详尽的剖析。下次再聊。。。谢谢您的关注。