嵌入式软件测试:方法、案例与模板详解
上QQ阅读APP看书,第一时间看更新

第1章 全面解读嵌入式测试规程

云计算、大数据、物联网和“互联网+”时代的到来,使越来越多的电子产品成为人们不可或缺的工具,计算机应用已经完全深入到我们的生活中,人们现在已经无法适应没有软件的世界。

尤其是我们现在处在后PC时代,嵌入式系统因其低成本、小体积、低功耗、强稳定性、强实时性等优点越来越多地被人们应用。以下例子都是嵌入式产品。

● 工业控制产品方面,包括医疗设施(血糖仪、血压计、监护仪器、核磁共振仪器等)、工控设备、智能仪表、汽车电子等产品;

● 军事国防产品方面,包括军事电子、军事装备、航空电气等产品;

● 消费电子产品方面,包括信息家电(如空调、微波炉、消毒柜、mp3、语言复读机、智能电视、智能冰箱、机顶盒、数字相机、游戏机等)、智能玩具、通信设备(如手机、可视电话等)、移动存储等产品;

● 网络产品方面,如交换机、路由器、电子商务等产品。

虽然质量可靠的软件给我们的工作和生活带来了前所未有的便利,但是质量不好的软件也让我们付出过惨痛的代价。这让我们充分认识到软件质量的重要性。

本书的重点,直接针对嵌入式软件测试,不讲市面上常讲的测试基础知识,也不介绍测试的基本方法。但是,有几点内容我们还是需要提前理清,以便接下来正确地进行嵌入式测试。

1.1 什么是嵌入式测试

嵌入式软件是一种比较特殊的软件,软件经过分析、设计、编码后只有烧入硬件环境中才可以看见,比如机顶盒的中间件软件、空调的自动控制软件、路由器、交换机等等。嵌入式软件测试/嵌入式测试的目的与传统软件测试是相同的,都是为了发现软件缺陷,修复软件缺陷,最终提高软件的质量。嵌入式系统安全性的失效可能会导致灾难性的后果,即使是非安全性失效,由于其应用场合特殊也会导致重大经济损失。因此,往往嵌入式软件对可靠性的要求比普通软件高。这就要求对嵌入式软件进行严格的测试、确认和验证,以提高产品的可靠性。

1.1.1 先来认识一下嵌入式软件

嵌入式软件测试与传统软件测试有什么区别呢?嵌入式系统我们如何测试呢?在介绍这些疑问之前,我们先了解一下嵌入式系统。

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可剪裁,适应于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由微嵌入式处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序组成(如图1-1所示,嵌入式系统结构),用于实现对其他设备的控制、监视和管理等功能。

图1-1 嵌入式系统结构

嵌入式软件开发与通用软件是不同的,嵌入式应用程序运行在软硬件资源相对缺乏的目标机上。开发环境被认为是宿主机平台(Host),软件运行环境为目标平台。为了保证嵌入式软件的质量,需对嵌入式软件做相应的测试,其目的是为了保证嵌入式软件产品满足用户的需求。嵌入式软件测试领域与传统软件测试目的是相同的,都是找出软件的缺陷,验证软件是否可用,是否符合用户的要求,以提高软件质量。在可靠性方面,嵌入式系统的要求是比较高的。在安全性方面,如果其安全性失效,那么可能会导致灾难性的后果。所以嵌入式软件相比传统软件会进行更严格的测试、确认和验证。

嵌入式软件有自身的特点,如实时性、内存不丰富、I/O通道少、专用性强、开发工具昂贵、与硬件紧密相关、CPU种类繁多、缺陷不像传统软件的缺陷容易修补等等。嵌入式软件开发与传统软件开发存在一定的差异,因此,嵌入式软件的测试工作也不同与传统软件的测试工作。与传统软件测试区别主要表现为以下几点:

● 嵌入式软件测试与其特定的硬件环境密不可分。在嵌入式测试过程中软件与硬件兼容性测试很重要。

● 嵌入式软件对实时性要求严格,并保证嵌入式系统的可靠性和实时性。在测试时需要考虑系统实时性响应问题。

