标签:
本文是课程《软件测试》的项目之一:Project #1: Reading a book,来自小组:Developer is tester
成员:吴家荣 景 涛 陈兆鹏 郭路文 梁华淇 何金岳
全书总分为三个部分,五个章节
介绍了Chrome OS 的测试计划 和Chrome 的漫游测试以及相关工具和代码的博客文章还有术语表。
对我们来说,本书介绍的三种角色是最让人印象深刻的。
分别是:软件开发工程师(SWE,Software Engineer),软件测试开发工程师(SET,Software Engineer in Test)和测试工程师(TE,Test Engineer)。
在学习测试和阅读《How Google Test Software》以前,对我们来说,软件产业只有一种工程师,那就是开发工程师。
这种想法不免幼稚和无知,但我们确实存在过这样的想法。
从本书的组织来看,本书的主线就是分别介绍几种不同的角色:软件测试开发工程师、测试工程师、测试工程经理。
为了决定我们小组在这一部分要写什么内容。我们先看看这些角色都在负责那些内容的工作。
软件开发工程师(SWE)
《HGTS》:软件开发工程师是一个传统上的开发角色,他们的工作室实现最终用户所使用的功能代码。
软件测试开发工程师(SET)
《HGTS》:软件测试开发工程师,也是一个开发角色,只是工作重心在可测试性和通用测试基础框架上。
测试工程师(TE)
《HGTS》:测试工程师是一个和SET关系密切的角色,有自己不同的关注点—把用户放在第一位来思考,代表用户的利益。
测试工程经理(TEM,Test Engineering Manager)
《HGTS》:测试工程师和测试开发工程师分别致力于支持用户和开发工程师。另外还有一种角色可以把这两者联系起来,那就是测试工程经理(TEM)。测试工程经理是作为独立贡献者的一个技术岗位,负责所有的支持团队(开发、产品管理、产品发布、文档等)之间的联络。
介绍完这几种角色,要是粗暴地总结一下本书讲了什么内容,我可以说,就讲了上面的内容。
再次说明,本书的组织架构就是这几种不同的角色是如何在Google的代码生产上发挥作用的。
跨越多种角色的东西或人对我们来说吸引力是最大的,也很容易让人产生某些困惑。
就像本书所介绍的陌生的角色:SET,软件测试开发工程师。
为了让本部分的内容产生深度上的价值,而不是广度地泛泛而谈,我们打算围绕《HGTS》详细介绍一下软件测试开发工程师这个角色。
Google的开发发布模式
在了解Google是如何做测试之前,我觉得先要了解Google是如何做开发的。
《HGTS》介绍,Google有一种“爬、走、跑”的开发发布模式。
也就是说,Google从来不会再一次产品中发布大量的功能,实质上,在一个产品的基本核心功能实现之后,就立刻对外发布使用,然后从用户哪里得到真实反馈,再进行迭代开发。
实质上这个模式能加速迭代开发的流程,而且对于开发的新功能来说,很快能得到用户的反馈,如果受到用户的欢迎,就根据用户的反馈进行改进,如果用户觉得功能多于,就能马上抛弃掉,并且停止进行这个方向或者支路的开发。这实质上能使Google的开发效率得到很大的提高。
Google这样的开发模式,形成了Google风格的各种开发过程的版本。
金丝雀版本:这是每日都要构建的版本,用来排除过滤一些明显不适宜的版本。
开发版本:这是开发人员日常使用的版本,一般是每周发布一个。
测试版本:这是和次序测试的版本。
Beta或发布版本:这个版本是由非常稳定的测试版本演变而来,经历了内部使用和通过所有质量考核的一个版本,也是对外发布的第一个版本。
毫无疑问,软件开发工程师(SWE)在以上的版本构建和开发过程中,扮演的是一个功能开发者的角色。这是一个很重要的角色,因为用户需求的功能,都要由他们来实现。
那么,软件测试开发工程师在其中担任了什么任务呢?为什么他们和软件开发工程师的地位是一样的?为什么招聘SET比招聘SWE更难呢?
SET描述
先来引用《HGTS》一句关于SET的描述的话。
“SET首先是工程师的角色,他使得测试存活于先前讨论的所有Google开发过程之中。SET是软禁啊测试开发工程师。最重要的一点,SET是软件工程师,正如我们招聘宣传海报和内部晋升体系中所说的那样,是一个100%的编码角色。“
“测试时应用产品的另一种功能,而SET就是这个功能的负责人。”
既然把测试页归类为应用产品的一种功能特性,那毫无疑问,用一句话概括SET就是,懂开发的测试工程师,SET开发的是测试产品,是与产品本身息息相关的测试相关的功能产品。
项目的早期阶段
Google内部有一种文化氛围:公司鼓励内部员工利用自己的20%的工作时间来做一些富有创造性的工作。
实质上,Google的很多产品,都源于员工的20%的工作,它们很多是由是被证明了有价值,然后由业余产品转变成为公司的业务型产品。
但是,在这个转变的过程中,是否需要保证产品的质量呢?
《HGTS》说,在这个阶段,功能远比质量重要。
“一个产品如果在概念上还没有完全确定成型时就去关心质量,这是优先级混乱的表现。许多来源于Google20%努力的产品原型,在其以后的dogfood或beta版本发布时,还有经历重新设计,原始代码保留的概率几乎为零。很明显,在实验初期阶段强调测试是一件非常愚蠢的事情。”
这个思想很重要,因为在明确这样的产品是否有价值之前,投入大量的精力去关心质量问题,就浪费很多资源。
从主观的角度来看,则是,产品被证明有价值之前,难以吸引SET的关注。
自动化计划
SET需要做的东西很多,让项目进行自动化测试的计划是他们的目标。
有一个原则是,自动化计划必须合情合理且有影响力。
为了实现自动化测试,SET遵循的原则是:
首先,吧容易出错的接口做个里,并针对他们创建mock和fake(mock失职对外面依赖系统的模拟,在运行时刻可以根据假设的需求提供期望的结果;fake对象是一种虚假的实现,内部使用了固定的数据或逻辑,只能返回特定的结果)
其次,构建轻量级的自动化框架,控制mock系统的创建和执行。
可测试性
可测试性的构建是把SWE和SET紧密联系起来的任务。
可以这样简单地理解SWE和SET对项目的可测试性的贡献。SET的目标是,对于项目产品每一次修改,对代码的每一次提交,对于SWE的每一次努力和尝试,都能快速对更改进行检查,构建,验证更改是否存在问题,代码是否存在bug。然后以一种最高效的方式,把相应的反馈信息发送给代码的变更者。
测试大小的定义
为了测试方便,Google自己定义了一套测试命名规则。
小型测试:验证代码单元的功能,通常是单元测试。
中型测试:验证两个或者多个模块应用之间的交互。
大型测试:验证系统作为一个整体是如何工作的。
测试大小定义的应用
测试工程师的招聘
一言以蔽之:既要动开发,也要懂测试。
做每一件事情,都应该是有一定的目的,否则便是毫无方向感。每一次经历,都应该能察觉经历给自己带来了什么。
对此书的阅读,我们觉得,给我们带来的有两点非常深刻的体会和收获。
最近参与了一个项目。扮演的是一个web架构师和技术负责人的角色。
我们使用gitlab作为远程仓库,使用git进行版本管理,使用git的分支来实现协同开发。
项目刚开始不久,web服务部分我们还没有比较强烈的测试意识,都是功能导向性的开发,以完成一个具体的功能为开发阶段性标准。
我们控制代码质量和每次提交的功能完整性的方式就是,直接人工检查。
应该说,这样的开发流程是比较原始的。没有实现自动化构建和自动化测试。没有充分利用gitlab的自动化构建和持续集成的功能。
可能这次阅读带来的影响就是,让我们团队有一种倾向和意识,去实现这样的一种构建和集成。
作为一名web前端开发工程师,之前没有尝试过在前端方面的测试。按照之前的开发经历,觉得web前端好像没法进行自动化测试。因为基本上都是UI操作,很难确定输入和输出。只能进行人机交互,人工确定逻辑的正确性和流程的正确性。
直到阅读了本书的一个关于webdriver项目创始人的一个访谈。才知道原来web前端的自动化测试并不是不可能的,而是已经有了具体的尝试和实现了!
这个认知对于我来说确实是一个巨大的惊喜。
我将会尝试去学习webdriver并且努力把web自动化测试应用到具体的项目当中。
《Google软件测试之道》是极有价值的一本书,因此我认为值得向大家推荐这本书。很久以来,软件测试的理论和实践的发展一直处于资源和人力相对不足,工作内容的边界也很模糊的状态。其他关于软件测试的书籍往往存在的的问题是,站的位置不是太高就是太低。以学术口吻写就、工程人员一看就感觉与己无关者有之;以自己的实际工作经验为基础,但是并未形成有效的理论者有之;泛泛而谈的理论家凭借相当的想象写就,但是既没有实例也没有工具者有之——一言以蔽之,光说了一堆测试这件事应该怎么做,但是并没有看到测得什么优秀的产品,也没有在这个过程中发展出工具、理论和文化来。
而《Google软件测试之道》的不同之处首先在于,IT巨头已经生产出来的软件产品,其成功是妇孺皆知的。那么,以这些产品的生产过程作为软件开发生命周期中的模范,应该是不仅比较正确,而且也是更有沟通基础的,因而也是更有价值的。软件测试作为软件开发生命周期中接触点最多的一环,通过这本书,可以看到这些IT巨头们是怎么做的——它们怎样设计配套的公司组织结构、怎样处理软件测试和其他生命周期环节的关系、基于怎样的思想来实施工程实务、开发了怎样的支撑环境和工程工具……这一系列的问题,看看微软和Google给出的答案,读者就可以知道,在目前的软件和硬件条件下,理想的,或者说是最高水平的软件测试已经达到了一种怎样的程度,从而在规划自己软件测试相关的团队配置和工程技术实务时,有了非常重要的参考。
读完《Google软件测试之道》又让我看到了一些新的东西,这主要是软件交付模式从盒装变为在线带来的,因而时间特性从离散变为持续、空间特性从单一变为多元,软件测试为了适应这些变化,必须一方面在概念上变得更灵活,另一方面却要在执行上却要变得更简单有效。这两个相互矛盾的要求,对软件测试的管理和执行人员都提出了极大的挑战。毫不意外地,我看到这本书在基础层面上与传统的盒装软件测试有着同样的测试目标:高可用性、高性能、优化的用户体验,但是在概念和技术上却发生了巨变,我诚挚地请读者们重点关注一下这本书对于测试规模的论述,以及性能测试工具的设计思想,信息量很大。另外,认真研习一下附录的两份测试计划,也会有不小的收获。
最后,真诚地向大家推荐《Google软件测试之道》,这绝对会使你受益匪浅。
《How Google Test Software》阅读体会
标签:
原文地址:http://blog.csdn.net/u012679980/article/details/51198582