谷歌是怎么做测试的--SET的工作

在谷歌,SET是一个融合开发角色和质量意识于一身的角色。

SET首先是工程师角色,他使得测试存活于所有谷歌的开发过程之中,他是一个100%的编码角色。SET要尽早介入到开发流程中去,但不是通过“质量模型”和“测试计划”的方式,而是通过参与设计和代码开发的方式。这会使得功能的开发工程师和测试的开发工程师处于相同的地位,SET积极参与各种测试,使测试富有成效。

SET与功能开发人员坐在一起,测试也是应用产品的一种功能特性,而SET是这个产品功能特性的负责人。SET参与SWE的代码评审,反之亦然。在面试SET的时候,在代码要求标准上与SWE的要求是一样的,而且SET还需要了解如何去测试他们编写的代码。

一、SET在什么时候参与项目?

谷歌没有规定SET何时进入项目,同样也没有规定怎样的项目才算是“真正”的项目。通常情况下,SET不会在早期参与项目,但是当项目得到正式批准立项,开发总监就会找到工程生产力团队,寻求测试资源。没有项目会认为如果得不到测试资源,他们的产品就将不复存在。开发团队在寻求测试帮助的时候,有义务让测试人员相信他们的产品是令人兴奋且充满希望的。实际上,许多技术负责人希望SET能够在早期参与到他们的项目。SET可以在项目早期提供什么帮助呢?

二、参与设计文档的评审。

所有谷歌项目都有设计文档,这是一个动态的文档,随着项目的演化也在不断地保持更新。最早期的项目设计文档,主要包括项目的目标、背景、团队成员、系统设计。在初期阶段,团队成员一起协同完成设计文档的不同部分,对于一些规模足够大的项目来说,需要针对主要子系统也创建相应的设计文档,并在项目设计文档中增加子系统设计文档的链接。在初期版本完成后,里面会囊括所有将来需要完成的工作清单,这也可以作为项目前进的路标。从这一点上讲,设计文档必须要经过相关技术负责人的审核。在项目设计文档得到足够的评审和反馈之后,初期版本的设计文档就接近尾声了,接下来仙姑就正式进入实施阶段。

作为SET,可以在设计阶段推进项目的同时,简化相关项目成员的工作,可以从不同的视角来审核设计文档,对文档的质量和可靠性方面增加一些必要的内容。SET从如下几个方面审核初期设计文档:

1、完整性。找出文档中残缺不全或一些需要特殊背景知识的地方。通常情况下团队里没人会理解这些知识,特别是对新人而言。鼓励文档作者在这方面添加更多的细节,或增加一些外部文档链接,用以补充这部分背景知识。

2、正确性。看一下是否有语法、拼写、标点符合等方面的错误,这一般是马虎大意造成的,并不意味着他们以后编写的代码也是这样。但也不能为这种错误而破坏规矩。

3、一致性。确保配图和文字描述一致。确保文档中没有出现与其他文档中截然相反的观点和主张。

4、设计。文档中的一些设计要经过深思熟虑。考虑到可用的资源,目标是否可以顺利达成?要使用何种基础的技术框架?期望的设计在框架方面使用方法上是否正确?设计是否太过复杂?有可能简化吗?还是太简单了?这个设计还需要增加什么内容?

5、接口与协议。文档中是否对所使用的协议有清晰地定义?是否完整地描述了产品对外的接口与协议?这些接口协议的实现是否与他们期望的那样一致?对于其他的谷歌产品是否满足统一的标准?是否鼓励开发人员自定义协议数据格式?

6、测试。系统或文档中描述的整套系统的可测试性怎么样?是否需要新增测试钩子?如果需要,确保他们也被添加到文档中。系统的设计是否考虑到易测试性,而为之也做了一些调整?是否可以使用已有的测试框架?预估一下在测试方面我们都需要做哪些工作,并把这部分内容也增加到设计文档中去。

审阅设计文档的时候要具有一定的目的性,需要完成特定的目标,而不是像读报纸那样随意看两眼。

为了能够尽早可以运行集成测试,针对依赖服务,SET提供了mock与fake实现,这时,虽然功能模块的代码还没有实现,集成测试的代码就已经可以开始编写了。所以,SET是第一个实现所有接口和协议的人。

三、关于自动化测试计划:

SET的时间有限且需要做的事情太多,尽早地提供一个可实施的自动化测试计划是一个很好的解决方法。在谷歌,SET遵循以下方法来制定自动化测试计划:

我们首先把容易出错的接口做隔离,并针对它们创建mock和fake,这样我们可以控制这些接口之间的交互,确保良好的测试覆盖。

接下来构建一个轻量级的自动化框架,控制mock系统的创建和执行。这样的话,写代码的SWE可以使用这些mock接口来做一个私有构建。在他们把修改的代码提交到代码服务器之前运行相应的自动化测试,可以确保只有经过良好测试的代码才能被提交到代码库中。这是自动化测试擅长的地方,保证生态系统远离糟糕代码,并确保代码库永远处于干净的状态。

SET在这个计划中涵盖自动化之外,还要包括如何公开产品质量方面的信息给所有关心的人。在谷歌,SET使用报表和仪表盘来展示收集到的测试结果以及测试进度。通过将整个过程简化和信息公开透明化,获取高质量代码的概率会大大增加。

四、SET还要负责代码的可测试性。

SET的第一要务就是代码的可测试性。SET在项目团队中扮演一个质量顾问的角色,提供程序结构和代码风格方面的建议给开发人员,这样开发人员可以更好地做单元测试。同时提供测试框架方面的建议,使得开发人员能够在这些框架的基础上自己写测试。

五、测试运行

SET还要负责自动化测试的执行。自动化测试执行时,需要满足如下条件:

1、每个测试和其他测试之间都是独立的,使它们能够以任意顺序来执行;

2、测试不做任何数据持久化方面的工作。在这些测试用例离开测试环境的时候,要保证测试环境的状态与测试用例开始执行之前的状态是一样的。

你可能感兴趣的:(谷歌是怎么做测试的--SET的工作)