京东10年测试工程师的经验分享,从事软件测试必看,看完能帮到你很
混迹于测试行业这么长时间了,一直想写一篇关于软件测试的经验分享的文章,但苦于工作原因迟迟未下笔。最近终于有了些闲余时间,遂决定把自己的心路历程及所感所想记录下来,与各位同行共勉。
软件测试究竟是做什么的呢?
软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
简而言之就是证明程序的正确性,检察系统是否满足用户需求,发现bug,证明程序有错。(划重点:找bug不是改bug哦~)
软件测试前景又如何?
• 软件测试工程师行业前景好、职业寿命长:根据相关招聘网站发布的最新一期的IT职场人气排行榜,其中软件测试工程师、高级程序员、产品项目经理等高薪职位进入”三甲”,成为IT就业市场最新风向标。随着项目经验的增加,项目从业经验越久经历的项目越丰富,就更具有核心竞争力。
•软件测试工程师职业空间大、发展方向多元化:顶测科技所培养的软件测试人员不仅仅局限于通信及互联网、应用软件二大行业,在金融及其他行业都占有一定的比量,行业范围非常广。同时由于工作的特殊性,测试人员不但需要对软件的质量进行检测,而且对于软件项目的立项、管理、售前、售后等领域都要涉及。向上可以发展成为测试经理、质量经理,横向可以发展成为项目经理等。
好了说完了软件测试的概念和前景该说说自身了。
先讲我的自我定位
在踏入软件测试行业的前几年,不少测试人员会陷入迷茫期,主要是对职业发展方向不清晰。网上很多谈软件测试人员职业发展方向及核心竞争力的文章,也确实能为各位测试同行提供不错的建议。作为一名软件测试从业者,也曾迷茫过,准确的说直至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等技术,笔者搭建了持续集成环境,进一步提升了回归测试的效率,同时高效地进行质量监控。
以上笔者的经历更像一张横向的知识网,创建了一个交流平台313782132,群内有各种技术同行交流、学习资料、面试经验等。其中用到jenkins、docker、moutebank、python编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。
来都来了,点个赞吧!↓↓↓