最近经常被问到软件测试这个行业的前景,网上也有大量唱衰测试这个行业的声音,很多选择职业方向的同学对是否要进入这个职业也非常迷茫。
所以开一贴来聊一聊秋草对软件测试这个岗位的要求以及对其前景的看法。
软件测试到底是个什么样的岗位?
选择一个行业,首先要了解这个行业存在的目的,到底是提供什么价值的?
软件测试作为软件行业的一个技术分支,是一个面向软件质量的岗位。
这个职业存在的目的,是基于质量作为产品的核心属性之一,需要得到最大程度地保证。测试工作就是在产品交付用户前,用于完成对产品质量的评估,尽可能暴露产品中潜在的质量问题,以便产品研发团队进行改进和补救。
所以软件测试这个工作的目的: 尽可能及时、准确地评估出被测试对象的质量状态
从软件测试职业的目的和它的价值来说,这个职业不是生产单位,而是保障单位。是通过这个职位关联的各种测试技术,去保障产品,使之不因为质量问题出现损失的一个职业。
因此,只要质量依然是产品的核心属性,质量问题会影响到产品成功与否,那么测试这个职能就依然是一个必要的技术分支,是软件产品研发中必须包含的一个职能。
软件测试的技能要求
既然软件测试是一个技术岗位,那么要做好这个工作,离不开掌握各种相关技能。
基础技能
1. 首先是跟软件研发流程和软件项目运作本身相关的知识。理解软件工程从需求到交付的完整过程,理解项目运作以及测试这个岗位在其中的作用。软件研发生命周期 SDLC 具体是什么?测试生命周期又是什么?传统研发模型和敏捷研发的关系?敏捷有哪些活动等等?
2. 对测试基础理论的掌握,主要是各种不同的测试方法、测试类型,对各种测试概念的理解。
3. 测试工作本身相关的技能要求。包括测试用例、测试报告的编写,Bug的提交要求,故障定级标准、故障处理流程、状态报告
4. 业务理解能力要求。软件需求的构成要素,产品整体架构和需求的关系,产品的软件设计和功能的关系等,要建立起对产品和业务逻辑的理解。
有了上述的基础技能,那么就基本达到了完成测试工作的基本要求。
技术能力
而除了掌握基础技能之外,将测试工作完成好,必然还需要掌握进一步的进阶类的关联知识
1. 关联的IT技能。主要是操作系统、数据库、网络这几大块。而这每一块都有足够的深度和广度。很少有人能在每个方向上都做到极为精通。但要成长为一个优秀的测试人员。这几部分能力却是不可或缺的。
2. 一些进阶的测试类型,需要建立在更高技术能力基础上的测试类型,主要有性能测试、安全测试以及一些专项测试
3. 自动化测试相关的技能。能够实施自动化,目前已经是测试人员的必备技能了。而自动化能力建立在编程能力和不同自动化类型工具的基础上。
软技能
软件测试也是一个非常强调协作和沟通能力的岗位。因此除了技术能力之外,相关的一些软技能对于能否把这个工作做好、做漂亮也尤为关键。
1. 测试不等同于检查, 测试能力很重要的部分还包括推理能力、设问能力、观察能力等软技能。细心、发现线索、有探究精神对于测试工作尤为重要。
2. 归纳总结、书面表达能力。 输出故障说明、测试报告等等都是归纳总结和书写能力的表现。测试工作的目的是能够评估出产品的质量状态,而把这个评估出的状态呈现出来,关联的就是这里的书面表达能力了
3. 协作沟通能力。
测试工作因为工作性质,会需要频繁地和BA、和开发包括和项目其他成员频繁地沟通和协作,澄清问题,很多时候都需要说服别人理解问题对质量的影响。所以良好的协作沟通也是测试工程师的重要能力组成。
4. 演示宣讲能力
测试作为产品发布前的最后一道检验程序,很多时候在向用户交付,或者敏捷团队中的演示会环节会需要担负起向其他人员进行产品功能介绍、演示的职责,这种情况下自己的演示宣讲能力就不仅是对个人,也是对团队提供价值的一种能力了
职业发展通道
从事测试行业,个人的职业发展方向,总体上来说有三个方向。网上有一张测试发展路线图其实比较清晰地说明了测试的成长路径。
管理路线
1. 这条线其实是主线,在中国国情下,经验、技术、资历达到一定程度,还是会逐步向管理转型,从测试主管、测试经理、测试总监到质量总监、副总,沿这样一条线逐步晋升成长。
2. 技术路线
而作为一个技术岗位,大多公司其实也提供技术发展通道,通过软件技术路线,从中高级工程师到资深工程师乃至专家工程师,以技术提升得到职业发展。
3. 业务路线
此外,测试作为研发团队中,对整体业务相对更熟悉的岗位,向业务路线发展也是一个重要的成长通道,从测试分析到业务分析以至项目管理、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 近期内还替代不了测试工作。