软件测试岗位,职业前景到底怎样?

最近经常被问到软件测试这个行业的前景,网上也有大量唱衰测试这个行业的声音,很多选择职业方向的同学对是否要进入这个职业也非常迷茫。

所以开一贴来聊一聊秋草对软件测试这个岗位的要求以及对其前景的看法。

软件测试到底是个什么样的岗位?

选择一个行业,首先要了解这个行业存在的目的,到底是提供什么价值的?

软件测试作为软件行业的一个技术分支,是一个面向软件质量的岗位。

这个职业存在的目的,是基于质量作为产品的核心属性之一,需要得到最大程度地保证。测试工作就是在产品交付用户前,用于完成对产品质量的评估,尽可能暴露产品中潜在的质量问题,以便产品研发团队进行改进和补救。

所以软件测试这个工作的目的: 尽可能及时、准确地评估出被测试对象的质量状态

我的另一篇博文 《软件测试的真正目的》 中对这一点进行了详细的说明,这里不再赘述。

从软件测试职业的目的和它的价值来说,这个职业不是生产单位,而是保障单位。是通过这个职位关联的各种测试技术,去保障产品,使之不因为质量问题出现损失的一个职业。

因此,只要质量依然是产品的核心属性,质量问题会影响到产品成功与否,那么测试这个职能就依然是一个必要的技术分支,是软件产品研发中必须包含的一个职能。

软件测试的技能要求

既然软件测试是一个技术岗位,那么要做好这个工作,离不开掌握各种相关技能。

基础技能

  1. 首先是跟软件研发流程和软件项目运作本身相关的知识。理解软件工程从需求到交付的完整过程,理解项目运作以及测试这个岗位在其中的作用。软件研发生命周期 SDLC 具体是什么?测试生命周期又是什么?传统研发模型和敏捷研发的关系?敏捷有哪些活动等等?

  1. 对测试基础理论的掌握,主要是各种不同的测试方法、测试类型,对各种测试概念的理解

  1. 测试工作本身相关的技能要求。包括测试用例、测试报告的编写,Bug的提交要求,故障定级标准、故障处理流程、状态报告

  2. 业务理解能力要求。软件需求的构成要素,产品整体架构和需求的关系,产品的软件设计和功能的关系等,要建立起对产品和业务逻辑的理解。

有了上述的基础技能,那么就基本达到了完成测试工作的基本要求。

技术能力

而除了掌握基础技能之外,将测试工作完成好,必然还需要掌握进一步的进阶类的关联知识

  1. 关联的IT技能。主要是操作系统、数据库、网络这几大块。而这每一块都有足够的深度和广度。很少有人能在每个方向上都做到极为精通。但要成长为一个优秀的测试人员。这几部分能力却是不可或缺的。

  1. 一些进阶的测试类型,需要建立在更高技术能力基础上的测试类型,主要有性能测试、安全测试以及一些专项测试

  1. 自动化测试相关的技能。能够实施自动化,目前已经是测试人员的必备技能了。而自动化能力建立在编程能力和不同自动化类型工具的基础上。

软技能

软件测试也是一个非常强调协作和沟通能力的岗位。因此除了技术能力之外,相关的一些软技能对于能否把这个工作做好、做漂亮也尤为关键。

  1. 测试不等同于检查, 测试能力很重要的部分还包括推理能力、设问能力、观察能力等软技能。细心、发现线索、有探究精神对于测试工作尤为重要。 

  2. 归纳总结、书面表达能力。 输出故障说明、测试报告等等都是归纳总结和书写能力的表现。测试工作的目的是能够评估出产品的质量状态,而把这个评估出的状态呈现出来,关联的就是这里的书面表达能力了

  3. 协作沟通能力。

测试工作因为工作性质,会需要频繁地和BA、和开发包括和项目其他成员频繁地沟通和协作,澄清问题,很多时候都需要说服别人理解问题对质量的影响。所以良好的协作沟通也是测试工程师的重要能力组成。

  1. 演示宣讲能力

测试作为产品发布前的最后一道检验程序,很多时候在向用户交付,或者敏捷团队中的演示会环节会需要担负起向其他人员进行产品功能介绍、演示的职责,这种情况下自己的演示宣讲能力就不仅是对个人,也是对团队提供价值的一种能力了

职业发展通道

从事测试行业,个人的职业发展方向,总体上来说有三个方向。网上有一张测试发展路线图其实比较清晰地说明了测试的成长路径。

  1. 管理路线

这条线其实是主线,在中国国情下,经验、技术、资历达到一定程度,还是会逐步向管理转型,从测试主管、测试经理、测试总监到质量总监、副总,沿这样一条线逐步晋升成长。

  1. 技术路线 而作为一个技术岗位,大多公司其实也提供技术发展通道,通过软件技术路线,从中高级工程师到资深工程师乃至专家工程师,以技术提升得到职业发展。

  2. 业务路线 此外,测试作为研发团队中,对整体业务相对更熟悉的岗位,向业务路线发展也是一个重要的成长通道,从测试分析到业务分析以至项目管理、QA等岗位角色,同样也是适合的发展方向。

