测试工程师应掌握什么
前言
通过这篇文章你将收获,身为一名测试工程师的核心竞争力。
常有人会问,如果要做软件测试的话,有什么要求?需要具备哪些素质和技能?不知道自己是否适合?
这里我发表一下自己的看法
软件作为一个新兴行业,却发展迅猛,成为年轻人中最受欢迎的行业之一。目前,平均工资最高的行业就是金融和计算机软件。测试作为软件行业中一个比较新颖的职业,国内外对于测试的需求仍不够清晰。所以,很多人都会问,作为测试,有什么必须掌握的技能吗,是不是就是点点点?
测试的类型
首先,测试工程师可以分为两大类别,一类是做业务功能测试,另一类是做测试开发。我对此的简单理解是,业务功能测试要会用,测试开发还要会创造。即:业务功能测试是使用各种工具和方法去测试软件;测试开发是自己设计开发一个产品来辅助业务功能测试或测试软件。
业务功能测试
业务功能测试应该具备的核心竞争力, 按照能力对测试工程师的重要程度的顺序排列包括:测试策略设计能力、测试用例设计能力、快速学习能力、探索性测试思维、缺陷分析能力、自动化测试技术和良好的沟通能力。
测试开发工程师
总的来说,作为测试开发需要较强的代码能力、测试系统需求分析能力和更宽广的知识体系。
首先既然是测试开发工程师,那么代码开发能力是最基本的要求。可以说,一个合格的测试开发工程师一定可以成为合格的开发工程师,但是一个合格的开发工程师不一定可以成为合格的测试开发工程师。
除了代码开发能力,测试开发工程师更要具备测试系统需求分析的能力。你要能够站在测试架构师的高度,识别出测试基础架构的需求和提高效率的应用场景。从这个角度说,你更像个产品经理,只不过你这个产品是为了软件测试服务的。
测试开发工程师需要具备非常宽广的知识体系,不仅需要和传统的测试开发工程师打交道,因为他们是你构建的测试工具或者平台的用户;而且还要和 CI/CD、和运维工程师们有紧密的联系,因为构建的测试工具或者平台,需要接入CI/CD 的流水线以及运维的监控系统中去。除此之外,还要了解更高级别的测试架构部署和生产架构部署、还必须对开发采用的各种技术非常熟悉。可见,对于测试开发工程师的核心竞争力要求是非常高的。
测试的初期
目前,对于国内大部分公司来说,两者前期的要求并不明显,只是日常工作中黑盒测试和白盒测试的占比不一样。你会发现功能测试也会问你编程语言,测试开发也会问测试用例。所以,我们需要学习和掌握的知识是深度加广度并行的,可以想象为:一棵树为了快速扎根,它需要横向地广度去探索的同时,选择正确的方向去深度扎根学习。
十年树木,百年树人。一棵树要想成长为参天大树,根可能比枝干和树冠更加庞大。树的根是在汲取养分、水分(不断学习,充实自己),树的枝干树叶是为了争夺阳光(勤奋努力,把握机遇)。古人言:博观而约取,厚积而薄发。在广博学习而简约审慎地取用,在深厚积累之后慢慢地释放出来。即:只有广见博识,才能择其精要者而取之;只有积累丰厚,才能得心应手为我用。积之于厚,发之于薄。前期广度与深度并行,后期加强深度。正如铭记于心的校训:明德正行,博学多能。
测试需要的技能
言归正传,身为测试究竟需要掌握什么技能。我认为,这取决于你想去的公司所描述的测试工作职责是什么,即公司想要你做什么,创造什么价值。当然这是废话,但也是最重要的学习方向。
那么,以个人平时的工作而言,落到实处给你讲讲需要掌握什么技能。
首先列出技能:1.软工软测计网理论 2.业务快速学习 3.编程语言 4.linux 5.数据库 6.优秀的文档编写能力 7.自动化工具 8. 了解APP 9.了解前端 【关键看测什么,需要什么】
软件工程
首先,作为软件测试,软件的知识你需要了解,最好有自己的认识,即对应着“软件工程”。软件工程的每一章则对应着大学内一门专业课程,而我们所需要的只是了解而已,前期不需要每一个都去深入的学习。着重了解 软件开发的常见流程、瀑布模型、原型模型等。在系统设计和接口设计的时候,你能有自己的一定认识和理解,提前思考测试方向和计划。
软件测试
软件测试相关的理论也是不可缺少的,这方面最好有自己深入的思考。个人一直认为“软件测试”是一门不错的课程,即使不做测试也能提升你的思维能力。这方面需要掌握 常见黑盒、白盒测试方法,测试的常见流程和模型,各项测试应该在什么时候展开,了解常用的测试思想和自动化工具。在具体设计测试计划、测试用例的时候,能更科学、专业、全面地去权衡。
计组相关
软件的运行离不开操作系统、网络、计算机,因此,这些课程的基础知识需要了解和学习,尤其是互联网公司,网络相关知识最好有较深刻的认识。在日常工作中,当web页面功能出现问题的时候,第一反应就是F12查看接口返回,此时,就需要用到网络的知识;部分时候,需要你抓包分析。主要需要了解的是HTTP/IP协议簇、页面相应过程、HTTP和HTTPS等,这是常问的,也是工作的常用的,当你了解了原理,会从全局上有更清晰的思维去测试。
编程语言
其次,最好懂一门常用的编程语言,如:Java、python、C++、GO。你可能会问,我就是不懂语言或者不想做开发才想来做测试的,为什么还要懂语言。首先,code review(简称CR,代码评审)需要测试参加,你需要知道开发改了什么,更精确地去设计用例,着重测改的部分;其次,接口测试的时候如果接口文档不清晰、不规范,你需要阅读相关源码理清逻辑后与研发确认;白盒测试也需要你读懂代码的逻辑,画出程序流程图,设计用例;最后,如果你想深入测开,那么code能力必不可缺。
Linux
当研发开发好了程序,需要测试搭建测试环境,有的需要手动搭建,有的是用配置自动化平台参数搭建。相应的,你需要了解Linux,因为服务一般搭建在Linux系统中。其次,如果系统出了错,从页面和接口层次无法准确定位的时候,需要去监控和查看系统日志。即测试环境的搭建、维护、监控需要你了解Linux。
MySQL
当需要检验产品数据的正确性时,你会与数据库打交道,而大多数公司都是使用MySQL。所以,测试需要掌握MySQL,甚至达到精通的地步。在工作中,很多事情最后都会定位到数据库中去审查,而且需要执行很多SQL脚本。在初期,需要了解MySQL的基本操作和常用查询函数。这一点,对于研发也一样重要。
自动化
如果人工已经不能满足你的工作需求的时候,需要引入自动化测试。比如,当产品稳定后,需要对其进行性能测试。如果使用纯人工,那几乎是天方夜谭;而使用Jmeter等工具则只需要简单的配置、执行,即可得到较精确的分析报告。所以,我们需要多学习自动化测试工具和方法。
文档编写
测试的流程中一直需要有文档的输出,这些文档会跟产品、研发、测试进行交流使用,并在测试结束后对文档进行整理和保存。因此,我们还需要优秀的文档编写能力。这一点小编也一直在努力学习中:如何清晰地表达自己的观点,如何准确地描述事情;这会为我们省去很多不必要的麻烦和交流。
其他
除此之外,如果与前端打交道比较多,还得学习前端相关的知识;干某一行,需要了解这一行的业务和常识,快速学习业务相关知识;其次,最常用最热门的技术需要我们去挑战:中间件、测试开源架构、H5测试、Shell编程、AI、大数据、常用开发框架;当然这都跟业务、工作、长期规划相关了。
假装总结一下:公司要你干啥,你就得立马会啥。如果没有明确要求,就要精通热爱且重要的一门技术,同时啥都要了解一下。
测试需要的素质
讲完了硬技能,我们来说说软技能;即作为测试,你需要什么个人素质和能力。个人认为,一名测试需要以下素质:
1.沟通能力 2.细心、耐心 3.逻辑思维、分析问题 4.快速学习 5.责任 6.团队协作 7.文档编写
(妈耶,写到这里过了两个小时了,赶紧水完去吃饭。以下内容先简单描述下个人体会,如果有需求,请留言,会对其进行补充)
作为测试,工作中需要跟大量的人打交道(产品、研发、测试、客户),因此,需要较强的沟通能力。如果你讲不清楚,甚至工作都没法进行下去;关于交流,我们需要事先组织好自己的语言和逻辑;其次,不能加入个人的主观想法,要从事实上客观地去反馈事情的本相,不能误导和影响他人。
测试是去辅助研发定位错误,从另一个角度去帮助研发快速完成软件的开发。因此,你应该细心,要发现一些微小而又致命的错误。其次,测试会反复地执行用例、记录问题、回归测试,这需要耐心。
遇到问题,你需要快速分析问题,定位根本原因,遇到问题要快速记录,定位问题并想办法复现;理清逻辑并汇报给研发,尽量减少研发定位BUG和反复修改的工作。
每接触一个应用需要你快速掌握该应用设计业务、应用所有功能、整体架构、依赖应用的功能和使用的知识。当一个新的自动化工具或公司自制平台被引入到工作中,你需要快速掌握并使用。当今互联网项目都快速迭代,生命周期通常以“月”、“周”为单位,测试工程师需要接触各种类型的测试项目,所以快速学习能力对测试工程师来说至关重要,否则容易被淘汰。
测试的工作是保证软件的上线质量,所以需要很强的责任心。
测试工作中会与项目的各个人员打交道,无论我们的自身工作做得如何,掌握多少知识,都应保持虚心,从内心上认同和尊重他人。在做好个人本职工作的同时,积极有意识地关注项目进度和组内情况,要有一定的大局观,以团队利益为思考出发点。如果同事遇到了困难跟不上进度,而你又提前完成了自己的工作,可以去协助他,这虽然带来了额外的工作,但会收获一份知识,增进同事间友谊;更重要的是,为团队按时完成任务提供了保障。友好、宽容地对待新同事,给予新员工力所能及的帮助;愿意共享个人经验,同时善于从同事那里学习。
文档编写能力也算软技能,在硬技能中有介绍;这里就不重复了。