网站首页 个人范本 行业范本 行政范本 职场范本 校园范本 书信范本 生活范本 节日范本
当前位置:文学网 > 职场范本 > 职场百科

软件测试工程师

栏目: 职场百科 / 发布于: / 人气:9.35K

软件测试工程师Software Testing Engineer指理解产品的功能要求并对其进行测试检查软件有没有错误Bug决定软件是否具有稳定性Robustness写出相应的测试规范和测试用例的专门工作人员简而言之软件测试工程师在一家软件企业中担当的是质量管理角色及时纠错及时更正确保产品的正常运作按其级别和职位的不同分为三类

软件测试工程师

1分类

按其级别和职位的不同可分为三类高级软件测试工程师熟练掌握软件测试与开发技术且对所测试软件对口行业非常了解能够对可能出现的问题进行分析评估中级软件测试工程师编写软件测试方案测试文档与项目组一起制定软件测试阶段的工作计划能够在项目运行中合理利用测试工具完成测试任务初级软件测试工程师其工作通常都是按照软件测试方案和流程对产品进行功能测验检察产品是否有缺陷

2角色定位

软件项目开发是个分工明确的系统工程不同的人员扮演了不同的角色包括部门经理产品经理项目经理系统分析师程序员测试工程师质量保证人员等可见软件测试工程师只是软件项目开发中的一个角色而已测试工程师承担的任务角色决定工作内容和承担的任务测试工程师的角色应该承担什么任务呢这没有统一的答案因为这与软件公司的规模软件项目管理制度公司领导和项目经理的管理风格以及具体软件项目自身的特点有很大关系而且测试工程师也有普通和高级之分笼统的答案列举如下设置软件测试环境安装必要的软件工具运行软件发现和报告软件缺陷或错误尤其需要快速定位软件中的严重的错误对软件整体质量提出评估确认软件达到某种具体标准以最低的成本最短的时间完成高质量的测试任务......在这其中最重要的是要明确程序员的责任和目标在执行任何具体测试任务前都要在项目组内对于责任和目标达成共识以免带来后续工作的相互推诿提高测试质量的要诀另外一个值得注意的方面就是工作效率和质量或许高级测试工程师与普通测试工程师的主要区别在于高级测试工程师可以更快地发现更多软件中的严重错误对此有什么可以借鉴的诀窍吗请尝试以下方法保证不会使您失望首先测试程序的核心功能然后测试辅助功能首先测试功能然后测试性能首先测试常见情况然后测试异常情况首先测试经过变更的部分然后测试没有变更的部分首先测试影响大的问题然后测试影响小的问题首先测试必须测试的部分然后测试可选或没有要求测试的部分服务员需要强调的一点是无论你是多么高级的测试工程师都要明白无论测试需要的工具多么复杂测试步骤多么冗长测试工程师在软件项目开发中始终都是扮演服务员的角色这是由测试工作的特点决定的任何服务都有被服务对象客户测试工程师的服务对象有哪些呢最重要的客户是软件的用户测试工程师需要站在客户的使用和需求角度测试软件报告问题项目经理也是客户测试工程师需要报告测试工作进度和发现的问题尤其是严重的问题程序员是最经常打交道的客户为了便于程序员重复报告的错误尽量提供良好的软件问题报告以便程序员可以更快的修复软件错误技术文档工程师市场开发人员和技术支持工程师也都是测试工程师的服务对象避免错误前文已经指出测试工程师应该明确角色明确任务和责任知道哪些是自己分内的事哪些是不属于自己的事一定要尽最大努力完成分内的事不要做不属于自己的事情以免弄巧成拙为了更好的扮演软件测试工程师的角色尽量避免犯下面的错误⒈承诺完成测试的软件没有质量问题软件测试只是保证质量的一种方法软件测试工程师的工作不会直接提高软件质量因为绝大多数软件错误都需要程序员修复软件测试只能证明软件存在错误不能保证软件没有错误不可能找出全部软件错误个人的能力和对质量的影响范围很小软件质量的提高要靠软件项目团队全体成员的共同努力⒉承担软件的发布权利不要因为软件中存在还没有修复的错误而试图提出更改软件发布的计划也不要认为已经完成了测试计划自己决定可以发布软件因为改变软件发布计划可能要失去进入市场的良机和很多客户对此造成的经济和公司市场的损失将不是测试工程师能够承担的另外软件发布后如果用户发现了新的软件错误公司领导或项目经理可能将过错加在软件测试人员的头上因为他们同意发布软件通常软件发布的权利由产品经理项目经理测试经理市场经理共同集体讨论决定⒊扮演过程改进成员的角色软件测试工程师必须报告错误有时也要分析错误的类型特征和产生错误的原因但是不要主动提出改进软件过程的具体改进措施更不要直接干涉程序员的工作方式以免出力不讨好影响今后的愉快合作软件过程改进的方法是软件质量控制部门的事情这是他们的本职工作

3工作职责

软件测试就是使用人工或自动手段来运行或测试某个系统的过程其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别开发工作的根本是尽量实现软件用户的需求测试工作的根本是检验软件系统是否满足软件用户的需求软件测试工程师简单的说是软件开发过程中的质量检测者和保障者负责软件质量的把关工作软件测试工程师具体工作有1 使用各种测试技术和方法来测试和发现软件中存在的软件缺陷测试技术主要分为黑盒测试和白盒测试两大类其中黑盒测试技术主要有等价类划分法边界值法因果图法状态图法测试大纲法以及各类典型的软件故障模型等白盒测试的主要技术有语句覆盖分支覆盖判定覆盖基本路径覆盖等2 测试工作需要贯穿整个软件开发生命周期完整的软件测试工作包括单

软件测试职业发展的各个阶段