未来的前景

最后,再谈谈很多同学,包括不少测试同行对软件测试这个职业前景的担心,测试是否已经式微?今后的发展方向是否就是逐步淘汰测试?

传统研发已过时,敏捷研发中并不需要测试?

其实早几年已经有过一次认为测试岗位可以逐步取消的风潮。“google、facebook裁撤测试团队”,“开发测试人员比例减小到10:1”, 包括流行起来的敏捷研发,也只定义了一个开发团队。似乎测试在现代软件研发流程中已经不再是一个必备岗位。

其实在敏捷研发中,并没有削弱测试,反而是更加强调了测试,特别是测试前移。包括TDD(测试驱动开发),需求验收标准这样的实践,都在强调功能测试的重要性。只是这些实践,更多是把测试放到开发团队内,而不是一个单独的专职测试团队。不再区分敏捷团队(dev team)中的不同角色,而是强调,团队中应该具备完成产品研发的各种角色和能力。

也就是说,虽然敏捷中只定义了PO、Scrum Master、Dev Team三个角色。但Dev team中其实应该包含具备各种能力的成员,包括设计人员、开发人员、测试人员,不细分具体的职责,强调的是团队整体,可能有的成员会身兼数职。

所以,并不是敏捷排斥了测试,而是把包括测试在内的研发活动作为一个整体来看待。我们也可以说敏捷中不再有设计,不再有配置管理等等。

专职测试?

而这个变化,是不是又说明专职的测试人员岗位会消失? 从敏捷的定义中来看,确实如此。就像敏捷中也不再会有专职的设计人员、配置人员,包括开发人员定义一样。从这个意义上,敏捷团队中不再有专门的测试工程师。

但另一方面,我在其他的文章中也讨论过,敏捷强调团队整体,整体对质量负责,团队自组织完成产品研发的各方面事务。这是提出敏捷概念的这群软件开发大师们的理想,但理想不等于现实。

现实是术业有专攻,特别是开发和测试这两个职能,先天是比较对立的。

  • 开发人员更倾向追求确定性。基于确定性的需求,步骤,定义产品的表现。
  • 测试人员则需要基于不确定性来考虑各种可能路径和分支场景,基于未知来评估产品的可能表现。

这两种思维方式上的对立,决定了很难让一个角色很好地完成开发兼测试两种职能。敏捷团队中,依然会需要更偏重测试的角色存在。专职的测试人员必然还会发挥他的专业价值。

测试人员本身的转型

当然,敏捷的提出,也为测试人员纠正一些原先错误的价值观提供了契机。测试并不是为了发现Bug,也不是仅仅为了验证需求。而是基于产品质量的视角,去评估产品的质量状态,目标还是产品本身的价值体现。测试应该承担起敏捷团队中QA的部分职能。

自动化测试/AI 会替代测试岗位?

另一个主要的担心,是随着 AI 的发展,测试岗位是否会被 AI 代替? 当然不仅仅是测试,其他 IT 岗位包括开发人员也存在类似的担忧。

坦白说,以现在AI发展的速度,十年后很难说像编程、软件开发还是一个多么依赖强技能的职业,开发产品可能更多是将自己的想法准确地描述给AI,AI根据输入的需求完成实现。

测试岗位理论上也类似,很多本来程序员会犯的错误,AI在实现的时候先天就会规避掉,所以程序本身的bug将极大减少。但除此之外,测试工作中还有一部分是未考虑到的测试场景,当然AI可以根据需求自行补充很多异常场景,但如果这个场景是强业务相关的,AI可能还是难以靠自身的推演完全覆盖。

此外,很多异常测试场景是严重依赖测试环境构造的,而这些异常情况的模拟如断网、资源不足、高并发等等,脱离实际操作人员的干预,应该还比较困难。

还有一点,AI自身的训练,也存在数据毒药的问题,就像现在自动化测试也存在测试脚本本身Bug的问题类似,对AI本身成效的验证,也是属于测试范畴。

所以从这些角度来看,AI 近期内还替代不了测试工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何学习cuda编程?

第一本cuda教材: CUDA By Example​ developer.nvidia.com/cuda-example 配套网课: Udacity CS344: Intro to Parallel Programming​ developer.nvidia.com/udacity-cs344-intro-parallel-programming 记得做网课作业。 然后就靠项目上手了。 我当时实习时候的项…

ProTable样式缺失

