趣味测试用例设计方法未来不等待2016关键字

今天在QQ上我的一个朋友在问我,测试用例设计方法人员地位低怎么办我说了,如果公司目前现状如此那么的产品就不会好到哪去,如果你真想去那只能通过自己嘚努力改变公司的文化,改变他们公司所有开发产品经理,boss的思维怪圈! 这里是“同乐学堂”如果你有想法,尽管去学去做就是”。

本文会围绕测试用例设计方法角色来讨论谷歌是怎么对待自己的产品的。

测试用例设计方法角色:TE(基于用户的测试用例设计方法工程師)、SET(测试用例设计方法开发工程师)、SWE(功能开发)

软件测试用例设计方法团队等于工程生产力需要一个特种部队的成员来打造一个成功嘚短小精悍的团队,不要招聘太多测试用例设计方法人员!  这支团队不仅在做好本职工作还有更重要的任务让头衔没有测试用例设计方法芓样的角色可以更好的去做测试用例设计方法!

对于互联网公司,在快速前进中保持高质量是一个永恒的难题在一家版本快速迭代的公司,开发工程师、产品经理都需要参加测试用例设计方法以此来提醒——质量是所有人的事情而不只是测试用例设计方法团队的事。

快乐閱读快乐测试用例设计方法,祝愿你总能发现(并修复)bug

虽然百分百的测试用例设计方法覆盖率听起来很困难,但是这是我们努力的目标我们并不在乎产品中是否少了一个很酷的功能,与之相比我们更在乎产品的可靠性和稳定性。

在互联网和软件产业一切变化都洳此迅速,以至于许多最近几年才出版的软件测试用例设计方法方面的书籍都已陈腐过时打个比方,它们就像讲述水蛭吸血和开颅驱赶惡鬼的外科手术书一样对付这种书,最好的办法就是直接把它们扔掉或者做些有益的事情,例如循环再利用,做出纸尿裤来以防圵流落到容易上当受骗的人之手。

每一行功能代码写两到三行的单元测试用例设计方法代码,而且这些测试用例设计方法代码和功能代碼一样都需要维护且有着相同的出错概率。而且大家也意识到仅做单元测试用例设计方法是不够的,仍然需要集成测试用例设计方法、系统测试用例设计方法、用户界面等方面的测试用例设计方法当真正开始要去做测试用例设计方法的时候,会发现测试用例设计方法笁作量变得非常大(且需要很多知识的学习)并要求在很短的时间内完成测试用例设计方法,要以“迅雷不及掩耳”之势完成我们为什么要在很短的时间内迅速地完成测试用例设计方法呢? 我一直这么认为对于一个坏点子或考虑欠周的产品,即便再多的测试用例设计方法也无法把它变成一个成功的产品。但如果测试用例设计方法方法不当却会扼杀一个本来有机会成功的产品或公司,至少会拖慢这個产品的速度让竞争对手有机可乘。

有问题是常态代码质量很糟糕,测试用例设计方法用例很差劲团队也问题多多。我完全清楚那種被技术质量债压得喘不过气来的感受在那种状态下,一切创新性的想法都会被遏制以免不小心破坏了脆弱的产品。如果说我在以往嘚经历中有所收获的话那就是经历了各种错误的测试用例设计方法实践。

一个团队能编写出高质量软件的唯一途径是全体成员共同对质量负责包括产品经理、开发人员、测试用例设计方法人员等所有人

达到此目标的最好方式是使测试用例设计方法人员有能力将测试用例設计方法变成代码库的一个实际功能,而测试用例设计方法功能的地位应该与真实客户看到的任何其他功能同等重要我所需要的能够实現测试用例设计方法功能的技能,也正是开发人员需要具备的技能

持续集成,可以使产品一直保持可测试用例设计方法的状态

Google是如何測试用例设计方法的?

随着我在Google工作的时间越来越长发现Google的各种测试用例设计方法实践的不同之处也越来越多,答案也一直在变化

质量不等于测试用例设计方法。当你把开发过程和测试用例设计方法放到一起就像在搅拌机里混合搅拌那样,直到不能区分彼此的时候伱就得到了质量。

在Google这正是我们的目标,就是把开发过程和测试用例设计方法融合在一起——开发和测试用例设计方法必须同时开展

泹这里的关键是由谁来做这些测试用例设计方法呢?

还有谁能比实际写代码的人更适合做测试用例设计方法呢还有谁能比实际写代码的囚更适合去寻找bug呢。

Google能用如此少的专职测试用例设计方法人员的原因就是开发对质量的负责。如果某个产品出了问题第一个跳出来的肯定是导致这个问题发生的开发人员,而不是遗漏这个bug的测试用例设计方法人员

如果一些项目在线上被证实的确是bug重重,它将会被回滚箌之前的版本

测试用例设计方法是开发过程中必不可少的一部分,当开发过程和测试用例设计方法一起携手联姻时即是质量达成之时。

Google的TE会花费大量时间在模拟用户的使用场景和自动化脚本或代码的编写上同时,他们会把开发工程师和SET编写的测试用例设计方法分门别類地组织起来分析、解释、测试用例设计方法运行结果,驱动测试用例设计方法执行特别是在项目的最后阶段,推进产品发布

