一、【基本素质要求】,这里的基本素质包括比如逻辑思维能力、分析问题能力、沟通能力、协作能力、怀疑精神等方面。
【软件测试】:作为一名优秀的测试工程师,需要比较强的综合素质,具体包括比如“五心”,责任心、细心、耐心、专心、信心等,具体这里不阐述了,可以看我以前的相关博文;五大“学问”,逻辑学,很多公司在招聘的过程中会刻意来考察下测试工程师的逻辑思维能力。刑侦学,测试工程师需要通过分析问题的表象,借助专业的工具,良好的知识背景来分析问题背后深层次的根本原因。心理学,测试工程师,需要不仅仅站在用户的角度来测试,也需要清楚开发人员的心理,分析他们的出错模式。统计学,测试报告就是统计学知识很好的展现。经济学,好的测试一定是为了帮助提高软件质量,从而提高用户满意度,带来更多的市场,从而实现盈利。沟通能力体现在测试工程师需要跟开发人员和用户沟通。协作和怀疑精神对于测试工程师而言也是非常重要的素质。
【软件开发】:需要说明一点的是,这里指的软件开发更多倾向于软件编码,不包含软件设计以及软件需求分析人员,这个是软件编码未来的职业方向。作为一名优秀的开发工程师,在素质方面,更偏向于某一个方面,对逻辑思维能力的要求相对测试工程师较低一点。因为在成熟的开发模式下,普通的编码人员更多地师掌握一门开发语言的语法和一个开发平台。所以在印度高中生都能编程,但是在中国行不通。从这个方面来看,对“五心”的要求和对“五大学问”的要求没有那么全面。如果说测试更强调综合素质,那么开发更看重某些方面的素质。
二、【性格要求】,有人说性格决定命运,从某种意义上来说也是对的,性格会在一定程度上决定一个人的兴趣,一个人会喜欢那种类型的工作。
【软件测试】:从全面性的角度来看,作为一名优秀的测试工程师,性格上最好是相对外向点,虽然这个不代表你需要像销售人员那样外向,善于与人交流。但起码你要愿意主动与开发人员,与用户沟通。另外,对于性格而言,要求测试工程师更加敏感,更具备怀疑精神,挑剔的,追求完美的性格以及刨根问底的心态也是比较重要的。从沟通的角度来看,太过于内向的人不太合适软件测试这个行业,起码不适合一线的测试工程师。
【软件开发】:开发工程师对于性格来说,要求没有那么明显,性格的内向、外向更成为一名优秀的开发工程师关系不大。因为开发工程师更多的是面对开发环境,不断在修改代码?这里面也有不少工作是重复繁琐的。所以性格上要求是能承受寂寞的。所以写代码写得比较久的人,有时会觉得很急躁。改变这种急躁的办法有两个,一个是争取去做有思想的设计,有沟通的需求分析。另一个是该行,比如做开发管理或者是项目管理,亦或者是测试开发。
三、【入职门槛】,这个部分是为想进入软件测试和软件开发领域的人而专门写的。网络上很多人都在说,软件测试入职门槛低,软件开发入职门槛高。其实这个观点有失偏颇。下面具体来比较。
【软件测试】:客观上来讲,进入软件测试领域的方式更多,但不是入职门槛更低,比如有些人可以通过行业知识背景进入软件测试领域,具体比如金蝶、用友都有不少测试工程师是学财务的,而不一定是学计算机的。甚至有些人可以通过性格和基本素质进入软件测试领域,比如微软以前招过家庭主妇做软件测试。不是微软不重视测试,实际上微软比任何软件企业更重视软件测试,在微软所有产品里面,测试工程师比例比开发是要高的。还有些是从软件开发工程师转型做软件测试,所以进入软件测试领域的方式很多。正是因为方式多,就给人造成一种迹象是入职门槛低。还有从现状的角度来看,因为需求的因素,企业不经意间降低了对软件测试工程师的要求,但是这个是饮鸩止渴。很多企业慢慢发现了这个问题,所以说,以后测试工程师的要求会越来越高。
【软件开发】:客观上来讲,进入软件开发领域方式相对较少,但也不是入职门槛更高,因为,在印度高中生都能编程。实际上掌握一门开发语言的语法,掌握一个开发平台,就可以做编码了。尤其在成熟的开发企业如此。所以国内的北大青鸟的ACCP就是为高中生准备的开发培训。但从学历的角度来看,高中生要想做软件测试还是非常困难的。只是因为,开发工程师必须要学一门编程语言,所以表面上看起来要求更高,还有一个因素是受传统因素的影响,做软件开发的人相比软件测试的人多很多,所以从竞争压力上来看,要求就更高了,是比较出来的高。
四、【转行难度】,转行,其实最重要的原因不外乎就是以下几点:对现在的薪酬不满意、现在的职业出现了瓶颈、新的行业有更大的发展空间,喜欢新的工作方式等。这里就不讨论转行的动机,这里考虑更多的是转行的障碍,主要的障碍有,如何结合自身实际情况选择转行的方向?如何克服工作经验不足或不相关?如何克服专业知识匮乏?什么样的年龄适合?这部分是为转行做软件开发还是软件测试的人专门写的。网络上也有人不少人都在说,我只所以转行来做软件测试,是因为入职门槛低,前景好,是因为学得会,而软件开发我学不会。真的是这样吗?不一定。适合的才是做好的。
【软件测试】:自身的实际情况,包括前面讲的基本素质、性格特点等,以及入职门槛因素,如果综合素质很全面、性格外向、沟通能力强,有不错的行业知识背景。比如有金融背景、财务背景、物流行业背景、证券背景、电子商务背景、移动通信背景等人。同时年龄在30岁以下,转行测试会比较合适。经过专业知识学习,结合行业分析加上有经验的人得指导。转行的难度还是比较小的。可行性还是比较高的。因为可以利用好自身的过去的一些东西。
【软件开发】:转行开发的角度来看,很难只靠基本素质和性格特点就轻易地转行,这个难度比较大,从过去的知识背景的角度来看,转行开发比较难以利用上。所以过去的经历对于转行开发几乎没有帮助,从这点来看,要转行开发,就必须接受从零开始,所以,年龄超过25岁,有过两年以及以上工作经验的人,不太合适转行开发。因为要浪费两年的工作经历。
五、【知识结构】,知识结构决定职业发展,知识结构决定行业发展,包括未来职业规划的考虑,下面从一个优秀的测试工程师应该具备的知识结构来对比软件测试与软件开发。
【软件测试】:一个优秀的测试工程师需要的知识结构,从全面性角度来看,包括如下几个方面,第一是计算机知识,包括编程语言,掌握至少一门开发语言,比如c、java、C#等,一门脚本语言,比如Tcl、python、Perl、Ruby、Shell中对于测试工程师未来更广的职业发展非常有帮助。数据库知识,虽然并不是所有的测试工程师都需要掌握一门数据库,比如做移动互联网的,对数据库要求相对较低,但对于大部分大型项目,都会有数据库,所以掌握至少一门数据库,比如Oracle、DB2、Mysql等。另外操作系统,比如Linux、Unix核心命令也非常重要。对于有些涉及到网络的,网络和通信知识,比如Tcp/IP协议也非常重要。另外数据结构、软件工程等其他计算机知识也最好也具备。第二部分是软件测试核心技术,掌握软件测试核心的方法论,具体包括软件测试需求分析与软件测试用例设计核心工程方法。掌握主流的软件测试工具,比如性能测试工具LoadRunner,自动化工具典型代表QTP,测试管理工具QC、51Testing的TP、开源测试管理工具Testlink、Bugzilla、Bugfree、Jira等。掌握核心的研发流程,比如RUP,测试流程,比如双V模型,或者是现在流行的敏捷测试等,也是同样重要。方法是秘笈、工具是兵器、流程是套路。虽然测试好比武术,棍术好比黑盒测试,剑术好比白盒测试。不同的武术对知识结构要求是不一样。这个也是前面讲到的进入软件测试领域的方式相比开发要多的原因之一。第三个部分是行业知识与背景,这个对于有些行业而言,非计算机专业的人会有些相对的优势。第四部分是英语,英语好对于做好软件测试也有非常大的帮助,尤其是国际化软件测试。
【软件开发】:一个优秀的软件开发工程师需要的知识结构,从全面性角度来看,包括如下几个方面,第一也是最重要的是精通至少一门编程语言语法,比如Java、C、C++、C#等,至少熟悉一个开发平台或工具,跟具体开发语言对应的平台,比如Eclipse、Netbeans、VC等。熟悉一门数据库,比如Oracle、DB2、Mysql等,熟悉操作系统,比如Linux、Unix包括相关的编译环境,比如gcc等。熟悉软件工程、熟悉算法、数据结构。这个方面可以多看看,设计模式方面的书籍。第二部分是英语,英语对于做好软件开发也有非常大的帮助,因为开发平台和环境都是英文为主。英语也有助于帮助理解一个编程语言的语法。
六、【竞争压力】,竞争压力的分析有助于帮助我们选择,选择大于努力指的是,同样花5年的时间,所能达到的不同的程度。竞争压力的大小取决于行业发展现状。行业越成熟,竞争压力越大。
【软件测试】:软件测试的发展史相对于软件开发来看,相对来说是不太成熟的,尤其是在中国。从很多猎头招聘网站包括51Testing论坛的招聘板块来看,想招一个10年左右测试经验的人,很难。原因是真正意义上软件测试的兴起基本上在2000年左右才开始。发展到今天,软件测试从业人员和软件开发从业人员的比例相比国外成熟的1:1的比例还是相差甚远。所以相对来说,竞争的压力相对较小。严格意义上来说,软件测试在中国的情况,还是乱世,所以乱世出英雄。另外,很多企业已经意识到软件测试对于软件质量的重要性,很多的软件事故迫使企业真正思考测试的核心价值。所以客观上也导致了,软件测试需求在增加,虽然对测试工程师的要求越来越高。
【软件开发】:软件开发的发展史相比软件测试来看,相对来说还是比较成熟的,虽然相比印度等软件大国来看,远不如别人成熟。软件开发在2000年左右的时候很火,曾经有一句口号是“学好C++,走遍深圳都不怕”。当时的深圳严重缺少C++人才。但现在市面上其实不缺少初级的开发工程师了。因为初级的已经相对饱和了。另外做开发,如果3年时间内都只是做编码的工作,也会遇到职业瓶颈。另外从学习的角度来看,开发平台和语言的更新相比测试平台还是要快一点。所以客观意义上也导致软件开发的压力大些。另外在同一个企业里面,正常来讲,开发加班会比测试加班要多。
七、【职业发展】,关于职业发展,以前也写过关于测试的职业发展的文章,51Testing网站上也有不少,但是对比开发的职业发展,还是比较少的。其实测试与开发的职业发展在有些方面是一直的,比如将来都可以往管理方向发展,也都可以考虑往需求分析方面发展。甚至也都可以往咨询和培训服务方面发展。这些是他们的共同点。
【软件测试】:前面讲到过,软件测试从综合素质,知识结构等角度来看,要求比软件开发要更全面,这也直接导致了,软件测试的职业发展路线要广于软件开发,在测试技术领域,可以从测试执行工程师、测试设计工程师、测试系统工程师、测试架构工程师、测试专家这个道路晋升,也可以走比如自动化测试、测试开发、性能测试、易用性测试、安全性测试等专项。另外从管理的领域来看,可以从普通测试工程师,测试项目经理、测试主管、测试经理、测试总监、大部门测试总监等晋升。另外从外围IT职业,测试还可以走行业测试专家,比如金融领域测试专家,项目管理、软件测试咨询与培训等、软件质量保证(SQA)、软件销售、技术支持等只要是IT领域的职位都行。
【软件开发】:软件开发的职业发展其实也比较广泛,在开发技术领域,可以从软件编码、软件设计与架构、软件需求等领域晋升。也可以从普通开发工程师、开发项目经理、开发经理、开发总监或者研发总监等晋升。另外也可以转型来做测试,通过学习测试关键技术,来做测试领域的测试开发。但从外围IT职业,开发相比测试能走的相对还是要窄些,很难走行业专家,除非先走需求分析,最后走行业专家。
八、【职业前景】,严格意义上来讲,软件开发和软件测试都有非常不错的职业前景。因为IT服务人类,IT改变人们的生活方式,IT对于现代社会而言非常重要。但从历史的角度来看,软件测试与软件开发的职业前景还是有一些区别的。
【软件测试】:无论从行业现状,软件测试的重要性,以及软件测试发展史来看,至少在可以预见的未来10年时间内,整个软件测试行业应该会处于蓬勃发展这样一个生命周期中。因为一项职业从孕育、发展、成熟、稳定需要一定的时间来承载。这点,大家也可以从一些官方的数据来看到。
【软件开发】:从长远来看,还是不错的,但是相对于生命周期来看,软件开发早已经不是以前很多企业只是关注把软件做出来,就像现在要做出一个类似于淘宝的电子商城,其实从功能上,从代码实现上来看,已经很成熟了,花几千块可以买现成的模板,定制下,就可以。所以开发模式在改变,工厂化,模块化思想已经很成熟。所以将来的软件开发一定会关注,个性化、差异化。从这个意义上来看,软件开发的职业前景会受到需求的影响。另外,从行业资讯来看,比较新的开发技术会得到关注。老的慢慢会淡化。
总体而言,如果非得要在软件开发和软件测试做一个结论性的比较,还是比较困难的,所以给每一位看到此文章的人一个建议,如果你很难选择把哪个作为自己的职业来思考。就强烈建议你可以问下这两个领域资深的人,他们的建议对于你来说应该比较关键。另外,清楚地问下如下几个问题:一个是,你的优点是什么?缺点是什么?第二个是,你想做什么样的工作?你能做什么样的工作?第三个是,有哪些事情是一定要靠自己的,有哪些事情是一定要借助外力。所以,有时我们不仅仅是要埋头干活,也需要抬头看路,另外,人生没有捷径可走,但要懂得借势而上。如果你对你的职业不满意,转行是一种选择,树挪死,人挪活。只是在挪的时候,分析下自己,因为你可以改变你自己。分析下外部的环境,因为你需要去适应环境。