《Google软件测试之道》告诉你什么是测试
第一章:Google软件测试介绍
1.Google的测试团队并非雄兵百万,我们更像是小而精的特种部队,我们依靠的是出色的战术和高级武器
2.在Google,写代码的开发人员也承担了测试的重任.质量从来就不仅仅是一些测试人员的问题,每个写代码的开发者本身也是测试者,质量在名义上也是由这样的开发测试组合共同承担
3.Google团队由SWE(软件开发工程师), SET(测试开发工程师),TE(测试工程师)组成
4.在Google,对于一个测试人员,如果在某个产品中工作满18个月之后,就可以无理由地自愿转岗到其他产品
5.Google从来不会在一次产品发布中包含大量的功能,在一个产品的基本核心功能实现之后,就立刻对外发布使用,然后从用户那里得到真实反馈,再进行迭代开发,产品的发布经历金丝雀版本(每日构建)->开发版本(一般每周一次)->测试版本(基本上是最近一个月的最佳版本)->Beta或发布版本
6.Google的测试类型有
小型测试:用于验证单独函数或独立功能模块,一般需要使用mock和fake.小型测试由SWE完成,TE可能会参与运行,小型测试都是自动化实现的
中型测试:通常也是自动化实现的,一般会涉及两个或两个以上模块之间的交互.SET会驱动这些测试的实现及运行,SWE会深度参与,一起编码维护这些测试.在第二章讲到,它也被称为"集成测试"
大型测试:使用真实用户使用场景和实际用户数据,大型测试关注的是所有模块的集成,但更倾向于结果驱动,验证软件是否满足最终用户的需求.所有三种工程师角色都会参与到大型测试之中,通过自动化测试或者是搜索式测试.它也被称做系统测试,端到端测试
对于所有的三种类型测试,Google更倾向于做自动化测试,当然Google也有大量的手动测试.它更倾向于测试新功能,用户体验,隐私之类东西
第二章:软件测试开发工程师
1.书中讲到编写功能代码和测试代码的不同点:对于功能代码而言,思维模式是去创建,重点在考虑用户,使用场景和数据流程上;而对于测试代码来说,主要思路是去破坏,怎样写测试代码用以扰乱分离用户及其数据.所以需要去区分开发工程师以及测试开发工程师,这是因为他们的思维方式是不同的
2.所有的工程师必须复用已经存在的公共库,公共通用模块必须经过审核
3.构建系统之前要按要求运行静态代码分析工具
4.面试SET的时候,在代码要求标准上与SWE的招聘要求是一样的,SET还要额外了解如何测试他们编写的代码
5.在项目试验初级阶段(产品概念上还没有完全确定成型)强调测试是一件非常愚蠢的事情
6.所有的Google项目都有设计文档,这是一个动态 ,不断更新的文档
7.SET是第一个审阅所有设计文档的人,审阅设计文档要点:
完整性:找出文档中残缺不全或需要特殊背景只是的地方,鼓励作者增加一些外部文档链接
正确性:语法,拼写,标点等
一致性/接口/协议
测试:文档中描述系统的可测试性如何?是否需要增加测试钩子
8.SET时间有限且需要做的事情太多,尽早地提供一个可实施的自动化测试计划是一个很好的解决方法
9.在端到端的自动化测试上过度投入,常常会把你与产品的特定功能设计绑定在一起,这部分测试在整个产品稳定之前都不会特别有用
10.在Google注重代码的可读性,大家确保整个代码库看起来像是一个人编写的一样.Google内部主要的编程语言是C++,Java,Python和Javascript,它们都有不同的可读性要求
11.只有能加速开发过程的自动化测试才有意义,测试不应该拖慢开发的速度.之所有这么说,是因为Google坚持项目快速发布
12.在代码变更提交到版本控制系统之后,自动化运行所有测试
13.70/20/10原则:分别对应小型测试,中型测试与大型测试.当然这个比例也不是固定的
14.Google测试运行的要求
每个测试和其他测试之间是独立的,使它们能够以任意顺序来执行
测试不做任何数据持久化方面的工作.这测试用例离开测试环境的时候,要保证测试执行前后环境的状态一致
15.对每一个重要的缺陷修复都要增加一个测试用例与之对应
16.Google对SET的招聘要求:是一个编码能力很强的程序员,可以写功能代码,也是一个很强的测试者.可以测试任何产品,有能力管理他们自己的工作和工具.有技术上的好奇心也很重要
第三章:测试工程师
1.TE对产品的贡献很大,它首先是工程师的一部分,Google的TE综合了开发者仰慕的技术能力和以用户为中心检查软件质量而对开发者产生一定制约的能力
注:关于这一点,在后来讲到TE招聘的时候,书中有着并不完全一致的论述,P122关于TE招聘是这样描述的:
编程知识是必须的,但只限于那些完成前述TE工作需要的水平:修改而非创建代码,设计端到端的用户使用场景的能力等.再加上TE工作本身需要的一些特定的能力,如沟通,系统级别的理解以及用户同理心
早期为改善TE面试流程而进行的努力折腾过很多测试人员...
2.如果产品有很大的可能被取消,或者还没有吸引用户使用,或者功能还没有定型,那么测试工作一般都应该由产品的开发人员自己完成
3.TE进入产品时需要考虑的问题:
当前软件的薄弱点在哪里
有没有安全,隐私,性能,可靠性,可用性,兼容性,全球化和其他方面的问题
主要用户场景是否功能正常
这个产品能和其他产品(硬件或者软件)互操作吗
当问题发生的时候,是否容易诊断问题所在
TE并不需要自己去解决所有这些问题,但必须保证这些问题被解决掉,TE在测试计划及测试完整性上必须更加系统和周密,重点在真实用户的使用方式和系统级别的体验上
4.如果项目刚刚开始,测试计划是第一优先级.TE职责的一般性描述
测试计划和风险分析
评审需求,设计,代码和测试
探索式测试
用户场景
编写/执行测试用例
使用统计/用户反馈
5.测试人员不该对测试文档过于珍爱,糟糕的测试用例会被抛弃,而最后留下来的是更好的测试用例
6.Google称为的风险分析实际上是基于对软件能力排优先级[p90]
7.影响风险的因素很多,在google我们确定了两个要素:失败频率和影响
失败频率:罕见->少见->偶尔->常见
影响:最小->一些->较大->最大
8.风险缓解:风险不大可能彻底消除,一种极端的缓解方法是去掉风险最大的组件
TE更主要的工作是暴露风险.如果不能全测,就测试最重要的,这是一个原则
9.如果有可能的话,我们还会尝试更换不同的测试人员来执行这些场景(用户故事),尽可能地增加不确定和视角
10.Google的TE为一个应用编写大量的测试用例,有些测试用例精确地描述了输入和数据,也有些测试用例的描述是笼统的
11.Android团队是几个比较大的依赖于手工测试的团队之一
12.许多团队在bug到达的速度超过了其修复能力的时候,干脆不进行新功能特性的开发
13.Google的bug管理
bug数据库完全开放,任何员工能看到任何项目的任一bug
所有人都提交bug,即使不属于一个产品团队
不存在正式的自顶向下的确定bug优先级的流程,google把此事留给各个团队自主决定
14.测试人员发现bug,花些时间细细品味,这一点很重要.
是否在用户可达之路
是否还有更多的路径导致相同的bug
是否存在可能影响数据和其他应用
将bug加入回归测试集,并尽可能把它自动化
15.测试重要的一面是做确认,使程序崩溃并不总是我们的目标.以极端的输入数据来测试软件并使之出错,这很有意思,但更有意思的是用不那么极端的输入,一遍又一遍地测试用以模拟真实的使用场景,确保这些通用条件下,软件的运行不会出错.在面试时候我们会寻找这种正面的测试观
16.TE经常被看着是不怎么写代码的SET.事实上,他们能看到那些整天埋头于代码的人绝不会看到的东西
那些能反驳或者质疑规格说明的候选人,往往在工作中有优异的表现
我们需要有好奇心,充满热情的工程师
我们需要的是愿意持续学习和成长的人
17.经理们有责任去避免开发重复的测试框架,或是过多的投入在小型测试上
18.绩效考评:Googler应该制定比预期能力更高的目标.如果一个人达到了他的所有目标,那说明他的目标还不够高
19.淘汰手工测试用例的指导方针:
总是通过的测试,淘汰.在高优先级的测试都来不及做的时候,淘汰低优先级的
确保正确理解即将被淘汰的测试用例
把释放出来的时间用于测试自动化,高优先级的测试和探索式测试
抛弃可能发生过误报或者行为反常的自动化测试
第四章:测试工程经理
1.我们对测试工程经理的期望:相关项目中最强的产品专家
2.在一个项目中不能过于依赖某些成员,不能仅仅依赖于某位明星测试人员
3.测试工程经理必须努力发现团队里的好方法,好工具,并分享给其他团队
4,最有力的问题是"为什么"
5.选用不合适的人来填充名额永远要比等待合适的人员更糟糕
6.Gmail的测试经验:
不要把所有的精力都放在前端
使用与应用程序开发语言相同的编程语言来编写测试
20%的用例覆盖率80%的使用场景,把这20%自动化而别管剩下的
7.Android测试经理Huang Dang的访谈:
我要求所有的测试人员都成为产品专家
所有的事情都是价值驱动的
探索式测试是深入学习理解一个产品的最佳途径
大量重复性的工作不适合手工测试
8.大多数的Google测试人员都非常精通Python,他们开发了测试库PyAuto
9.James:我发现没有比开发工具更能激发测试人员的创造性和提升测试团队的士气了
第五章:Google软件测试和改进
1.Google继续区分开发与测试已经不是最好的选择了
某种程度上我们已经把测试变得太轻松,把开发养得太懒了
测试人员更关注自己的角色,而不是他们的产品.健康组织的一个标志是,人们会说"我为Chrome工作",而不是"我是测试"
测试人员往往崇拜测试产物(测试用例,计划,bug报告)胜过软件本身
产品经过最严格的测试发布以后,用户依然必然会发现测试中遗漏的问题
2.是谁在做测试并不重要,关键是进行了测试
3.通过互联网交付软件,意味着我们有能力选择部分用户进行发布,响应这部分用户的反馈,并迅速进行更新.开发者和最终用户之间沟通合作的障碍不复存在
4.TE的未来:测试工程师会转型成测试设计,少量的测试设计师快速地规划出测试范围,风险热图和应用程序的 漫游路线.然后,内部试用者,可信赖的测试者,早期用户或者众包测试者提交反馈,由测试设计师来评估覆盖率,计算风险影响,确保发现的问题不断减少
他们可以识别需要专业技能的地方,比如安全性,隐私,性能和探索式测试,并安排具有专业技能的人通过众包的形式完成工作
他们的工作中没有测试用例的编写,执行,没有实际的测试行为
他们会变成测试活动的管理者
《Google软件测试之道》告诉你什么是测试的更多相关文章
- 《Google软件测试之道》【PDF】下载
<Google软件测试之道>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382198 内容介绍 每天,Google都要测试和发布 ...
- 《Google软件测试之道》摘录
以下是最近看的一本书<Google软件测试之道>里的一些摘录,收获很多. 1.讨论测试开发比并没有什么意义,如果你是一名开发人员,同时也是一名测试人员,如果你的职位头衔上有测试的字样,你的 ...
- 《Google软件测试之道》基础
<Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...
- google软件测试之道--读后笔记
看完google软件测试之道,以前有认真看过一次,今天又重新看了一遍. 在google,测试人员严格区分为SET和TE.SET前期深度参与项目的开发,推动开发人员的自测,从破坏者的角度寻 ...
- 小课堂week14 Google软件测试之道
读<Google软件测试之道> 在IT领域,Google是一面旗帜,是一家非常善于思考善于尝试的公司.随着面临挑战的不断增大,传统的测试开展方式也越来越力不从心,这本书讲述的就是一次完整的 ...
- google软件测试之道读后感(一)
这几天在抽空读一本新书,久负盛名的<google软件测试之道>.之前在网络上一点一点地看过它的英文版,很受触动,还做了很长的读书笔记,现在看到了中文版,才恍觉之前的好些理解存在不恰当的地方 ...
- 《Google软件测试之道》测试开发工程师
拖延了将近半年的草稿,断断续续的写完了.之前草草翻看完这本书,关注点主要在TE上,而关于SET的部分则只是浏览,最近后知后觉,又翻出了这本书,重新看了一遍,又有新收获. 就说说Google的SET是如 ...
- 《Google软件测试之道》简介
<Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...
- 《Google软件测试之道》- Google软件测试介绍
<Google软件测试之道>- Google软件测试介绍 2015-05-21 目录 1 质量与测试 2 角色 3 组织结构 4 爬.走.跑 5 测试类型 相关链接 与Micro ...
- 《Google 软件测试之道》摘录
最近刚刚看完<Google 软件测试之道>,受益颇多,遂记录下: 只有在软件产品变得重要的时候质量才显得重要 第一章:谷歌软件测试介绍 角色介绍 SWE(Software Engineer ...
随机推荐
- 使用arcpy添加grb2数据到镶嵌数据集中
#!coding: utf-8 import numpy as np import arcpy def addGRB2ToMosaic(grb2name): print "start add ...
- Docker私有云管理平台————Docker Shipyard
一.shipyard中文版安装(CentOS) 注:本文安装操作均在root用户下,安装前需先安装Docker (传送门) 下载所需docker镜像 docker pull rethinkdb doc ...
- wordcount实例
scala的wordcount实例 package com.wondersgroup.myscala import scala.actors.{Actor, Future} import scala. ...
- Spring-Boot-操作-Redis,三种方案全解析!
在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...
- 【linux】Too many open files 解决问题第一步【记录】
记录一下解决linux上出现:Too many open files 的第一步骤. 做个记录,免得每次都查来查去的. 1.查看 ulimit -a 2.修改 vi /etc/security/lim ...
- 使用 Spring Boot 构建 RESTful API
1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency ...
- mysql 实现row_number功能
需求: 解答:由于mysql 中没有类似oracle中的 row_number功能,要实现row_number 可以使用如下功能: Select pkid,(@row_number:=@row_num ...
- 我是如何一步步编码完成万仓网ERP系统的(八)产品库设计 4.品牌类别
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- ASP.NET Core MVC 中两种路由的简单配置
1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在C ...
- 初识redis(redis基础命令)
redis简介redis是一个开源(BSD许可)的使用C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,它可以用作数据库.缓存和消息中间件,并提供多种语言的API.从201 ...