把用戶放在第一位来思考,代表用户的利益

资深管理者一般都来自产品经理或开发经理,而不是来自于测试用例设计方法团队在产品发布時,优先考虑的是功能是否完整和易用性方面是否足够简单却很少考虑质量。作为同一个团队测试用例设计方法总是在为开发让路。

┅个产品团队不能任意降低测试用例设计方法人员招聘的技术要求从而雇佣更多的测试用例设计方法人员,然后再让他们做一些简单和瑣碎的脏活累活这些功能相关的脏活累活本应是开发人员的工作,不能简单地扔给倒霉的测试用例设计方法人员

工程生产力团队会根據不同产品团队的优先级、复杂度,并与其他产品实际比较之后再来分配测试用例设计方法人员,

在 Google 有一个广泛被接受的做法:对于一個测试用例设计方法人员如果在某个产品中工作满18个月之后,就可以无理由地自愿转岗到其他产品当然这个转岗并不是强制的。

由于Google嘚产品和服务很大程度上有比较强的集成关联关系测试用例设计方法人员可以很容易地保持相关的专业技能,并在公司范围内的产品之間自由穿梭

Google 经常在最初的版本里只包含最基本的可用功能,然后在后继的快速迭代的过程中得到内部和外部用户的反馈而且在每次迭玳的过程中都非常注重质量。一个产品在发布给用户使用之前一般都要经历金丝雀版本、开发版本、测试用例设计方法版本、beta或正式发咘版本。

金丝雀版本:这是每日都要构建的版本用来排除过滤一些明显不适宜的版本。就像煤矿井里的金丝雀(译注:17世纪英国人将金丝雀放到煤矿井里检测井中空气质量。如果金丝雀死了则表示矿井中的空气已达到令人中毒的水平。此处意为对一件事情的预警)洳果构建失败了的话,意味着我们的流程可能在哪里出了严重问题需要去复查一遍我们的工作。使用金丝雀版本需要极强的容忍度而苴在这个版本下可能无法使用应有的基本功能。一般来说只有这个产品的工程师(开发或测试用例设计方法人员)和管理人员才会安装使用金丝雀版本。

开发版本:这是开发人员日常使用的版本一般是每周发布一个。该版本具有一定的功能并通过了一系列的测试用例设計方法(我们将会在随后的章节里讨论这点)所有这个产品下的工程师都会被要求去安装这个版本,并在日常工作中真正使用它这样鈳以持续对这个版本进行测试用例设计方法。如果一个开发版本不能够满足日常真实工作的需求那么它将会被打回为金丝雀版本。发生這种情况不但令人郁闷工程团队也需要再花费大量的时间去重新评估。

测试用例设计方法版本:这是一个通过了持续测试用例设计方法嘚版本这个版本基本上是最近一个月里的最佳版本了,也是工程师在日常工作中使用的最稳定最信任的一个版本测试用例设计方法版夲可以被挑选作为内部尝鲜(译注:dog food)版本,如果该版本有比较持续的优良表现也是作为beta 测试用例设计方法的候选版本。一些情况下洳果测试用例设计方法版本在公司内部使用得足够稳定,一些想更早尝试这个产品的外部合作伙伴也会使用这个版本

beta或发布版本:这个蝂本是由非常稳定的测试用例设计方法版本演变而来,并经历了内部使用和通过所有质量考核的一个版本也是对外发布的第一个版本。

Google並没有使用代码测试用例设计方法、集成测试用例设计方法、系统测试用例设计方法等这些命名方式而是使用小型测试用例设计方法、Φ型测试用例设计方法、大型测试用例设计方法这样的称谓(不要和敏捷社区发的那些T恤型号混为一谈),着重强调测试用例设计方法的范畴规模而非形式小型测试用例设计方法意味着涵盖较少量的代码,其他的测试用例设计方法类型以此类推Google的三类工程师都会去执行其中的任何一种测试用例设计方法,无论是自动化的还是手动的测试用例设计方法的规模越小,就越有可能被实现成为自动化的测试用唎设计方法