元测试集成测试确认测试和系统测试工作单元测试工作主要在编码阶段完成由开发人员和软件测试工程师共同完成其主要依据是详细测试集成测试的主要工作测试软件模块之间的接口是否正确实现基本依据是软件体系结构设计确认测试和系统测试是在软件开发完成后验证软件的功能与需求的一致性验证软件在相应的硬件条件下的系统功能是否满足用户需求其主要依据是用户需求3 测试人员将发现的缺陷编写成正式的缺陷报告提交给开发人员进行缺陷的确认和修复缺陷报告编写最主要的要求是保证缺陷的重现要求测试人员具有很好的文字表达能力和语言组织能力4 测试人员需要分析软件质量在测试完成后测试人员需要根据测试结果来分析软件质量包括缺陷率缺陷分布缺陷修复趋势等给出软件各种质量特性包括有功能性可靠性易用性安全性时间与资源特性等的具体度量最后给出一个软件是否可以发布或提交用户使用的结论5 测试过程中为了更好地组织与实施测试工作测试负责人需要制定测试计划包括有测试资源测试进度测

首届软件测试工程师专场招聘会

试策略测试方法测试工具测试风险等6 测试人员为了更好更有效地进行测试保证测试工作质量需要在执行测试工作之前首先需要设计测试用例形成测试用例报告设计测试用例是保证测试质量的核心工作很多测试技术都可以用来指导设计用例为了提高测试用例的设计效率BTEST培训课程专门开设了高效设计测试用例一门课来讲授各种设计用例的技术与方法7 为了提高工作效率或提高测试水平测试工作需要引进自动化测试工具测试人员需要学会使用自动化测试工具编写测试脚本进行性能测试等8 测试负责人在测试工作中还需要根据实际情况不断改进测试过程提高测试水平进行测试队伍的建设等

4职业发展

简介

职业方向

试组长这类测试人员通常是测试项目的负责人既要具备较高的测试技术能力还要具备一定的管理能力主要职责是制定测试计划编写测试计划监控和管理整个测试过程测试组长可以向上发展为测试部经理质量经理也可以横向发展为项目经理而且通常待遇相对较高些

测试分析师

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

测试工程师

主要职责是编写测试程序执行自动化测试任务这类职位的测试人员至少要达到初级程序员的能力因为经常和程序打交道发展空间也不错例如可以发展为程序员

5职业优势

入门门槛低

大中专学历即可是不是计算机专业都可以如果是其他有业务背景的专业更有优势例如会计金融办公自动化酒店管理网站设计等对于有行业背景的人来说入门更快因为对于测试工作来说有时懂业务比懂技术还重要你会了技术去各行各业做测试都是要学习业务知识的这是很正常的事

初级技术要求低

目前大部分测试技术还属于手工测试手工测试要求入门门槛很低你只要会写用例会提缺陷就可以了测试人员需要简单了解业务知识学习所开发系统的使用也就是会使用系统就可以了照着用例执行测试发现缺陷直接提交缺陷就可以了

很大的薪酬优势

刚开始工作时月薪最低4000多但工作半年对工作流程了解后再去换工作五六千没问题如果做银行业务测试起薪六七千没问题有一点银行业务知识的再去换工作八千以上没问题现在银行测试人员缺口很大尤其是在大的外包公司做好的项目比如银行项目等待遇和同等工作经历的开发差不多

就业好

国外开发与测试的比例是1:2目前国内开发与测试的比例是6:1所以测试行业人才缺口很大就业前景很好基本属于供不应求

工作比较轻松

比起软件开发工程师来说软件测试工程师的工作就相对轻松多了

发展大

测试分为三个阶段手工测试自动化测试性能测试这是一个逐步提升的过程最初工作可能做手工测试也是目前绝大部分测试人员所从事的工作自动化测试是测试的发展趋势而且现在自动化测试人员急缺且薪资很高现在最稀缺的是性能测试人员目前性能测试人员的待遇比同等经历的开发可能还要高因为现在性能测试人员属于稀缺状态1手工测试现在比较普及大多数测试都还停留在手工测试阶段2自动化测试是趋势但目前用自动化测试的还比较少需要适当的代码编写工作做一段手工测试后积累一定经验可以慢慢步入自动化测试阶段如果自动化测试比较熟练月薪1万没问题和开发工资差不多3性能测试性能测试人员现在稀缺人群一般能做性能测试且做得和可以的一般月薪都在1.6万以上比开发要高

无性别要求

软件测试工程师对性别没有特定要求因此是一相对来说比较适合女性的IT职业

越老越吃香

软件测试工作是对质量的把关其中包含技术及管理等方面的工作工作相对稳定对年龄没有限制而且随着经验的积累工龄越长越吃香

6前景分析

软件测试人员的主要职责是对软件产品的整个开发过程进行监督和检验使之能够达到满足客户的需求因此对于企业来讲是十分重要的岗位在国外一般软件测试人员与软件开发人员的岗位设置比例是11像微软在开发windows2000时候使用的软件开发人员是1700名而专业的测试工程师有3200名测试开发人员比例高到1.71由此可见软件测试岗位重要性的不一般

7职业素质

计算机专业技能

中国国内软件测试人才现巨大缺口

