移动应用软件测试技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 软件测试工程师

1.7.1 概述

软件测试工程师(Software Testing Engineer)为理解产品的功能要求,并对其进行测试检查有没有缺陷,以及是否具有稳定性、安全性、易操作性等性能,最后写出相应的测试规范和测试用例的专门工作人员。

简而言之,软件测试工程师在一家软件企业中担当的是质量管理员角色,即及时发现软件问题并及时督促更正,确保产品的正常运作。按其级别和职位的不同,可分为如下3个级别。

(1)高级:熟练掌握软件测试与开发技术,并且对所测试软件的对口行业非常了解,能够对可能出现的问题进行分析评估。

(2)中级:编写软件测试方案及测试文档,与项目组一起制订软件测试阶段的工作计划,能够在项目运行中合理利用测试工具完成测试任务。

(3)初级:通常按照软件测试方案和流程对软件产品进行功能测试,检查其中是否有缺陷。

1.7.2 主要工作

软件开发是个分工明确的系统工程,不同的人员扮演不同的角色,包括部门经理、产品经理、项目经理、系统分析师、程序员、测试工程师、质量保证人员等。软件测试工程师只是其中的一个角色,他承担的任务角色决定了工作内容和承担的任务。测试工程师应该承担的任务与软件公司的规模、软件项目的管理制度、公司领导和项目经理的管理风格,以及具体软件项目自身的特点有很大关系。

简单地说,软件测试工程师是软件的质量检测者和保障者,具体工作如下。

(1)使用各种测试技术和方法来测试和发现软件中存在的缺陷,测试技术主要分为黑盒测试和白盒测试两大类,其中黑盒测试技术主要有等价类划分法、边界值法、因果图法、状态图法、测试大纲法,以及各类典型的软件故障分析模型等;白盒测试的主要技术有语句覆盖、分支覆盖、判定覆盖、基本路径覆盖等。

(2)测试工作贯穿整个软件开发生命周期,完整的软件测试工作包括单元测试、集成测试、确认测试和系统测试,单元测试主要在编码阶段完成,由开发人员和软件测试工程师共同完成,其主要依据是详细测试;集成测试主要测试软件模块之间的接口是否已经正确实现,其基本依据是软件的体系结构设计;确认测试和系统测试是在软件开发完成后,验证软件的功能与需求的一致性,以及软件在相应的硬件条件下的系统功能是否满足用户需求,其主要依据是用户需求。

(3)将发现的缺陷编写成正式的缺陷报告,并提交给开发人员进行缺陷的确认和修复。缺陷报告编写的主要要求是保证缺陷的重现,为此要求测试人员具有很好的文字表达能力和语言组织能力。

(4)分析软件质量,在测试完成后需要根据测试结果来分析软件质量,包括缺陷率、缺陷分布、缺陷修复趋势等。并且给出软件各种质量特性,包括功能性、可靠性、易用性、安全性、时间满足性与资源特性等的具体度量,最后给出一个软件是否可以发布或提交用户使用的结论。

(5)制订测试计划,包括测试资源、测试进度、测试策略、测试方法、测试工具、测试风险等。

(6)设计测试用例,形成测试用例报告。设计测试用例是保证测试质量的核心工作,很多测试技术都可以用来指导设计用例。

(7)引进自动化测试工具,并且用其编写测试脚本和进行性能测试等。

(8)根据实际情况不断改进测试过程,提高测试水平等。

1.7.3 需要的专业技能

计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,计算机专业技能是必不可少的。此处涉及的计算机专业技能主要包含如下3个方面。

1.测试专业技能

测试专业知识很多,本书内容主要以测试人员应该掌握的基础专业技能为主。测试专业技能涉及的范围很广,既包括黑盒测试、白盒测试、测试用例设计等基础测试技术,也包括单元测试、功能测试、集成测试、系统测试、性能测试等测试方法,还包括基础的测试流程管理、缺陷管理、自动化测试技术等知识。

2.软件编程技能

软件编程技能实际应该是测试人员的必备技能之一,在微软公司很多测试人员都拥有多年的开发经验。测试人员要想得到较好的职业发展必须能够编写程序,否则不能胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。

此外,对软件测试人员的编程技能要求也有别于开发人员。测试人员编写的程序应着眼于运行正确,并且兼顾高效率,尤其体现在与性能测试相关的测试代码编写上。因此测试人员要具备一定的算法设计能力,依据资深测试工程师的经验测试工程师至少应该掌握Java、C#、C/C++之类的一门语言,以及相应的开发工具。

3.综合技能

与开发人员相比,测试人员掌握的知识具有“博而不精”的特点,“艺多不压身”是个非常形象的比喻。由于测试中经常需要配置、调试各种测试环境,而且在性能测试中还要对各种系统平台进行分析与调优,因此测试人员需要掌握更多有关网络、操作系统和中间件、数据库方面的知识。

在网络方面,测试人员应该掌握基本的网络协议,以及网络工作原理。尤其要掌握一些网络环境的配置,这些都是测试工作中经常用到的知识。

操作系统和中间件方面应该掌握基本的使用、安装、配置等,如很多应用系统都是基于Unix、Linux运行的。这就要求测试人员掌握基本的操作命令,以及相关的工具软件,而WebLogic、WebSphere等中间件的安装、配置在很多时候也需要掌握。

数据库知识则是更应该掌握的,现在的应用系统几乎离不开数据库。因此测试人员不但要掌握其基本的安装、配置,还要掌握SQL,并且至少应该掌握MySQL、SQL Server、Oracle等常见数据库的使用方法。

1.7.4 需要的行业知识

行业主要指测试人员所在企业涉及的行业领域,如很多IT企业从事石油、电信、银行、电子政务、电子商务等行业领域的产品开发。行业知识即业务知识,是测试人员做好测试工作的又一个前提条件,只有深入地了解了产品的业务流程才可以判断开发人员实现的产品功能是否正确。

很多时候软件运行没有异常,但是功能不一定正确,只有掌握了相关的行业知识才可以判断出用户的业务需求是否得到了实现。

行业知识与工作经验有一定关系,通过时间即可完成积累。

1.7.5 需要的个人素养

作为一名优秀的测试工程师,首先要对测试工作有兴趣。测试工作在很多时候都显得有些枯燥,热爱才更容易做好测试工作。除了具有前面的专业技能和行业知识外,测试人员应该具有一些基本的个人素养,即下面的“五心”。

(1)专心:测试人员在执行测试任务的时候要专心,不可一心二用。经验表明,高度集中精神不但能够提高效率,还能发现更多的软件缺陷,业绩好的往往是团队中做事精力最集中的那些成员。

(2)细心:执行测试工作时要细心,认真执行测试,不可以忽略一些细节。如果不细心,则很难发现某些缺陷,如一些界面的样式、文字错误等。

(3)耐心:很多测试工作有时需要很大的耐心才可以做好,如果比较浮躁,则将让很多软件缺陷从眼前逃过。

(4)责任心:责任心是做好任何工作必备的素质之一,测试工程师更应该将其发扬光大。如果测试中没有尽到责任,甚至敷衍了事将测试工作交给用户来完成,则很可能引发非常严重的后果。

(5)自信心:现在许多测试工程师都缺少的一项素质,尤其在面对需要编写测试代码等的时候,往往认为自己做不到。要想获得更好的职业发展,测试工程师应该努力学习,建立“能解决一切测试问题”的信心。

“五心”只是做好测试工作的基本素质要求,测试人员应该具有的素质还很多。例如,不但要具有团队合作精神,而且应该学会宽容待人,学会理解开发人员;同时要尊重开发人员的劳动成果,即开发的产品。