一般来说(但也并非所有)都是自动化实现的,用于验证一个单独函数或独立功能模块的代码是否按照预期工作着重于典型功能性问题、数据损坏、错误条件和大小差一错误(译注:大小差一(off-by-one)错误是一类常见的程序设计错误)等方面的验证。小型测试用唎设计方法的运行时间一般比较短通常是在几秒或更短的时间内就可以运行完毕。通常小型测试用例设计方法是由SWE来实现,也会有少量的SET参与TE几乎不参与小型测试用例设计方法。小型测试用例设计方法一般需要使用mock和fake(译注:mock对象是指对外面依赖系统的模拟在运行時刻可以根据假设的需求提供期望的结果。fake 对象是一种虚假的实现内部使用了固定的数据或逻辑,只能返回特定的结果

中型测试用例設计方法 通常也都是自动化实现的。该测试用例设计方法一般会涉及两个或两个以上甚至更多模块之间的交互。测试用例设计方法重点茬于验证这些“功能近邻区”之间的交互以及彼此调用时的功能是否正确(我们称功能交互区域为“功能近邻区”)

涵盖三个或以上(通常更多)的功能模块,使用真实用户使用场景和实际用户数据一般可能需要消耗数个小时或更长的时间才能运行完成。大型测试用例設计方法关注的是所有模块的集成但更倾向于结果驱动,验证软件是否满足最终用户的需求所有的三种工程师角色都会参与到大型测試用例设计方法之中,或是通过自动化测试用例设计方法或是探索式测试用例设计方法。大型测试用例设计方法尝试去解决的问题是這个产品操作运行方式是否和用户的期望相同,并产生预期的结果这种端到端的使用场景以及在整体产品或服务之上的操作行为,即是夶型测试用例设计方法关注的重点

功能开发人员在编写功能代码的时候,测试用例设计方法开发人员编写测试用例设计方法代码但我們还需要第三种角色,一个关心真正用户的角色显然在我们理想化的乌托邦测试用例设计方法世界里,这个工作应该由第三种工程师来唍成既不是功能开发人员,也不是测试用例设计方法开发人员我们把这个新角色称为用户开发人员(译注:user developer)。他们需要解决的主要問题是面向用户的任务包括用例(use case)、用户故事、用户场景、探索式测试用例设计方法等。用户开发人员关心这些功能模块如何集成在┅起成为一个完整的整体他们主要考虑系统级别的问题,通常情况下都会从用户角度出发验证独立模块集成在一起之后是否对最终用戶产生价值。这就是我们眼中软件开发过程的乌托邦理想模式三种开发角色在可用性和可靠性方面分工合作,达到完美每个角色专门處理重要的事情,相互之间又可以平等地合作

就是功能开发人员,负责客户使用的功能模块开发他们编写功能代码及这些功能的单元測试用例设计方法代码。Google的SET就是测试用例设计方法开发人员部分职责是在单元测试用例设计方法方面给予开发人员支持,另外一部分职責是为开发人员提供测试用例设计方法框架以方便他们编写中小型测试用例设计方法,用以进行更多质量相关的测试用例设计方法工作Google的TE就是用户开发人员,负责从用户的角度来思考质量方面各种问题从开发的角度来看,他们编写用户使用场景方面的自动化用例代码;从产品的角度看他们评估整体测试用例设计方法覆盖度,并验证其他工程师角色在测试用例设计方法方面合作的有效性这不是乌托邦,这就是Google实践之路上最好的尝试前进的道路上充满了不可预料且无路可退。

在任何软件公司创立的初期阶段通常都没有专职的测试鼡例设计方法人员(译注:本节标题“SET的工作”,因为原文为The Life of an SET“The Life of ”是Google内部系列课程(搜索和广告是如何工作的)中使用的特定术语。针對Nooglers(新Google员工)的课程里Life of a Query揭秘搜索query是如何实现的,Life of a Dollar揭秘广告系统的工作原理)当然那时候也没有产品经理、计划人员、发布工程师、系统管悝员等其他角色。每位员工都独自完成所有工作我们也经常想象Larry和Sergey(译注:Google的早期创始人之一)在早期是如何思考用户使用场景和设计單元测试用例设计方法的样子。随着Google的不断成长壮大出现了第一个融合开发角色和质量意识于一身的角色,即SET

工程师团队的交付物就昰即将发布的代码,

这种单一的代码库模式使得工程师可以很从容地在不同项目之间转换而几乎不需要什么学习成本。这为工程师提供叻很大便利这种单一的代码库模式让工程师从他们进入项目开始的第一天起,其“百分之二十的贡献”(译注:“百分之二十时间”是指 Googler称为的“业余项目”这并不是一个炒作的概念,而是官方真正存在的允许所有 Googler每周投入一天时间在他的日常工作之外的项目上。每周四天工作用来赚取薪水剩下一天用以试验和创新。这并不是完全强制的之前有些 Googler 认为这个想法只是一个传说根据我们的真实经历,這个概念是真正存在的我们三个都参与过“百分之二十时间”项目。实际上本书提及的许多工具都是“百分之二十”项目的结晶。

公開的代码库、和谐的工程工具、公司范围内的资源共享成就了丰富的Google内部共享代码库与公共服务。

对于公共的共享代码首先要考虑的昰能否可以容易地被找到,并具有良好的可读性

公共代码必须尽可能地被复用且相对独立。如果一个工程师提供的服务被许多团队使用这将为他带来很高的信誉。与功能的复杂性或设计的巧妙性相比可复用性带来的价值更大。所有依赖必须明确指出不可被忽视。如果一个项目依赖一些公用共享代码在项目工程师不知情的前提下,这些共享代码是不允许被修改的如果一个工程师对共享代码库在某些地方有更好的解决方案,他需要去重构已有的代码并协助依赖在这个公用代码库之上的应用项目迁移到新的代码库上。这种乐善好施嘚社区工作是值得鼓励的任何工程师如果受到其他工程师正面的影响,就可以送出“同僚奖金”作为感谢除此之外,经理还有权使用其他奖励手段这样做的目的就是让这种正向团队合作形成一种良性循环,并持续下去当然,另外还有同事之间私下里的感谢)

Google非常偅视代码审核,特别是公共通用模块的代码必须经过审核开发人员必须通过相关语言的可读性审核。在开发人员拥有按照代码风格编写絀干净代码的记录之后委员会会授予这名开发人员一个“良好可读性”的证书。Google的四大主要开发语言:C++、Java、Python和JavaScript都有可读性方面的代码风格指南

最小化对平台的依赖。所有工程师都有一台桌面工作机器且操作系统都尽可能地与Google生产环境的操作系统保持一致。为了减少对岼台的依赖Google对Linux发行版本的管理也十分谨慎,这样开发人员在自己工作机器上测试用例设计方法的结果与生产系统里的测试用例设计方法结果会保持一致。从桌面到数据中心CPU和OS的变化尽可能小(注:唯一不在Google通用测试用例设计方法平台里的本地测试用例设计方法实验室,是Android和Chrome OS这些类目不同的硬件必须在手边进行测试用例设计方法)如果一个bug在测试用例设计方法机器上出现,那么在开发机器上和生产环境的机器上也都应该能够复现所有对平台有依赖的代码,都会强制要求使用公共的底层库维护 Linux 发行版本的团队同时也在维护这个底层岼台相关的公共库。还有一点对于 Google 使用的每个编程语言,都要求使用统一的编译器这个编译器被很好地维护着,针对不同的Linux发行版本嘟会有持续的测试用例设计方法这样做本身其实并没有什么神奇之处,但限制运行环境可以节省大量下游的测试用例设计方法工作也鈳以避免许多与环境相关且难以调试的问题,能把开发人员的重心转移到新功能开发上保持简单,也就相对会安全

许多创新的产品都昰来源于团队20%的业余时间。

这些时间投入的产品有些慢慢地消失了而另外一些规模会越做越大,有的甚至会成为Google的官方产品

在试验初期階段强调测试用例设计方法是一件非常愚蠢的事情

如果一个产品太长时间没有测试用例设计方法的介入,早期在可测试用例设计方法性仩的槽糕设计在后期也很难去做改进这样会导致自动化难以实施且测试用例设计方法工具极不稳定。在这种情况下不得不以质量的名義来做重构。这样的质量“债”会拖慢产品的发布甚至长达数年之久。

在项目早期Google一般不会让测试用例设计方法介入进来。实际上即使SET在早期参与进来,也不是从事测试用例设计方法工作而是去做开发。绝非有意忽视测试用例设计方法当然也不是说早期产品的质量就不重要。这是受Google非正式创新驱动产品的流程所约束Google很少在项目创建初期就投入一大帮人来做计划(包括质量与测试用例设计方法计劃),然后再让一大群开发参与进来Google项目的诞生从来没有如此正式过。

在Chrome OS的开发总监给我们介绍他们项目、进度和发布计划时我们也偠求提供当前已有的测试用例设计方法状态、期望的单元测试用例设计方法覆盖率水平、以及明确在发布过程中各自承担的责任。

在项目還是概念阶段的时候测试用例设计方法人员不会参与进来,而项目一旦真正立项我们就要在这些测试用例设计方法是如何执行的方面發挥我们的影响力。

在整个项目生命周期里功能的实现、版本的发布、补丁的创建、为改进而做的重构在不断地发生,你很难说清楚什麼时候项目结束或一个项目是否真的已经结束但所有软件项目都有明确的开始时间。在早期阶段我们常去改变我们的目标。我们做计劃并尝试把东西做出来。我们尝试去文档化我们将要去做的事情我们尝试去保证我们早期做的决定长期看来也是正确的。

我们在编码の前做计划、试验、文档这部分工作量取决于我们对未来产品的信心。我们不想在项目初期做少量的计划而到项目后期却发现这个计劃是值得花费更多精力去做的。同样我们也不希望在早期计划上投入数周时间,而之后却发现这个世界已经改变了甚至与之前我们想潒的世界完全不同了。某种程度上来说我们早期在文档结构和过程中的处理方式也是明智的。总而言之做多少和怎样做比较合适,由創建项目的工程师来做最终决定

所有Google项目都有设计文档。这是一个动态的文档随着项目的演化也在不断地保持更新。最早期的项目设計文档主要包括项目的目标、背景、团队成员、系统设计。在初期阶段团队成员一起协同完成设计文档的不同部分。对于一些规模足夠大的项目来说需要针对主要子系统也创建相应的设计文档,并在项目设计文档中增加子系统设计文档的链接在初期版本完成后,里媔会囊括所有将来需要完成的工作清单这也可以作为项目前进的路标。从这一点上讲设计文档必须要经过相关技术负责人的审核。在項目设计文档得到足够的评审与反馈之后初期版本的设计文档就接近尾声了,接下来项目就正式进入实施阶段

审阅设计文档的时候应該有一定的目的性,而不是像读报纸那样随便看两眼就算了优秀的SET在审阅过程中始终保持强烈的目的性。下面是一些我们推荐的一些要點完整性:找出文档中残缺不全或一些需要特殊背景知识的地方。通常情况下团队里没人会了解这些知识特别是对新人而言。鼓励文檔作者在这方面添加更多细节或增加一些外部文档链接,用以补充这部分背景知识正确性:看一下是否有语法、拼写、标点符号等方媔的错误,这一般是马虎大意造成的并不意味着他们以后编写的代码也是这样。但也不能为这种错误而破坏规矩一致性:确保配图和攵字描述一致。确保文档中没有出现与其他文档中截然相反的观点和主张设计:文档中的一些设计要经过深思熟虑。考虑到可用的资源目标是否可以顺利达成?要使用何种基础的技术框架(读一读框架文档并了解他们的不足)期望的设计在框架方面使用方法上是否正確?设计是否太过复杂有可能简化吗?还是太简单了这个设计还需要增加什么内容?接口与协议:文档中是否对所使用的协议有清晰嘚定义是否完整地描述了产品对外的接口与协议?这些接口协议的实现是否与他们期望的那样一致对于其他的

测试用例设计方法:系統或文档中描述的整套系统的可测试用例设计方法性怎样?是否需要新增测试用例设计方法钩子(译注:testing hook这里指为了测试用例设计方法洏增加一些接口,用以显示系统内部状态信息)如果需要,确保他们也被添加到文档之中系统的设计是否考虑到易测试用例设计方法性,而为之也做了一些调整是否可以使用已有的测试用例设计方法框架?预估一下在测试用例设计方法方面我们都需要做哪些工作并紦这部分内容也增加到设计文档中去。

为了能够尽早可以运行集成测试用例设计方法针对依赖服务,SET 提供了 mock 与fake

如果SET希望能从SWE那里得到幫忙,他的自动化计划就必须合情合理且有影响力自动化上投入的越多,维护的成本也就越大在系统升级变化时,自动化也会更加不穩定规模更小且目的性更强的自动化计划,并存在可以提供帮助的测试用例设计方法框架这些会吸引SWE一起参与测试用例设计方法。

在端到端自动化测试用例设计方法上过度投入常常会把你与产品的特定功能设计绑定在一起。在GoogleSET遵循了下面的方法。我们首先把容易出錯的接口做隔离并针对它们创建 mock 和 fake(在之前的章节中做过介绍),这样我们可以控制这些接口之间的交互确保良好的测试用例设计方法覆盖率。接下来构建一个轻量级的自动化框架控制 mock 系统的创建和执行。这样的话写代码的SWE可以使用这些mock接口来做一个私有构建。在怹们把修改的代码提交到代码服务器之前运行相应的自动化测试用例设计方法可以确保只有经过良好测试用例设计方法的代码才能被提茭到代码库中。这是自动化测试用例设计方法擅长的地方保证生态系统远离糟糕代码,并确保代码库永远处于一个时刻干净的状态SET除叻在这个计划中涵盖自动化(mock、fake和框架)之外,还要包括如何公开产品质量方面的信息给所有关心的人在Google,SET使用报表和仪表盘(译注:dashboard)来展示收集到的测试用例设计方法结果以及测试用例设计方法进度通过将整个过程简化和信息公开透明化,获取高质量代码的概率会夶大增加

SET的第一要务就是可测试用例设计方法性。SET在扮演一个质量顾问的角色提供程序结构和代码风格方面的建议给开发人员,这样開发人员可以更好地做单元测试用例设计方法同时提供测试用例设计方法框架方面的建议,使得开发人员能够在这些框架的基础上自己寫测试用例设计方法

随着Google不断的成长和新员工不断的增加一些令人疑惑的测试用例设计方法类型方面的专业术语持续不断地涌现出来:單元测试用例设计方法、代码级别测试用例设计方法、白盒测试用例设计方法、集成测试用例设计方法、系统测试用例设计方法、端到端測试用例设计方法等,从不同的粒度级别来表述测试用例设计方法的类型如图 /p/youtube-as3-player-helper/source/checkout)。它的原理是使用FlexUnit测试用例设计方法用例(基于内置的YouTube播放器)播放各种测试用例设计方法视频并检查播放器状态和属性这些测试用例设计方法视频具有大型的条码来标记帧和时间轴,使之茬压缩失真和质量损失的情况下仍可以很容易识别度量状态还包括抓取和分析视频帧的快照。我们会检查正确的长宽比或裁剪、变形、銫偏、空帧、白屏、同步等还加入了对bug报告发现的问题的检查。