● 嵌入式系统经常出现内存的问题。嵌入式软件测试需要对内存泄露、内存碎片等问题进行充分测试。

1.1.2 嵌入式测试的特点

基于嵌入式软件对硬件的依赖性,其要求软件测试时必须最大限度地模拟被测软件的实际运行环境,以保证测试的可靠性,而底层程序和应用程序界限的不清晰又增加了测试的难度,因此,嵌入式软件测试与传统软件测试相比,有其自身的特点:

● 嵌入式软件测试是在特定的硬件环境下才能运行的软件。

● 嵌入式软件测试除了要保证嵌入式软件在特定环境下运行的高可靠性,还要保证嵌入式软件系统的实时性。

● 嵌入式软件产品为了满足高可靠性的要求,不允许内存在运行时有泄漏等情况发生,因此嵌入式软件测试除了对软件进行传统性软件测试,如性能测试、GUI测试、覆盖分析测试等,还要对内存进行测试。

● 嵌入式软件测试的最终目的是使嵌入式产品在满足所有功能的同时安全可靠地运行。

● 嵌入式软件经常运行在实时操作系统上。具有非常严格的质量要求,除了追求准确的高质量功能特性,嵌入式软件还要提供高质量的非功能性特性,包括可靠性、可维护性、可移植性、可扩展性、灵活性和健壮性等等。

● 嵌入式系统的一个突出的特点,是其专用性。具有功能专用、接口专用、应用场景专用等特点。为此开发单位需要为嵌入式系统专门开发嵌入式系统的测试平台。

● 在嵌入式软件测试的各个阶段,其测试的环境是不一样的,嵌入式软件开发和运行的环境是分开的。

1.1.3 嵌入式测试环境

由于嵌入式软件的特殊性,嵌入式软件测试可以有两种不同的测试环境,分别是:基于目标的测试环境和基于宿主的测试环境。嵌入式软件测试充分利用了开发语言的可移植性,将与目标环境无关的测试转移到宿主环境中完成测试(如逻辑测试、界面测试)。在系统中与硬件密切相关的测试(如硬件接口测试、中断测试、实时性测试等)尽量选择在目标环境中进行。所以我们要根据嵌入式软件的特点搭建相应的测试环境,主要分为:仿真测试环境、交叉测试环境和插桩环境。

图1-2为嵌入式测试常用的测试平台说明。

图1-2 嵌入式常用测试平台

1.1.3.1 嵌入式软件仿真测试环境

1.全实物仿真测试环境

在全实物仿真测试环境中,被测软件处在完全真实的运行环境中,直接将整个系统(包括硬件平台和嵌入式软件)和其交联的物理设备建立真实的连接,形成闭环进行测试。全实物仿真测试侧重于对被测系统与其他设备的接口进行测试。

2.半实物仿真测试环境

半实物仿真测试环境是利用仿真模型来仿真与被测系统的交互关系,而被测系统采用真实系统,其他系统采用仿真模型(即模拟真实环境的I/O关系及接口)。测试环境需要对被测软件进行自动的、实时的、非侵入性的闭环测试,要求能够逼真地模拟被测软件运行所需要的真实物理环境。

3.全数字仿真测试环境

全数字仿真测试环境是指仿真嵌入式系统硬件及外围环境的一套软件系统。全数字仿真环境在宿主机上构造嵌入式软件运行所必须的硬件环境,为嵌入式软件的运行提供一个精确的数字化硬件环境模型。全数字仿真测试是三类测试中对测试环境要求最为复杂的一种仿真测试。

1.1.3.2 交叉测试方式

在嵌入式操作系统中,开发主机和目标机处于不同的机器中,可以通过交叉测试的方式来实现主机对目标机程序进行调试及测试控制、捕捉目标机上被测试程序是否正常接受测试数据。

交叉测试也称远程调试,即调试器在宿主机的桌面操作系统上运行,而被调试/测试程序在目标机的嵌入式操作系统上运行。在进行交叉测试时,调试器以某种方式控制被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值的能力。这种方式有效地解决了主机对目标机程序进行测试控制的情况,更便于提早发现问题。