算机领域的专业技能是测试工程师应该必备的一项素质是做好测试工作的前提条件尽管没有任何IT背景的人也可以从事测试工作但是一名要想获得更大发展空间或者持久竞争力的测试工程师则计算机专业技能是必不可少的计算机专业技能主要包含三个方面⒈ 测试专业技能测试专业知识很多本书内容主要以测试人员应该掌握的基础专业技能为主测试专业技能涉及的范围很广既包括黑盒测试白盒测试测试用例设计等基础测试技术也包括单元测试功能测试集成测试系统测试性能测试等测试方法还包括基础的测试流程管理缺陷管理自动化测试技术等知识⒉ 软件编程技能软件编程技能实际应该是测试人员的必备技能之一在微软很多测试人员都拥有多年的开发经验因此测试人员要想得到较好的职业发展必须能够编写程序只有能够编写程序才可以胜任诸如单元测试集成测试性能测试等难度较大的测试工作此外对软件测试人员的编程技能要求也有别于开发人员测试人员编写的程序应着眼于运行正确同时兼顾高效率尤其体现在与性能测试相关的测试代码编写上因此测试人员要具备一定的算法设计能力依据资深测试工程师的经验测试工程师至少应该掌握JavaC#C++之类的一门语言以及相应的开发工具⒊ 网络操作系统数据库中间件等知识与开发人员相比测试人员掌握的知识具有博而不精的特点艺多不压身是个非常形象的比喻由于测试中经常需要配置调试各种测试环境而且在性能测试中还要对各种系统平台进行分析与调优因此测试人员需要掌握更多网络操作系统数据库等知识在网络方面测试人员应该掌握基本的网络协议以及网络工作原理尤其要掌握一些网络环境的配置这些都是测试工作中经常遇到的知识操作系统和中间件方面应该掌握基本的使用以及安装配置等例如很多应用系统都是基于Unixlinux来运行的这就要求测试人员掌握基本的操作命令以及相关的工具软件而WebLogicWebsphere等中间件的安装配置很多时候也需要掌握一些数据库知识则是更应该掌握技能现在的应用系统几乎离不开数据库因此不但要掌握基本的安装配置还要掌握SQL测试人员至少应该掌握MysqlMSSqlserverOracle等常见数据库的使用

行业知识

行业主要指测试人员所在企业涉及的行业领域例如很多IT企业从事石油电信银行电子政务电子商务等行业领域的产品开发行业知识即业务知识是测试人员做好测试工作的又一个前提条件只有深入地了解了产品的业务流程才可以判断出开发人员实现的产品功能是否正确很多时候软件运行起来没有异常但是功能不一定正确只有掌握了相关的行业知识才可以判断出用户的业务需求是否得到了实现行业知识与工作经验有一定关系通过时间即可以完成积累

个人素养

作为一名优秀的测试工程师首先要对测试工作有兴趣测试工作很多时候都是显得有些枯燥的因此热爱测试工作才更容易做好测试工作因此除了具有前面的专业技能和行业知识外测试人员应该具有一些基本的个人素养即下面的五心1.专心主要指测试人员在执行测试任务的时候要专心不可一心二用经验表明高度集中精神不但能够提高效率还能发现更多的软件缺陷业绩最棒的往往是团队中做事精力最集中的那些成员2.细心主要指执行测试工作时候要细心认真执行测试不可以忽略一些细节某些缺陷如果不细心很难发现例如一些界面的样式文字等3.耐心很多测试工作有时候显得非常枯燥需要很大的耐心才可以做好如果比较浮躁就不会做到专心和细心这将让很多软件缺陷从你眼前逃过4.责任心责任心是做好工作必备的素质之一测试工程师更应该将其发扬光大如果测试中没有尽到责任甚至敷衍了事这将会把测试工作交给用户来完成很可能引起非常严重的后果5.自信心自信心是现在多数测试工程师都缺少的一项素质尤其在面对需要编写测试代码等工作的时候往往认为自己做不到要想获得更好的职业发展测试工程师们应该努力学习建立能解决一切测试问题的信心五心只是做好测试工作的基本要求测试人员应该具有的素质还很多例如测试人员不但要具有团队合作精神而且应该学会宽容待人学会去理解开发人员同时要尊重开发人员的劳动成果开发出来的产品

要求

1质量意识在整个软件测试的各个环节中质量意识一定要贯穿其中理解功能需求书写测试案例执行测试计划发现问题提交问题描述问题协助解决问题以及问题的跟踪等在所有的环节中一定要注重质量并且从质量的角度来思考问题2细心并且系统软件测试可能每天要重复同样的操作其工作可能会枯燥无味并且发现的问题可能很微小或者很杂乱无章现象不一在这样的情况下软件测试人员一定要细心不放过任何微小的错误并且从很多杂乱的现象中找出一定的规律和复现性并且在测试中有很好的规划性先测什么而后测什么不放过任何软件的死角在测试中一定要系统的看待问题功能模块A的改动会否影响到其他模块的功能不能想当然一定要系统性的看待有时候一个内存地址的改变都有可能引起准给软件的崩溃所以一定要系统性的去处理和看待软件中修改的任意一处代码3软件测试理论的掌握以及开发工具和平台的应用黑盒测试白盒测试功能/系统/压力/性能等等但不管测试任何东西基本理论是不变的需求文档设计文档根据文档制作测试用例划分等价边界测试路径测试用户体验等等执行测试提交并跟踪问题当然行业的不同其测试用的工具和方法也不太一样手机App该如何测试无线通讯产品该如何测试C/B-S应用该如何测试这些产品的差异性很大其用到的工作也很不一样但是其基本的测试理论还是一致的4站的高看的细不能光有理论对测试的很多文档可以提出很多有建设性的意见但当执行测试时却不能发现问题这其中有几个原因一是可能提出的意见并没有写进测试案例中二是有可能执行不仔细总是忽视问题的存在三可能就是没有去实施所以一定要站在一定的高度去看待软件测试但是又要很细致的实施只有通过实践才能发现问题改进问题到最后解决问题5团队合作这个无需多讲在这个产品日渐复杂的年代很难有一己之力就可以在各个方面做的最好要充分发挥团队每个人员的工作能力和效率6怀疑有些书是这样定义软件测试的软件测试不会去证明软件是正确的而是去证明是错误的但是我们不可能发现所有的错误所以有很多时候要去怀疑要去假设

8软件技能

