软件测试这行咋样?
如果你简单了解过「软件测试工程师」这个岗位,就会知道它的基本特点:
- 待遇比开发低,比其他行业高
- 入门丝滑,算是技术岗最简单的一类
- 测试行业有细分领域:功能、性能、自动化...
每个行业都是一座围城,城外的人想进来,城内的人想出去。2024年加入软件测试=49年入国军?
授人以渔不如授人以渔,无论你最终是否入门,下面这个思维模型都可以参考:
行业前景 | 个人兴趣 | 转行成本 |
---|---|---|
供需关系 竞争 待遇 稳定性 | 操作系统 编程 算法 | 时间 经济 |
所谓无利不起早,我转行的原因就是软件测试比起我之前的工作待遇薪水高很多。
通过上面的思维模型了解行业的供需关系后,我先是通过求职软件「boss直聘」、「前程无忧」、「拉勾网」十几个求职app查看软件测试岗位的薪资待遇,发现符合我的心理预期。供需关系、行业竞争、稳定性都是和大环境相关联的,前几年疫情各行各业都不好做,IT类的大环境也不会好,但是不排除有的行业和公司业绩比以前好,所以不用太过于纠结。
模型中的第二类是个人兴趣,我对电脑游戏很感兴趣,也渐渐的对这些代码是如何呈现出游戏的画面、逻辑产生了兴趣,所以学习编程和算法等对我来说也不是大问题。需要注意的是,在这里除非你是特别厌烦代码,一看到就头疼,其他的情况都不必直接因为兴趣而拒绝了解一个能赚高薪的行业。
确定了前面两个模型,接下来就是转行的时间和经济成本。如果你是理科生,那么恭喜你转行还是比较简单的,大概脱产1-3个月学完一套软件测试的课程后就可以投简历出去面试了;如果你是文科生,可能要花更久的时间,要有个心理预期。学习的时间也不是固定的,每个人学习的能力不同,学完一套课程所花的时间也是不同的。如果你的英语水平比较好,那也要恭喜你,学完甚至可以直接投外企。
入门要学什么?
软件测试的领域细分有很多,但功能测试是最最基础的岗位,无论你的目标是自动化测试、性能测试、测试开发,都必须会做手动的功能测试,就像是建筑的地基一样。
功能测试是软件测试的基础,主要是对软件的功能进行验证。就像我们平时使用各种软件,功能测试人员要确保软件的各项功能都能正常运行。比如一个购物软件,功能测试人员要检查下单、支付、退款等功能是否顺畅。功能测试的特点是操作起来就像你平时双十一在淘宝购物一样简单,很多人要问了,那我是不是不用学就可以做了?巧了,我就尝试过。当时我从网上搜索了一些面试题目先背完,在boss上投递简历后获得一个面试机会。面试一开始还好,靠着背过的面试题目和一些网上的帖子,大概知道面试者提问的意图,也给出了针对性的回答。基本的考验通过后,面试者问到一些技术性的问题就回答不上来了,当时面试官拿出一张纸和笔让我手写一个连表查询的sql,我憋了半天写了一堆shit,致此想要碰运气的我露出了马脚。我是一个比较谨慎的人,临走的时候还不忘确认一下这个岗位的待遇是不是和boss上写的一样,以及试用期的待遇。
现在回头想想这段经历还是可歌可泣,值得纪念的是我虽然失败了,但是它强化了我要潜心学习好相关知识入门的决心,这次的线下面试让我感受到测试工程师这个岗位前景还是不错的。然后我在网上开始找教学的资料,当时的整个行业学习资料比较散乱,我根据面试的要求东拼西凑了一套学习资料,但是没有多久我就学不下去了,主要原因有两点。第一是独自在家学习的效率比较低,学到一半想打会游戏,过一会肚子饿了,搞来搞去半个月进展堪忧,这个原因占20%。网上的资料良莠不齐,刚学的知识还没记牢,又被推翻了,这种感觉是非常痛苦的,产生了对知识可信度的怀疑,我想着学的慢不要紧,学错了就麻烦了。于是我就去报了个培训班,开始系统的学习。
自学vs报班学习
在培训班的日子按部就班,每天都有老师讲课,身边有同学一起讨论问题,唯独难受的是没有收入,导致那几个月吃的清汤寡水的。好在精神上比较有希望,一方面培训班的老师都比较有经验,教学的过程也不是很枯燥。我还记得有一个老师每天都坐高铁从上海往返杭州,她讲的知识偏理论,但是每次都是脱稿,那些测试的概念全部都烂熟于心,每节课的板书都是有几百上千个节点的思维导图,老师的专业像是给了我一记定心丸。培训很快进入尾声,要写简历找工作了,我是班上第一批找到工作的,薪资也是第一梯度,想想看还是很幸运的,不然还真不知道培训的贷款上哪儿去还...
关于培训班,这个因人而异,像是我当时自控能力不够、迫切的希望有一份工作,网上又找不到系统的教程,综合考虑后去参加的培训。即使如此,还钱的时候也是很肉疼。如果你正待业在家或脱产学习,想要有一个类似学校的环境学习,不想费力自己折腾学习资料,可以考虑正规的培训机构。如果你的自学能力尚可,目前有一份薪水不高但比较轻松的工作,每天的学习时间能保证,那么不建议你报培训班。今年已经是AI的时代了,充分利用好AI学习就是你最好的老师。
都2024年了,如果你还不会用AI学习,不仅是IT行业,在任何行业你都会被擅用新时代工具的人碾压。这是我用AI工具生成的软件测试学习路线,虽然只有一些大方向的基础框架,但还是很全面的,想要深入学习你只要再拿具体的知识点向AI提问即可。
准备面试
回忆起我在培训班学到的全部知识,也是屈指可数。要是当时有AI,我也不会去培训了,GPT就是一个最好的老师,可以互动问问题,它能给你正确的答案,这就够了。
入行必学四大金刚:
- 软件测试理论知识
- linux操作系统基本操作
- 数据库mysql基本操作
- 基础网络知识tcp协议等
第一点自然不用多说,万丈高楼平地起。
面试时肯定会考你:
软件测试是干嘛的?
掌握测试类型:了解功能测试、性能测试、安全测试、回归测试等不同类型的测试
测试生命周期:熟悉软件测试的各个阶段,包括测试计划、设计、执行、缺陷管理和报告。
项目中软件测试的人员参与的环节有哪些?
测试用例的设计方法有哪些?
一条测试用例的要素有哪些?
...
第二个是linux相关的知识要学习:
linux的基本操作有哪些命令?此问要能列举出十条常用的,例如登陆服务器、文件的增删改查、拷贝文件、移动文件、修改文件权限,稍微进阶一点的要会怎么搜索文件内容、上传下载文件...
这是你在工作中的工具,不会的话会步履维艰,一个简单的任务你要去先查一下怎么操作、还要确认这个操作会不会有风险。
这和开车一个道理,总要学会操作再去开,否则就是上车了在车上百度的面前的按键都是什么作用,左右脚哪个是刹车哪个是油门,很容易出洋相闹笑话。
第三是数据库mysql的知识:
- 数据库操作:创建、删除、使用
- 表操作:创建表、查看表结构、删除表、截断表
- 数据操作:数据插入、删除、修改、查询
- 索引操作:索引的创建、删除、查看
- 事务的理解,事务开始、提交、回滚
第四是基础网络知识:
网络知识向来是程序员面试的重灾区,就算是一个工作好几年的开发也不一定有好的网络基础知识。如果你面试的公司是涉及到网络、交换机、硬件,那么一定要好好掌握,如果是互联网项目,前两点掌握了基本够用了。
-
网络基础
OSI模型,它有多少层、
TCP/IP模型与OSI模型的区别是什么、
什么是IP地址?
IPv4和IPv6的区别是什么、 -
TCP与UDP
TCP和UDP的主要区别是什么、
什么是TCP三次握手和四次挥手?(经典必考)、
TCP的流量控制和拥塞控制是如何工作的? -
路由与交换
路由器和交换机的主要功能是什么、
什么是子网掩码、如何计算子网、
VLAN的概念作用是什么? -
DNS与DHCP
DNS的工作原理是什么、
什么是DHCP、
如何配置一个DHCP服务器? -
网络安全
防火墙作用是什么?
VPN的工作原理是什么?
DDoS攻击如何防范? -
其他
HTTP和HTTPS之间的区别是什么?
请解释一下什么是负载均衡。
有哪些因素会影响网络延迟?
以上就是最基础需要掌握的知识内容,现在咱会了这些已经可以开车上路了,但是路上的信号灯和那些车道的标志咱还不熟悉,心里有点虚,甚至运气不好还遇上加塞的车,咱这么上路还存在安全隐患。
但是现在副驾有一个老司机,告诉你说先别慌,稳住!咱们见招拆招。
除了上面说的四大金刚,咱们还需要掌握一些基础的测试工具如JMeter、Postman等,达到熟练运用。
面试准备
上面说的问题都是技术类,是我们的地基。地基打好了,我们要做的就是把咱们的地面给它装饰一下,例如设计草坪、设计喷泉等,增加一些生活化的气息,毕竟环境好了人的心情才会好嘛。
面试前精心准备一份简历,不必多说。
面试前给自己打气,把状态调整好,注重面试礼仪不要迟早、着装干净整洁即可。
面试时不要紧张,遇到不会的问题说出自己的思考过程,展现给面试官你的思考能力。
沟通与表达:清晰的表达自己的观点,切记模棱两可。
情商问题:例如你们团队有冲突时怎么处理,开发和产品打起来了诸如此类,站在维护公司利益的角度阐明观点即可,切记不要太过随意,这可能是你给面试官留下好印象的机会。
面试复盘
成功的路不可能一帆风顺,失败了我们从中吸取教训,每次面试都做一个自我评价,找到下次可以改进的地方。基础不牢就夯实基础,表达不通畅就大胆表达说出来,张大嘴巴多练几次就好了,勇敢的人不仅能先享受世界,还能先获得高薪。复盘面试时也对面试官和公司进行一些评价,这里不必花费太多时间,体会面试官问问题背后的用意,体会说话的艺术,有助于你通过更多的面试。有些面试官问问题不喜欢直接问,比如说"你能接受加班吗?"其实是在判断你是否愿意为了公司多付出时间义务加班,这时候不要简单回答能或者不能,例如说"测试行业为了项目上线是难免要加班的,毕竟一个团队哪一环缺了都不行。"即表达出你对(国内)IT行业的了解,也表现出了你的团队精神。有的单位是强制要求每周加班几天到几点的,为了防止踩坑可以反问"咱们公司有强制加班么?"不建议去强制加班的公司,除非你就只有这一个offer且家里实在是揭不开锅了。这种公司对人的热情和身体消耗太大了,去了也建议尽早跳槽。
正式工作后
进入公司后,你会发现很多学习的东西都和单位实际用的对不上,别着急,这是正常的。先和前辈们了解清楚公司的业务、用到的语言、工具,这时大概率你还在试用期,可能拿着80%或者100%的工资,但是不要松懈,试用期不通过也是比较蛋疼的,而且你新入行就不通过很可能会对这行产生抵触的情绪。所以要每天做好工作的回顾和复盘,把你的一天总结一下,一个月后你就会发现哪些东西已经熟悉了,哪些东西还未掌握,对症下药即可。
先在公司呆住了,有还算可以的稳定的收入,也不要忘记给自己适当的放松一下,周末出去和朋友吃个饭联络一下感情,或是买点喜欢的东西奖励一下自己。接下来就是你的个人成长啦,学习你们项目用到的架构、中间件、开发语言提升自己。
个人职业发展
手工测试做久了了解一下python,做一些接口自动化测试、UI自动化测试,或是你走的更远,学习开发一个测试平台,开发一套自动化的框架,都能帮助你在这条路上走得更远。不用纠结学习哪种代码语言,按我的经验往往你会了解很多种,如果你想走得更远做自动化就选python深耕,想做开发的话不仅要先了解基础语法,还要深入了解web框架,例如python中的django、go中的gin、java中的spring-boot。这些语言我都学习了基础和web框架,现在我想做出一个自己的网站,我又要去学习前端的javascript、vue框架,所以学习什么语言并不是盲目的,而是出于你要干什么事这个目的去学习,学以致用。
我的成长路线
如你所见,我最初也是做手工测试,每天就在我们的网站上点点点,我还记得我刚入职时很开心,上午领了电脑一个下午埋头找出了20多个bug,领导当天就对我刮目相看。一开始我觉得这很平常,一个bug非常多的网站,只要用心找就能找出很多。几年之后我才懂得,做功能测试久了会变得麻木,整天对着网页做输入、点击、用眼睛判断对错,机械化的工作非常的无聊,it's too boring!
在项目不忙的时候,我自学python,用pytest框架做接口自动化,做测试前先把我们的后端接口用脚本跑一轮,再去做功能测试,这时我体会到了为什么测试用例一定要分优先级,写自动化用例时先把高级的用例自动化掉,手工测试前你心里就有谱了,对这个版本重要的功能后端先有个质量评估,而这些都不需要花费你的时间,喝杯咖啡,等程序跑完出报告即可,我当时很开心用学到的技能减轻了工作量。
这个过程就像玩游戏一样,得到了正反馈,我更加一发不可收拾,开始学习UI自动化、写shell脚本辅助测试、甚至去了解了单元测试。在这个过程就像升级打怪,会遇到打不过的boss卡住,但总能有办法过关,你的角色在不断的升级。
进入测试行业6年,我不仅收获了很多新的技能,从基础的功能测试做到自动化测试、性能测试专家、测试开发。测试行业让我获得了更高的薪水,生活更有质量。很多人说测试是项目里最底层的,这种人是把自己的成见前行安到一个职位上,真的很下头。所有的岗位都有存在的意义,没必要踩高捧低,你问问那些说测试不好的人为啥不去当CEO还在当牛马人?每个阶段我都有一个自己的目标,学习对应的知识,做全栈测试开发是我的下一个目标,我要开发出一个自己喜欢的游戏风格的博客网站。
路不通时,及时换轨,才是对自己人生最好的负责。什么是围城?城里的人想出去,城外的人想进来。