没有经验,不知如何跻身于测试工程师的行列?以下几个基本方向能使你从新手成为软件测试的行家里手。
软件工业是自动化工业的一部分。
而且是最活跃发展最迅速的一个方面。
到底有多迅速?任何人的想像力都不够!正如我们不会把我们的事务托付给不可靠的经纪,任何有分量的公司都不会采用没有质量保障的软件。
软件测试人员,我是说有水平有经验的软件测试人员永远是供不应求的。
软件测试经理不得不花很多的时间去面试有潜力的应聘者。
一些应聘者在软件方面或者软件测试方面毫无实际经验,明知道软件测试工作是一个高回报的和最合适的软件工业入门,就是无法抓住一个又一个机会。
这些人真正需要的是一个指南能告诉他们如何成为一个软件测试工程师。
首先,进入软件测试需要哪些技能?
1、软件工程技能(Software Engineering Skills)
软件工程技能可以分成三大块:理解软件工程的规则,了解计算机编程和操作系统知识。
理解软件工程“规则”。
有一种过时的眼光认为软件工程只是由一些在工作期限之前疯狂编程、靠着非凡的协调能力和超人般的咖啡消耗整夜不睡,不停地设计和测试程序的“专家”们组成的。
这种现象确实存在,但你只有了解了软件开发的真正过程,才会是一个专业人员。
计算机编程。
不能想像有的人喜欢测试产品却从不阅读、检查和理解组成产品的软件一样。
不要误解我的意思。
你不必花所有的时间去读源代码,但任何你做过的有关自己程序的设计、编写和纠错都能大大地有助于测试别人编写的程序。
操作系统知识。
你已经把它交给了在Redmond, Washington的那些人了。
在短短的几年内,Windows NT已经成为世界上大部分计算机的标准操作系统。
如果你要用NT工作,你需要了解它的寄存地址。
(它是一种用于存储你的系统结构的各个方面的数据库。
)我发现Peter Norton写的Inside Windows NT 4.0 (SAMS, 1998)是一本很好的介绍书。
但是,如果你的应用或系统要求高的保密度、产出、可靠性及灵活性,Unix依然是最好的选择。
2、交流技能(Communications Skills)
能写出计算机程序却写不出一个完整句子的软件工程师现在还有。
但不幸的是,要成为一个成功的软件测试工程师,你需要清楚的交流。
你怎么去学习写?通过写。
如果文字水平太粗糙,上一门创造性写作的课。
每天写工程流水记录或发email。
关键是学习(或重新学习)怎样用清晰可懂的语言表达你的思想。
一个好的写作参谋是William Strunk Jr.和E.B. White写的The Elements of Style(Allyn & Bacon, 2000),它一点也不象初中教科书。
在与软件产品打交道的过程中,测试工程师比其他部门的人参与项目的更多方面。
测试部门应当记录项目过程中重大事件(例如设计决定)的信息。
这个信息应能帮助测试部门和其他部门避免在后续项目中犯同样的错误。
错误是不可避免的,在一个项目中可能出问题。
从这些经验中学习就可能避免问题,避免今后的同样错误。
从错误中学习的第一步就是记住它们,记忆的第一步就是把它们写下来。
3、组织技能(Organizational Skills)
每当执行一个软件项目的测试计划,几乎不可能不遇到至少会阻碍一些测试而必须解决的缺陷。
一个测试工程师应当能灵活地停止测试产品的一部分而开始测试其他部分。
有时被测软件需要做根本变动引起大量的测试结果失效,测试也许得重做不止一次。
在问题被查找和改变在进行的过程中,测试工程师必须有条理,保持对执行测试的软件的前后关系的明确感受(例如目前被测试的程序特定版本的不同部分)。
记住计划是一个动词。
作为一个软件工程师,你永远不会有你想要的所有时间和资源。
你总是必须通过理解技术和产品,开发组织方式,从你和其他人的错误中学习,以及在设计必须改变和出问题的时侯的迅速调整,使你的测试效果和效率最大化。
如何能做到这点呢?基本代数:量化任务、目标和结果来减少方程中的变量数。
把产品的功能定义成要求。
在测试计划和测试中量化测试及其预期的和实际的结果,把信息提供给项目组。
你东点一下西点一下是不能完成整个测试的。
未来软件开发的组织模式要求有灵活的设计和不断进化的开发周期。
对产品测试必须随着产品的进化而进化。
4、实践经验(Hands-On Experience)
这是个典型的两难问题。
你需要软件测试经验来找工作,你没工作你就没经验。
你该怎么办?Be careful! 这需要勇气和你的PC的小心备份。
一句忠告:如果你要把很多beta软件下载到你家里的PC里,投资你的备份设备和防病毒组件。
5、态度(Attitude)
进行软件测试需要很多人的眼光要进行一百八十度的转变,因为测试的目标是要让被测软件失败,由此产生出等同于其他东西工作正确时的成功。
在软件测试中,一个成功的测试揭示一个缺陷。
进行软件测试也是因为互联网的来临要求人们用一种大不同以往的眼光来看待动态的开发和测试模型。
6、必备特性(Necessary Traits)
软件测试工程师除了技术,还要求具有否定性的创造力;探测技巧;总体理解产品的能力;用客户的眼光进行评估;怀疑的而不是敌意的态度;能经受得住坏消息而保持目标;拥抱新技术的热望等特征。
否定性的创造力。
一个软件工程师不能怕引起一个产品的瘫痪或烧毁。
在软件测试中,边界意味着被超越而不是被遵从。
如果一个程序对某个值的极限为10(例如,可以在一时间被打开的最大文件数),测试工程师的第一想法应当是“如果我把那个值取11,或0,或10.1,甚至不设这个值会如何?”
探测技巧。
在一个理想的世界中,软件测试应当在一个经常更新的写得很清楚的功能与设计说明文件(一般被称为specifications”)中被完整而精确地描述。
不幸的是,这一完善被开发程序每一方面文件的任务,包括记录在开发中对程序不可避免的改变,要花很多的时间和精力以至于人们无法完成编程。
而且花费也太大。
总体理解产品。
在一个程序项目是,软件开发工程师主要把他们的精力和注意力集于自己的项目部分。
结果当这些项目部分组合在一起进行测试的时候,就会碰到兼容性的问题。
到产品寄给一个客户之前,唯一能见到整个产品的就是测试工程师。
因此测试工程师必须能够对整个产品的操作与使用保持一种“系统”的眼光。
要求变化。
项目刚开始时的要求与最终项目完成时的要求一致的情况是极少见的。
有时技术变化了,产品必须改变以适应于技术。
有时竞争对手的产品具有你的产品所没有的功能。
很多情况下,客户的或潜在客户的要求需要变化。
这些因素合在一起的一个例子就是目前Microsoft Internet Explorer和Netscape的竞争。
怀疑的而不是敌意的态度。
测试工程师不能按表面值接受事物,必须执着地对一切提出疑问直到被证实。
工程师必须用一种与项目的其他的人合作精神来平衡这种怀疑性与执着性。
测试部门与其有关部门的关系可能会变得紧张,特别是在大量缺陷被发现后,或者在每个找出的缺陷会潜在地延迟产品的发货时间而延迟了项目时。
测试工程师应当记住要攻击程序的整体性,而不是程序员。
经受得住坏消息而保持目标的能力。
一个测试工程师必须忠实地汇报产品中的缺陷。
这一信息应当被项目组欢迎,因为每一个测试工程师遇到的问题(除非加入新的问题)都意味着减少客户会面临的问题。
但不幸的是很多人不想听到有问题,特别是在程序项目的后期。
拥抱新技术的热望。
对多数人来说,年龄越大越难学习。
在商业世界里,人员越往公司的食物链高处走,越远离他们所建立的技术基础。
这一部分是因为他们需要把精力集中于其他的经营和指导其下属的任务中。
有时也是因为他们不幸地认为自己已不需要进行实践的技术工作了。
互联网增加了技术变化的速度。
不继续学习或跟着发展就无法做出商务与技术的决断。
软件的大工业生产决定了软件测试是生产的必不可少的环节。
对於人员配置,一直以来流行一种五比一的标准说法。
从公司内部看任何时候都是远高于这一比例。
从近一个时期看,开发与测试工作量的比重甚至达到了二比一。
同类型成熟产品之间的竞争最容易取胜的方法是提高质量。
由于公司之间的竞争日益集中在质量方面,所以公司对软件测试人员的需求量也越来越大,这一点,在北美尤为明显,这决定了软件测试行业的前景可喜,同时也为愿意不断进取、学习新技术的华人移民提供了广阔的就业空间,软件测试工程师的就业机会一直都是非常多的,最关键,要善于抓住机遇并肯付出努力,踏踏实实的学起来、做起来。