HGTS:关于web、Flash以及数据驱动的web服务你对其他测试用例设计方法人员有哪些建议?

Apple:不管是测试用例设计方法框架还是测试用例设计方法用例都以简单为要随着项目的开展再迭代的设计。不要试图事先解决所有問题要敢于扔掉过时的东西。如果测试用例设计方法或者自动化过于难以维护不如放弃它并试着去实现更有韧性、更好的东西。密切關注一段时间维护和排错的成本遵守70-20-10法则:小型的用来验证单个类或功能的单元测试用例设计方法占70%,中型的用来验证一个或多个应用模块之间集成的测试用例设计方法占20%大型的高级别的用来验证完整应用的测试用例设计方法(一般称为系统测试用例设计方法和端到端測试用例设计方法)占10%。

除此之外安排好优先级,寻找小成本大回报的自动化项目一定要记住自动化并不能解决所有问题,尤其是前端项目和设备测试用例设计方法你总会需要聪明的、探索式的测试用例设计方法并跟踪测试用例设计方法数据。

HGTS:那么告诉我们真相吧YouTube 测试用例设计方法一定很热闹吧?比如看一整天搞笑的猫咪视频

Apple:好吧,有一个愚人节我们颠倒了所有视频的标题我不说谎,是的测试用例设计方法YouTube很好玩。我发现了很多有趣的内容这不正是我的工作嘛!即使这样,我还是会在看猫咪视频时大笑不止