1.1.3.3 插桩技术

在动态测试中,插桩技术是一种基本的测试手段,对源程序进行一些语句的添加,其测试目的是对程序语句的执行、变量的变化等情况进行检查。对程序进行动态测试时,一般要使用程序插桩来进行覆盖测试。程序当前的状态主要是通过插桩点来进行捕获。插桩语句植入被测试的源程序,在插桩函数库中定义插桩语句,以期在程序运行中发现软件缺陷。

1.1.4 嵌入式测试的策略

根据嵌入式系统的开发流程,为了最经济地实现系统的功能,采用自顶向下、自底向上、层层推进的方法对嵌入式系统进行测试。

按软件开发阶段可划分为:平台测试、单元测试、集成测试、系统测试。嵌入式软件测试在模块测试、集成测试、硬件和软件集成测试时需进行特有的测试,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。

● 平台测试:这部分包括硬件电路测试、操作系统及底层驱动程序测试等。硬件电路测试需要用专门的测试工具进行测试。操作系统和底层驱动程序的测试主要包括测试操作系统的任务调度、实时性能、通信端口的数据传输率。

● 单元测试:把大型的嵌入式软件系统划分为若干个相对较小的任务模块,由测试人员对单个模块进行测试。该阶段测试一般是在宿主机上进行的(宿主机有丰富的资源和方便的调试环境),除非特别指定了单元测试直接在目标环境进行。

● 集成测试:将所有模块按照设计要求组装起来进行测试,主要测试内容有程序模块间的接口参数传递、集成后的功能实现以及模块间的相互影响等。软件集成可在主机环境上完成,在主机平台上模拟目标环境运行,将嵌入式软件与计算机硬件、外设、某些支持软件、数据和人员等元素结合在一起,对整个系统进行测试。这一阶段的主要任务是:测试开发软件的功能、性能以及其他要求是否满足用户的需要,软件是否满足需求规格说明书的规定,软件是否可以被认为是合格的以及软件是否被接受。

● 系统测试:集成测试完成后,退出宿主机测试环境,把系统移植到目标机上来,把软件、硬件和环境结合起来进行测试,验证软件是否满足用户需求。本阶段测试包括:功能测试,性能测试、接口测试、负载测试、容量测试、安全性测试、稳定性测试、兼容性测试、可靠性测试等。

1.2 认识嵌入式测试流程

一个软件产品从形成概念开始,直到最后退出市场,整个过程可称为一个软件的生命周期。而软件测试则一直伴随在整个软件的生命周期中,与传统软件测试相比,嵌入式测试的流程要求更加严格,这与嵌入式的特点有很大关系。

1.2.1 图解嵌入式测试流程

下面就给大家介绍一款全新软件测试“川模型”下的全程软件测试流程图,如图1-3所示。

图1-3 “川模型”下的全程软件测试流程图

该嵌入式测试流程分为三个测试主线,从左到右依次是验收测试实施流程、需求级测试实施流程、业务级测试实施流程。

1)验收测试实施流程。该流程提出的目的与重点在于保护用户的真实需求不偏差,因为最终产品或项目能否成功交付,验收结果是重要的依据,而验收的主导者一定是用户或用户代表。该流程的起始阶段就是在投入真正的研发和测试之前,根据项目需求或测试需求设计出验收方案,以纸质方案的形式与用户或用户代表进行需求的评审,以减少后期由于三方(用户、研发、测试)需求不一致的原因导致开发迭代增加。同时,以此验收方案为标尺,约束另两个流程的实施。

2)需求级测试实施流程。该阶段强调测试伴随着整个软件开发周期,测试与开发并行进行,达到尽早发现问题的目的,同时把测试的对象扩展成程序、设计(文档资料)、数据等内容。测试工作实时准备,其目的是在某个测试点准备就绪时,就可以从测试准备阶段切入到测试执行阶段。在该流程中,把迭代测试的内容进行了细致的分析与说明,明确提出迭代过程中需要进行单元/集成测试、功能测试、性能测试、稳定性测试、安全性测试、兼容性测试、安装部署测试以及专项测试。

