说明:本文转自陈绍英的blog


解析测试工程师职业发展瓶颈

经过这几年的发展,国内IT公司的测试水平有了很大的提高,但是与此同时,很多测试工程师也迎来了个人的发展瓶颈:很多人从测试工程师做到了测试经理的职位,不知道下一步如何发展;或者每天机械地从事着功能测试工作。

本文首先从分析测试工程师的发展现状和职业化过程遇到的问题入手;接着分析什么样的测试人员才是合格的;最后介绍测试人员的职业历程以及如何突破自己的职业发展瓶颈。

1 测试工程师帖子解析

下面是在一些测试网站上收集的帖子,主要是一些测试工程师介绍自己的成长历程或者对测试行业的看法。从这些帖子中,我们可以看出测试工程师职业发展遇到的一些问题。

帖子一:踏实地发展自己

我在北京工作有4年了。职业发展依次经历了测试员-测试工程师-测试分析师-测试经理。这就是我在北京的4年测试生涯。个人对测试工作有如下的观点:

1 )软件测试不像一些人看起来那么简单,需要相当深厚的技术背景。但只要掌握要领,也不像我们一些人所认为的那么困难;

2 )测试工程师和开发人员相比,可以有机会接触更多的、不同行业的项目,是一个大的优势。

3 )测试工程师要想成功,更多的是靠平时的积累。不管是项目的积累,还是平时学习,两者都至关重要。

4 )测试工程师要充分利用网络资源,与同行们充分交流,在互相帮助和学习的氛围中,可以加快自己成长速度。

点评:这是一位比较踏实的测试工程师,一步一个胶印地走着自己的测试之路,我们可以认为他是相对成功的典范。现实中我们很多测试工程师不是抱怨工资低,就是抱怨自己公司的测试环境不好。如果要想在测试领域走向成功,重要的秘诀就是踏踏实实地学习,认认真真地做好本职工作。

帖子二:执着的测试工程师

我做测试工作快6年了。刚开始的时候,我是公司的第一个测试员,虽然公司也在做ISO9000,但是什么规范都得自己摸索。可是,我仍然坚持下来了,而且大有收获,虽然在公司里不受重视。

但是随着测试工作的不断深入,自己对公司的主流业务(我们作的是行业软件)从外行变成了内行。而且还发现了一些产品的设计方面的欠缺,在老板和开发主管面前树立了自己的一些威信。至少在一些项目进行需求分析的时候,会来征求我的意见。而且,目前做到了不经测试的产品不给客户。当然,在我和开发经理发生分歧的时候,大部分时间老板还是支持开发经理,但我认为是正确的地方还是会据理力争的。

一句话,测试人员是孤独的,寂寞的。但只要坚持,总能有收获的,尤其是在发现了隐藏很深的一些BUG的时候,那种成就感和自豪感真的是一种很好的感觉。

实际上,做任何一行工作,都会遇到不公平。但为什么要去跟别人比呢,只要自己有提高,就是好的。

点评:“敢做冷板凳的人”才是勇敢的人,这位发帖子的测试工程师不但有勇气坐了冷板凳,而且能够坚持下来,直到取得了不错的成绩。“ 实际上,做任何一行工作,都会遇到不公平。但为什么要去跟别人比呢,只要自己有提高,就是好的。 ”几句朴实无华的话说出了如何做好测试工作的真谛。

测试人员一定要给自己正确的定位,既然选择了目前地位有些低的测试工作,就应该踏实的做好,这是走向成功的必由之路。

帖子三:好学而有信心的新手

我在一家外企作了一段时间的兼职测试,之前我从未接触过测试。开始的时候只作一些Manual test,后来就开始做Automated test,修改原有的test cases,或者重写一些test cases。然后test小组的leader建议我写测试文档,他说写文档有利于一个tester技术水平的提高。因为你必须要熟悉软件项目的整体框架,洞悉软件深层的结构才能写出高质量的测试用例。

于是,我在网上查了一些关于测试方面的资料,发现测试真的很重要。对一个软件项目而言,老外对软件测试尤其重视。我兼职的这个外企是有一半的员工是测试的,大概有78个人。个人认为,国内的软件企业对测试的重视程度还不够,但是毋庸置疑,测试是软件企业产品线上和开发同等重要的。可以预言,未来的国内软件行业,软件测试人员可能会占据软件团队半数左右。同时,对测试人员的能力要求也是比较高的。

