《Google软件测试之道》测试开发工程师

拖延了将近半年的草稿,断断续续的写完了。之前草草翻看完这本书,关注点主要在TE上,而关于SET的部分则只是浏览,最近后知后觉,又翻出了这本书,重新看了一遍,又有新收获。

就说说Google的SET是如何做的,以及个人的一些思考和收获吧,寥有慰藉。。。

Google的测试流程可以简练的概括为:让每个工程师都注重质量。而在工作流程引入过程中也伴随着一些致命的缺陷,下面简述下Google是如何解决以及其测试流程的是如何进化的。

①、测试并不能保证产品质量。需要一直谨记的一点:质量是内建的,而不是外加的;

②、软件开发的最终目的,是完成一个产品,由谁完成不重要,应该模糊角色,关注产品;

③、软件测试本身高于测试的产物,谁在测试不重要,关键是进行了测试。

一个理想完美的开发过程,是怎样的?

测试先行,在编写代码之前,开发人员思考如何测试他即将编写的代码,设计一些边界场景测试用例,数据取值范围极大极小,导致循环语句超出范围等其他极端情况;

这些测试代码作为产品代码的一部分,以单元测试代码形式与功能代码存储在一起,这种类型的测试,最有资格最适合去做的人,就是编写代码的人。

一个理想的测试过程,是怎样的?

做测试,有时候需要利用很多的外部基础设施,比如数据库,比如工具等,用专业的术语来讲,就是测试框架(test harnesses)、测试通用设施(test infrastructure)、

模拟设施(mock)和虚拟设施(fake);

在测试过程中需要的时候,都需要出现在面前任由使用。

△ mock:指对外依赖系统的模拟,运行时可以根据假设的需求提供期望的结果。

△ fake:一种虚假的实现,内部使用固定的数据或逻辑,只能返回特定的结果。

功能开发人员SWE和测试开发人员SET的区别:

SWE:思维逻辑是创建,重点在于考虑用户、使用场景和数据流程的实现上

SET:思维逻辑是破坏,考虑怎样写测试代码用以扰乱分离用户及其数据

完美的软件开发过程,还需要一个角色,就是用户开发人员TE;一个真正关心用户,从用户角度考虑软件产品质量的角色。

用户开发人员需要做的是面向用户的任务:用例、业务逻辑、用户场景、探索式测试等,关注这些功能模块如何集成,验证每个模块的功能,以及集成后的作用包括对用户最终产生的价值。

这就是理想状态的软件开发过程,但实际上这种情况不存在,Google也只是接近,仅此而已!

个人感触:软件开发是一个严谨的过程,需要多方面协同配合,需要尽力提升效率,无缝沟通,但不能过于盲目追求,实际工作中影响因素太多,找到平衡点才是重点。。。

一、SET的工作范畴

1、开发和测试过程

在Google,测试工作是由整个工程师团队负责,而不仅仅是头衔带“测试”的工程师。

工程师的交付物是即将发布的代码,代码的组织形式、开发过程、维护是日常工作的重点。

Google多数代码放在同一个代码库里,并使用统一的一套工具。这套工具支撑着Google的构建和发布流程。

这样做的好处在于:

①团队成员可以毫不费力的完成代码入库、提交、执行测试、创建版本等任务;

②单一的代码库模式,使工程师可以在项目中的切换几乎不需什么成本;

③提高效率,减少了项目失败的几率和节省成本;

2、设计文档

Google所有项目都有设计文档,这是个动态的文档,随着项目演化在不断的保持更新。

作为一个SET,可以在项目初期阶段就加入项目,完成一些重要且有影响力的工作。SET在团队中有巨大的优势,即:把非常专业的广阔视野转化成影响力。

一般而言,代码复用和模块交互方面的设计由SET来做,而不是SWE;而在设计阶段,SET在推进项目同时也可以简化相关项目成员的工作。

在Google,SWE完成最初的设计文档后,一般都会期待SET来审核这些设计文档,下面是这么做的一些原因:

①SET需要熟悉了解所负责的系统设计;

②SET早期提出的建议会反馈在文档和代码里,这样也增加了SET的整体影响力;

③SET需要对项目的整体了解度达到甚至超过项目负责人;

④在项目的初期,与相应的开发工程师建立良好的工作关系;

SET审阅设计文档都需要有一定的目的性,需要完成特定的目标,下面是一些审阅时需要注意的重点:

完整性、正确性、一致性、设计、接口与协议、测试

3、可测试性