Software Engineering Skills)软件工程技能可以分成三大块理解软件工程的规则了解计算机编程和操作系统知识理解软件工程规则有一种过时的眼光认为软件工程只是由一些在工作期限之前疯狂编程靠着非凡的协调能力和超人般的咖啡消耗整夜不睡不停地设计和测试程序的专家们组成的这种现象确实存在但你只有了解了软件开发的真正过程才会是一个专业人员从哪开始呢先到图书馆去走一走你需要建立软件测试知识的软件工程基础我的建议是阅读Roger Pressman的软件工程A Practitioner's Approach,fifth edition 职业入门第五版McGraw Hill,2000年版和 Glenford Myers的The Art of Software Testing(软件测试艺术John Wiley & Sons,1979年版)Pressman的书是一个对软件工程原理的全面介绍有很多关于软件技巧项目管理要求分析和软件设计等软件工程方面的好书但Pressman对这些方面在一本书里作了介绍Glenford Myers不到二百页1979年发行却是软件测试方面的圣经Myers定义及诠释的测试方法论已成为软件测试的基本模块Myers还考查了软件测试中的经济缺陷的代价和心理学方面测试的目标就是发现失误及不成功之处以及主导软件开发和测试的基本原则对参考书进行基本研究是一个好的开端但这只是单方对话如果你能和上千个直接具有软件工程和测试经验的人以及想进入这一领域的人对话是不是再好不过了呢感谢那些网络电子部落你已经可以做到了ware-eng覆盖了设计编程项目管理等软件工程的各个方面ing涵盖了软件测试的自动化培训技巧等方面等等别只停留在这里你是不是应当经常访问这些网址呢Bug-Net(..%2ebugnet%2ecom是有关软件缺陷的在线杂志阅读有关缺陷的文章是学习如何工作及失败的极好方式你也应当查阅软件测试及质量工程杂志%2estqe%2ecomSTQE 是确定网络软件测试资源很好的始发站计算机编程不能想像有的人喜欢测试产品却从不阅读检查和理解组成产品的软件一样不要误解我的意思你不必花所有的时间去读源代码但任何你做过的有关自己程序的设计编写和纠错都能大大地有助于测试别人编写的程序你怎样学习编程通过编程可以严肃地说开始学习写计算机程序是最简单的事记住我说的是开始学习软件编程环境例如 Microsoft Windows Foundation Classes (MFC) or Sun's Java Foundation Classes (JFC,also called "Swing")不断变得越来越复杂越来越难跟得上但我在努力超越自己你应当怎样学习编程呢首先买Microsoft Visual Basic不要让名字骗了你你能用这套组件建立相当复杂的程序而且它只要一百元左右下一步呢等等是visual编程警告的时候了现在你为你的PC买一个程序语言的时候你其实是买了一个集成开发系统或称为IDE这些IDE通过对编程的简化把开发过程流水线化这些IDE其实会帮你写很多编码这非常有利于尽早开发出一个产品却不利于你学习编程如果你用Windows产生程序你别无选择因为环境介入太多使你无法从头编程如果你从Unix系统产生程序你能自己写所有的编码一旦你习惯了与参量控制结构对象输入输出及更重要的Visual Basic纠错打交道的时候你就可以开始学习C语言了学习C能使你熟悉十六进制系统通过指针分配和参考内存存取个体位码及建立程序模块我总是认为在学Java之前最好先学会C因为C强迫你自己去完成许多任务而Java会自动处理例如释放未用的空间用C工作比Java难但你能学到编程更多的基本方面你其实能用Visual C++IDE从头写C程序但最好还是在Unix系统中学C操作系统知识你已经把它交给了在Redmond,Washington的那些人了在短短的几年内Windows NT已经成为世界上大部分计算机的标准操作系统如果你要用NT工作你需要了解它的寄存地址它是一种用于存储你的系统结构的各个方面的数据库我发现Peter Norton写的InsideWindows NT 4.0(SAMS,1998是一本很好的介绍书但是如果你的应用或系统要求高的保密度产出可靠性及灵活性Unix依然是最好的选择如果你想成为一个成功的软件工程师你必须能在Unix的世界里工作如果你想从头学习编程也要在Unix下进行你的选择是什么你可以到当地的学校或大学学习课程或者在家建立一个Unix系统别昏过去了你所需要的只是一台PC和一份能让你从网络免费下载的Linux拷贝你大约花二十九元能买一份在一个CD-ROM中带了所有文件的拷贝Linux不是Unix的玩具版它是真实的它已经发行了七百万份拷贝一些主要的PC生产商甚至先替你装载了它好了你已经到了Unix或Linux系统了你应当学些什么文件和目录结构标准输入输出和错误流背景background也称为"daemon")处理从C调用系统功能好我可以接下去了一个好的开端是读Arnold Robbins的Unix in a Nutshell (O'Reilly & Associates,1999或者是Ellen Siever的Linux in a Nutshell (O'Reilly & Associates,1999

9交流技能

Communications Skills)能写出计算机程序却写不出一个完整句子的软件工程师现在还有但不幸的是要成为一个成功的软件测试工程师你需要清楚的交流你怎么去学习写通过写如果文字水平太粗糙上一门创造性写作的课每天写工程流水记录或发email关键是学习或重新学习怎样用清晰可懂的语言表达你的思想一个好的写作参谋是William Strunk Jr.和E.B. White写的The Elements of Style(Allyn & Bacon,2000它一点也不象初中教科书测试工程师必须把产品测试的技术写成文件测试计划提供指导并把测试设计转化为设置实现测试和评估结果的步骤指导具有一般软件和产品特性不同层次经验的工程师都能使用这样一个详细的测试计划如此测试设计者或测试方案作者之外的工程师也能能进行测试测试计划也帮着佐证测试策略的正确性项目中的每个人都应当参与审查即市场开发支持技术写作及测试人计划的审查是必不可少的因为尽管测试工程师尽最大努力来达成一个对产品的全面定义这一测试设计者所基于的定义不一定是完整或准确的此外就象开发者很难测试他们自己的编码一样测试工程师也很难明确评估他们自己的测试计划每一个计划审查者都可能根据其经验及专长建议修改有时候审查者还能提供测试工程师在组织产品定义时不具备的信息例如一个市场人员可能了解到了新的客户要求一个软件支持专家可能从有关的产品领域了解到了一个新的缺陷报告测试计划强调测试计划和执行的原则在测试计划中描述进行测试所需的测试设计和步骤是另一层关于测试设计和计划的原则在测试设计和计划中的错误与欠缺在设计转化成测试计划中特定的结构和测试步骤后就经常是再已无法弥补测试计划可作为其它项目例如为不同的产品准备测试时的参考资料当被测试软件找到缺陷解决并证实后测试计划所述的测试可以用于证实缺陷的解决方案同时一个主要的测试设计信息来源特别对于旧产品的新版本而言是相关产品或前版本的测试计划在建立新版本时旧版本的软件测试计划都应当被重新审查与功能与设计说明不同测试计划将从测试的角度来描述产品的功能操作从这方面说测试计划构成了公司公共档案的一部分随着时间的流逝人们会离开公司带走他们的知识以前产品的测试计划就能帮助你定义新产品的测试软件测试工程师还要写测试结果报告测试结果必须写成文档这样就能确定被测软件的状态提供关于必须要解决的缺陷的记录产品测试中发现的所有缺陷的记录是测试部门最显眼保存时间最长的文档测试计划和测试报告在项目的最后常被遗忘但现存缺陷的清单或数据库代表项目未完成的议程这一议程没完成是因为一些缺陷必须在对原来产品的一个patch或maintenance release的时候纠正或者它们在这个产品作为后续产品的基础之前被修复在与软件产品打交道的过程中测试工程师比其他部门的人参与项目的更多方面测试部门应当记录项目过程中重大事件例如设计决定的信息这个信息应能帮助测试部门和其他部门避免在后续项目中犯同样的错误错误是不可避免在一个项目中可能出问题从这些经验中学习就可能避免问题避免今后的同样错误从错误中学习的第一步就是记住它们记忆的第一步就是把它们写下来

10组织技能

Organizational Skills)每当执行一个软件项目的测试计划几乎不可能不遇到至少会阻碍一些测试而必须解决的缺陷一个测试工程师应当能灵活地停止测试产品的一部分而开始测试其他部分有时被测软件需要做根本变动引起大量的测试结果失效测试也许得重做不止一次在问题被查找和改变在进行的过程中测试工程师必须有条理保持对执行测试的软件的前后关系的明确感受例如目前被测试的程序特定版本的不同部分网络时代要求的动态开发和测试模式使组织性的工作方式对测试工程师越来越重要在整个开发过程中被测试软件可能会不断地改进测试工程师在计划和实施测试的时候必须考虑这些变化因素必须控制测试环境来保证测试结果的有效性记住计划是一个动词作为一个软件工程师你永远不会有你想要的所有时间和资源你总是必须通过理解技术和产品开发组织方式从你和其他人的错误中学习以及在设计必须改变和出问题的时候的迅速调整使你的测试效果和效率最大化如何能做到这点呢基本代数量化任务目标和结果来减少方程中的变量数把产品的功能定义成要求在测试计划和测试中量化测试及其预期的和实际的结果把信息提供给项目组你东点一下西点一下是不能完成整个测试的未来软件开发的组织模式要求有灵活的设计和不断进化的开发周期对产品测试必须随着产品的进化而进化