3)业务级测试实施流程。如果把测试人员按测试能力分为测试负责人、测试执行人员,那么需求级测试实施阶段的测试执行可以让普通的测试执行人员进行,但是业务级测试实施流程的主要执行人员就应该定位成测试负责人,至少应该是测试负责人主导测试。其根本原因在于该阶段的意义是业务、风险等的把控,甚至引入了探索性测试,是作为需求级测试阶段的有利补充。

需求级测试实施流程与研发流程有机结合,业务级测试实施流程存在的价值在于把控与掌握住产品实际投入使用时的场景、风险等因素,对常使用的用户需求进行针对性的设计,满足“八二法则”的经典理论,该流程把重点放在了“二”上(用户使用的80%的场景可能就存在于20%的功能中)。验收测试实施流程依托于用户的实际需求与前期的测试分析,它作为软件生命周期的标尺,一直运行到产品或项目结项,最大程度上遵循用户的需求。

1.2.2 解析嵌入式测试流程的不同阶段

我们可以根据以上流程,把测试过程划分为四个重要阶段:

● 测试计划阶段:从流程开始一直到测试计划完成,为第一阶段。

● 测试设计阶段:在测试环境搭建之前、测试计划完成之后的阶段。

● 测试执行阶段:实际测试操作阶段,包括环境搭建、执行用例、缺陷汇报。

● 测试总结阶段:为测试活动的最后阶段,主要是缺陷分析、报告编写、项目结项任务。

1.2.2.1 测试计划阶段

该阶段从可行性分析开始,测试人员就需要介入其中,参与项目的前期讨论与决策,一是为了熟悉产品,二是为了给整个项目提供可测试性建议。

在这个过程中测试人员要完成“软件测试需求说明书”和“软件测试计划”等概要性和指导性资料的编写工作,然后与项目组成员一起进行评审,评审通过后进行下一步工作,否则,重新修订相关内容。

1.2.2.2 测试设计阶段

设计阶段在测试计划完成之后进行,参考文档为“软件需求规格说明书”与“软件测试计划”等资料,该阶段是软件测试的重要环节,对测试的覆盖率和深度起着决定性的作用,需要有经验的测试人员参与,在这个过程中测试人员要完成“软件测试方案””与“软件测试用例”的编写工作,并进行组内评审,评审通过后进行下一步工作,否则,重新修订相关内容。

如果项目过程中,“软件需求规格说明书”等资料发生改变时,后续的软件测试类相关资料也要随之发生变化,但是必须做好相关的变更记录。

1.2.2.3 测试执行阶段

测试执行阶段从研发人员提交被测试软件的安装包或升级包开始,一直到测试操作工作结束。在整个软件测试过程中,测试执行阶段占用时间相对较少,占用时间最多的阶段应该为前两个阶段。主要任务是根据测试案例进行实际测试,并且实时输出测试结果,参考的文档是“软件测试用例”等指导测试过程的相关资料。在测试之前,需测试人员依据测试用例提前搭建测试环境和准备测试数据,达到随时切入切出测试的目的,在嵌入式测试中,测试环境要求较高,所以该阶段又可细分为环境准备与测试执行两部分。

在这个阶段测试人员要随时把测试出来的产品缺陷提交到缺陷管理库中,并且根据项目测试迭代情况,输出迭代测试报告。

1.2.2.4 测试总结阶段

测试的最后阶段,也是很重要的一个环节,测试的结论性报告产生在本阶段。本阶段主要对产生的缺陷进行分析、归纳,并且输出软件测试报告等资料,对被测产品能否顺利发布起着重要作用。

1.3 测试与开发的活动关系

测试与开发的关系,就像鱼与水的关系,只有融合到一起,才能真正活起来。图1-4就是以软件配置管理规范为指导的测试与开发的活动关系图。图中显示了测试与开发的活动关系。从测试实际的前后过程来看,软件测试可以细分为多个独立的阶段,分为:需求分析审查、设计审查、单元测试、集成测试、功能测试、系统测试、验收测试、回归测试(维护)等,如表1-1所示。