产品开发过程中,SWE和SET精密配合。SWE编写产品代码并测试,SET编写测试框架,为SWE提供测试代码方面的帮助,质量由SWE和SET共同承担。

SET的第一要务是可测试性,SET则扮演一个质量顾问的角色,提供程序结构和代码方面的建议给开发人员,使得开发人员可以更好的进行单元测试;同时SET也提供测试框架方面的建议,

使得开发人员可以再这些框架的基础上自己写测试。

为了使SET也成为源码的拥有者之一,Google把代码审查作为开发流程的中心。

4、自动化测试

自动化测试不仅仅是自动化测试程序的编写,它首先必须产生价值。

必须去考虑如何编译测试程序、执行、分析、存储和报告所有的测试运行结果,这些都是测试自动化想真正发挥作用面临的挑战。

除了正确的编写自动化程序外,还要使工程师的注意力转移到在实际项目中如何更大的发挥自动化测试的价值上。只有能加速项目进程的自动化测试才有存在的意义,测试不应拖慢开发速度。

因此,自动化测试应该与开发过程真正集成在一起,并使之成为开发过程的一部分,而不是孤立它。

功能代码从不是真空一样的孤立存在,测试代码也是如此。

一些个人思考:目前国内,或者说我个人接触到的自动化测试(常见的UI、接口、单元),都是将其与开发独立开来,不能说这种做法是对是错,但总觉得有点用力过猛了。。。

特别是UI自动化,嗯,selenium自动化,貌似很火的样子,新人菜鸟小白,开发转测试的,遇到职业瓶颈的,好多人在学,不知道学了能真正在工作中用到的又有几个?

个人的观点是:学到的东西要能产生价值,学以致用!坦白地讲,我们学习这些知识,还是为了应付工作中遇到的问题,而不是盲目跟风(曾经我也盲目的跟风了一段时间。。。)

5、测试规模大小的定义及相关

在Google,小型测试(单元测试)主要关注函数级别的独立操作和调用上面,是为了验证一个代码单元的功能;中型测试(集成测试)验证两个或以上的模块应用见的交互;

大型测试(系统测试/端到端测试)是为了验证整个系统作为一个整体是如何工作的。

小型测试带来优秀的代码质量、良好的异常处理、优雅的错误报告,大中型测试带来整体产品质量和数据验证。

单一的测试类型不能解决所有项目需求,因此需要将不同类型的测试维持在一个比例。Google的经验是70/20/10原则:即70%小型测试,20%中型测试,10%大型测试。

当然,这个比例不是固定的,需要根据项目的具体情况来上下浮动调整,比如:

①某个项目是面对用户的,有较高的集成度,或用户接口比较复杂,则应该有更多的大中型测试;

②如果是基础平台或面向数据的项目,比如索引或网络爬虫,则小型测试应占到更多的比例;

写在末尾:这是第三次翻看《Google软件测试之道》,每次翻看都有不一样的收获,博客里只能列举一些相对来说比较实用的可参考性的内容,其实这本书中,每个章节后面都有

一些和Google的工程师的访谈内容,蛮有意思的,建议有兴趣的童鞋可以买纸质书去看看。虽然电子书可能相对更方便。

但个人感觉,电子书只能作为工具书,而纸质书更方便阅读中的思考和总结,做注释,或许也有点成就感吧。。

何况是《Google软件测试之道》这本值得多次反复阅读的书呢。。。

时间: 2024-10-25 14:47:14

《Google软件测试之道》测试开发工程师的相关文章

转《Google软件测试之道》

<Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯吧,就做了笔记,将自己的学习理解感触写下来... 预计会分为五部分写这些学习笔记,分别是Google软件测试基础介绍.软件测试开发工程师.软件测试工程师.测试经理以及附录其他部分... 快乐阅读,快乐测试,祝愿你总能发现(并修复)BUG... ----James Whittaker.Jason Arbon.J

《Google软件测试之道》- Google软件测试介绍

