作者:高翔,花名季哥
原文地址:http://blog.sina.com.cn/s/blog_6cf812be0102y1kt.html
很久没写文章了,之前测试十年,也是在自己有变化的时候 ,强迫自己写了一篇文章,说了自己的困惑和痛苦和思考,也得到一些共鸣,阅读破千,大家参考链接看看《测试十年 - 我难以逾越的困惑和痛苦和思考》。现在测试十二年了,相当于一个轮回,也有一些新的痛苦和感悟,趁还在这个圈子里面,纪念一下,当然了,YY 比较多,干货也不多,反正纪念下,或许我是真的不太可能写测试 15 年的文章了。大家有任何问题,欢迎讨论,欢迎吐槽。
其实写这篇文章之前,我一直是犹豫的,感觉写不出啥花样来,一是因为水平有限,另外就是因为测试这个圈子里面说不出啥新花样出来,还是老生常谈的那些,而且不同水平的读者想看的内容也不一样,很难写的深入人心,反正真的差点放弃了;但是我内心是渴望的,想说些那些不一样的,了解我的人都知道,我是不甘平庸的,是有自己的思考和底线的,很多时候可能被现实打败,但是我还会站起来,继续战斗。
我是一个很怀旧的人,简单说说这 2 年干啥了,这两年做天猫新零售的业务,这是一个新业务,大家应该理解新业务的背后的意义吧,我这里就不赘述了,团队成员都非常给力,拿到了不错的结果;其实大家都知道,测试在一个业务的发展过程中,自己能起到了哪些作用,不管这个业务是发展了多长时间,我们都是会经过三步走,很多时候我们就是在平衡这三步的比例和深度。
技术驱动业务:你是开玩笑吧,是的,我没有开玩笑,对于测试来说,驱动业务简直是难如登天,开发是天生的,测试是后天养的;天猫智慧门店在线下业务的拓展过程中,我们对每一个商家、每一个线下门店都会有质量的责任,我们经历过双 11,经历了痛点。是的,这两年来,对于一个新业务来说,我们在这么多、这么变、这么复杂的需求和迭代项目中,我们再次拼劲了全力,我们在商家业务配置检查、商家 ISV 验收、线下门店预演等一系列的结果上来驱动天猫新零售商家和门店的规模化发展,我觉得我们是技术驱动业务了,为业务高速发展提供了保护伞,都说明了我们真的不错,是的,这好像也可能是我们的基本工作,有了更多进步,还不错的,不过好像技术含量比较低,扩展性一般,其实也就那样吧。
好吧,刚刚都是自夸,看不下去了吧;其实我想说的是,这两年,我们做的还不错,各个层面都有结果,特别是第三个层面的,有的时候是可遇不可求的,总体上团队能力和技术都有提升,但是在某些结果上的确不让人满意,我们的一些测试大佬们既要、也要、还要、反正什么都要,你要是哪个没有,不好意思,只能这样了。说实话,我有时候也能理解他们,真的理解。
这个话题有点大,其实真的不敢写,但是无知者无畏,虽然在阿里干测试 9 年多了,比起” 阿里测试都在关注什么”,我觉得我更敢写这个,其实也有点心虚的。这些年,我一直专注在我们自己的业务和系统、测试问题,这些细节非常多,我们的目标和规划都围绕这个来,非常接地气;是的,说这个就说明我对国内测试在发生什么,在追求什么,其实对细节了解不多,但是在微博、在大会的主题、在相关的 ppt 和群讨论中,还是能感知到一些的,接下来就说说,很多理解不一定对和全面的,欢迎大家补充讨论。
在正式的说之前,大家回想我之前说的一句话,我们干测试的,很多时候就是在平衡这三步的比例和深度,在质量、效率、驱动业务上不断的调整策略和战术,根据不同的业务阶段、根据不同的目标、根据当前的大事件驱动等。
我们最怕干的是就是平衡,因为平衡的好,前途光明,平衡的不好,万丈深渊。大家都知道我们干测试的,杂活特别多,很多事情都需要投入一点,很多事情做起来很多人看来也没有亮点,那我们很多时候就是在不断的平衡一些事情,但是不管怎么样,我们的目标还是比较聚焦的,就是对应自己的业务和开发技术,以及未来的业务发展,在质量和效率上如何做的更好,成本上越来越低,解决方案也越来越有技术含量。
大家都知道,不同行业对应测试的要求是不一样的,那么测试技术和要解决的问题也是不一样的,但是有几个套路其实是差不多的,大体上分这几个方向。
基于模型的测试:这块领域很多人不太熟悉,而且在不同的行业的实践和效果是差异比较大的,但是不能否定这个方向带来的价值,在通讯、IOT、嵌入式等领域都有非常多的实践,效果也不错,我认为是测试前移比较重要的一块;但是很多人对于这块只是基本的了解,很多时候都有可能直接放弃;最后的结果,可能是我们的开发同学先开始业务建模,先开始各种模型抽象,提升开发效率,然后再到测试的模型和效率提升,很显然,我们是被动的,而且很多时候我们错过了一些风景,可能感知不到呢。
可测试性:这块话题,其实是大家聊的比较少的,因为很多方面是偏理论的,真正落到实践到项目过程中,和业务项目的技术架构、技术能力、技术人员思维都有比较大的关系;而这块对于大公司是比较看重的,特别是微软、google 级别的重视技术体现的公司,我们作为测试开发工程师的重点是从开发角度去做测试工作,会把主要精力投入在系统设计和编码阶段。开发人员关注某个功能最优实现方案,而我们测试要有整体产品的视野。所以测试在设计阶段,帮助开发人员完成代码复用和模块交互方面的设计,在设计 review 的时候,保持目的性:完整性、正确性、一致性、设计、接口与协议、测试(可测试性)。还有一个明显的,就是做这块,需要沉下心来,慢慢积累和思考,对于很多急功近利的公司来看,绩效和沉淀方面难说了,而且这块的确是我们测试的短板,接下来我觉得还是有可能会重新重视起来。
自动化测试:这个是很明显的提升测试效率的手段,这里面不同的行业的自动化测试策略和框架也可能不一样,但是的确是互联网企业发扬光大的,包括分层自动化测试实践,其效果也是非常显著的,不管是什么行业领域,都是逃不掉的;不管你是采用流量录制和回放、页面录制和回放、关键字驱动、数据驱动的自动化脚本运行,这些经验和沉淀目前也是国内的公司强烈关注的,为什么非要关注这块,说实话,这些能带来 XX 平台的沉淀,XX 平台的开发和技术品牌、XX 平台的能力透出;如果我们加上功能依赖分析、系统依赖分析、代码覆盖率等各个因素的影响,我们可以加上精准测试的方向,进一步提升自动化测试效率,这块上国内有一些公司都在沉淀和探索,也有一些不错的结果。
灰度&监控:这块话题,是测试右移的核心思路,基本上也是互联网和移动互联网企业的测试策略的标配,测试和开发一起共建,来加强灰度的落地,监控覆盖率和提升;但是测试在其中的体现到底多少,价值多少,这个就很难说了,我们的沉淀的方向到底是什么呢?我们开发有没有加上这块的监控、开发为什么没有加上这块的监控、我们测试是不是要监控开发是否加上了某块的监控、我们测试是不是要来 Review 开发是否加了某些监控、监控的方法和策略的沉淀开发和测试的关系在哪里。这也是测试自己没办法的策略,很多时候我们不怕出现线上 bug,我们就怕不能快速 fix bug;我们就怕我们的系统监控没有发现这样的线上 bug,反而让客户主动报了相关线上 bug;但是这个策略是不是唯一的,依赖它的程度到底是多少,我们测试线下需要做到什么样的程度,又是一个平衡的问题了,这块上,我们可以再思考多一点,想想测试在这里面的定位是什么,是和开发绑在一起,分享系统稳定性的结果,还是思考它对于测试体系的位置到底什么样的。
大数据测试:有两种情况,一种是大数据产品的本身的测试体系的建设,包括常态化的测试策略和大数据的数据监控策略,这里面的监控可能是测试工程师的重点产出;另外一个情况是利用大数据的手段来提升测试效率,来监控线上质量,反过来驱动线下测试覆盖率和效率。第一个应该有比较成熟的体系了;第二个也是在探索阶段,对于产品特点、体系架构有一定关联,同时配合多个手段来提升,如果加上某些机器学习、和算法、精准测试策略、可能会包装成 AI 智能化测试,解决大数据量情况下的功能测试问题。但是这方面可能不仅仅是测试这个领域,包括运维和体系化架构设计等一个闭环的打造,测试其中启到什么关键的作用,还是值得期待的。
探索式测试:4-5 年前比较火,目前基本上是冷却了一大半了,现在是邰晓梅老师一个人独立坚守着,在国内各个公司和线下活动不断的布道和实践,目前来看,国内的很多公司都有了解和参与,在测试的本身价值上,测试本身的能力建设上还是有很多的进步的,这些对于持续在测试能力上有特定思考 (包括和敏捷测试的结合) 的同学,他们的体感会非常强,但是对于一些开发技术为核心套路的可能觉得偏理论,不够技术含量,很难继续深挖,很难形成平台化效应,是的,我本人也是最近几年都没有在这方面进行学习和探索,很是愧疚和遗憾,但这就是现实。
总体上来看,国内测试技术和方向也是解决部分的问题,还有些可能是大趋势中找到自己的位置,到底有几分是自己独立思考的,有几分是在真正的研究和探索的,目前看到的不多,很多都是在围城里面走套路,大家一起走,反正现实有很多的问题需要解决。另外就是很多行业领域里面的测试技术探索,比如游戏测试领域、IOT 领域、AI 领域、区块链领域、三方生态领域等。
好了,我们的所有测试技术和方向的探索,国外基本上前几年都已经开搞了,有些领域可能领先十几年,有些大家都在同步探索阶段。我们需要更大视野去看国外测试技术和体系的发展,不仅仅是某个框架或工具的角度去看,甚至不是某个行业的测试解决方案来看。我们知道某一个技术的开始和发展,不仅仅是和企业的工程领域有关系,很多时候和学术领域有关;国外测试领域里面包括很多学派,它们分别代表了不同的测试领域的思考和沉淀,不仅仅是不同的测试类型,还包括很多测试理论上的思考,包括自动化测试学派、质量保障和规范学派、上下文驱动学派、开发测试学派等,每个学派都有自己主张的观点、方法、实践方案、工具体系等,而且每年都是有序的讨论和发展(有那种百家争鸣的感觉,在工程和学术领域同步开花结果);在这里,我们在看看一个很明显的区别点,国外的测试大会上和国内的测试大会上的 topci 就可以看到一些区别了。
这里面有一些共性的 topic 包括敏捷测试、Test in ops、性能测试、监控、安全测试、自动化测试、国际化本地化测试;但是国外的很多 topic 是强调测试本身的思考的,包括测试信息输入论、探索式测试、基于风险的测试、测试管理、测试策略和计划、某领域的测试设计方法。这里,很多人其实都看到了不同点,国内这方面的沉淀相对来说少很多,很多人都不感兴趣的,觉得都是理论的多,对我的技术没有帮助。
另外一个层面来看国外测试就是测试大师们,国内从事一线测试工作的工程师基本上 10 年以下的,10 年以上的基本上都是管理的、或者走其他路线了;持续在某个领域进行测试技术体现的研究在国内很难找到,但是也是有的(陈能技、朱老师、领测贺老师、CSATQB 周老师、阿尔卡特郑老师、顾问邰老师等等,这些老师很有可能和其他些人观点非常冲突,互相不被认可),整体上来看还是缺少很多的,大部分人对于测试生涯、测试价值、测试发展、测试方向都有一种悲观的预感。反看国外测试工作 10-20 几年的测试大师们非常多,他们在测试本身价值上进行了非常多的思考和沉淀,一点点形成自己的思考和理论,一点点去实践自己想要的测试方式和思路,感兴趣的同学可以去多看看国外的测试论坛,你肯定会看到不一样的测试理解的,好了,我也好久没看了,赶紧补课去(对绩效啥好处都没有,我真的要看?)。
我们先讨论一个热门词语 “测试开发工程师”,大家可以思考下为什么不叫"开发测试工程师"呢?大家都知道的是未来开发测试是融为一体的,很多一些外企也做到了,开发测试的融合,互相 backup,互相对产品质量和稳定性负责,其乐融融的感觉。说实话,最近几年我对外企里面测试的理解不多,这里不敢多说,怕说错了;但是国内的测试里面,大家其实都能感觉到,那就是我们更多的在关注我们是不是会写自动化测试脚本,会写 java 代码,懂很多开发技术,做过很多平台或工具等。这里面的技能重要不重要,当然重要了,但是不是我们考察一个测试开发工程师唯一的思考点呢;我们的批判性思维、我们的打破砂锅问到底的精神、我们的错误猜测的思路、我们的细心专一的用心、我们的异常逻辑判断的方法、我们的流程优化的意识等等,这些我们到底有多关心呢,不好意思,不怎么关心,因为干了这么久,干了这么多,看不到产出、说不清投入、显不出能力。
我们再分析下,我们测试开发工程师要干的事情到底哪些呢,之前就是说过了,保障产品质量和提升研发效率,这两块我们的投入的比重呢,这两块我们看结果的思路呢,这两块我们要沉淀的方向和方法的抽象呢?这些说实话,大家看到的都很少,我自己也是一样。说直白了,未来测试工程师会越来越少,质量很多时候都是开发去负责、或者其他灰度监控手段去避免,那意味着我们在质量上的投入会越来越少,在效率上投入会越来越多,其中的道理大家都应该理解的吧。
当我们第一眼要追求的是效率问题时,我们更多的关心开发技术的提升,以及开发技术在解决效率问题时的应用,因为这些价值是显而易见的,是被高度认可的;我们打着效率提升的口号,似乎也能解决质量的问题,但是扪心自问,真的能解决吗?大家知道自己产品的用户是怎么用我们的产品的吗,我们的用户遇到了哪些问题吗,每天都暴了哪些线上 bug 给你吗,其实很多时候,我们都是不敢正视这些问题的,因为我们会被彻底打败,太丢人了啦。好了,我知道了,测试不可能测试全面的,那样成本也是非常高的,我们还是快速发布第一位的。因为我们不能真正的去面对这些线上 bug,所以大家有真正的去思考线上 bug 遗漏的真正原因吗,有多少是从测试设计角度去思考的,更多是从监控、fix 效率等角度来加强和避免。
当我们去加强测试工具的开发、测试平台的建设、监控平台的建设时,我们测试开发工程师还剩下什么?我们只能做这些事情吗?难道就因为这些能拿到好的绩效、能体现你的技术能力、能快速晋升?好了,不能说太多了,这里有可能会带来吐槽。其实我不反对这些事情的价值所在,我只是想想我们在干这些事情的时候,有没有去思考测试本身的核心定位,测试本身的经验教训到底是什么?
你猜对了,前面一大堆都是废话,现在才到正题,测试的目的和初心到底是什么,我们为什么要干这件事情,是用户需要我们干,是系统需要我们干,那我们干到什么程度呢,我们到底是做测试,还是做校验,还是做验证,还是做探索;每个人心中都有自己的理解,可能不一样,没关系,有一点你肯定无法否认,不管你是谁,你肯定是某个产品的用户,你都肯定遇到这些产品的 bug,你都可能是傻笑、生气、发飙、投诉、卸载、放弃等,然后没有了,没有了。
前面也是谈了非常多了,关于测试核心工作产出上,有不得不必须要干的、有可干可不干的、有非常想去干的、有老大们逼着去干的、有大家都在干的我也想干的;在这里,我想谈谈我个人认为的我们可能忽略的一些问题,大家听到测试技术或测试方法时,第一能想到的是什么呢?如果说到测试设计方法时,你第一能想到的又是什么呢?如果说到测试架构师,你第一能想到的又是什么呢?如果说到项目测试负责人,你第一能想到的又是什么呢?
建议大家先看看《google 测试分享-SET 和 TE》我们是测试开发工程师的 title,但是我们干的什么活呢,基本上把 SET 的工作和 TE 的工作合二为一,放在一个人的身上,大家其实也看到了 SET 和 TE 的技术和要求是不一样的,我们测试团队的测试开发工程师都能很好的具备 SET 和 TE 的能力吗,我们真正的测试工作的初心到底是什么呢?我们的测试开发工程师都能在产品的测试过程中发挥这么多的作用吗?在技术日新月异的时代里面,开发都在全栈了,测试也是该全栈了,不仅仅测试类型上,在不同的领域测试上也有这样的要求,但是这里面有一个基本的基石,那就是如何更好的去测试,去想到测试什么地方,去抓到那些隐藏的 bug,去识别到那些隐藏的风险。
好了,言归正传,通用的基石有那么几块,最核心的当然是使用什么方法去测试了,知道测试哪里了,所以测试设计是一切测试活动和技术的基础及前提; 同时,我们需要考虑需求文档不足下的测试设计怎么做? 我们还需要思考测试模型该怎么建立,而且测试模型分为测试方法模型和业务测试模型,所有设计都是基于模型的,我们也知道好的测试设计能提高测试执行效率,但是我们如何有一个好的测试设计呢。我们先从大家最熟悉的黑盒测试方法来说,大家都熟悉的等价类划分、边界值分析等测试方法,很多人都说一个正常的工程师 都能在一个下午学会和理解大部分的黑盒测试方法。 对此观点,我是不敢苟同的,这就讨论到这些黑盒测试方法的深度的问题了(这个话题之前就是打架无数了,最后我输了)。
(1)学会和理解测试方法的使用步骤是很简单的,但是真正的在项目需求中应用起来可不是一朝一夕的。这就好比给你一张扑克一样,高手就能拿它杀人,一般的人能做到什么程度呢。 这个也很像有些人能发现你不能发现的 bug 一样。至于原因有很多,具体看在淘两年的 blog。
(2)谈谈我自己的感想吧,我自己在工作前两年也是认为这个黑盒测试方法一下午就可以学会的,找几个例子试着使用下,感觉自己掌握到这些黑盒测试方法,但是后来我看过很多这些测试方法的背景以及应用的注意点后。我发现自己真的是了解了一些皮毛,没有深入的了解。对于个项目需求,如何快速且完整的应用这些黑盒测试方法设计出不多不少的测试用例,这个需要的经验的积累,也就是你测试价值的核心体现。
(3)多次和其他公司的测试同学交流,发现很多同学说自己都说自己是工作 2-3 年的人,已经遇到瓶颈了,感觉测试很单调和无味。我给的建议其实很简单,那就是真正的理解和掌握所有的黑盒测试方法。怎么来验证呢,我自己就是这样:给你一个白板,你能把所有测试方法的 5W2H(What、Why、When、Where、Who、How、How Much) 都能非常清晰明了的演讲出来,记住是不需要参考 ppt 或其他资料的情况下。
就像火影里面的鸣人一样,他只会螺旋丸这个核心的攻击忍术,但是在扩展其他忍术之前,他会把这个忍术的深度发挥到机制,从而研究出威力更强的超大螺旋丸、超大玉螺旋丸、风遁螺旋丸等等。
大家再想想,这些黑盒测试方法都是 20 年前国外的测试大师们发明的了,然而 20 年后的今天我们在学习测试方法的理论时还是这些,这是为什么呢?这里面有几方面的原因,一方面我们的测试同学很多是非科班毕业的,本身技术能力和逻辑能力相对来说薄弱,这样在测试生涯过程中更加无法变幻出更多的测试方法,另一方面,我们在各个行业领域内更多的关注效率问题,更多的关注如何快速的测试,而不是如何更正确的测试,所以我们都很难沉下心来来思考改领域内的一些通用的测试方法,从而能分享和传承给所有测试同仁;说我们不愿意去做,或者说我们没有意识去做,可能是乐观了,其实这个非常有难度,这个方法的抽象和建模非常的难(之前做过一些测试模型的抽象,感兴趣的可以了解下),不是在某个领域扎根多年的测试大师们无法做到的,前提还是这个大师在这块上有更多的思考和沉淀和总结。
好了,前面说了蛮多了,大家在现实面前还是需要现实一点,随着开发测试比例的提升,测试人员会更加专注在效率上,而不是质量上,我们都有一个美好的愿望,就是我们先把问题解决了,先把效率提升了,我们就有时间好好研究如何正确的测试 SUT 了,如何创新出新的测试方法了。理想很丰满,现实很骨感,就像需求列表里面一样,都是 P0 的需求,我们都在想 P0 需求做完了,下一期我们做 P1P2 的需求,然后你会发现 P0 的需求永远做不完,同理,我们的效率和问题解决也是做不完的,那我们的重心和目标规划还是在这上面,这有错吗?没有错,对 SUT 来说、对质量和效率来说、对业务发展来说、都没错。
当然很多人会说我测试效率提升了,质量也会同步的提升,这个仔细想想还真不一定哦;前面其实也提到了,我们在平衡质量和效率上的投入,到底平衡到什么程度,我们自己也不知道,很多时候为了功利、为了自己、为了未来、为了测试行业本身,我们做的选择可能有所不同,最关键是你做出了什么选择,你是如何平衡这些的,在这个平衡中,你学到了什么,你知道了测试这个产品有什么样的坑,你的测试经验教训到底有几条,哪些是对他人是有价值的,你有没有总结和抽象出。
回答问题,在这个现实世界里面,我们工作 10 几年的测试工程师们,我们还能找回初心吗,还能静下心来思考我们真的是正确的做测试吗?真的只有这样的一条路吗?我们还能有其他的路吗,对于绝大部分测试同仁来说,我们都无法找回初心,我们只能在这现实世界里面随波逐流,当然,很有可能包括我自己。
感谢你能看到这里,看到了那么多的废话,那么从现在开始,忘记我所写的,继续写代码,继续开发测试平台,继续解决问题,你会成长的很快很多的。以上所有的观点都只是我的个人看法,很多地方说的容易被人挑战,被人骂 SB,是的,但是又有什么关系呢。
我思故我在,在此纪念测试十二年的酸甜苦辣。
下一个轮回,又是 12 年,很漫长,如果我不干测试了,我也会关注你们的。
青山不改,绿水长流。