软件工程师以各种形式存在,完完全全的开发人员或测试人员,也有开发和测试兼顾的工程师。如果软件工程师以开发为主,兼作测试,对专业测试能力要求相对偏低些,侧重测试工具开发或自动化测试,侧重单元测试、接口测试的能力,在系统测试上更多扮演用户角色,加强基本功能测试。如果软件工程师以测试为主,兼作开发,对测试能力要求就高,侧重掌握系统的功能测试和性能测试等方面的测试能力。在实际的工作岗位上,人们又将测试开发(侧重自动化测试平台和框架、工具的开发,而不是脚本的开发)和业务测试(完成产品功能特性的测试任务,包括测试设计和执行)分开,一些大的公司(通常其开发的系统规模也大)将性能测试、安全性测试单独拿出来交给性能测试工程师、安全工程师。甚至有些大公司让资深的测试工程师负责测试的分析建模与设计,其它工程师负责测试的执行与缺陷跟踪。所以不同岗位的人,对测试技能的要求也不一样,但不外乎向下面三个方向发展:
- 技术管理,如阿里的M系列,走经理、总监…职业发展路径,更需要加强团队管理、协调、领导力、计划能力、风险控制等技能;
- 测试开发或专项测试,侧重自动化测试框架、平台开发和性能测试等,成为测试架构师、技术专家,自然会加强业务建模、系统架构设计、编程(代码)、脚本开发与调试、环境构建(云、容器)等方面的技能。
- 业务测试,侧重产品的功能测试、易用性测试等,成为资深测试工程师、业务测试专家,侧重业务分析、测试策略制定、测试用例设计、情境性思维等方面的技能。
纯碎的算法、工具等测试,可能不需要业务,但绝大多数的测试工作都和业务相关,需要业务相关的领域知识。不管是向哪个方向发展,还是需要一些共同的基本能力和基础知识,如:
- 测试基础理论,如软件工程学、测试基础知识、操作系统、数据库、形式化方法、心理学等;
- 基本测试能力,如计算机操作能力、测试基本方法、测试工具的使用等;
- 基本软实力,如沟通能力、学习能力、观察力、专注力、测试思维等。
这些基本能力和基础知识也是可以处于不同水平的,如沟通能力,对一般工程师、资深工程师、经理、总监等有不同的要求。微软对沟通技巧分为四个层次(水平),如下表所示。
多数软件公司会强调创新、协作等,引导大家达成共识;敏捷价值观则强调“开放、尊重、协作、反馈、 简单、勇气、承诺、专注”(可以理解为工程师的素质,也是一种软实力)。各个公司因其文化不同对软实力的要求不一样,如微软公司强调工程师具有下列个人素质:
这里没有提到思维能力,但从测试角度看,思维能力和学习能力一样重要,是测试人员核心能力。从测试工作来看,除了软实力、领域知识、业务理解能力和熟悉程度、质量和项目管理能力、代码能力等之外,有一些基本的测试技能:
低水平的测试只会执行,像用户那样执行,几乎没有门槛,那不是专业人员,可以忽略。谈到专业测试,人们往往首先想到的是测试设计。但测试设计的基础是分析,而分析的基础是测试思维方式和思维能力。而且测试人员最好先做几年开发——理解架构、程序和代码等,具备良好的开发能力,了解开发人员的思维和习惯,然后再做测试,就更容易成长为优秀测试工程师。在某些公司,把开发者测试(主要是单元测试、集成测试)称为“LLT:Low Level Testing (底层测试或低层测试)”,只有具备底层测试能力,才能走向高层测试。
有了上面两层能力,基本可以干活了,做LLT、做功能测试,但还缺一层能力。不理解业务,一定做不好测试。基于业务、基于分析,培养自己的设计能力、自动化测试能力,才能达到一个合格的测试工程师。如果没有业务、没有分析、没有测试基础,自动化测试能力只是空中楼阁。现在流行“测试开发”岗位,也应该是“测试在先、开发在后”。成为合格的测试工程师之后,可以追求一些突破,在专项测试、测试效率或速度、管理等上面寻求突破,成为测试领域技术专家或技术管理者等。
最后,就通过下面能力模型图完成总结。