图1-4 测试与开发活动关系图

表1-1 软件测试的阶段及其要求

1.4 嵌入式测试对人员的技术要求

计算机软、硬件技术发展十分迅速,测试人员必须有足够的能力来适应这些变化。由于软件行业的不断发展及软件规模扩大,客户对软件的质量要求越来越高,针对企业的网络应用环境需要支持大量的用户和复杂的软件硬件应用环境,测试工作量越来越大,因此自动化测试已成为一大发展趋势。从另外一个方面说,测试工作本身是一门需要技术的学问,它包含了众多的理论和实践。缺乏这些知识和经验,测试的深度和广度就不够,测试的质量就无法保证。从测试管理的角度来说,为了高效地实现测试工作的目标,需要不断地帮助他们进行知识的更新和技术能力的提升,还需要通过培训来提高每个测试人员的能力。

1)综合考虑测试部门人员的测试技术情况,制订培训计划。

2)培训内容主要包括:软件测试技术、测试工具的使用、公司产品、部门工作流程、项目管理、软件测试配置管理规范。主要提高测试人员的技术水平。

3)测试相关资料模板的制定,包括测试计划、测试方案、测试用例、测试报告模板等。主要是指导测试人员进行文档编写。

4)测试人员能力要求:

● 技术知识:包括表达、交流、协调、管理、质量意识、过程方法、软件工程等。

● 测试技能及方法:包括测试基本概念及方法、测试工具及环境、专业测试标准、工作成绩评估、熟悉所测试的产品用到的技术,并掌握测试工具、方法等相关技术。

● 测试规划能力:包括将业务任务和技术任务相互独立、能够适应不同的测试项目、风险分析及防范、软件放行/接收准则制定、测试目标及计划、测试计划和设计的评审方法等。

● 测试执行能力:包括成熟的测试过程管理规范、测试数据/脚本/用例、测试比较及分析、缺陷记录及处理、自动化工具。

● 测试分析、报告和改进能力:包括测试度量、统计技术、测试报告、过程监测及持续改进。

5)测试组织管理者的工作能力在很大程度上决定测试工作的成功与否,测试管理是很困难的,测试组织的管理者必须具备:

● 了解与评价软件测试政策、标准、过程、工具、培训和度量的能力。

● 领导一个测试组织的能力,该组织必须坚强有力、独立自主、办事规范且没有偏见。

● 吸引并留住杰出测试专业人才的能力。

● 领导、沟通、支持和控制的能力。

● 有提出解决问题方案的能力。

● 测试时间、质量和成本控制的能力。

6)测试人员技能要求:

计算机基础知识:主要包括操作系统的安装使用、虚拟机的使用、计算机周边设备的使用等。这些是测试人员必备的基础知识。在熟练了解这些基础知识的前提下我们才能更好地进行测试。

软件工程:在测试时,经常会阅读研发人员写的设计文档,设计文档里多多少少都有流程图来体现软件的设计架构图,有些研发人员习惯用数据流图来体现,有的人习惯用UML类图实现,所以测试人员要能够对流程图、数据流图、UML类图、时序图识别,但要求熟练使用一种类图的设计。

软件测试技能:测试理论在这里就不多说明了,身为一名软件测试人员,学好软件测试最基本的理论是毋庸置疑的,有道是“打好底子才能扣好扣子”。在掌握基本理论的前提下,为了提高自身的技能我们还要学会测试资料的编写、测试规程的运用。

测试工具使用:作为一名测试人员,测试工具使用是我们必须具备的技能之一,常用的工具分为:测试管理工具、自动化测试工具、性能测试工具、白盒测试工具等。手动测试时代已经过去了,在如今国家号召各行各业要进入自动化的同时,软件测试行业也不甘落后。实现软件自动化测试,不仅能节省人力、物力和时间的成本,更重要的是,这对测试人员最大的挑战,有挑战才有激情,有激情才有动力,有了动力才能推动软件测试行业在我国的发展。