综上,我觉得Software test很有前途。当然,这些都是一个测试新手的看法,可能比较片面,全当给大家打打气了。

点评:可以看出这是一位很有远见的测试工程师。现实中很多测试工程师是由于不能从事其它工作才从事测试的,因而工作中也是不断地抱怨待遇、团队环境等不能满足自己的要求。在此建议测试工程师,如果选择了这个行业,就应该认真地对待工作,抱怨永远解决不了问题。只有像这位测试工程师一样认真分析自己的行业,才可以有更好的职业化发展,否则还不如换一个自己喜欢的工作去试一试。

帖子四:郁闷而犹豫的测试工程师

我做软件测试也有两年多的时间了,但是在这两年中似乎没有太多的提高。因为都是黑盒测试,所以一般就是使用产品,最多也就是一些工具测试。可是这都是想到哪就测到哪,也没有真正按照测试文档执行。公司测的东西组合情况也很多,根本没办法。而且公司测试流程也不规范。

刚开始没签约的时候,还是专职测试,签了以后简直就变成打杂的了。什么都要做,连一些设计文档都推了过来,有时候还要去现场了解客户需求,真是非常佩服老板把一个人当三个人用的能力。总的感觉在小公司里,根本就没有测试员这个概念,测试员一般什么都得做。当你提出一堆建议的时候,老板总是会说,现在公司规模还不具备条件,以后会慢慢的改善的,可我感觉过两年公司可能已经倒闭了。

真是有点郁闷,改行做开发,又不想放弃这个被很看好的职业。可是光被看好又怎么样呢?说不定十几年前,扫大街的就像现在的做测试的。都是做质量保证,扫大街的要保证城市环境的质量,现在呢?他们又怎么样?

点评:其实测试和开发一样,都不是那么想当然的理想,国内开发环境也和测试一样混乱。而开发人员发展到高级程序员就会成为很多人的发展瓶颈,薪资和职务都很难再提升。而测试与开发相比的一个巨大优势在于它是一个新兴的领域,拥有更多的机会,测试人员工作三五年,再有一些管理经验,很容易做到测试主管,虽然薪资待遇相对低些,但是给个人的长期发展打好了基础。看准了就应该去做,实实在在的学到知识才是最重要的。

2 国内软件测试测试工程师职业发展现状

我们可以从两个方面来解析测试测试工程师的职业瓶颈问题:

l          从企业方面:多数企业较难招聘到满意的测试工程师,尤其在软件测试外包企业,人才问题成了这类企业的发展瓶颈,这些恰恰反映了整个测试行业的发展遇到了瓶颈;

l          从个人方面:很多测试人员薪资和职位到了一定阶段就很难得到提升,例如很多测试工程师做到测试经理后,几年内得不到提升。

职业发展尤其体现在待遇方面。下表是北京市一些 IT 企业测试工程师的月薪数据。这些数据主要从一些网站收集,由一些测试工程师发布。

职称名

税前月薪(人民币:元)

备注

少于100

100 200

200 人以上

初级工程师

1500 2000

2000 2500

3000 4000

手工执行功能测试,这些人通常是一年以内工作经验的新手。

2000 3000

2500 3500

一年到两年经验的测试工程师,工作内容通常以功能测试为主。

中级工程师

2500 3500

3000 4000

2500 3500

编写并执行测试用例,通常工作两年以上。

3500 4000

4000 4500

3500 4500

编写并执行测试用例,能够使用一些测试工具。通常工作两年以上。

高级工程师

4000 5000

5000 6000

6000 7000

熟练使用测试工具,制定测试计划,编写并执行测试用例等。工作经验通常三年以上。

7000 8000

能编写自动化测试脚本与进行白盒测试工作。具有一定的开发技能。工作经验通常三年以上。

测试分析师

4000 5000

5000 6000

6000 7000

具有一定分析能力的高级测试工程师。工作经验通常四年以上。

6000 7000

7000 8000

能够设计测试方案,执行测试并对测试结果进行全面的分析,例如性能测试分析。

测试组长

4000 5000

6000 7000

6000 7000

带领10人以内的测试小组执行测试任务。

5000 6000

7000 8000

7000 8000

带领15人以内的测试小组执行测试任务。

通过上面的数据,我们可以看出:

(1)        企业规模越大,越重视测试,而测试人员的待遇也越高;

(2)        掌握测试工具的测试人员待遇往往高于那些只能进行手工测试的工程师;