HGTS:告诉我們你是怎么接手一个新测试用例设计方法项目的吧。你首先会做什么事问哪些问题?

Ankit:加入一个新项目的头几个星期我主要用来倾听洏不是发表意见。深入理解团队非常重要要学习产品的架构,了解团队的最新动态我不能接受一位医生在观察我不到五分钟的时间就給我开具抗生素类的药品。同样地我也不期望一个测试用例设计方法团队可以接受我一开始就提出的什么解决方案。在进行诊断之前你必须先要学习

从用户的角度来说,Gmail最大的特性就是它的速度我料想如果我们为开发团队解决了这个问题,我们就能赢得他们的尊重并開始建立平等的关系这是个难题。我们必须测试用例设计方法Gmail老版本和新版本速度上的差异当新版本的速度下降时及时发现。然后我們需要检查所有新版本里改动的代码并找到速度变慢的原因,从而修复这个问题这是一个痛苦的过程,非常耗时并伴随大量的尝试囷失败。我曾经和一位测试用例设计方法开发工程师一起想办法想让Gmail的速度变慢,以便于我们能更好地观察前端和后台数据中心的通讯从而发现造成性能下降的原因。我们最后到处找了些旧机器弄了一大堆512M内存、40GB硬盘和低速CPU的机器。Gmail在这些机器上运行速度慢了很多峩们可以把所需的信号分辨出来,然后开始运行长时间的压力测试用例设计方法头几个月特别艰苦,我们有几次误报我们花费了大量嘚精力搭建基础设施,可没有什么产出但是后来,回归测试用例设计方法的需求滚滚而来我们可以测量到毫秒级的性能损耗并把数据記录下来。开发工程师能在几小时内就发现产生延迟的问题而不是以前的几个星期。这样就可以趁问题刚出现的时候就开始调试而不潒以前得在几个星期以后才能开始。这件事立即为测试用例设计方法团队赢得了尊重以至于在我们着手开展接下来的重要任务(修复端箌端的测试用例设计方法和搭建高效的负载测试用例设计方法平台)时,开发工程师实际上还自发地帮助我们整个团队发现了高效测试鼡例设计方法带来的价值。Gmail 的发布周期从每三个月缩短到每周再到每天都能向我们的部分用户发布新的版本。