11实践经验

Hands-On Experience)这是个典型的两难问题你需要软件测试经验来找工作你没工作你就没经验你该怎么办Be careful! 这需要勇气和你的PC的小心备份作为自愿者参与beta测试怎样发现需要beta测试员的公司呢首先给你在软件公司工作的亲友打电话偶尔有人会需要beta的测试人员如果这不行到你最喜欢的网络搜索引擎上去找beta test你会发现很多小和不那么小的公司亟需beta测试员为什么这得感谢互联网竞争的加剧使公司必须做出产品模型贴到他们的网址上作为beta版推出这些公司希望人们不仅测试他们的产品而且对这些免费品感兴趣进而购买他们的产品你也能参与开放资源的项目例如Mozilla开放资源的网络浏览器是网络浏览器的基础Mozilla缺陷跟踪系统允许网上任何感兴趣的人直接在 ..2emozilla%2eorg 的开放资源项目中直接报告和跟踪缺陷一句忠告如果你要把很多beta软件下载到你家里的PC里投资你的备份设备和防病毒组件

12态度

Attitude我希望你幸福的梦想被你打破了我打赌这句话能勾起一些人童年记忆的创伤我不是心理学家但我还敢说这种说法是因为我们渴望看到成功在软件测试中你不仅要证实软件在做它该做的还要证实它不会做它不该做的为了做到这一点你得找出软件的失败之处进行软件测试需要很多人的眼光要进行一百八十度的转变因为测试的目标是要让被测软件失败由此产生出等同于其他东西工作正确时的成功在软件测试中一个成功的测试揭示一个缺陷进行软件测试也是因为互联网的来临要求人们用一种大不同以往的眼光来看待动态的开发和测试模型

13必备特性

软件测试工程师除了技术还要求具有否定性的创造力探测技巧总体理解产品的能力用客户的眼光进行评估怀疑的而不是敌意的态度能经受得住坏消息而保持目标拥抱新技术的热望等特征

否定性的创造力

