一.软件测试工程师需要的专业技能
计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,则计算机专业技能是必不可少的。计算机专业技能主要包含三个方面:
⒈ 测试专业技能:测试专业知识很多,本书内容主要以测试人员应该掌握的基础专业技能为主。测试专业技能涉及的范围很广:既包括黑盒测试、白盒测试、测试用例设计等基础测试技术,也包括单元测试、功能测试、集成测试、系统测试、性能测试等测试方法,还包括基础的测试流程管理、缺陷管理、自动化测试技术等知识。
⒉ 软件编程技能:软件编程技能实际应该是测试人员的必备技能之一,在微软,很多测试人员都拥有多年的开发经验。因此,测试人员要想得到较好的职业发展,必须能够编写程序。只有能够编写程序,才可以胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。
此外,对软件测试人员的编程技能要求也有别于开发人员:测试人员编写的程序应着眼于运行正确,同时兼顾高效率,尤其体现在与性能测试相关的测试代码编写上。因此测试人员要具备一定的算法设计能力。依据资深测试工程师的经验,测试工程师至少应该掌握Java、C#、C++之类的一门语言以及相应的开发工具。
⒊ 网络、操作系统、数据库、中间件等知识与开发人员相比,测试人员掌握的知识具有“博而不精”的特点,“艺多不压身”是个非常形象的比喻。由于测试中经常需要配置、调试各种测试环境,而且在性能测试中还要对各种系统平台进行分析与调优,因此测试人员需要掌握更多网络、操作系统、数据库等知识。
在网络方面,测试人员应该掌握基本的网络协议以及网络工作原理,尤其要掌握一些网络环境的配置,这些都是测试工作中经常遇到的知识。
操作系统和中间件方面,应该掌握基本的使用以及安装、配置等。例如很多应用系统都是基于Unix、linux来运行的,这就要求测试人员掌握基本的操作命令以及相关的工具软件。而WebLogic、Websphere等中间件的安装、配置很多时候也需要掌握一些。
数据库知识则是更应该掌握技能,现在的应用系统几乎离不开数据库。因此不但要掌握基本的安装、配置,还要掌握SQL。测试人员至少应该掌握Mysql、MSSqlserver、Oracle等常见数据库的使用。
二.软件测试工程师需要的行业知识
行业主要指测试人员所在企业涉及的行业领域,例如很多IT企业从事石油、电信、银行、电子政务、电子商务等行业领域的产品开发。行业知识即业务知识,是测试人员做好测试工作的又一个前提条件,只有深入地了解了产品的业务流程,才可以判断出开发人员实现的产品功能是否正确。
很多时候,软件运行起来没有异常,但是功能不一定正确。只有掌握了相关的行业知识,才可以判断出用户的业务需求是否得到了实现。
行业知识与工作经验有一定关系,通过时间即可以完成积累。
三.软件测试工程师需要的个人素养
作为一名优秀的测试工程师,首先要对测试工作有兴趣:测试工作很多时候都是显得有些枯燥的,因此热爱测试工作,才更容易做好测试工作。因此,除了具有前面的专业技能和行业知识外,测试人员应该具有一些基本的个人素养,即下面的“五心”。
1.专心:主要指测试人员在执行测试任务的时候要专心,不可一心二用。经验表明,高度集中精神不但能够提高效率,还能发现更多的软件缺陷,业绩最棒的往往是团队中做事精力最集中的那些成员。
2.细心:主要指执行测试工作时候要细心,认真执行测试,不可以忽略一些细节。某些缺陷如果不细心很难发现,例如一些界面的样式、文字等。
3.耐心:很多测试工作有时候显得非常枯燥,需要很大的耐心才可以做好。如果比较浮躁,就不会做到“专心”和“细心”,这将让很多软件缺陷从你眼前逃过。
4.责任心:责任心是做好工作必备的素质之一,测试工程师更应该将其发扬光大。如果测试中没有尽到责任,甚至敷衍了事,这将会把测试工作交给用户来完成,很可能引起非常严重的后果。
5.自信心:自信心是现在多数测试工程师都缺少的一项素质,尤其在面对需要编写测试代码等工作的时候,往往认为自己做不到。要想获得更好的职业发展,测试工程师们应该努力学习,建立能“解决一切测试问题”的信心。
“五心”只是做好测试工作的基本要求,测试人员应该具有的素质还很多。例如测试人员不但要具有团队合作精神,而且应该学会宽容待人,学会去理解“开发人员”,同时要尊重开发人员的劳动成果——开发出来的产品。
四.对软件测试工程师的要求
1、质量意识:在整个软件测试的各个环节中,质量意识一定要贯穿其中。理解功能需求,书写测试案例,执行测试计划,发现问题,提交问题,描述问题,协助解决问题,以及问题的跟踪等,在所有的环节中,一定要注重质量,并且从质量的角度来思考问题。
2、细心并且系统:软件测试可能每天要重复同样的操作,其工作可能会枯燥无味,并且发现的问题可能很微小或者很杂乱无章、现象不一。在这样的情况下,软件测试人员一定要细心不放过任何微小的错误,并且从很多杂乱的现象中找出一定的规律和复现性。并且在测试中有很好的规划性,先测什么而后测什么,不放过任何软件的死角。在测试中,一定要系统的看待问题,功能模块A的改动会否影响到其他模块的功能,不能想当然,一定要系统性的看待。有时候一个内存地址的改变,都有可能引起准给软件的崩溃。所以一定要系统性的去处理和看待软件中修改的任意一处代码。
3、软件测试理论的掌握以及开发工具和平台的应用:黑盒测试,白盒测试,功能/系统/压力/性能等等。但不管测试任何东西,基本理论是不变的。需求文档,设计文档,根据文档制作测试用例(划分等价、边界测试、路径测试、用户体验、等等),执行测试,提交并跟踪问题。当然,行业的不同,其测试用的工具和方法也不太一样。手机App该如何测试,无线通讯产品该如何测试,C/B-S应用该如何测试,这些产品的差异性很大,其用到的工作也很不一样,但是其基本的测试理论还是一致的。
4、站的高看的细:不能光有理论,对测试的很多文档可以提出很多有建设性的意见,但当执行测试时却不能发现问题。这其中有几个原因,一是可能提出的意见并没有写进测试案例中,二是有可能执行不仔细总是忽视问题的存在,三可能就是没有去实施。所以一定要站在一定的高度去看待软件测试,但是又要很细致的实施。只有通过实践,才能发现问题改进问题到最后解决问题。
5、团队合作:这个无需多讲,在这个产品日渐复杂的年代,很难有一己之力就可以在各个方面做的最好。要充分发挥团队每个人员的工作能力和效率。
6、怀疑:有些书是这样定义软件测试的,软件测试不会去证明软件是正确的,而是去证明是错误的,但是我们不可能发现所有的错误。所以有很多时候要去怀疑要去假设。