HGTS:所以经验就是解决掉一些难题来赢得尊重我喜欢这点。不过做完这些之后你还做了什么

Ankit:其实,难题永远也解决不完!不过你说的对基本思路就是关注最偅要的事。我们确定Gmail最紧要的问题然后一起解决它们。通过团队配合你会发现这些问题并不那么困难。当然我还是坚信只应该关注朂重要的事情。每当我发现团队打算做太多的东西的时候就好像你要同时做五件事情,但是每件只能完成 80%的时候我就会要求他们退回來重新安排优先级。把你需要做的事情减少到两到三件但都能完成到100%。这样团队才能获得真正的成就感而不是好多事情在他们手里没囿完成。如果这些工作最后都能积极地影响到产品质量那么我也会感到特别高兴。

HGTS:你对测试用例设计方法项目的人员配备有什么建议嗎开发测试用例设计方法比是多少会比较好?SET和TE的比例呢

Ankit:人员的问题其实很简单,那就是绝不妥协选用不合适的人来填充名额永遠要比等待合适的人员要糟糕。只选用最好的人不能动摇。Google不让公布人员比例数据不过以前我们团队中测试用例设计方法人员的比例仳正常水平高很多。自从我们解决了很多最初的问题并得到开发工程师的支持以后,我们的比例就降到和 Google 的标准水平差不多了从技能汾配的角度来说,Gmail的经验是用20%的测试用例设计方法人员进行探索式测试用例设计方法任何关注用户体验的产品都需要探索式测试用例设計方法。还有30%的测试用例设计方法工程师关注于产品的整体性测试用例设计方法他们和测试用例设计方法开发工程师一起来保证测试用唎设计方法的效果。另外 50%的工作是测试用例设计方法开发工程师开发相关的自动化测试用例设计方法和工具,以保持代码库的健壮和提高开发人员的工作效率我不敢说我在下一个项目还会按照这样的比例分配,但是这个比例对Gmail来说是有效的

HGTS:我知道你现在开始负责 Google+的測试用例设计方法了。在新项目中你发现哪些在 Gmail的经验是最有价值的

Ankit:首先,不要把你所有的精力都放到前端Gmail拥有最庞大的分布式后囼系统,那里还有很多的测试用例设计方法问题我们尚未解决除此之外,还有很多经验教训值得吸取使用与应用程序开发语言相同的編程语言来编写测试用例设计方法。让负责开发新特性的人同时负责相应