基础编程能力:对于软件研发人员来说,可能学好、学精一门编程语言就可以独闯天下。但是,对于一名测试人员来说,我们没有必须要学精哪一门编程语言,因为我们的主要任务不是研发软件;相反,我们必须要知道大多数编程语言的语法及逻辑,这样我们在进行单元测试时,才能对不同的编程语言进行测试。

数据库知识:数据库是以二维表形式表示的一种电子仓库,用户可以对存放在数据库中的数据进行增、删、改、查等操作。在发展迅猛的IT行业,数据库已经成为了用户存储数据最重要的方式之一。其中,动态网站是运用数据库最典型、最普遍的领域。目前流行的数据库有Oracle、MySQL、SQL Server、DB2、Sqlite等。然而,数据库最基本的操作就是执行SQL语句。所以,作为一名测试人员,有必要知道数据库的工作原理及一些基本的SQL语句。

在嵌入式行业,学好嵌入式测试除了具备以上技能外,还必须要掌握以下知识技能:

网络知识。在如今网络纵横的世界,网络成为我们生活中不可或缺的一部分。对于计算机网络我们没必要学得太精,但是一些基本的知识我们要知道。比如,IP地是什么,TCP/IP协议是什么,MAC地址又是什么,计算机与计算机之间如何进行通信等等。当然,在网络出现故障时我们还要能对故障进行简单排查,一些常用的网络工具要学会如何运用。比如Ipconfig/Ifconfig、Ping、Wireshark、Tcpdump等工具。

软件行业标准。作为一名合格的软件测试人员,为了能应对各行各业的软件,了解各行业软件的一些标准是很有必要的。比如,某安全行业的Web界面设计成了紫色格调,这显然是不合适的,安全性网站一般是要严肃、大方的蓝色或黄色格调;某购物网站的颜色格调为黑色,这显然也是不合适的,给人们的感觉好像是一家“黑店”。总之,软件产品设计成什么样,要看所面向的用户是什么领域的,该领域的行业标准就是测试人员所要知道的。

1.5 测试发展前景分析

1.5.1 现今测试的发展趋势

近几年,我国的软件测试行业进入到了飞速发展时期,虽然比发达国家的软件测试起步时间落后,但是我国测试发展的速度与专业性,却让很多发达国家的测试专家愕然。软件测试工作是一个长久的行业,测试经验越多,工作年限越长,越吃香。在发达国家,提到测试专家,都是工作至少40年左右的测试领域人员,但是在我国,10多年的测试人员就可以称为专家。这些事实一方面体现了测试工作的长久性,另一方面也说明了我们的测试工作起步较晚,还需要不断学习、进步,我们的发展空间还是巨大的。接下来将从以下几点去分析现今测试的发展趋势。

1.国内现状分析

近年来国内互联网行业比较流行的有云计算、大数据、物联网、互联网+等等。在对这些新兴行业做测试时,一些传统测试方法已不能满足现今飞速的发展,一些测试爱好者正在探索新的测试方法去弥补现有的软件测试,如本书后面介绍的“基于业务场景的嵌入式测试设计”、“基于风险的嵌入式测试设计”、“基于任务驱动的嵌入式测试设计”、“基于探索的嵌入式测试设计”。同时从不同的角度去分析测试,来满足测试需求。由于软件复杂度越来越大,功能越来越多,纯手工测试不能满足较快的迭代,为了解决这一问题,需要使用自动化工具代替复杂的测试过程。由于使用了自动化测试工具,并且大多自动化工具都是公司内部研发,所以对测试人员的技能要求很高,只有会写代码的测试人员才能更胜任这项工作。为了满足快速迭代,目前国内市场已经向自动化测试方向发展。

2.从测试模型上说

由于测试流程都是引进国外的测试流程,因此在国内多数都是照搬国外模型,套用在实际的工作中。人们会发现,这些模型往往不适用于国内发展。在套用的同时,由于不能深层理解,在使用过程中往往出现各种问题。所以,中国必须要发展自己的适合中国国情的测试模型,本书作者经过多年一线工作经验,并结合多年的理论研究,提出了一款符合中国国情的软件测试模型 —川模型。