<Google软件测试之道>- Google软件测试介绍 2015-05-21 目录 1 质量与测试  2 角色  3 组织结构  4 爬.走.跑  5 测试类型  相关链接 与Microsoft相比,Google的测试团队并非雄兵百万,更象是小而精的特种部队,依靠的是出色的战术和高级武器.Google信奉“少则清晰”. 1 质量与测试 返回 测试是开发过程中必不可少的一部分,当开发过程和测试一起携手联姻时,即是质量达成之时. 2 角色 返回 软件开发工程师(software engineer

Google软件测试之道 pdf下载

引领一代风骚的明星企业google, 推出过很多成功优秀的产品,搜索引擎不用说,譬如Gmail ,Chrome, Google Doc, G+等等等等,也推出过很多短命的产品,譬如Google Wave等等. 作为一个时常需要推出新产品,但又要根据用户反馈而做进一步选择继续还是放弃的企业,作为一个需要让产品稳定健壮以保持客户满意度的明星企业,该如何测试是一个很大的问题.Google的经验非常值得借鉴. 该书的作者是Google测试的Senior Director(如果我没记错的话),在测试领域有

《Google软件测试之道》

Google软件测试之道 Google对质量的理解 质量不等于测试,即质量不是被测出来的 开发和测试应该并肩齐驱,测试就是开发过程中不可缺少的一部分 质量是一种预防行为而不是检测 Google对软件测试的划分 抛却复杂的专业术语,简单按照测试范围去划分: 小型测试:对一个代码单元的测试,通常就是单元测试 中型测试:对两个或多个模块之间交互的测试,通常类比于“集成测试” 大型测试:对一个应用系统及其子系统整体的测试,通常类比于“端到端测试” 这样划分的好处有: 容易定位问题:测试范围从小到大,各自

google软件测试之道读后感(二)

这几天又翻了几页这本书,觉得妙语连珠,关键语录摘抄如下,并补充自己的一些思考: "如果你想要求一个团队去尝试新的事物或者做某些改进,给他们提供一个联系人会更好一些,这个联系人来源于更大的社区,并可以从他那里得到帮助": "不要陷入尝试去创建一个包含独立指标的完美系统的陷阱中.对所有人都完美的事情是不存在的.在没有可替代的方案时,在合理的地方达成一致并勇往直前是很重要的.需要灵活的时候就灵活一些,但一定要坚持你的原则底线". 当考虑团队建设方面时,在以前总是收获理想很

《Google软件测试之道》心得笔记

Google软件测试介绍 把开发和测试融合在一起--开发和测试必须同时展开 开发人员自己要对自己写的代码负责,比专职的测试人员更适合做测试工作. 测试开发工程师SET 对于Google拥有很少量的测试人员的情况下,还可以取得不错的成果,核心原因在于Google从来不会再一次产品发布中包含大量的功能,实际上,做法恰恰相反,在一个产品的基本核心功能实现之后,就立即对外发布使用,然后从用户那里得到真实的反馈. 软件测试开发工程师(SET) Google的四大主要开发语言:C++.Java.Python

Google软件测试之道(一):软件测试开发工程师

设计文档 项目发起人要做的第一件事情就是设计文档.这是一个动态的文档.最早期的项目设计文档,主要包括项目的目标.背景.团队成员.系统设计.团队成员一起协同完成设计文档的不同部分.对于一些大规模的项目,需要针对主要子系统也创建相应的设计文档.在初期版本完成后,将来需要完成的工作清单也可作为项目路标.从这一点讲,设计文档必须经过相关技术负责人审核.作为SET,比较幸运的是在初期阶段加入了项目.SET在团队中有一个巨大优势,就是拥有产品方面最广阔的视野.通常代码复用和模块交互方面的设计会由SET来做,

Google软件测试之道(二):测试工程师

一种面向用户的测试角色 一种用户开发者,TE首先必须是工程师,Google的TE他综合了开发者仰慕的技术能力和以用户为中心检查软件质量而对开发者产生一定制约的能力.在研发的早期阶段,功能还在不断变化,最终功能列表和范畴还没有确定,通常TE没有太多工作可做.在TE进入产品时,需要考虑以下问题: 当前软件薄弱点在哪里? 有没有安全.隐私.性能.可靠性.可用性.兼容性.全球化和其他方面的问题? 主用户场景是否功能正常?对于全世界不同国家的用户都是这样吗? 这个产品能与其他产品互操作吗? 当发生问题时,

测试技术的思考 ---- 读《微软的软件测试之道》有感系列

假期期间,带着复习巩固测试基础理论的目的,开始阅读<微软的软件测试之道>,阅读过程中有不少启发,遂将自己的思考及学到的知识在此处做个总结记录. 1. 为什么阅读这本书? ????做了几年测试工作,随着对测试理解的加深,我发现测试理论对于日常的测试工作有较大的帮助与影响.待测系统复杂多样性的增加,要求我们也逐步去思考,如何测试,才能保证待测系统的质量,这期间就需要测试理论的支撑. ????我个人的一个观点是,一个优秀的测试工程师,或一个优秀的软件开发测试工程师,需要在三个方面持续的打磨: 理论