测试,是一种保证质量的重要手段,也是软件工程中的重要一环。开发一个“鲁棒”的程序不是件简单的事情。同样,检查缺陷,发现漏洞,评估一个软件系统的好与坏,也不是一件简单的事。
测试工程师,主要职责是构建测试能力,设计测试策略,对缺陷跟踪回归和复盘,最终把控项目的质量。
那这个角色在项目中具体干哪些活呢?让我们举个栗子。
假设你负责一个社交类 APP,产品经理准备在下个版本中增加语音聊天功能,作为测试工程师,你需要保证该版本上线后不出事故,你该怎么做呢?
测试前移
是不是以为按软件开发流程,开发接近尾声才轮到测试上场表演呢?
NO,不止开发,产品也是你要“针对”的目标。所以在版本策划评审的时候,你就要上场了。
深入了解业务和需求,提出你的问题,把不合理的地方,从策划开始杜绝掉。
同样,开发的实现方案评审,也是需要测试参与的。这要求测试工程师具备一定的开发基础,能听懂具体方案在讲什么。一方面我们可以站在测试的角度评审方案合理性,另一方面我们可以设计出更有针对性的测试策略。
这就是传说中的测试前移,越早发现不合理的地方,修复成本就越低。
测试用例
然后就是根据产品策划和开发方案,设计测试用例,并组织用例评审了。这也是测试工程师的核心工作。
设计用例时,除了功能的正确性,比如核对语音聊天的界面是否和策划相符、按钮功能是否有效等,更重要的是从用户角度出发,去挖掘一些影响体验的问题。比如按钮位置是否符合人的操作习惯,交互是否友善等。
除了功能上的测试,还有很多其他测试维度,比如:稳定性、效果、性能、安全、国际化……
某些维度因为专业知识要求较高,会产生专门的测试岗位。
还是以刚才的语音聊天功能为例,语音效果如何测评?这其实并不是一个容易回答的问题,是依靠人耳进行主观测试,还是有更客观的测试方法?有哪些语音质量评估算法?评价标准如何确定?是否有国际通用标准呢?
具备回答这些问题能力的,是“音频测试工程师”,与之类似需要掌握较多专业知识的,还有影像测试、安全合规测试等。
质量目标
除了用例设计,还需要制定质量目标,比如性能测试,通常会测试应用的启动时间,质量目标就可以设定为:启动时间不超过 xxx 毫秒。最终版本测试中,达到预期目标,才可以准出。
质量目标不是凭空制定的,需要综合历史版本的数据表现,和行业内同类产品的表现来制定。这也是测试工程师的份内事——竞品分析。同样的功能,别人是怎么做的;对比业内同类产品,搞清楚自己产品的优劣势。
有数据支撑,质量目标的合理性才更容易被项目成员接受。
测试范围
好了,质量目标有了,测试策略有了,下面就是测试执行了,大厂一般会有专门的测试执行人员,测试工程师只用设计测试策略,不需要参与执行,小公司就都要自己一把抓了。
既然考虑的越多,用例覆盖的越全,就能测试出更多潜在问题,那只要在每个版本,狂加用例就好了,对吗?
NO,那么多用例,猴年马月测得完啊! 测试工程师在了解当前版本的修改内容后,要和开发沟通评估影响范围,针对性给测试策略。在保证覆盖率的前提下,减少冗余的用例,缩短需要的测试周期,这样,才不会被项目经理催的昏天黑地,不会被测试执行吐槽的颜面扫地。
具体测试范围的圈定,也要根据现有的资源情况和项目时间做出合理调整。排期可能delay,测试时间可能缩短,测试资源可能不够,这时要靠工程师按重要性做出取舍:挑选合适大小网眼的“渔网”,优先拦住更大的“鱼”。
自动化测试(测开)
有些用例耗时很久,花费人力大,有些用例是枯燥重复的点点点,能不能对这些用例进行优化呢?
能,让机器去做不就行了!这就是很多老板推崇的自动化测试,它是一个降本增效的利器。
很多大厂会设置专门的自动化测试开发岗位,即大家口中的“测开”。他们的主要职责就是构建自动化测试方案:
-
比如用 UI 自动化代替点点点;
-
用接口自动化提高测试效率;
-
用白盒自动化,从源码层面对产品进行测试;
-
开发项目质量管理平台,提供质量数据看板。
本质上,自动化的目的无非两点:
-
提高效率,节约人力
-
提供人工无法做到的测试能力和测试精度。
但无论是做测试工作还是自动化工作,都不能脱离开业务,业务才是根本。很多自动化人员沉迷技术研究,忽视了对业务的理解,是本末倒置,技术也变成了无根之萍。
QA
经常和测试放在一起的另一个岗位是 QA(Quality Assurance 质量保证)。
QA 负责质量管控流程的制定和改善,监督和跟踪整个项目过程。在我看来,QA 更像一个项目经理的角色,push 各方完成最终的质量目标。测试是他们管控的其中一环,他们是首当其冲对产品的市场口碑和用户体验负责的人。
一个优秀的 QA,最重要的是对问题风险的评估能力:模块质量没有达标,预计对市场和用户造成多大影响,是否需要卡准入和上线?市场出现投诉后,及时确认影响范围,快速帮助项目做出决策:是否停止推送,版本回退?
这些珍贵的决策能力,往往需要经过多次惨痛教训才能打磨出来。
对一些小厂或者小型项目而言,测试和 QA 的角色大概率是同一个人。
测试工程师的职业发展
了解完测试的工作内容,职业生涯的发展方向也就明晰了。
1) 走业务路线,做业务专家
业务有其本身的复杂性,懂业务的人才是公司需要的。其中不乏影像、音频这类需要领域知识积累的,积累的越多,不可替代性越高。
2) 走技术路线
技术路线又可以分为两个方向。
一个是了解程序的开发原理,从黑盒测试,逐步过渡到白盒测试。这样职业发展的选择会更开阔,想测试转开发的可以考虑这个。
开发原理具体指什么呢?这里不妨举个例子,假设你是 APP 的测试工程师,了解 Android 四大组件总没错,如果再懂点 Framework 更好了。
第二个方向是自动化测试,主攻自动化技术,学习一些自动化框架和工具,为公司搭建属于自己的自动化测试体系,这个也就是所谓的“测开”。
测开的核心仍然是如何在业务上发挥价值,不然搞了一堆框架,业务没用上几个,年底老板一算产出,然后就把你开了,哈哈。
3) 管理路线
其实我觉得测试岗位本身的属性就更偏向于管理,比如了解业务、跟踪问题、管控质量、对结果负责、推动开发干活等,这些都是一个 leader 应该扮演的角色。
你可以选择主力做项目管控,先做模块的 QA,然后慢慢变成大项目 QA。感觉和项目经理的发展路线差不多。管理的业务多起来后,自然而然的要申请加人,当小组长,慢慢就变管理岗了。
测试工程师的待遇
如果只会做功能测试,也就是用鼠标“点点点”的那种,基本是没啥技术含量的,工资肯定干不过程序员,而且差得很远。
在《2022 年度软件质量保障行业调查报告》中,有 65% 的测试工程师薪资小于 20K;而在《2022 互联网大厂程序员出路大数据探析》中,从各大行业程序员的招聘平均年薪来看,均高于 24万。
一些非互联网行业的程序员薪资也有着很好的成绩,根据数据统计,电子通信、金融、互联网、服务外包行业的程序员薪资排在前四名,平均年薪均超过 30W。
在招聘网站搜索 3-5 年的开发工程师招聘信息,薪资范围在 20K-40K,而同级别的测试工程师的薪资范围基本在 10K-20K,可见该级别程序员工资比测试工程师薪资高 10-20K。
而对于自动化测试(测开),虽然很多公司宣称会对标开发(也就是常说的程序员),薪资一致,但实际上肯定有差距。一般,相比同职级的普通开发工程师,测试薪资会低 15% 甚至更多。
但好处也是显而易见的,测开的工作强度和开发难度要小一些,只要产品能用就行,不需要深度钻研技术。相对而言,更能兼顾工作和生活。
补充
在最近两年的大公司招聘中,有的甚至不招聘测试工程师了,而是只招聘测试开发。对于测试工程师的需求,他们会采用外包的方式解决。
测试开发工程师除了需要掌握常见的测试技能,还要具备代码开发能力,能够开发出一些测试工具,编写自动化测试脚本,甚至,还需要开发测试平台。从知识宽度上将,测试开发工程师和普通程序员是相当的。
本文链接:http://task.lmcjl.com/news/3858.html