3.从测试管理上说

目前国内大部分软件公司已经成立了测试部门,由于测试在国内发展时间尚短,部分公司的测试管理流程还不太成熟,缺少团队管理、人才管理,甚至缺少流程管理。在这种情况下,整体的测试能力还是欠缺,所以测试管理也是发展的一大趋势。

1.5.2 测试人员的发展方向

目前,软件测试正处于快速发展的阶段,同样软件测试职位也在潜移默化地发生着变化。软件测试职业生涯是从初级阶段开始,主要负责测试执行、测试资源的准备、用例的执行、缺陷提交和跟踪,阶段性测试报告汇总,测试数据收集以及参与评审工作等。从软件测试行业发展来看,软件测试职业发展方向大致可分为:技术路线、管理路线和业务路线,如图1-5所示。

图1-5 测试人员的发展方向

1.5.2.1 技术路线发展方向

作为软件测试工程师,属于软件测试职业生涯的初级域,其适用范围是入行软件测试3年内的常规测试从业者,其主要工作内容是按照测试主管(即直接上司)分配的任务计划,编写测试用例、执行测试用例、提交软件缺陷,包括提交阶段性测试报告、参与阶段性评审等。

按照技术路线发展,技术路线的初级软件测试工程师发展到高级阶段,不仅要熟悉软件测试方法和技能,还要具备测试设计、测试执行、测试支持的能力。例如此阶段的自动化测试工程师,只要能够使用自动化测试工具进行相关的黑盒测试,并熟练使用自动化测试工具进行脚本回放和执行即可。白盒测试工程师主要进行代码走读、代码审查、代码测试覆盖率分析等,对技术要求较高,要熟悉开发语言。性能测试工程师主要对软件系统的性能指标进行采集分析和运行效率检测,在此阶段对性能测试工程师的技术要求更高,因为软件的性能瓶颈归根结底在于代码的运行效率,因此性能测试要做好,性能测试工程师起码要懂开发;而为了发现性能问题,要懂软件开发架构;为了定位性能问题,要懂操作系统、网络协议、应用服务器乃至数据库的原理与使用;为了最终解决性能问题,要根据定位的问题有针对性地对代码、操作系统、网络架构、服务器、数据库进行优化。

沿高级域阶段再接着发展,可以细分路线为资深测试工程师(如:资深自动化测试工程师、资深白盒测试工程师、资深性能测试工程师、安全性测试工程师、标准化工程师,主要负责开发测试工具、开发测试用例、质量控制)、系统分析工程师(负责:产品运行维护、售前支持、技术支持)。这些高级技术类人才完全与常规测试经理平齐。

资深自动化测试工程师,在此阶段是由自动化测试工程师晋升而来。主要负责自动化测试脚本的设计和编写。还要为了公司整个自动化测试的发展,设计自动化测试框架,开发内部自动化测试工具。

资深白盒测试工程师,其工作内容包含常规白盒测试工程师的内容,除此之外,要协助测试经理或测试总监攻关测试方法与技术性难题,因此其技术水平更加雄厚。如果常规白盒测试工程师停留在某种程序设计语言类型的代码级测试,那么资深白盒测试工程师就要脱离程序设计语言本身,结合不同架构、多种开发技术交互的情况下,寻找代码测试方法,并具有对代码优化的能力。

资深性能测试工程师,来源于常规性能测试工程师,按照常规性能测试工程师的技术要求,资深性能测试工程师应该具备性能测试整体方案的设计能力,以及软件系统性能问题定位和性能优化的能力。除此之外,也要对主流软件开发模式下的应用系统具有敏锐的洞察意识和感知意识。

安全性测试工程师,是从性能测试工程师衍生而来,因为只有具备性能测试经验的人,才能对软件的开发模式、实现架构和技术本身充分了解,才会感知和预见软件系统存在的安全漏洞,加上其本人是测试出身,才知道如何通过系统漏洞来尝试攻击软件系统,达到测试的目的。

