对于测试的基本知识,可以查看软件测试相关书籍
对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_21026543/article/details/79909062
测试流程方面:从最开始的分析需求开始,逐步地跟着项目走完整个测试流程,包括纯手工测试,包含了自动化的测试流程,包含了性能测试的测试流程,直至每一个测试报告的最终形成,理解一个科学,正确,严谨,正规化的测试流程。
测试方法方面:注重理论知识和实际操作相结合,在理论知识方面,购买一些书籍,从最基础的软件测试理论到各种各样的程序设计语言,再到自动化测试,包括Java语言的自动化测试,Python语言的自动化测试,到性能测试的各项性能指标的分析,数据分析都是书籍上的知识来获得的,在淘宝上面有各种各样的书籍和视频教程,实际操作中注重细节,不懂得地方就去请教,对比理论和实际的区别,为什么有这种区别。通过一个个的项目来夯实理论知识和实际操作,每一次做完项目进行一个总结,自己学到了哪些新的技术和方法?遇到了哪些新的问题?以后再遇到怎么处理?
新的知识补充方面:随着项目的不同,所运用的知识也不同,每一次学习不同的知识既是工作项目的需要,也是自己学习新知识的契机,比如说学习python语言,本来我们测试人员是不用写代码的,或者说可以用Java写,但是目前市面上都在用python语言来写自动化测试脚本,肯定是有它的道理的,那么我当时给自己的目标并不是仅仅为了满足写自动化脚本那么简单,我还想把python语言全部学会,我下定决心之后就立即着手执行,因为我本来就是开发出身,会代码,所有的语言都是相通的,都有变量,流程控制语句,和方法三大内容。JavaScript和Python都是弱类型,解释性的语言,所以在学习的时候我就在对比起来学习,很快学会了这门语言,所以我个人觉得,不管做什么,我们不仅仅要会用它,而且要知道它为什么这样用?最好是能够精通,对我们的测试工作是十分有利的。
知识结构方面:我们作为一个测试人员,不仅仅要做好本职工作,把自己的测试技术练好,而且还要一个广泛涉猎,对前台,后台,硬件知识,网络知识都应该去学习,对我们快速定位bug,提出有效针对性的修改硬件非常有好处,如果有条件的话,尽量向全栈发展。开发的发展方向是向深度和精度发展,而测试是一个向广度发展的岗位,需要不同的知识来融合,因为我们测试的是一个集成的,有多种技术融合而成的系统项目,就需要我们广泛涉猎和学习,所以从职业规划和寿命度上面来看,测试的工作也是非常的不错,所以不断的学习才是硬道理!
团队的氛围方面:和开发人员,测试人员,需求人员以及上级相处要从大局出发,我们的每一个人员都是一个项目不可或缺的一份子,必须团结起来,才能为最后产品的顺利交付打好基础条件,所以同事之间的相处是最需要拿捏分寸的,特别是开发人员,人和人都是相互的,只要讲道理,相信别人是会理解的,总之一句话:从整个项目的大局出发,把工作做好。
回首测试经历,我总结了以下几点:
1.不断学习,不能丧失对新知识学习的渴望,对旧的知识形成体系,夯实基础,测试理论知识基本上这么多年以来没有变过,主要是一些方法和工具的改变和升级,广泛涉猎相关知识,为测试工作服务;
2.搞好内部团结,建立起亲密的同事关系,不仅是对个人社交能力还是对自己的工作上的能力都是一个提升,都是百利而无一害的!
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
一、业务分析能力
1.分析整体业务流程
不了解整个公司的业务,根本就没办法进行测试
2.分析被测业务数据
了解整个业务里面所需的数据有哪些?哪些是需要用户提供的?哪些是自己提供的?有哪些可以是假数据?有哪些必须是真数据?添加数据的时候可以用哪个库?
明白了整个软件的数据库架构,才能知道哪一个数据是从哪一个表里头带出来的,它的逻辑是什么,有没有连带关系。
3.分析被测系统架构
用什么语言开发的?用的是什么服务器?测试它的话需要用什么样的环境进行测试?整体的测试环境是什么样的?
如果缺少了,需要进行环境搭建,架构搭建。一般去一家新公司之后,架构是搭建好的,了解它即可,熟悉之前的这些老员工们使用什么样的架构去做的。
4.分析被测业务模块
整个软件有哪些模块,比如说首页面、注册页面、登录页面、会员页面、商品详情页面、优惠券页面等等
明白有多少个模块需要测试,每个模块之间的连带关系,进而怎样进行人员分工
5.分析测试所需资源
我需要几台计算机,需要几部手机,手机需要什么样的系统,什么样的型号。
比如测一个网站的性能的时候,电脑的配置达不到测试并发5000人的标准,要么升级电脑的硬件配置,要么多机联合,多机联合时需要几台电脑,都需要提前筹划。
6.分析测试完成目标
我的性能目标是什么样的?我的功能目标是什么样的?我要上线达到的上线标准是什么样的?
性能目标,比如我要达到并发5000人的时候,CPU占用率不能高于70%,内存占用率不能高于60%,响应时间不能超过5秒
功能目标,比如整体的业务流程都跑通,所有的分支流程都没有问题,所有的接口都能够互相调用,整体的UI界面没有问题,兼容性没有问题等
把这些问题都弄清楚,测试的思路会非常的清晰
二、缺陷洞察能力
1.一般缺陷的发现能力
至少你要满足一般缺陷的发现能力,这个是最基本的,如果要连最简单的一般的缺陷都发现不了的话,别说优秀测试工程师了,你说你是测试我都不信
2.隐性问题的发现能力
在软件的测试过程当中有一些缺陷藏的比较深,有的是性能方面的问题,有的是功能方面的问题,它需要有一些设定特定的条件的情况下才会出现这样的问题。
比如说买双鞋必须选择的是什么品牌,必须选择是红颜色,必须选择44号,而且必须选择用特定的支付方式才会出现这样的bug的时候,那么这种就属于特别隐性的bug,对于这样的问题的发现能力一定要比别人更强,要找到一些别人可能发现不了的bug
3.发现连带问题的能力
当发现了一个缺陷之后,能够想到通过这个缺陷可能会引发其他哪个地方出现问题,这就叫做连带的问题。而不是说发现这一个bug之后提了这一个就算完了,一定要有一个察觉,可能其他地方也存在这样的问题。
4.发现问题隐患的能力
有些软件里边可能有一些操作模块,或者是代码写的接口,表面上没有什么问题,但是它是有隐患的,比如说这个接口写的不稳定,当他传的数据有一些问题的时候,可能它最后返回的结果就是报错就是报404或者报乱码。
5.尽早发现问题的能力
如果你只能停留在界面级别的话,那你根本就没有办法达到尽早发现问题的这个能力
你必须要等到前端人员把每个界面都做好了之后才能进入测试,而我能比你早一个月进入测试了,然后我比你结束测试时间快一个月,而你又比我晚一个月,那么咱俩的薪资一下就拉开了
6.发现问题根源的能力
需要知道这个缺陷它到底是由什么原因产生的,是属于什么类型的缺陷,是ui前端人员做的问题,还是后台接口人员做的问题?
不仅要找到这个bug,还要知道这个bug产生的原因,这样的测试人员是非常棒的,而且很是受人尊敬,提bug的方式也就不一样了
三、团队协作能力
1.合理进行人员分工
合理的进行人员分工是提高效率的重要保证
2.协助组员解决问题
比如说测试在赶进度,或者这个软件项目的质量把控是一个团队来把控的,协助组员解决问题就显得尤为关键
3.配合完成测试任务
一个团队里边的人员分工,他们的任务都是不一样的,这就是咱们说的配合。你的东西做完了,要轮到我了,我的性能测完了之后该轮到你了,所以整个的一个流程下来之后,大家应该是各司其职,配合得非常紧密的一个过程
4.配合开发重现缺陷
我给你提bug,你改我的bug,咱们的目的只有一个,就是让这个软件变得更好,所以在这样的情况下,咱们就一定要配合开发
5.督促项目整体进度
既然是一个团队协作的过程,就一定要互相的去督促对方,包括督促开发去改bug,因为开发人员他们有时候工作很忙,他们不知道要先改哪些问题,要后改哪些问题,但是往往有一些缺陷,它影响了测试的这个时间,影响了测试的进度,那么这个时候就需要测试员去督促开发人员,让他尽快的去解决你棘手的问题。这个东西能够提高咱们的测试效率
6.出现问题勇于承担
愿意背锅的最后都成为了领导,不愿意背锅的最后依然是员工
四、专业技术能力
1.掌握测试基础知识
基础知识就是根基,根基打好了,你才能够更有效地往后期发展,也就是为了以后的学习做一个铺垫。如果根基都没打好,功能测试不会,就想直接学性能,那性能是做不好的
2.娴熟运用测试工具
熟悉工具和熟练使用工具完全是两个概念,熟悉工具基本上等同于不会,遇到过很多简历上写会使用什么什么工具,都没有实际能力。比如loadrunner只会一个简单的录制,增强一下脚本,觉得会用了,那知识会用了1/5,其他4/5 都不会。
3.了解工具操作原理
它是怎么样给服务器发送请求的,是用什么样的方式去发送请的,是用什么样的方式去监控的,它的操作原理是什么样的,咱们要把这件事情搞清楚,这样的话能有助于更好的去使用这些东西。包括一些请求的协议,每个协议代表什么意思,它是用来干什么的。
4.自主完成测试任务
一定要能够自己完成一个独立的内容,独立的工作,这件事情领导你交给我好了,放心我能给你搞定,要的是这样的人
5.找出问题出现原因
找出缺陷的时候,不仅要看它的表面,还要看它的本质
6.提供问题解决方案
发现问题不是能力,发现问题并提出解决方案才是真的能力
7.提供完整测试报告
测试报告能够说明你表达的清不清楚?领导能不能看懂?还有就是能不能够把你整个测试的过程给它梳理得非常详细,人家能够通过你的报告,能够了解到整个的项目的情况,而不是只了解一个片面的情况
8.了解相关技术领域
触类旁通
五、逻辑思考能力
1.判断逻辑的正确性
面试官也经常会给测试人去出一些逻辑题,逻辑题能够分析出来你这个人思维有没有?活跃不活跃?还有他的维度,包括他想的问题的全面性,都能够判断得出来。
比如说去买一样商品,它的里边逻辑就会经常会出现很多问题,比如说它的会员的级别,什么样的级别去买什么样的商品,它的价格不一样,什么情况下会给优惠券,什么样的情况下不给优惠券?达到多少钱的情况下才能够使用优惠券?如果说这里边的逻辑出现了问题的话,那么整个的业务不用再测了
2.对可行性逻辑分析
要去测一个网站的逻辑的时候,一定要先思考这一个业务流程可能会涉及到哪些逻辑,这些逻辑哪些是可行的,有些是正向逻辑,有些是逆向逻辑,都要考虑全面,而不是说只是把正向的逻辑测试全面了,逆向逻辑不考虑。其实往往更容易出错的地方就是逆向逻辑
3.思维导图梳理思路
思维导图工具能够起到什么作用,能够让你更有效的进行测试,能够让你的思路更清晰
4.站在客观角度思考
去测试的时候,不要仅仅只是站在测试人员的角度上去对整个网站进行测试,还更多的要站在用户的角度,要替用户考虑
六、问题解决能力
1.技术上的问题
把自己的个人能力提升起来,多跟别人虚心请教,多去自己想办法解决问题
2.工作中的问题
在任何的企业里边去工作,肯定会遇到一些工作当中的一些不愉快的事情,而不是什么事情都会让你很顺心。所以要去处理工作上的一些不顺心的事情,不要把它带到你的工作上,或者是你的生活上,尽可能的去跟别人沟通,去解决这个工作上遇到的麻烦
3.同事间的问题
在工作当中可能会涉及到跟开发人员的沟通,跟产品人员的沟通,跟ui人员的沟通,跟这三方的人员去沟通的时候,就要用不同的沟通方式
4.领导层的问题
如果你觉得你的领导不好,或者说你觉得对你的领导一些建议,不要的去跟同事之间去说他坏话或者怎么样的,领导需要的是解决问题的人,而不是制造问题的人
七、沟通表达能力
1.和技术人员的沟通
跟开发人员阐述缺陷时要简洁明了、清晰易懂。当发现严重缺陷时,也不要大惊小怪,要站在开发人员的角度思考如何解决问题。而不是踩在开发头上,炫耀自己发现问题的能力。
2.和产品人员的沟通
当对产品提出意见时,要站在用户的角度去说明自己的想法,而不要主观认为不好而要求产品进行修改。
3.和上级领导的沟通
跟领导沟通时要有大局观,不能只考虑自己部门的情况。并且与领导沟通时,尽量直奔主题,不要拐弯抹角,当与领导意见不一致时,也不要直接反驳,应该先给予认可,再阐述自己的想法。
4.在集体会议中沟通
在集体会议中不要一味的突出自己的个人能力,不要当话痨,也不要默默无闻。适当的提出一些自己的见解,有助于让大家更加重视你的存在。切记不要在多人会议中,去指责别人和推卸问题。各个部门的同事,都要面子~
5.与下级员工的沟通
与下级沟通时不要摆高姿态,不要让下级产生畏惧感,应该更多的为下级解决问题。服务好部门的同事,才能更好的产生凝聚力。
八、宏观把控能力
1.有效控制测试时间
测试周期的时间控制,应当采取多种方法去衡量,例如人员能力,人员数量,项目复杂程度,同类项目的测试经验等多方面去衡量。
2.有效控制测试成本
测试成本指的是人员成本跟时间成本,不要浪费每个人的时间跟劳动力,要让每个人充分发挥最大的价值。
3.有效制定测试计划
测试计划对于一个项目是核心关键,它的存在为了让测试进行中有依据可查。所以测试计划,一定要切合实际情况,要经过思考和衡量最后得出计划安排。
4.有效控制组员情绪
组员的情绪可以直接影响测试进度跟测试的质量,当有组员出现思想问题时,应当及时沟通,采取一些必要的措施去解决问题。而不能装看不见。
5.有效进行风险评估
任何项目在进行期间都存在许多潜在的风险,例如,人员离职,生病请假,业务变更,需求变更,服务器或其他组件故障等。应当提前做出相应的解决方案,以免到时候手忙脚乱。
6.有效控制测试方向
测试的方向是指测试的目标和测试的范围,很多项目的测试是有针对性的,例如性能测试,所以在测试中,一定要随时清楚测试的目标和目的是什么,以免把时间浪费在无关紧要的业务上。
高级测试开发工程师需要具备的能力
转自:https://blog.csdn.net/linsongbin1/article/details/52240449?utm_source=blogxgwz1
熟悉本系统
测试人员参与测试的系统的各种业务场景,必须做到精熟 。一旦需求有改动,可以清楚快速的知道上下文。同时可以清楚的知道哪些点是需要重点测试的。
熟悉跟本系统有通讯的上下游系统业务
跟本系统有通讯的上下游系统也要非常熟悉。这样一旦系统出现问题,可以知道影响的范围。
熟悉公司主流程业务
熟悉公司主流程业务。虽然不是自己测试的系统,但是熟悉公司主流程业务,可以让测试人员在考虑问题的时候,有更好更广的思路。
逻辑思维好 气场也要好
互联网应用一般是切分成多个子系统的,各个系统都有自己的业务范围,一个任务的完成,通常要有多个部门或者小组进行协作。这个时候,就不可避免的进行各种会议沟通,小组内的或者小组之间的。那么测试人员如果脑子不好使,不能快速的理解别人的意图和想法,会很容易被人忽悠或者陷入各种坑,到时候就会有无穷无尽的测试任务了。另外,当对方太强势的时候,测试人员不能太弱势,应该根据自己对业务和系统理解,提出自己的意见,该做的就做,不应该做的别硬塞过来。积极配合对方,但不是傻傻的啥都做。
掌控系统上线排期
如果开发任务非常的多,测试人员要测试的功能也就非常的多。这个时候,如果功能的上线时间都是由开发经理或者PMO等来定,那测试人员就只能进行无穷无尽的加班。这样是不行的。测试人员有自己专业,对业务精熟,必须清楚的知道哪些任务的优先级是高的,哪些是低的,将任务进行优先级排序。规定某个时间段里,就只能上多少个功能。测试小组能够承受的最大任务队列是多少,测试人员必须有个底。测试任务超过这个队列,可以根据优先级把部分任务挤出去。
能编写覆盖关键路径的测试用例
对业务需求准确的理解后,测试人员能根据业务需求,设计关键的测试用例,能够完整的覆盖业务关键路径和场景,保证只要这些重点用例能通过,就说明需求的重点功能已经OK了。重点功能OK了,就算立刻上线,如果出现问题,也只是小问题。当然能够用测试用例覆盖所有当然是最好的。
定位问题的能力
测试人员在测试系统的时候,不能一遇到问题,就马上找开发,自己必须深入思考一下,出现问题的可能原因,多找一些数据验证一下,最好能做到问题可重现。
熟悉测试技术
在测试互联网应用的时候,测试至少得掌握下面的技术和概念:
1. 懂得用jmeter进行性能测试;
2. 懂得搭建性能测试需要的环境,例如服务器、redis、memcache等等;
3. 懂得如何编写性能测试报告。例如至少包含接口响应时间、QPS、最佳并发数、CPU使用情况、内存情况、抖动、GC情况等等。
4. 懂得上下文切换、内存溢出、内存泄露、QPS、稳定性测试等等的概念。
5. 要懂得如何做线上UAT验证,尤其是那种需要多系统合作的项目,UAT是极其重要的步骤。
约束开发人员,保证开发质量
当开发提测代码的时候,测试人员应该具备下面的意识:
让开发人员先把master分支的代码merge或者rebase到自己分支上,保证提测的时候,代码已经包含了master的代码,这样可以提前发现问题。
代码功能测试完毕后,必须再做一次回归测试。这个时候必须强烈的约束开发人员,不许再提交代码了。除非是bug。不然的话,测试人员回归测试完后,开发人员跑来告诉测试说,代码有改动。这样的话,测试人员辛辛苦苦的回归测试就白测了,又得重新回归一次。
测试人员必须回收master分支的代码提交权限,一旦开发者要提交代码,只能通过和测试沟通,说明代码做了什么改动。绝对不能让开发人员悄悄的提交代码,这种行为非常造成线上故障的。
如果功能模块是跨系统的,也即是会调用另外一个系统的接口。这种的,测试人员一定要要求各个系统之间的开发必须做【开发联调】。测试人员必须强制要求开发做到这一点。不然到时候可能出现各种接口调用不通呀、接口入参出参理解错了呀,这样会及其严重的阻碍测试的进度。如果没做【开发联调】,测试人员是可以不测的,直接打回。
要懂的写代码进行接口自动化测试
现在微服务非常的流行,各大互联网公司都在搞微服务接口。针对微服务接口,测试人员一定要懂得编写代码去进行接口自动化测试。大家想想看,假设某系统有50个微服务接口,测试人员测试完一次后,开发人员修改了其中10个接口的代码,这个时候应该可以通过跑自动化case来验证这10个接口的改动有没有影响到其他40个接口。这种回归测试的效率非常的高。如果每次都得人工手动的进行接口回归测试,那测试人员就得累死了。