(3)        测试技术越熟练,待遇越高,而具备一定领导能力的测试工程师待遇会更高些;

但是我们就整个 IT 行业来看,尤其是与开发人员相比,测试工程师的待遇显得很低。就作者掌握的资料来看,同一级别的开发工程师要比测试工程师高 1 2K (人民币),甚至更多。

与开发人员相比,测试工程师的职业目标则很少,主要下面几类:

l          测试组长(也可称之为测试负责人、测试经理):这类测试人员通常是测试项目负责人,既要具备较高的测试技术能力,还要具备一定的管理能力。主要职责是制定测试与编写测试计划、监控和管理整个测试过程。测试组长职位之所以受青睐,是因为测试组长可以向上发展为测试部门经理、质量经理,也可以横向发展为项目经理,因此通常待遇相对高些。

l          测试分析师:主要职责是对系统的测试结果进行综合的分析,例如缺陷分析、性能分析等。测试分析师不但测试技术能力较强,还要具备数据库、操作系统等多方面的技术知识。这类职务的发展空间也不错,可以发展成系统设计师等。

l          自动化测试工程师、测试开发工程师:主要职责是编写测试程序、执行自动化测试任务。这类职位的测试人员至少要达到初级程序员的能力,因为经常和程序打交道。发展空间也不错,甚至可以发展为程序员。 (在国外,这类工作多由具有开发背景的测试人员来负责。而国内的IT公司不重视测试,程序员不愿意去做待遇较低的测试工作,因此测试人员在具有一定的开发能力后,将会考虑转行去做开发。)

但是,国内的测试人员多数在测试圈子“打转转”,很难进入到开发领域。多数测试人员发展成测试经理 / 高级测试工程师后,职业化几乎到了尽头。于是,出现了一些大企业的测试人员自己去创业的情形,但这种情形更是少之又少。

实际上,这一切的根本原因是由测试工程师的能力水平决定的。国内测试工程师普遍根基不牢,自然难获得较大的发展。下面将从测试工程师的基本素质谈起:只有那些基础知识扎实、潜质较好的测试工程师才是合格的工程师。

3 测试工程师基本素质

很多年轻或者刚刚从事测试工作的工程师,经常会问:“测试工程师需要什么技能或者具有什么素质才是合格的?”与开发人员相比,测试人员不但需要一技之长,还需要掌握诸如操作系统、数据库、网络等多方面的知识。

根据作者多年的经验,一个有竞争力的测试人员要具有下面三个方面的素质:

(1).         计算机专业技能

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

l          测试专业技能

现在软件测试已经成为一个很有潜力的专业。要想成为一名优秀的测试工程师,首先应该具有扎实的专业基础,这也是本书的编写目的之一。因此,测试工程师应该努力学习测试专业知识,告别简单的“点击”之类的测试工作,让测试工作以自己的专业知识为依托。

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

l          软件编程技能

“测试人员是否需要会编程?”可以说是测试人员最常提出的问题之一。实际上,由于在我国开发人员待遇普遍高于测试人员,因此能写代码的几乎都去做开发了,而很多人则是因为做不了开发或者不能从事其它工作才“被迫”从事测试工作。最终的结果则是很多测试人员只能从事相对简单的功能测试,能力强一点的则可以借助测试工具进行简单的自动化测试(主要录制、修改、回放测试脚本)。

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

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

l          网络、操作系统、数据库、中间件等知识:

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

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

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

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

作为一名测试人员,尽管不能精通所有的知识,但要想做好测试工作,应该尽可能地去学习更多的与测试工作相关的知识。

(2).         行业知识

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

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

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

(3).         个人素养 [1]

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

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

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

耐心:很多测试工作有时候显得非常枯燥,需要很大的耐心才可以做好。如果比较浮躁,就不会做到“专心”和“细心”,这将让很多软件缺陷从你眼前逃过。

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

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

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

案例:测试人员首先要学会尊重自己

软件测试人员首先应该尊重自己的劳动成果——软件缺陷报告。我见过很多测试人员都不能清晰地描述一个软件缺陷,尤其分不清缺陷跟踪系统中SummaryDescription的区别,例如图2-2中的软件缺陷描述——SummaryDescription中就输入了完全一样的内容。

