有位同事曾经很认真地问过我一个问题。他说他现在从事软件测试工作已经4年了,但是他不知道现在的工作和自己在工作3年时有什么不同,此外他还想知道他做软件测试工作到第5年或第6年会怎么样。后来他在工作到第5年的时候转岗了。虽然他已经转岗了,后来联系时他又问了我这个问题,似乎这个问题困惑他很深、很久了。
这件事情对我的触动很大,我相信这个问题是带有一定普遍性的。软件测试是一个缺乏发展空间、做到一定阶段后只能通过 “转岗” 来寻找发展机会的职业吗?肯定不是。Martin Pol, 欧洲业界公认的“ Test Guru” (大佬,精神领袖),1998 年欧洲第一届杰出测试贡献奖获得者,并获得英国骑士勋章。Martin 在测试领域已经几十年,最后在测试工作上名利双收。而且,据说他的大女儿和小女儿都是做测试的,这是名副其实的“测试世家” 。但是Martin的例子并不能解决“软件测试本身有哪些发展”这个问题。只是让我们看到了最美好的结果,让我们知道这条路是能走通的。那么软件测试的职业发展方向有哪些?作为软件测试工程师, 又该如何为自己制订职业发展规划?
软件测试在职业发展上,可以概括分为“管理”和“技术”两大类。另外,软件测试还可以在质量领域发展。
1.1 软件测试在管理上的发展
软件测试管理是大家比较熟悉的软件测试职业发展路线之一,比较流行的职位包括测试组长、测试经理、测试代表、测试主管、测试总监、测试部长等。不同的公司中相同职位的工作范围可能略有不同,按照管理级别的高低,大致又可分为以下三级。
1.初级软件测试管理者:测试组长
一般由有两年左右工作经验的测试工程师担当。可能会管理会管理2~5名软件测试工程师。一般来说,测试组长不会负责整个产品,只是负责其中一个或多个特性。
测试组长并不是完全的管理者。从事的管理工作大多仅集中在测试计划的制订和执行上;在产品测试上,他们常会负责产品重点、难点的测试;除此之外,他们还要负责带新员工,让测试工作可以顺利进行下去。
2.中级软件测试管理者:测试经理、测试代表、测试主管
职位排名不分先后,一般由有4年左右工作经验的测试工程师担当。
中级软件测试管理者负责的对象为产品,可能会管10~20名软件测试工程师(其中包括测试组长)。
中级软件测试管理者最重要的工作还是运作测试项目,制订并执行测试计划,测试结束后还需要对产品质量进行评估,给出产品发布建议。要做好这些,需要他们掌握更多的项目管理知识,深入理解项目价值,做好项目范围管理、质量管理、成本管理、时间管理、风险管理和人力管理。除此之外, 他们还要和开发人员、市场人员、服务人员等密切配合、紧密合作,其间,沟通协调能力必不可少。
3.高级软件测试管理者:测试总监、测试部长
一般都有10年以上软件测试工作经验,负责的对象是产品线或公司。
高级软件测试管理者需要理解产品的商业目标,直接对产品成功负责。他们需要对测试团队的发展负责,进行人员招聘和培养,留住关键人才,提高或更新不合格人员,提升团队的胜任力和职业能力;负责项目财务管理(预算和控制);负责资源的计划与分配;持续改进测试能力,提升效率和产品质量,从测试的角度对交付产品的成本、周期和质量负责。
1.2 软件测试在技术上的发展
软件测试在技术上的发展方向,似乎不像软件测试在管理上的发展方向那么明确。一种观点是按照测试资历和能力分为助理软件测试工程师(或者是实习软件测试工程师)、初级软件测试工程师、中级软件测试工程师、高级软件测试工程师和主任软件测试工程师(或是资深软件测试工程师)。但是这种分类方式并没有突出“软件测试技术”,所以我个人更倾向于一种简单的分法——产品测试技术和专项测试技术。
产品测试技术是指把某个具体(或一类)产品测试得更好的技术;专项测试技术并不是针对具体的产品,而是测试领域普遍适用的技术。
产品测试专家:软件测试架构师
软件测试在技术上可以向产品测试技术专家方向发展。有些公司称产品测试技术专家为软件测试系统架构师(本书简称为测试架构师)。
测试架构师和系统架构师在职责上是有一定对应关系的。
系统架构师在业务(需求)向开发技术转换的过程中起到了桥梁作用,负责产品开发的整体架构设计;测试架构师是在业务(需求)向测试技术转换的过程中起桥梁作用,负责产品测试的整体架构设计。
系统架构师负责对产品开发中的技术重点和难点进行研究与攻关;测试架构师负责对产品测试中的测试重点和难点进行研究与攻关,为测试组织提供最优的测试方法。
系统架构师协助开发项目经理制订项目计划和控制项目进度;测试架构师负责协助测试经理制订测试项目计划和控制测试项目进度。
系统架构师负责组织开发项目团队内部的技术培训工作;测试架构师负责组织测试团队内部的技术培训工作。
系统架构师需要有一定的战略规划能力、业务建模能力、数据分析处理能力、面向产品生命周期的质量保证和持续改进能力;测试架构师同样需要这些能力。
有人评价系统架构师是产品开发的 “灵魂”,那么测试架构师就是产品测试的 “灵魂” 。
2.专项测试工程师
软件测试在技术上,还可以向专项测试工程师方向发展,成为软件测试某领域的专家。
从测试体系的角度来看,软件测试发展至今,已经形成了一套完整的测试体系。测试体系中的任何一个环节,测试策略、测试分析设计、测试执行、测试评估、测试流程等每个领域的内涵都很丰富,包含了很多可以深入发展研究的技术,比如自动化测试技术、测试工具(包括产品测试模拟工具和测试流程管理工具)开发、缺陷分析和测试评估技术等。
从产品质量属性的角度来看,专项测试技术还可以包含性能测试技术、可靠性测试技术、安全性测试技术等。
实际上,产品测试专家(软件测试架构师)也需要精通上文提到的各项测试技术,如测试分析和设计、自动化测试技术、性能测试技术。但是,产品测试专家使用的任何技术都是为产品服务的,他需要针对当前测试的特定产品选择最合适的测试技术,并针对不同的产品对测试技术进行适配调整。而专项测试技术专家并不关注具体产品, 而是偏向技术共性方面的研究。
表1-1和表1-2概括了一些常见的专项测试技术发展方向, 供大家参考。
表1-1 测试技术类专项测试技术
表1-2 质量属性类专项测试技术
1.3 软件测试在质量领域的发展
软件测试还可以向 “质量管理” 领域发展。主要参考方向如下:
1.产品流程设计
负责企业在产品开发、市场、交付等全流程体系建设。例如,著名的集成产品开发(IPD)流程。
2.企业质量管理者
企业质量管理已经成为企业管理的一个重要组成部分。
质量大师朱兰把“质量策划”“质量控制”和“质量改进”称为质量管理三部曲。每一个步骤的具体含义如下:
质量策划:致力于制订质量目标并规定必要的运行过程和相关的资源以实现质量目标;
质量控制:致力于满足质量要求;
质量改进:致力于增强满足质量要求的能力。
企业质量管理者通过这三部曲系统地对企业的质量进行管理。质量管理体系方法可以概括如下:
建立一个以过程方法为主体的质量管理体系;
明确体系内各过程的相互依赖关系,使其相互协调;
控制并协调质量管理体系各过程的运行,关注其中的关键过程,规定关键活动的运作方法和模式;
理解为实现共同目标所必需的作用和责任,减少因为职责不明导致的障碍;
在行动前确定所需资源的需求;
设定系统目标以及各个过程的分目标,通过分目标的实现,确保实现预期的总目标;
通过监控和评估,持续改进质量管理体系,不断提高组织的业绩。
当然,这里的质量不仅仅是指产品质量,要达到的效果是企业整体质量的提升。
3.客户满意度管理专家
“客户满意” 是产品成功的关键因素,没有之一。关注客户的声音 ,让客户满意,无疑对产品质量提升有非常重要的意义,“客户满意度管理” 也受到越来越多的关注,成为质量管理的一个重要内容。
对“客户满意度管理”来说,重点是要识别关键用户的满意要素,和做好与用户接触点相关的质量保证。
“关键用户满意度要素” 是指通过对特定细分市场进行市场调查后,分析得出这类客户对特定的产品质量要求和服务属性,并把关键客户满意度要素作为企业产品与服务战略的输入,使企业最大限度地保持产品竞争力;而“用户接触点相关的质量保证” 是指包含客户可以感知到的产品和服务,其中服务包括产品推广、投标达标、供货保障、工程交付、技术支持、备件支持和客户培训等。客户对任何接触点都会产生好或者不好的感知,所以需要定义各接触点的关键、标准动作,并确保执行到位,提升客户感知质量。
客户满意度管理,前提还是需要对用户有很好的需求和理解。和软件测试不同的是,这里的客户需求,已经不仅仅局限于产品,而是客户可感知的方方面面,涉及面会更广。对于软件测试工程师来说,往客户满意度管理方面发展,也是不错的选择。
主要针对软件测试在制订职业规划时可能会遇到的一些问题,提出个人的处理建议,供大家参考。
2.1 做管理还是做技术
软件测试在职业发展上可以概括为 “管理” 和 “技术” 两大类,这点大家已经比较明确了。现在的问题是,该走管理路线,还是该走技术路线呢?
也许是受到中国传统思想观念“学而优则仕”的影响,面对这个问题,很多人会不假思索地选择做管理,甚至会认为一个30岁的软件测试工程师还在做技术是一件丢人的事情。其实我们可以先抛开其他问题不谈,单纯从时间上来推断,本科生正常情况下23岁毕业,到30岁有7年的时间;研究生25岁毕业,到30岁只有5年的时间,对软件测试这种深入难、且对从业者综合要求很高的职业来说,5年、7年其实并不算太长,对软件测试的理解,只能算是 “管中窥豹” 而已。所以建议软件测试工程师在计划职业发展里程碑时,可以把时间放得更长一些, 5年一个小台阶,10年一个大台阶,也许对软件测试行业来说,更合适一些。
另外,软件测试在 “技术方向”和“管理方向”上又是可以相互转换、交叉发展的,测试管理者可以转岗为测试架构师,测试架构师也可以转岗为测试管理者。图2-1是这种转换关系的示意图。
图2-1 软件测试在“管理方向“和“技术方向“ 上的相互转换
为什么软件测试具有这样的特性呢?这是因为软件测试是一门基于实践的学科,对软件测试来说,“管理” 不可能是 “绝对的管理”,软件测试的管理者首先要是产品测试技术专家,这是“做正确的事” 的基础,很难想象一个不懂测试技术、不理解各项测试活动的软件测试管理者如何评估软件测试的重点、难点,如何做计划,如何评估风险控制项目进度;与此同时,“技术” 也不能是 “绝对的技术”,不理解“价值”“目标”和“成本”的技术人员容易犯的错误就是陷入“唯技术论”中,缺乏“管理”思想会让他们制定的测试策略不切实际,一纸空文的测试策略是没有意义的。
一个理想的测试团队,具有测试经理(测试代表)和测试架构师两个角色。测试经理负责管理,测试架构师负责技术,但并不意味着测试经理只管管理,只懂管理,测试架构师只管技术,只懂技术。相反,测试经理(测试代表)和测试架构师要熟悉彼此领域的关键活动,能够评审关键的交付件,相互能够提供各自领域关键活动的决策参考,可以相互备份。测试经理和测试架构师之间有分工,更多的是合作。
所以,建议测试管理者一定不要过早地放弃技术,走所谓的“纯管理” 路线,把自己陷入各种管理会议、沟通协调中。不要认为读了几本书,参加了几个沙龙论坛、几次培训就能掌握关键的测试技术方法,只有在产品测试中不断地实践、总结、再实践、再总结,才能不断地提升自己。如果测试技术有短板,测试管理水平也不可能真正上去,随着测试资历的加深,职业能力和资历会变得越来越不匹配,个人的职业发展道路反而会越来越窄。
作者:程序员阿木
原文链接:https://juejin.cn/post/6915720755095273486