一个软件工程师不能怕引起一个产品的瘫痪或烧毁在软件测试中边界意味着被超越而不是被遵从如果一个程序对某个值的极限为10例如可以在一时间被打开的最大文件数测试工程师的第一想法应当是如果我把那个值取11或0或10.1甚至不设这个值会如何在我的早期的工作生涯中有一次我测试一个开发和QA工程师遗漏下来的PC数据库有问题的数据库是2.01版这本身就说明产品有问题2.0版没解决1.0版的所有缺陷吗或者2.0版又加入了新的缺陷很遗憾因为时间紧我没有调查这些只是证实了最后的缺陷修复后就告捷了这是很大的错误我应当重测开发人员所谓没有变化的所有产品功能2.0版本中的缺陷确实复修了但在修复的过程中有人破坏了请求事实就是如此在数据库里不能搜索数据了第一个收到这项产品的beta客户发现了这个缺陷我宣布以前的测试无效要求对产品进行全面测试找到几个缺陷之后我发现这个数据库读取写保护文件或写保护了的磁盘的时候就会引起瘫痪开发人员很吃惊我会试着写保护一个数据库他们的反应就是没人会这么干的产品的市场经理很快用他们的方式承认了错误

探测技巧

在一个理想的世界中软件测试应当在一个经常更新的写得很清楚的功能与设计说明文件一般被称为specifications中被完整而精确地描述不幸的是这一完善被开发程序每一方面文件的任务包括记录在开发中对程序不可避免的改变要花很多的时间和精力以至于人们无法完成编程而且花费也太大正式与非正式的信息源正式系统要求文件功能说明书设计说明书非正式系统用户文件与其他开发人员的交流与软件支持人员的交流有关产品的文件有关产品的缺陷从工作于相关或早期版本产品获得的局部知识因为我们不是在理想世界里编程测试工程师应当能够自己找出工作的方式典型的是总会有一些设计和功能说明书让测试工程师用于开始他的研究这些文件能看成为描述被测试软件的正式系统测试工程师应当能用更广大的非正式系统的信息来扩展正式系统的信息同时在项目周期的任何一个点任何文件都可能是正确或不正确的所以测试工程师必须根据对软件工作模式的观察与开发人员和其他项目人员的交谈或对有关或看上去不那么相关文件的审核来确定文件的精确性

总体理解产品

在一个程序项目是软件开发工程师主要把他们的精力和注意力集于自己的项目部分结果当这些项目部分组合在一起进行测试的时候就会碰到兼容性的问题到产品寄给一个客户之前唯一能见到整个产品的就是测试工程师因此测试工程师必须能够对整个产品的操作与使用保持一种系统的眼光测试工程师对产品的任何一部分的操作可能不是最好的专家但他必须是产品整体操作的专家例如如果被测的产品是一个类似于Microsoft Office的由文字处理扩展页和其他有关程序组成的办公室自动组件测试工程师必须了解每个程序的操作各个程序之间的相互作用和客户其他的软件硬件和软件环境

评价

测试工程师必须是客户的拥护者被测程序有可能运行可靠满足所有的设计要求但在客户的软件环境中未必能够用产品被送到客户之前的测试之一就是要证实产品达到了客户的要求与期望在这项测试中测试工程师必须模拟用户的软件环境把自己放到他们的位置上关于软件功能正确而不能满足客户需要的一个悲剧性的例子就是美国航空公司965航班1995年在哥伦比亚卡利市的一次失事在飞行着陆时空中信号控制系统指示机组人员朝一个叫Rozo的航空信号灯飞这个信号灯在航空图中标为R机组人员把R输入到飞行管理计算机中看到了明显是由近到远列出的六个航空信号灯机组人员选了第一个信号灯以为这就是Rozo但那不是自动驾驶仪把飞机向左转了九十度撞到了山上什么地方出错了呢当航空表里把Rozo列为R的时候飞行管理计算机要求机组人员输入信号灯的全名调出它的方位同时计算机只显示了信号灯的编码字母和方位计算机功能正确但不满足用户的需求

变化

项目刚开始时的要求与最终项目完成时的要求一致的情况是极少见的有时技术变化了产品必须改变以适应于技术有时竞争对手的产品具有你的产品所没有的功能很多情况下客户的或潜在客户的要求需要变化这些因素合在一起的一个例子就是目前Microsoft Internet Explorer和Netscape的竞争随着计算机首次用户的迅速增加今天的测试工程师比以往更需要把自己置于客户的位置上这些新的非技术用户不愿意接受缺陷对缺陷的解释或理性思考或通过升级修正缺陷他们只希望他们所买产品的软件和硬件都是能工作的

态度

测试工程师不能按表面值接受事物必须执着地对一切提出疑问直到被证实工程师必须用一种与项目的其他的人合作精神来平衡这种怀疑性与执着性测试部门与其有关部门的关系可能会变得紧张特别是在大量缺陷被发现后或者在每个找出的缺陷会潜在地延迟产品的发货时间而延迟了项目时测试工程师应当记住要攻击程序的整体性而不是程序员

能力

一个测试工程师必须忠实地汇报产品中的缺陷这一信息应当被项目组欢迎因为每一个测试工程师遇到的问题除非加入新的问题都意味着减少客户会面临的问题但不幸的是很多人不想听到有问特别是在程序项目的后期测试工程师应当能处理因为工作做得太好而引起责备的情况这对有些人来说是很难做到的会严重地影响斗志与自尊看起来常常是测试工程师阻挠了向客户交货客观的项目经理才能感觉到测试工程师是在对项目提供有价值的服务我清楚地记得一个项目经理举起他的手求我他要的是解决方案不是问题他不明白解决方案的实现有时要求一个问题的解决有时项目经理在项目计划不方便的时候对于因为发现缺陷而打折是有压力的在这些情况下测试工程师应当能基于他对产品的经验和知识进行辩护但他不应表现为象是他个人受到了威胁如何避免这些情形呢就测试的内容时间及如何更新测试结果和缺陷信息设定其他项目组成员的期望我曾经为一个希望延迟产品发送日期的QA经理工作过他的目的不是为了产品成功而是政治权力的操纵他确信自己能被提升把一些为他工作的工程师指定为manager开始自称为director还要大楼管理人员把他的办公隔间加宽一英尺这没有实现但至少他的座位有了更多伸脚的余地

