“解铃还须系铃人”。
当代码构建失败,或者在线上出现bug时,只有开发人员才能够去修复它。开发人员需要对自己写的代码负责,ta比专职的测试人员更适合做测试工作。可是,并不是所有的开发人员都会测试自己的代码。当开发人员还不会去测试自己的代码时,我们需要一类专职角色,来教会开发人员更好地去测试自己的代码。所以,谷歌的工程师角色分为以下三种:
1、软件开发工程师(SWE)
软件开发工程师是一个传统上的开发角色,他们的工作是实现最终用户所使用的功能代码。他们创建设计文档,选择最优的数据结构和架构设计,并且花费大量时间在代码实现和代码评审上。SWE需要编写测试代码,包括测试驱动的设计、单元测试、参与构建各种大小规模的测试。SWE会对他们编写、修复以及修改的代码承担质量责任。假设一个开发者不得不修改一个函数,如果这次修改导致已有测试用例运行失败,或者需要增加一个新的测试用例,他就必须去实现这个测试用例的代码。
2、软件测试开发工程师(SET)
软件测试开发工程师也是一个开发角色,只是工作重心在可测试性和通用测试基础框架上。他们参与设计评审,近距离地观察代码质量与风险。为了增加可测试性,他们甚至会对代码进行重构,并编写单元测试框架和自动化测试框架。SET是SWE在代码库上的合作伙伴,相比较SWE是在增加功能性代码或是提高性能的代码,SET更加关注于质量提升和测试覆盖率的增加。SET写代码的目的是为了让SWE能够更方便地测试自己的代码。
3、测试工程师(TE)
测试工程师是一个和SET关系密切的角色,有不同的关注点--把用户放在第一位来思考,代表用户的利益。一些谷歌的TE会花费大量时间在模拟用户的使用场景和自动化脚本或代码的编写上。同时,他们会把SWE和SET编写的测试分门别类地组织起来,分析、解释测试运行的结果,驱动测试执行,特别是在项目的最后阶段,推进产品发布。TE是真正的产品专家、质量顾问和风险分析师。
从质量的角度来看,SWE负责功能实现和这些独立功能的质量。他们对容错设计、故障恢复、测试驱动设计、单元测试负责,并和SET一起编写测试代码。
SET也是开发人员,负责提供测试支持。多数测试代码是由SWE完成,SET存在的目的就是保证这些功能模块具有可测试性,并且相应的SWE还可以积极地参与到测试代码的编写中去。
很明显,SET的主要关注对象就是开发人员,SET的主要职责是让开发人员可以和容易地编写测试代码,从而达到独立功能模块的质量要求。而专注于用户角度的测试则是TE的职责。考虑到SWE和SET已经做了足够多的模块级别与功能级别的测试,下一步要考虑的就是要验证这些可执行的代码与数据集成在一起之后,是否可以满足最终用户的需求。TE在这里扮演着一个双重确认的角色,确认开发人员在测试方面的工作是否到位,任何明显的bug都会表明开发人员所作的测试工作存在不足或比较马虎。当这些明显的bug变少时,TE会把注意力转移到场景用户使用场景中去,以及是否满足性能期望,在安全性、国际化、访问权限等方面是否满足用户的要求。
网友评论