Google软件测试之道

Google对质量的理解

  • 质量不等于测试,即质量不是被测出来的
  • 开发和测试应该并肩齐驱,测试就是开发过程中不可缺少的一部分
  • 质量是一种预防行为而不是检测

Google对软件测试的划分

抛却复杂的专业术语,简单按照测试范围去划分:

  • 小型测试:对一个代码单元的测试,通常就是单元测试
  • 中型测试:对两个或多个模块之间交互的测试,通常类比于“集成测试”
  • 大型测试:对一个应用系统及其子系统整体的测试,通常类比于“端到端测试”

这样划分的好处有:

  • 容易定位问题:测试范围从小到大,各自负责不同的功能,某个测试一旦失败容易让开发找到问题所在
  • 产生较高的测试回报率:测试的回报率等于测试所产生的业务价值与测试执行成本之比。范围小的测试越容易被自动化,但因为覆盖业务范围小所产生的业务价值也就越小,范围大的测试则反之。根据团队和产品具体情况,通过制定合理的测试策略和划分测试范围,决定自动化测试的比例,可以产生较高的测试回报率

Google对软件测试角色的划分

  • SWE(软件开发工程师):主要职责是实现用户功能,除编码外也具有编写和组织测试的能力,日常活动是代码设计、代码实现与编写测试
  • SET(软件测试开发工程师):主要职责是让SWE更容易地去写测试工作重心在可测试性和通用测试基础框架上,是SWE的紧密合作伙伴,关注质量提升,具备观察代码质量、编写测试框架等能力,日常活动是参与设计评审、代码重构、编写测试框架等
  • TE(测试工程师):主要职责是专注于用户角度的测试,关注集成后的系统是否可以满足最终用户的需求,是真正的产品专家、质量顾问和风险分析师,具备全局审视与分析思考的能力,日常活动是模拟用户使用场景,对SWE和SET编写的测试进行分类组织,分析、解释和测试运行结果,特别是在项目最后阶段推进产品发布

与传统软件测试中的角色不同,Google将编写测试的工作大部分转交给SWE进行,因为测试本来就应该是开发工作的一部分,由开发去完成再合理不过。考虑到SWE在测试编写方面需要统一的支撑,SET作为SWE的紧密合作伙伴介入进来,予以框架工具和技术方面的支持,并帮助观察代码质量。而TE的作用向后推移,更关注系统集成为一个整体后,从用户角度是如何使用的,能否满足用户需求,因为毕竟质量的定义就是“满足用户需求”。TE看起来更像一个具备很强验收能力的产品经理,并且被验收的不仅仅是用户需求,还会用放大镜仔细看SWE和SET所做的测试工作细节

Google的“工程生产力团队”

测试是独立存在并与业务领域部门平行的部门,横跨于各个业务领域,被称为“工程生产力团队”。测试人员以租借的方式进入产品团队帮助做提高质量相关的事情,寻找测试方面的可改进之处。测试人员并不直接向产品团队汇报。这种借调模式,一是可以帮助测试人员保持新鲜感,二是可以让一个好的测试实践迅速在公司内的不同团队间蔓延。

测试左移(前移)与测试右移(后移)

相对于传统的认为测试工作主要是测试人员的事的看法,Google提倡测试左移与测试右移:

  • 测试左移:开发阶段就应该完成大部分测试工作,尽量将测试放在早期进行,有助于尽早发现问题和质量内建
  • 测试右移:既然TE的主要工作是从用户角度审视产品是否满足用户需求,那为什么不直接找真实用户来进行测试呢?内测用户、众包测试都是测试右移的手段,直接、快速地收集来自真实用户的反馈,能得到更有用户价值的测试结果

但是,个人认为测试左移是测试右移的前提条件,即团队尚不能完全保障产品的功能完整与稳定性之前,不要仓促开放给哪怕只是部分用户。团队应该先着力于发展自己内建质量的能力,即让人人都来关注质量,以及提前预防问题的发生。

《Google软件测试之道》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Django异步任务线程池

    当数据库数据量很大时(百万级),许多批量数据修改请求的响应会非常慢,一些不需要即时响应的任务可以放到后台的异步线程中完成,发起异步任务的请求就可以立即响应 选择用线程池的原因是:线程比进程更为可控.不 ...

  2. Day 08 作业

    有如下值集合 [11, 22, 33, 44, 55, 66, 77, 88, 99, 90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中 ​ ...

  3. 【JS】332- 为什么我更喜欢对象而不是 switch 语句

    昨天偷懒了,欢迎点击关注???这样我就多更大的动力日更了- 正文从这里开始~~~ 最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理 ...

  4. 【python测试开发栈】—理解python深拷贝与浅拷贝的区别

    内存的浅拷贝和深拷贝是面试时经常被问到的问题,如果不能理解其本质原理,有可能会答非所问,给面试官留下不好的印象.另外,理解浅拷贝和深拷贝的原理,还可以帮助我们理解Python内存机制.这篇文章将会通过 ...

  5. Java修饰符public,protected,default,private访问权限

    public 具有最大的访问权限.所有类可访问. protected 主要是用来保护子类.自身.子类及同一个包中类可以访问 default 没有加修饰符的.有时候也称为friendly,它是针对本包访 ...

  6. 《Java基础知识》Java 反射详解

    定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...

  7. 【搞定Jvm面试】 面试官:谈谈 JVM 类加载过程是怎样的?

    类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化.连接过程 ...

  8. Git打包指定分支所提交的文件

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/da7e233a-c ...

  9. Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条

    可实现多种渐变.直角or弧角.进度条.加载条 (Various gradient, right or arc angle, progress bar and loading bar can be re ...

  10. Redis简单命令(部分示例代码)

    一.redis文件夹下的可执行文件(文章尾部有示例代码) 可执行文件 作用 redis-server 启动redis redis-cli redis命令行工具 redis-benchmark 基准测试 ...