热望

对多数人来说年龄越大越难学习在商业世界里人员越往公司的食物链高处走越远离他们所建立的技术基础这一部分是因为他们需要把精力集中于其他的经营和指导其下属的任务中有时也是因为他们不幸地认为自己已不需要进行实践的技术工作了互联网增加了技术变化的速度不继续学习或跟着发展就无法做出商务与技术的决断从前的一个经理给我树立了如何对待新技术的榜样我跟他工作的时候他年近六十但他象新手一样地热心于学习新技术他大量地获取信息不断补充在网络服务器防火墙和Perl或Expect等新语言的知识他还重视做QA或测试组织的工作他的最初背景是软件开发和开发管理但他并不认为做QA经理是在降低他的声望他明白一个独立的测试或QA组所进行的完整测试能使开发经理的工作变得多简化正象我所说的当你生活于网络时代只要原地不动就很容易落伍了相对于其他软件工程人员软件测试工程师的知识面应该非常宽广但最重要的品质应该是能够在第一时间内接受新技术由于公司之间的竞争日益集中在质量方面所以公司对软件测试人员的需求量也越来越大这一点在北美尤为明显这决定了软件测试行业的前景可喜同时也为愿意不断进取学习新技术的华人移民提供了广阔的就业空间软件测试工程师的就业机会一直都是非常多的最关键要善于抓住机遇并肯付出努力踏踏实实的学起来做起来

14开设课程