在使用Ant Design Pro开发页面时,想要引用ProComponents组件中的ProTable表格,引入官方文档的案例发现缺少样式 官方文档地址ProTable - 高级表格 - ProComponents (ant.design) 引入的是第一个Demos 样式预览: 代码 import { EllipsisO…

今天不分享技术,分享秋天的故事

引言 这个爱情故事好像是个悲剧,你说的是婚姻。爱情没有悲剧,对爱者而言,爱情怎么会是悲剧呢。对春天而言,秋天是它的悲剧吗。结尾是什么,等待,之后呢,没有之后。或者说,等待的结果…

Spring Cloud微服务

Spring Cloud 是一个专注于微服务架构的一站式解决方案,它通过整合多个优秀的开源框架和工具,为开发者提供了构建、管理和维护微服务系统所需的全方位支持。以下是关于 Spring Cloud 微服务的详细介绍: 基本概念 微服务架构:微服务…

图像处理算法的形式

一 基本功能形式 按图像处理的输出形式,图像处理的基本功能可分为三种形式。 1)单幅图像 -------->单幅图像 2)多幅图像-------->单幅图像 3)单(或多)幅图像------->数字或符号符 二 几种具体算法形式 1.局部处理 …

搭建 mongodb 副本集,很详细

搭建 mongodb 副本集,很详细 一、前言二、创建用户1、创建 root 用户2、创建测试用户3、修改用户密码 三、修改配置文件(主节点)1、开启登录认证2、加上副本集3、最终配置文件 四、副本节点1、创建副本节点目录2、编辑配置文件3、启动副本节点…

力扣283-- 移动零

开始做梦的地方 力扣283 : 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。 何解? 1,暴力枚举&#xff1a…

JS面试八股文(一)

😊JS面试八股文(一) 1.JS由哪三部分组成?2.JS有哪些内置对象?3.操作数组的方法有哪些?4.JS对数据类型的检测方式有哪些?5.说一下闭包,闭包有什么特点?6.前端的内存泄漏怎…

adb常见指令以及问题解决

1.屏幕截图 问题: /system/bin/sh: pull: not found 最后是一个美元符号$,则表示不是以root身份运行; 最后是一个井号#,则表示是以root身份运行。 解决方案: 直接退出,在PC端使用adb pull,而…

Spring Boot实现的动态化酒店住宿管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理酒店客房管理系统的相关信息成为必然。开发…

软件设计师考试大纲整理

为了防止出题者不按常理出牌,此文档为根据上午题大纲自行整理的扩展知识,并非考试常考题 此文档为根据上午题大纲自行整理的扩展知识,并非考试常考题 此文档为根据上午题大纲自行整理的扩展知识,并非考试常考题 闲暇时间了解知…

Web高级开发实验:EL基本运算符与数据访问

一、实验目的 掌握EL的定义,即Expression Language,用于提高编程效率。学习和掌握在开发环境中创建Java文件,并在jsp文件中使用EL表达式去调用其中的方法与属性等。 二、实验所用方法 上机实操 三、实验步骤及截图 1、创建javaweb项目&a…

力扣刷题(sql)--零散知识点(1)

通过一段时间的刷题,感觉自己的sql能力逐渐上去,所以不会像前三道题一样讲那么详细了,这里主要会讲到一些特殊的知识点和方法。另外,我的建议是做完一个题有好的想法赶紧记录下来,不要想着最后汇总,不然会懒…

基于SSM平面设计课程在线学习系统的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,课程类型管理,课程学习管理,试题讲解管理,作业信息管理 前台账号功能包括:系统首页,个人中心&…

Vue3实现获取验证码按钮倒计时效果

Vue3实现获取验证码按钮倒计时效果 效果描述:用户点击获取验证码按钮,发送请求给后端,按钮失效,并且开始倒计时60秒;在此期间,用户无法再次点击按钮,即使用户刷新页面,倒计时依然存在…

Java项目实战II基于微信小程序的马拉松报名系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 马拉松运动…

XQT_UI 组件|01|颜色

介绍 XColor 是一个用于处理颜色的类,提供了获取颜色和样式的方法。它可以与 Qt 的 UI 组件结合使用,以便在应用程序中实现丰富的颜色效果。 安装 确保你已经在项目中包含了 xqt_color_palette.hpp 和相关的头文件。 #include "xqt_color_palet…

【Go语言】Gin框架的简单基本文档

思维导图 一、go 原生的http服务 在go中写一个web服务非常方便和快速: package mainimport ("encoding/json""fmt""io""net/http" )type Response struct {Code int json:"code"Data any json:"dat…

Spring中配置文件方式来配置实现数据源

我的后端学习大纲 我Spring学习大纲 1.1.数据源(连接池)的作用: 1.数据源(连接池)是提高程序性能而出现的2.数据源的使用步骤 : 创建数据源对象,在对象创建的时候会初始化部分连接资源使用连接…

【jvm】堆的内部结构

目录 1. 说明2. 年轻代(Young Generation)2.1 说明2.2 Eden区2.3 Survivor区 3. 老年代(Old Generation)3.1 说明3.2 对象存放3.3 垃圾回收 4. jdk7及之前5. jdk8及之后 1. 说明 1.JVM堆的内部结构主要包括年轻代(You…