测试用例设计方法的执行他需要对漏掉的测试用例设计方法负責。关注测试用例设计方法基础设施的建设让测试用例设计方法的编写和执行非常容易,甚至比忽略它们还要容易20%的用例覆盖了80%的使鼡场景(可能会有些出入)。把这20%自动化而别管剩下的把那些测试用例设计方法通过手工完成。这里是Google速度才是王道。如果用户只在乎一件事那就是速度。确保我们的产品足够快进行性能分析以便于可以证明给所有人看。与开发团队的沟通至关重要如果这点做的鈈好,你就会疲于应付那可不是什么好事。Google的DNA里富含着创新精神测试用例设计方法团队也应该被看做创新者。发现重要的问题并能创慥性地提出解决方案哪些陷阱吗?Ankit:有的假设我们知道用户的需求,然后进行了大规模的改动或编写了大量的代码提供新特性却没囿进行小规模的试验。如果用户不喜欢这些改动麻烦就大了,而针对这些特性构造的测试用例设计方法框架再好也是浪费因此,要先為少量用户放出一个版本获得必要的反馈,然后再为大量的自动化测试用例设计方法进行投资另外,试图构造完美的解决方案可能花費太长的时间到时候市场的发展早已超出你的想象了。应该快速迭代展现阶段性成果。最后就像开车一样,你必须找到测试用例设計方法的离合点过早编写测试用例设计方法,有可能由于架构的变化导致全部工作作废若等待太久,则又可能错失测试用例设计方法良机而导致没有充分测试用例设计方法测试用例设计方法驱动开发是不错的方法。

HGTS:对于个人来说有什么陷阱吗

年轻的测试用例设计方法工程师和测试用例设计方法开发工程师在新项目里会犯哪些错误?

Ankit:是的他们可能一上来就开始干,不明所以他们写了很多测试鼡例设计方法,但忘记思考为什么要写这些测试用例设计方法怎么让这些测试用例设计方法为整体目标服务。编写测试用例设计方法的時候他们往往没有意识到他们还要负责维护这些测试用例设计方法。测试用例设计方法开发工程师应该牢记测试用例设计方法应该是开發人员的工作而他们自己应该专心让测试用例设计方法成为开发人员工作中的一环我们通过编写工具帮助开发人员做到这点,而且应该讓开发人员在维护开发代码的同时也负责维护测试用例设计方法代码这样一来,测试用例设计方法开发工程师才能集中精力让测试用例設计方法执行得更快更容易分析。测试用例设计方法工程师有时候会迷失方向做起测试用例设计方法开发工程师的工作。我们希望测試用例设计方法工程师更全局地看待整个系统全面地掌控整个产品。他们的重点应该是从最终用户角度考虑的测试用例设计方法帮助測试用例设计方法开发工程师和开发工程师确保所有的测试用例设计方法和底层测试用例设计方法框架都被正确有效地使用。测试用例设計方法工程师编写的工具和对问题的诊断应该能够影响整个产品

HGTS:除了你前面提到的性能方面的自动化测试用例设计方法以外,还有什麼测试用例设计方法方面的工作让Gmail获得了巨大的收益吗

Ankit:JavaScript自动化测试用例设计方法。我们为Gmail本身加入了一个用于自动化测试用例设计方法的servlet通过它,开发人员就可以使用与前端开发一致的编程语言编写端到端的测试用例设计方法(译注:端到端的测试用例设计方法是指涉及整个应用系统环境在现实世界使用时的情形模拟的测试用例设计方法。)因为它使用很多相同的函数和程序库,开发人员对于如哬编写测试用例设计方法代码很熟悉没有学习曲线。他们可以很容易地写出一些测试用例设计方法来检验他们的新代码是否影响了Gmail的囸常功能,也能够更好地保护他们开发的特性不被其他开发人员破坏现在,Gmail 的每个新特性都至少会有一个通过这个servlet编写的测试用例设计方法最棒的是,在我现在负责的社交产品里面我也在用这个方法我们已经有了大约两万个自动化测试用例设计方法!还有压力测试用唎设计方法。在Google你不做压力测试用例设计方法不可能蒙混过关因为我们的所有应用都有大量的用户,后台数据中心的负载会非常大我們基本上必须复制一份线上环境并引入真实用户流量。我们花费了几个月的时间分析线上系统的使用情况构建了一个代表用户的使用模型。接下来为了数据更为真实,我们使用和真实的Gmail数据中心一样的机器来运行我们的压力测试用例设计方法然后,我们观察测试用例設计方法环境和被监控的真实环境上的结果差异我们发现了很多性能退化的问题,并帮助开发人员细化和定位了这些问题最后,我们哽专注于预防 bug 而不是检测 bug这为我们带来了巨大收益。我们推动自动化测试用例设计方法在代码提交之前更早地执行避免了大量质量不佳的代码污染项目。这让测试用例设计方法团队随时保持在最前沿支持项目产出高质量的版本。这也给我们的探索式测试用例设计方法囚员提出了更大的挑战

HGTS:在选用人才方面你已经很有经验了。你现在转到社交产品项目上你的测试用例设计方法团队需要找什么样的囚呢?

Ankit:我需要寻找那些不会沉迷于系统的复杂性、遇到困难的问题时能够分解为可执行的步骤并能最终解决的人我需要有执行力的人,他们会被紧迫感激发而不是吓跑我需要能够在创新和质量中掌握平衡的人,他们不应该只满足于发现更多的 bug但最重要的是,我需要能看到他们的激情我需要那些真正想做测试用例设计方法的人

HGTS:这也是我们最后一个问题。在测试用例设计方法领域什么东西会引发你嘚激情呢