严格的讲,Summary通常用于概要性地描述软件缺陷内容或者发生问题时的现象,主要用于项目经理进行缺陷分配,因此要用最简短、精悍的语言来描述是什么缺陷,使项目经理很快明白是什么问题、应该分配给哪个开发人员;而Description则用来描述缺陷的详细信息,通常描述缺陷的重现步骤,主要供开发人员修改缺陷时候查看。图2-3就是一个非常规范的软件缺陷描述。

软件缺陷报告是测试人员最直接的劳动成果,因此应该认真地描述自己所提交的每一个软件缺陷,这也是尊重自己劳动成果的一种表现。缺陷描述不清晰,不但将会增加沟通成本,更重要的是不会得到开发人员的认可与尊重。测试人员在为开发人员的成果——产品找问题的同时,也要保证自己的成果没有问题。

因此,作为测试人员首先要学会清晰、准确地报告一个缺陷,这将是与开发人员互相赢得对方尊重的开端,也是尊重自己的表现。试想,如果自己都不爱惜自己的劳动成果,那别人如何会尊重你的成果呢?

1 不规范的软件缺陷报告

2 规范的软件缺陷报告

4 软件测试职业展望

实际上,测试工程师如果按照前面的要求打好基础,职业前景是非常广阔的。我们可以借鉴一下国外测试工程师的职业发展历程,很多时候,国内的软件都是跟着国外的发展趋势,测试行业也一样,国外至少比国内起步早 15 20 年。

与国外的专业测试工程师相比,国内测试工程师突出特点是晋升非常快, 2-3 年可能走完了国外 10 年的路。实际上有很多测试(部)经理也就 2 3 年的工作经验,而在国外,测试工程师很多至少会有 5 年以上的开发经验。在国外,通常测试工程师会经过下面的职业发展历程:

1 .初级测试工程师

主要是计算机相关专业的本科生或具有一些手工测试经验的个人,主要工作内容是开发测试脚本并开始熟悉测试生存周期和测试技术。我们国内的大多数工程师都在这个水平上,这也是我们软件质量上不去的一个重要原因。

2 .测试工程师 / 程序分析员

具有 1-2 年经验的测试工程师或程序员,主要职责是编写自动测试脚本程序并担任测试编程初期的领导工作,进一步拓展编程语言、操作系统、网络与数据库方面的技能。国内的高级测试工程师的水平比这个级别还要略低些。

3 .高级测试工程师 / 程序分析员

具有 3-4 年经验的测试工程师或程序员。帮助开发或维护测试或编程标准与过程,负责同级的评审,并为其它初级的测试工程师或程序员充当顾问。继续拓展编程语言、操作系统、网络与数据库方面的技能。其能力相当于国内的测试负责人。

4 .测试组负责人

具有 4-6 年经验的测试工程师或程序员。负责管理 1 3 名测试工程师或程序员。担负一些进度安排和工作规模 / 成本估算职责。更集中于技能方面。

5 .测试 / 编程负责人

具有 6-10 年经验的测试工程师或程序员。负责管理 8 10 名技术人员。负责进度安排、工作规模 / 成本估算、按进度表和预算目标交付产品。负责开发项目的技术方法。为一些用户提供支持与演示。开发一些特定领域的技术专长。

6 .测试 / 质量保证 / 开发(项目)、经理

具有 10 多年的工作经验。管理 8 名或更多的人员参加的 1 个或多个项目。负责这一领域(测试 / 质量保证 / 开发)内的整个开发生存周期业务。为一些用户提供交互和大量演示。负责项目成本、进度安排、计划和人员分工。

7 .计划经理

具有 15 年以上开发与支持(测试 / 质量保证)活动方面的经验。管理从事若干项目的人员以及整个开发生存周期。负责把握项目方向与盈亏责任。

国内测试工程师早期的发展和国外有些类似,基本遵循从初级测试工程师到中级、高级测试工程师,再从测试负责人到测试经理。但是接下来就很难提升,很少有测试工程师发展成为 IT 企业的技术总监,主要原因就是技术能力不够。

5 小结

测试工程师要想突破职业发展瓶颈,就应该充分了解各个职业发展阶段的技能要求,并在每个阶段打好基础。职业瓶颈往往是个人能力达不到要求的直接体现,因此测试工程师应该按照“五心”的要求发展自己,尤其要充满信心!

最后送各位测试同行一句:打好基础,不断学习!唯有学习才能永远不败!

 

 

 

[1] 光芒国际传媒的同事阿梅总结出了四心:专心、细心、耐心、责任心作为对测试工程师的基本要求。