笔者混迹于测试行业挺长一段时间了,一直想写一篇关于软件测试人员危机感的文章,但苦于工作原因迟迟未下笔。最近终于有了些闲余时间,遂决定把自己的心路历程及所感所想记录下来,与各位同行共勉。
作为一名软件测试从业者,如果以下几点能引发您的共鸣,那么你就应该在读完这篇文章的那一刻起,树立起强烈的危机意识。
一、长期处于舒适区,不愿突破瓶颈。
美国心理学家Noel Tichy(诺尔·迪奇)曾提出一个引人深思的行为改变理论,即把个人行为改变等级分为舒适区、学习区、恐慌区3大区,事实上,这个理论适用于任何行业的工作者。
舒适区:即自己擅长、干起来没那么费劲的事情,心里感到舒适。
学习区:对自己来说有一定挑战的事,需要整合一些自己能力范围外的资源。
恐慌区:远远超出自己的能力范围,感到恐惧及焦虑,可能崩溃以致放弃学习。
走出舒适区并不是一件容易的事,即使处于学习区,大多数人也很难拥有十年如一日的求知欲。学习是一个漫长积累的过程,只有长期让自己处于学习区,才能不断扩大自己的舒适区,并把一部分恐慌区也变为相应的学习区,才能不断提升自己的核心竞争力,最后成为“牛逼”的人物。
就软件测试行业而言,功能测试员的舒适区是更多是业务方面的黑盒测试、案例编写、提交bug等,学习区就是灰盒测试或业务深广度的积累,恐慌区可能就是白盒测试、测试环境搭建了。同理,对于测试开发角色,舒适区是常用框架及技术的运用,学习区可能更多是偏向于业务的理解或技术的深度探究。仔细想想,如果功能测试人员及测试开发人员每天的工作都是游离于舒适区,短期内可能不会有影响,但从长远来看,也很难有好的发展。
当然,笔者并没有完全否定舒适区,任何一个区间状态都有其价值,我们潜意识需要一个有较少焦虑和压力的空间,这样当离开它的时候我们才能有所获益。
二、身处稳定安逸的工作环境,却长时间都在原地踏步。
其实第一点的行为改变理论也可以很好的阐述以上话题,但作者还是想跟单列出来跟同行们聊聊。
说到稳定安逸,曾身处大型国有企业多年的笔者感触尤为深刻。不可否认大国企的许多优势是中小企业望尘莫及的,以下仅列出笔者的几点愚见。
1、完善的管理制度和研发流程。
2、完善的员工培训体系。
3、强大的产品支撑,行业标杆。
4、不错的福利。时不时发点油盐、生活用品、服装费等。
5、员工归宿感更强(可能也是因为第3点的福利吧,哈哈)。
既然咱们要聊危机感,那就必须谈谈大国企对个人(测试员)发展所带来的限制,以笔者老东家为例,有共鸣的同行请对号入座。
1、测试工具自主研发,办公软件设置黑白名单。如果你只是一名使用工具进行测试的美女子或俊男子,工作几年后你会发现,行业盛行的Jmeter、postman、selenium、robot framework、appium等工具,你一个也不会。这里可能有人会提出质疑了,要怪也只能怪自己没有去学,但笔者想说的是,身处稳定的大国企,如果没想着跳槽,真没几个人会去学这些东西,学了也用不上,唯一能安慰自己的是去学习各类工具的理念,然后再自主研发工具在工作中推广,但是我们都知道研发工具对许多测试人员来说就属于恐慌区了。
2、IBM大型主机。你听过cobol语言么?你用过clearcase版本管理工具么?我想大部分童鞋看到以上两个词汇都赶紧去百度了。但是如果说起git、svn等版本管理工具,估计大家一点都不陌生。换个角度想想,当别人问你git的基本使用时,你却跟他谈clearcase,是不是有点不合常理。当你在侃侃而谈cobol时,面试官却一脸茫然。毫无疑问,以上的技能能为你加分,但也限制了你择业的范围。
3、重复劳动。人在某个岗位待上一段时间,总会发现每天的工作只不过是遵循着与昨日相同的惯例,如果未能突破瓶颈,必然只能原地踏步。以一名功能测试人员为例,每一阶段的工作必定是需求分析—案例编写—案例评审—测试—bug提交—测试报告,日复一日,变化的是需求,不变的是工作方式。笔者也接触过不少测试的童鞋,有些人的重复劳动,能成为某一业务线的测试骨干,因为其思考比常人更有深度和广度。而有些人却只能游离于表面,因为他们只是应付完成工作而已,并不习惯深入思考和总结,应树立起危机感的正是这类人。
3、资产保密。俗话有说“生不带来,死不带去”,但在大型国企,比这个更惨一些,那就是“在职带来的,离职也带不走”,毕竟大型国企异常注重资产的保密性,比如局域网办公、安全软件监控、外发邮件需特批、U盘拷贝资料监控、资料打印监控等等。更让人吐槽的是,你工作几年辛辛苦苦积累的资料,离职时发现根本带不走。
“温水煮青蛙”的道理大家都懂,身处稳定安逸的工作环境,大部分人会逐渐丧失上进心,毕竟等到成了家、有了孩子、上了年纪后,还有多少人有勇气去适应另一个环境呢? 笔者始终觉得作为一名测试人员,更应该多想想,你工作8年、10年,相比工作3年、5年的同行优势在哪?
三、未能找准自我定位。
在踏入软件测试行业的前几年,不少测试人员会陷入迷茫期,主要是对职业发展方向不清晰。网上很多谈软件测试人员职业发展方向及核心竞争力的文章,也确实能为各位测试同行提供不错的建议。作为一名软件测试从业者,笔者也曾迷茫过,准确的说直至2016年才真正找准自我定位,在此笔者就“自我定位”这个话题谈谈自己的一些看法。
笔者曾接触不少测试同行,偶尔会听到测试人员抱怨没有得到应有的认可,主要体现在以下几个方面:
1、被人觉得测试工作没有技术含量,相比开发,测试更像是一门体力活。
2、测试人员缺乏相关的技术背景,慢慢形成了有事找开发的工作模式。
3、大部分测试人员只专注于工作的完成度,缺乏更深度的思考和总结,比如如何提高测试效率、如何对业务进行连贯性总结等。
以上三点,提到了两个关键词,“技术”和“业务”。结合《google软件测试之道》及笔者的看法,把测试人员的定位区分如下。
功能测试:理论上说,该定位的测试人员应该是对业务需求理解最透彻的群体,专注于用户角度的测试,组织整体质量实践,分析测试运行结果,驱动测试执行。当然除了业务技能过硬,常用的测试工具也是必须掌握的。
功能测试人员下一阶段的的发展轨迹一般是测试经理岗位,因为很多公司的测试经理并不要求具备很强的技术能力,测试经理更看重的是协调沟通、统筹全局、目标管理、执行管理等能力。
性能测试:相比功能测试人员,性能测试人员对业务的理解相对没那么深入,其更偏向于技术的运用及数据分析,目的是找出系统瓶颈。性能测试是一个缺口比较大的岗位,最大的原因是由于对测试人员要求较高,市面上的优秀人才相对较少。我们不妨看看拉勾、猎聘、boss直聘等招聘网站对性能测试人员的常见要求。
1、对经验尤为看重,一般要求3年以上的性能测试经验。
2、熟练掌握主流的性能测试工具,Jmeter、LR等。
3、掌握操作系统、数据库、网络知识等。
4、能够独立规划和组织性能测试,搭建性能测试环境;能够设计性能测试场景,分析性能问题,定位系统瓶颈。
结合自身的工作经历及调研,笔者整理了性能测试需具备的技能,欢迎各位同行拍砖。
安全测试:提到这个岗位,估计很多童鞋也只是游离于“安全”两字的字面理解。但笔者想说的是,安全测试是异常复杂的,一个专业的安全测试专家在某种程度上来说就是一个全栈工程师,需具备以下专业素养(部分内容引用《为什么不推荐去做安全测试工程师?》《致测试同仁们:让我们一起做安全测试吧》)。
1、要使用别具一格的视角来审视需要测试的软件。
2、要改变测试中模拟的对象。
3、使用专用的测试工具。
4、了解安全漏洞的原理。
5、了解安全漏洞的测试方法及防范知识。
6、掌握上图中“性能测试主要技能”的相关知识。
笔者毕竟不是从事安全测试岗位的工作,以上理解也可能存在偏差,欢迎相关童鞋指正。
测试开发:工作重心在可测试性和通用测试基础框架上,编写单元测试框架和自动化测试框架,关注质量的提升和测试覆盖率,持续集成实施等。除了具备业务技能,不同岗位对技术要求也不一样。
测试架构师:可以说该岗位属于测试人员职业发展金字塔的顶端了,这也是笔者努力的方向。关于测试架构师所需具备的专业素养,有兴趣的童鞋可以拜读一下《一个测试架构师工作心得》这篇文章。总而言之,万丈高楼平地起,作为一名软件测试人员,只有不断的学习、积累,才能迈向金字塔顶端。
另外,除了以上描述的发展定位,笔者经过多年的思索,感悟出了一套测试人员价值理论,越往上,价值越大,当然收入也会越高^_^,希望能对各位同行的发展有所帮助。
1、基本技能,编写案例,发现bug等。每一个软件测试人员必须具备的,毋庸置疑。
2、识别盲点,发现深层次的问题。这一层次更看重的是个人经验及思维方式,工作1年和工作5年的测试员对同一需求理解的深度和广度肯定有差距。
3、发现痛点,提升团队效率。该层次更多是能站在团队角度思考,通过分析团队痛点,整合资源来改善团队工作模式,提升测试效率。笔者在文章《如何使用Jmeter提高接口测试效率》中提到的工作方法正是从提升团队效率角度出发。
4、建立个人品牌,授人予渔,愚教于乐。该层次的人在某个领域已经具备了比较深度的知识体系,其通过博客、云课堂、线下培训等渠道面向大众传授知识,并挣取一定的费用,从而实现职业与财富自由。
5、创新,整合资源,改善行业工作的方式。单凭个人的能力很难达到该层次,所以往往是指某些公司或组织。比如现在盛行的各类云测平台、DevOps等。
四、广而不精,未能形成知识体系。
很多测试人员喜欢在简历上写着精通各类测试工具,比如Jmeter、selenium、robot framework等,结果面试的时候,自己却只能却只能游离于工具\框架的基本使用,并没有深入去了解工具的精髓,这就是我们所讲的广而不精。
一切工具的运用说到底是为了提高效率和保证质量,测试行业很推崇自动化测试,下面笔者就以jmeter为例,来阐述如何建立知识体系。
在开展这个话题前,我们先来简单说说有名的GROW模型,笔者的知识体系建立也是以该模型为基础。
G(Goal setting):目标。
R(Reality Check):现状分析。
O(Options):解决方案。
W(Way Forward):行动计划。
16年跳槽到新公司后,本人确定了一个目标,那就是在测试组建立一体化测试管理体系(自动化测试+缺陷管理+案例管理集成)。通过对测试组工作内容(后台接口测试)及工作方式(传统手工测试)的分析,在对比postman、jmeter、soupui等接口测试工具的优劣势后,最终敲定使用jmeter作为测试组的自动化测试工具,主要原因是Jmeter支持外部jar包的方法调用,而笔者刚好有一定的java基础。依赖于jmeter提供的csv data config功能,我们采用数据驱动测试的模式,但是很快就碰到难题了,那就是jmeter的察看结果树对每个请求都是单独展现的,如果同时执行上百条测试案例,检查结果对测试人员来说无疑是个噩梦,于是,笔者致力于解决该问题,并把Jmter+jira+Testlink进行集成,最终我们形成了以下的测试体系。
一体化测试管理体系的建立仅是笔者推广半自动化测试的开始,结合docker、moutebank等技术,笔者搭建了持续集成环境,进一步提升了回归测试的效率,同时高效地进行质量监控。
以上笔者的经历更像一张横向的知识网,因为其中用到jenkins、docker、moutebank、java编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。
五、立足当下,却未能放眼未来。
当前,区块链、大数据、人工智能等领域的发展日趋成熟,可以预见这些领域的测试需求在未来也是异常巨大,作为测试的您是否已经做好了准备?另外,ThoughtWorks 2015-2017发布的技术雷达分析了软件行业测试发展新趋势,笔者特摘录一部分与各位同行共勉。
结语
文章的最后,笔者想谈谈自己所理解的优秀软件测试员应具备的素养,欢迎各位同行补充。