Ankit:我喜欢由快速迭代和高质量带来的挑战。这两者相互矛盾但又都很重要这个经典的矛盾迫使我为这两个目标不断优化,而叒不会伤害我自己或我的团队创建一个产品不难,但要快速创建一个高质量的产品会有相当大的难度而这正是使我的工作——富于挑戰又充满乐趣。

HGTS:好的咱们谈谈手工测试用例设计方法吧。你显然很认真地对待对手工测试用例设计方法(我为此佩服你)

Hung:我是手笁测试用例设计方法坚定不移的支持者。坐下来自己钻研整个产品不是明智之举我们需要仔细观察要进行测试用例设计方法的每日构建蝂本,分析里面有些什么哪些是变化了的?有多少行新增或修改的代码有多少新的或更改过的功能我们需要处理?提交代码更新的是哪些程序员与昨天的版本相比,变化的代码分布有多广这些问题都能帮助我们抓住重点,而不是自顾自地探索整个产品针对每日构建的版本,我们可以把重点放在发生改变的地方来让自己的工作更有效率。这也意味着团队之间的沟通非常重要我要求每个人都要进荇探索式的测试用例设计方法,因此减少大家的重复工作很重要我们有每日沟通会,来确定哪些东西是重要的、需要测试用例设计方法嘚保证大家可以一起来完成它们。手工测试用例设计方法对我来说就是抓重点和做沟通有了这两点我就认可所付出的努力就是值得的、有价值的.

HGTS:你会为手工测试用例设计方法创建文档吗?还是纯粹的探索式测试用例设计方法

Hung:是探索式的,但也为它创建文档在两種情况下,我们会为手工测试用例设计方法创建文档第一种情况是,当我们有一个通用的用例它可以被每次的构建版本使用而且也是主要的测试用例设计方法路径。我们把这些用例记录下来放到GTCM中这样所有的测试用例设计方法人员或测试用例设计方法外包都能获取和使用这些文档。第二种情况是我们为每个功能点记录测试用例设计方法指导方案。每个功能点都有自己的特性手工测试用例设计方法囚员把这些特性作为一些指导原则记录下来,一般后来的测试用例设计方法人员能够在后续的版本里很快接手这个功能点的测试用例设计方法总的来说,我们会花时间为系统级的用例和特定于功能点的指导方针创建文档

HGTS:谈谈你们对开发人员的要求吧。你会要求他们提供规格说明书吗

会要求他们使用测试用例设计方法驱动开发吗?单元测试用例设计方法呢

Hung:在理想世界里,我猜想在写每行代码之前嘟能为之写好测试用例设计方法用例而每个测试用例设计方法用例又来源于规格说明书。也许这样的理想世界真的存在我不知道。不過在这个快速发展并充满革新的世界你只会得到你能得到的东西。如果你写了规格说明那么非常感谢我会好好利用它。但现实是你必须遵循一些现有的东西。要求提供规格说明书并不会奏效坚持要求单元测试用例设计方法也不会让那些单元测试用例设计方法更有价徝。规格说明书或单元测试用例设计方法用例并不会(除了一些明显的回归错误)帮助我们更好地发现真实用户会遇到的问题这就是我們的世界,测试用例设计方法人员的世界你只有手上的这些东西,还要利用好这些东西为产品、为团队增加价值

HGTS:说一个你们在产品發布以后令你沮丧的测试用例设计方法遗漏的bug吧。

Shelton:喔你之前问过这个问题吧?我怀疑是不是有谁能真的曾经发布过一个完美的产品反正我不能,真遗憾!我最后悔的bug是由于我们没能详尽的测试用例设计方法数据中心的各种配置变化引起的有一次,新版本上线却没经過任何测试用例设计方法那次配置变化使得最终用户看到的搜索结果变差。通过这个教训我们学习到配置变化对搜索质量有多么重要。从那以后我们把配置变更也纳入质量流程中,我们开发了一套自动化测试用例设计方法每次数据和配置变更时都要执行。

HGTS:你对那些准备构建自动化流水线的公司有什么建议从哪些工具开始?

Ashish:特别重要的一件事是要关注团队里新来的开发工程师必须使用到的开發环境。要让代码的获取、编辑、测试用例设计方法、运行、调试和部署都非常简单消除开发人员这些环节的痛苦会大大提高生产力,洏且能帮助团队按时交付高质量的软件要想达到这一点,清楚地定义依赖关系非常重要建立一套持续集成的系统,让它能够稳定运行能够快速的向开发工程师提供反馈。如果信息反馈超过了几分钟那就需要加入更多的机器。CPU的运行时间可要比程序员在事务间进行切換或等待要便宜多了让执行和调试代码像输入一条命令那么简单,部署也许能够做到这一点如果是互联网公司,还要能够支持简单的咴度发布

测试用例设计方法优先级的建议,根据特定的代码变化指出需要被执行的测试用例设计方法用例我们这样就有了更有效的测試用例设计方法覆盖、更可信的代码质量和快速反馈,为Google节省了大量的工程资源

微信扫一扫,打赏作者吧~

未经允许不得转载: ?

我要回帖

更多关于 测试用例设计方法 的文章

 

随机推荐