在技术路线,向上继续提升,我们称之为“高级顾问”;他们成为该领域的技术专家,技术专家在自已经营的领域里,具有个人独到的见解和深厚的技术实力,而这类人才可以不再从事具体的测试工作,而是提供行业性测试技术咨询、培训、质量控制指导等,为软件测试整体行业的发展,起到了鲜明的带头作用。

1.5.2.2 管理路线发展方向

向管理路线发展的测试工程师,基本上是从事了多年的测试工作或业务专家,经过长时间测试,定位了自己的发展方向。可以发展为项目阶段负责人,进行项目管理工作,如项目负责人,负责与各部门交流沟通的接口、测试工作计划和方案的设计、测试进度的把控、测试报告的汇总以及组织各阶段的评审工作。

按照正常发展路线要求管理与技术并重,所以测试工程师向上晋升到测试部主管、质量部主管、项目部主管。主要从事企业项目级主管工作,是具有2到5年职业经验的测试从业者。其工作内容是根据项目经理或测试经理的计划安排,调配测试工程师执行模块级或项目级测试工作,并控制与监督软件缺陷的追踪,保证每个测试环节与阶段的顺利进行。测试主管负责该流程的具体实施,而更多的工作,是思考如何对软件进行更加深入、全面的测试。

当沿管理路线继续向上阶段发展,即可发展为测试部经理、配置管理经理、质量保证经理、产品部经理、技术部经理、项目经理、业务经理。

测试经理是更高级别的测试管理者,一般为具有4到8年经验的测试从业者,在管理与技术能力上都比较成熟,也可以担任高级顾问的角色。测试经理负责企业级或大型项目级总体测试工作的策划与实施。测试经理除了需要统筹整个企业级或项目级测试流程外,还要对不同软件架构、不同开发技术下的测试方法进行研究与探索,为企业的测试团队成员提供指导与解决思路,同时还要合理调配不同专项测试的人力资源(如业务测试工程师、自动化测试工程师、白盒测试工程师、性能测试工程师),对软件进行全面的测试;另外,一些企业里,测试经理还需要与客户交流与沟通,负责部分的销售性或技术支持性工作。

测试总监,属于常规发展路线的最高域,该职位一般在大型或跨国型软件企业,或者测试服务型企业中设立,一般设立测试总监的企业,该职位都相当于CTO或副总的级别,是企业级或集团级测试工作的最高领导者,驾驭着企业全部的测试与测试相关资源,管理着企业的全部测试及质量类工作。而其职业要求,也是技术与管理双结合。

产品经理,这个职位在很多企业中设立,可以说它是质量保证经理的派生,只是它更侧重于软件在产品化之前的质量监控工作,包括软件开发流程、软件测试等技术与管理以及产品将要发展的方向。

1.5.2.3 业务路线发展方向

从事业务路线的业务专家或业务测试工程师,要求熟悉行业类软件的行业背景、业务知识以及该行业的工作流程。业务测试工程师的工作内容主要是黑盒测试,属于功能范畴,因此对技术要求不高。一些大型行业类软件公司的业务测试工程师薪资丰厚,但是完全可以不懂技术,因为工作性质决定了不需要懂很多的技术。他们甚至连软件的界面测试都不做,只需要交给常规测试工程师实施,而完全关注软件的业务性和易用性,由于其深厚的行业背景,可以在软件正式发布前提出很多建设性的意见,而这些建议正是软件开发商提高产品易用性、增加用户满意度、开拓市场、创造利润的关键因素之一。

按常规路线发展,可发展为资深业务专家,主要负责行业内咨询、顾问的角色,已经几乎脱离了测试工作本身,而更多为企业的产品需求分析、设计、编码、测试等各个环节提供指导工作,其目的也是提高软件的易用性和稳定性,减少后期不必要的需求变更。

继续向上一阶段发展,可发展为行业的业务专家。常见的行业类软件的应用包括游戏、金融、电信、贸易、石油、航空、医疗等。