搭建 Windows测试环境主要讲解搭建 Windows 测试环境所要具备的软硬件及网络知识包括计算机中各种硬件和接口软件的分类分发和授权等方式操作系统的初步知识注册表病毒安全等知识 TCP/IP 协议和 DNS 活动目录等知识从而让学员可以在实际工作环境当中搭建一个基于 Windows活动目录的局域网环境使用 C 语言开发简单应用设置本课程的目的主要是使学员掌握软件开发的技术掌握编程的方法思想了解软件开发过程当中常犯的错误为后面的测试课程以及编写测试脚本打下语言基础课程中主要包括 C 语言的语法程序基本结构函数指针数组数据结构算法等程序设计所涉及到的知识课程注重实用性重在培养学员对代码分析的能力掌握编码规范掌握调试知识和分析程序错误的能力同时学习内存检查工具和软件配置管理等知识该课程中贯穿了一个开发软件测试工程师管理系统的项目增加学员开发项目的经验测试计划与软件缺陷本课程是软件测试重点课程本课程主要介绍软件测试的基本概念和基础知识如何编写测试计划识别软件缺陷编写缺陷报告等通过学习学员可以掌握软件测试的流程软件测试的策略和分类掌握缺陷的分类和优先级等从而对测试有一个整体的认识本课程中介绍了 Bugzilla 缺陷跟踪管理系统测试工具总体来说本课程将使学员掌握大部分软件测试相关的基础知识高效设计测试用例本课程是软件测试重点课程本课程主要通过引入的大量案例讲解如何编写测试用例讲解设计测试用例的技术包括等价类划分边界值分析因果图方法状态图方法测试大纲等的方法以及正交排列表测试矩阵等测试特性包括功能性能兼容性易用性等测试对象包括软件功能 GUI 界面文档测试安装和卸载测试等通过本课程主要是培养学员设计测试用例的视角在最短的时间内针对功能写出恰当的测试用例本课程和测试计划与软件缺陷课程中贯穿了对软件测试工程师管理系统编写测试计划测试设计和开发实施测试及测试评估的项目增加学员软件测试相关经验白盒测试本课程主要讲解白盒测试技术主要内容包括逻辑驱动覆盖和基本路径覆盖两个方面在逻辑驱动覆盖中主要介绍了语句覆盖判定覆盖条件覆盖判定 / 条件覆盖条件组合覆盖路径覆盖和循环语句覆盖在基本路径覆盖中介绍了绘制控制流图及程序复杂性相关概念最后重点介绍了单元测试技术通过学习学员可以了解白盒测试的理论组织方式已经如何评估一个白盒测试的效果本课程中介绍了Logiscope和 C++ Test 两个白盒测试工具Linux 与网络应用环境本课程主要讲解搭建 Linux测试环境所应具备的知识通过学习 Linux 的安装和配置 Linux 常用命令 Linux 下软件安装卸载和使用常见的 Linux 的服务Apache Mysql Squid Iptables 等 Linux软件开发环境等让学员能够使用 Linux 实现一个提供常见服务的网络环境本课程中在前期通过在 Linux 当中搭建 Bugzilla 缺陷跟踪管理系统来讲解 Linux 的使用和配置WEB 技术与数据库本课程通过对数据库 HTML XML HTTP J2EE 等基础知识的讲解让学员掌握这些技术以便于建立分布式软件的测试环境数据库是以 SQL Server 作为重点讲解同时也介绍了 Oracle 和 MySQL 数据库高效使用自动测试工具本课程主要介绍了国际测试工具占有率最高的 MI 的三大测试工具功能测试工具 QuickTest Professional 性能测试工具 LoadRunner 测试管理工具TestDirector学员掌握这些流行的测试工具从而进一步提高测试的效率软件测试实训本课程是最后一门课程该课程主要是通过运用前面所学习的课程指导学员完成一个项目的测试过程从而巩固所学知识在该课程中将完成分组分工编写测试计划写工作日志和开例会设计测试用例执行测试填写和处理缺陷报告的过程使用的项目通过三个版本来进行回归测试通过分工与合作来完成测试工作通过讲师和学员分别模拟测试组成员角色锻炼学员实践的能力该项目是一个百万行代码级别的类 Office 系统职业导向训练职业导向训练简称COT课程即Career oriented Training是对学员进行职业引导包括就业指导和职前引导通过就业指导以及就业专员就业明星与学员的座谈会等日常辅助训练明确就业方向进一步了解就业形式详细介绍如何写简历通过强化面试训练以及模拟面试等方式提升学员应对面试的能力从而加强学员就业竞争力华为软件测试工程师学习大纲一软件测试的原理v 软件工程软件的含义软件开发过程的特性 软件生命周期模型软件管理过程软件质量和质量保证软件质量就是客户的满意度 质量的概念软件质量的内涵质量管理体系SQASCMSEPGv软件测试概念软件危机软件测试产生的背景软件缺陷是什么软件测试职业发展软件测试人员应具备的素质和技能软件测试基本概念软件测试的目的软件测试的重要性软件测试的原则软件开发与软件测试v软件测试依据和规范软件质量标准软件测试规范界面规范编码规范CMM和ISO9001思想结构体系CMM VS ISO二软件测试的技术v软件测试技术概述软件测试的基该方法黑盒测试白盒测试静态测试动态测试测试策略v软件测试流程软件测试流程通用测试文档模板 软件测试的分类软件包的质量特性v 单元测试和集成测试什么是单元测试单元测试的目标和任务单元测试方法调试与评估什么是集成测试集成测试目标和任务集成测试的模式与方法v 系统测试和验收测试什么是系统测试系统测试的目标和任务系统测试方法系统测试中工具的应用什么是验收测试验收测试的目标验收测试的过程和主要内容产品规格说明书的验证v 特定类型的软件测试面向对象软件的测试面向对象软件的特点面向对象测试的层次与数据流面向对象的单元测试面向对象的集成测试 基于应用服务器的测试应用服务器的分类和特征基于Web服务器应用的测试基于数据库应用服务器的测试基于J2EE平台的测试软件本地化测试什么是软件本地化软件本地化的翻译问题软件本地化测试的技术问题本地化测试的重点三软件测试的实践v测试环境的部署测试环境的重要性测试环境的各要素建立测试实验室测试环境的维护和管理v软件测试用例的设计测试用例来源测试需求提取测试用例设计白盒测试用例设计方法逻辑覆盖法/基本路径测试法 黑盒测试用例设计方法等价类划分法/边界值分析法/因果图法/错误推测法 /功能图法测试用例的组织和跟踪使用实际项目实践v 报告所发现的软件缺陷软件缺陷的描述 软件缺陷相关的信息软件缺陷的处理和跟踪v软件测试和质量分析报告软件产品的质量度量 评估系统测试的覆盖程度 软件缺陷分析方法 基于缺陷分析的产品质量评估 软件质量的可靠性评估软件可靠性模型可靠性评估过程v软件测试自动化测试自动化的内涵测试工具的分类和选择测试工具的主流产品介绍IBM-Rational产品的整体解决方案Mercury Interactive产品的整体解决方案测试管理工具TD实操演示及指导功能测试工具Robot实操演示及指导脚本语言perl实操演示及指导性能测试工具LRv 网络基础知识协议概念常见的网络协议及层次TCP/IP协议Arp协议等报文分析常见的网元设备及工作原理常用的网络操作相关命令客户机服务器模型抓包工具使用v 数据库简介及SQL语句数据库系统概念数据管理的发展阶段数据库系统的特点SQL概述SQL数据定义功能SQL数据查询功能SQL数据修改功能嵌入式SQLv Linux操作系统简介及常用命令Linux系统介绍Linux系统历史及发展Linux系统特点Linux系统安装与配置Linux系统命令的使用方式文件及目录操作命令文件压缩命令联机帮助命令进程管理的命令四软件测试管理v 组织和管理测试团队基于ISO的测试管理体系构成测试团队的地位和责任测试团队的构成 测试团队的管理和发展v软件测试项目管理软件测试项目管理的概述软件测试项目的组织 软件测试项目的过程管理 软件测试项目的资源管理 测试项目的进度管理 测试项目的风险管理 测试项目的质量和配置管理软件测试文档的管理v 理解CMMKPA简介 CMM的五个等级及关键过程域CMM实例简介 CMM的发展CMMI2级详细讲解五软件测试人员面临的机会和挑战v软件测试职位在IT行业的现状v软件测试职位到底是干什么v软件测试行业的背景v软件测试人员需要具备的基本素质v软件测试工程师需掌握的技术技能大纲v软件测试人员后期的发展机会和挑战附录基础技能版本内容为华为公司指定培训内容一基础技能方面Unix/Linux操作系统⒈熟悉UNⅨ环境⒉掌握UNⅨ常用命令⒊了解并掌握Vi的一些常用命令⒋了解基本的shellInformix⒈熟悉并掌握informix常用命令⒉掌握SQL相关的一些知识Oracle⒈掌握Oracle的基本操作⒉掌握在unix/Linux系统下安装Oracle数据库二网络基础知识⒈熟悉TCP/IPHTTPUDP协议⒉掌握常用的网络命令⒊抓包工具的熟悉与学习三测试理论⒈软件及其开发过程⒉软件测试的基本概念与方法⒊质量保证与策略⒋测试依据与规范⒌单元测试⒍集成测试与系统测试⒎验收测试⒏基于应用服务器的测试⒐测试计划的制定用例的设计与执行缺陷的跟踪四模拟项目练习⒈理解需求设计测试用例测试用例评审⒉测试执行⒊提单规范有关模拟项目的需求用例模板测试版本