一年测试工作的感悟:努力与迷茫?
工作即将满一年,很早就有个计划,想把这一年的工作收获和感悟给总结和反省一下,此文以发问的形式展开。
我是谁?
90年生人,通信方向硕士学历。通过校园招聘进入一家金融软件服务公司,从事于web测试工作。本人专业和金融本无多大联系,但是本科期间,比较喜欢阅读一些金融相关的“课外书”,所以最终选择签约金融软件服务商公司,基本上和自己的研究方向说“拜拜”。的确,工作和专业本来就不一定非要对口,你难道不愿意从事自己喜欢的行业么!
在学校,自我评价是一个循规蹈矩的学生,能按时完成导师分配的科研工作;我想可能在导师眼里算是一个“好学生”吧。
老板一般是怎么评价自己的员工呢?
一种是 老板叫你去办一件事,你一个去做,从不找老板,把事情独立做完,而且超出老板预期,这种员工100分;
一种是 老板叫你去办一件事,自己做,按计划完成工作,但是没有超出老板预期,这种员工80分;
一种是 老板叫你去办一件事,经常汇报工作进程,偶尔会让老板帮帮忙,最后把事情做了,而且超预期,这种员工70分;
一种是 老板叫你办一件事, 自己琢磨,自己做,但是最终结果一般,甚至不好,这种员工60分;
最后一种是,经常找老板帮忙,但是还是没有把工作做好的员工,这种员工只能做一些简单的工作了;
所以,老板眼中看重的是你 做事 独立决策,结果 超出预期;
说这些,主要是为了自我评价一下工作中的自己;我想给自己打60-70分之间,做事积极独立但是结果一般。
这样的员工在工作中竞争力一般,如果公司业绩不好的时候,可能会被老板炒掉了;
那优秀员工和普通员工之间差异的根源是什么呢?我理解是 把知识转化成解决问题的能力。在老板眼里,你爱学是应该的,是一个员工基本的素养,但是boss们“日理万机”,他们永远看重的是结果,结果大于一切,此外完成结果的过程也是比较重要的。
说这些,主要是想给一些未毕业的师弟师妹一些建议,在学校,一定要养成自己独立决策的能力,务必有一颗追求卓越的心,并且始终怀有对未知的渴望;
我能做什么?
很现实的一个问题。面试过程中,肯定是每个HR都会问到的问题。能做什么,这个问题,在我看来,它并非想听到你想掌握了什么技能,而是想听到你将技能如何转化为解决问题 的能力。反问自己,我能做什么呢?
说实话,我有时候会反问自己,但是每次都没能好好严肃地回答自己,评估自己。这也是我今天写这篇文章的目的,反省自己。下面介绍一下我的工作,以及工作中掌握的“技能”。
开发工程师,何为开发?测试工程师,何为测试?
从简单的软件开发流程谈起。
瀑布模型:
计划 → 需求分析 → 设计 → 编码 → 测试 → 运行维护
计划、需求是产品的活;设计是UI的活,编码是开发的活,测试是测试的活,运行维护是运维的活;
开发,一词是指以荒地、矿山、森林、水力等自然资源为对象进行劳动,以达到利用的目的;
通俗的讲,就是根据自己掌握的资源,通过自己的技能,完成一项既定的“任务”。
测试,是动词、名词。测试行为,一般发生于为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果。多么生动的描述啊!
如果说开发的任务是建造一座房子,那么测试的任务 就是对房子的材料,设计图纸(文档),外观,抗震性,舒适性等等进行综合验证,并得出一份“质检报告”。
而开发往往对自己的代码“高度”自信,认为自己建造的房子就是最完美的,无可挑剔的;
而测试往往反其道行之,认为开发建造的房子肯定是不完美的,肯定是有“缺陷”的,也就是所谓的“破坏性测试”;
所以,测试在开发眼里,就是来“找茬”的;实际不然,测试的目的是为了更好地驱动开发,做出完美的产品。
而对开发的代码怀有一种“天生”的质疑,是测试工程师所必须的;
正如前文举开发“造房”为例,评价一个软件的是否合格,同样需要对其进行各方面的测试,不同方面的测试,需要不同的测试方法,甚至不同的测试人员来完成;
事实证明,对一个软件的测试工作的进行的越早,那么对发现问题并修复所承担的成本就越低,所以测试工作贯穿于整个项目周期。也正是这一点,决定了绝大多数测试工程师不可能掌握(精通)整个项目周期所要求的测定技能。因此,测试岗位根据不同的测试方向与技能划分为:功能测试工程师,性能测试工程师,自动化测试工程师,测试开发工程师。
功能测试工程师
想必大多数测试人员都是从功能测试开始做起的,或者至今一直在从事功能测试工作;顾名思义,功能测试也称为黑盒测试,产品就像一个黑盒子,我们无需关心其内部构造是怎样的,只需要对其进行输入参数,将输出的参数和预期的参数进行对比,验证是否满足需求文档里所定义的那样。简言之,功能测试的目的就是验证所测产品的“功能”是否满足甚至超出产品设计所要求结果的预期;比如,需求文档里要求实现一个加法功能,那么就要 通过各个方面来验证 产品是否具备“加法”功能。
因此,功能测试重心就是 测试用例的设计。而测试用例的设计,取决于测试人员对产品需求的理解;对产品需求的理解取决于测试人员对业务的“接受”程度。这也是功能测试发展往往会遇到“瓶颈”的原因,过多的项目只不过是在反复地学习不同的业务;因此功能测试工程师往往要具备 一定的测试管理能力,掌握一定的测试策略,发展通道一般是管理方向。
性能测试工程师
产品,实际上是指产品的功能和质量两个方面。功能是构成竞争力的首要要素。用户购买某个产品,首先是购买它的功能,也就是实现其所需要的某种行为的能力。质量是指产品能实现其功能的程度和在使用期内功能的保持性,质量可以定义为“实现功能的程度和持久性的度量”。
想必大家都听说甚至经历过12306网站买火车票崩溃的例子。12306网站也不仅仅满足于大家能通过它进行网上购买火车票单纯这一功能,更需要满足N多人在使用它同时进行买票且不出错。这就是性能。性能可以分为稳定性,可靠性,安全性,易用性,兼容性等等,不同的产品要求的性能也不近相同;比如说 公司有些部门 研发的 沪(深)交易所使用的交易系统,在传统金融领域,对系统稳定性的要求往往高于其他需求。而相应的性能测试,可以针对不同的性能指标分为负载测试,压力测试,并发测试,可靠性测试,基准测试等等。
性能测试往往要求测试工程师不但具备对产品基本的功能以及业务知识,还要对产品所“在”(部署)的环境有必须的了解。这就要求性能测试工程师必须掌握一定的系统知识,如服务器硬件知识(CPU、MEM、NETWORK、IO),数据库(ORACLE,MYSQL),中间件(TOMCAT,NGINX),操作系统等知识;
自动化测试工程师
反复的手工测试势必会让测试人员开始人生。工作中几乎每个测试人员都会遇到过一些重复性比较高,而且必须要做的工作,如回归测试,冒烟测试等;顾名思义,自动化测试就是为了把测试人员从一些重复性高,而且需求变化不大的工作中解放出来;比如web自动化测试,可以通过selenium编写测试脚本,一次写完,就可以反复用到需求变动不大的任务中。
测试开发工程师
测试开发岗位,工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。比如我们项目组的测试开发小伙伴就经常开发一些脚本自动生成工具给我们使用,这也直接提高了我们的测试效率,间接地缩短了测试周期,可以更好更快地交付产品给客户使用。
以上,简单讨论了下不同测试职位的工作异同,下面我想认真分析下自己。问题(项目)驱动学习
我想把自己工作中接触到的和非接触的到的知识罗列一下;
开发能力:JAVA(集合,泛型,基础知识,调试,代码阅读),JavaScript/CSS/HTML(基础知识,能结合知识实现项目),Python(基础知识)
框架:Spring Boot,Spring MVC;Vuejs
开发成果:可以单独开发JAVA WEB后台系统,前端项目; 管理系统
兴趣爱好:机器学习(理解常用的机器学习知识与算法原理,以及简单机器学习实现)
计算机网络知识:TCP/IP协议(HTTP,DNS)
操作系统:LINUX服务器常用指令,服务器硬件指标分析,shell编程基础;
中间件:TOMCAT,NGINX(负载均衡,结合keepalive高可用架构),Mycat(分表分库),Redis,Zookeeper
数据库:Oracle/MySQL,复杂查询
测试工具:JMeter,Postman等
版本管理:GIT,SVN
调度工具:JENKINS(理解)
大数据:Hadoop(理解架构),Hive
以上知识,都是工作中接触到的并且运用到的,当然测试工作中有些可能不需要精通掌握,只仅限于“使用”;而我个人更倾向于问题驱动学习,所以项目的多寡也决定了我对一些知识的理解深浅;工作前半年,接触的项目少,但是自己也自学了一些用不到的知识,现在想想当时已经“掌握”的知识,长时间不用也会“褪色”,所以建议大家不要为了学习而学习。
一定要用问题/项目驱动才能高效地掌握某项知识。曾几何时,接触项目少的时候,我也曾在工作之余,自己搭建环境,验证某些知识的正确与否,但是还是那句话,长时间不用的话,还是会忘记的,所以一定要多做项目加深巩固;
反思自己,定位自己的职业规划是测试开发,但是自己在迷茫从何处着手,项目组已经有一个小伙伴在做,平时自己也在向他学习,但是学总归学,没有项目的锤炼还是效率甚低;
工作之余,我也会看一些机器学习,区块链的知识,好让自己不“脱节”(也可能是测试人员都会有一种职业危机感吧,总想让自己多学点,但是学到的只是皮毛,仅限于略懂),迷茫如我,求大神指点迷津。不胜感激。
posted on 2018-05-08 19:34 cnbyangwei 阅读(...) 评论(...) 编辑 收藏