您的当前位置:首页做好软件测试工作的19条建议

做好软件测试工作的19条建议

2024-04-06 来源:爱问旅游网


提高软件测试能力的19条建议

原文地址: Cheezburgers and Testing Advice

作者:Alan Myrvold,软件安全高级测试工程师

译者注: 本文主要面向软件测试的初入门者,但对有经验的软件测试工程师也应有益。

我起初准备自己写10条建议给刚入门的软件测试员们。但之后我看了

lolcats/icanhascheezburger 上的名人Ben Huh的一段演讲。Ben指出,有了互联网,信息成了免费资源,但组织,编辑,以及表达却都需要技巧。受Ben和cheezburger网站的启发,我请求60名成功的软件测试工程师每人为刚入门的测试人员提出三条建议。其中的40多名答复了我,使我最终有了一个长达100条的建议列表。

出于保护他们的隐私,我不会原封不动的把这些建议罗列出来。但是有趣的是,我发现他们的建议中有很多共同的地方,而所有这些建议加起来要比我原先自己想到的好得多了。

我把这些我搜集的建议总结成以下19项:

1. 想客户之所想

在测试的过程中时刻想着用户。培养自己对用户需求的共鸣。和用户沟通并且观察他们怎们样使用你的软件。

2. 多读Bug

如果你和一个团队的软件测试工程师一起工作,那么请阅读 他们每天发的Bug, 特别是那些针对你的测试部分的Bug 。你可以从别人如何找到Bug中学到很多东西。

3. 多读代码

找到你测试的那部分功能的代码。虽然写代码并不是你的事,但是读那些代码常常会帮助你找到潜在的边际情况和软件缺陷。

4. 为你发现的Bug而骄傲

促成一个软件Bug的修复是从写好Bug标题和描述开始的。我每次发完一个Bug都会把这个Bug重读一遍以确保它是合理的并提供恰倒好处的细节。如果一些重要的Bug 没有被纠正,要追根究底,确保决定和利弊权衡是正确的。

5. 参加软件功能的设计

在软代码编写之前,在仍有可能有大的设计变更的时候,积极参加软件的计划阶段,这会帮助你了解正被考虑的折衷和权衡。

6. 设计你的测试

无论是寻找边界值,运用组合技术,画图表,或创建测试模型,把你的想法放进你的测试设计中总是有用的。在试探性测试的时候,有意识地去交替你的测试计划和产品学习。

7. 了解你测试的功能

不管你测试的是那一块功能,你应该了解它的设计,它的局限性,别人发现的Bug,代码的变动,以及它和其它功能间的交互关系。

8. 和别人合作测试你负责的部分

和有不同专长的人一起测试你的功能模块,一起讨论测试的点子并且征询他们的反馈意见。

9. 学习你测试的软件

即使你只是测试一个软件中的很小一部分,成为其它新功能和整个软件的专家都会帮助你成为一个更好的测试工程师。

10. 培养和开发人员的良好关系

测试工作有时候是对抗性的,以致很容易使有些与你共事的人在做决定时忽略你的意见。与修复Bug的开发人员建立坚实的关系对了解最新进展和促成Bug的修复会有裨益。

11. 扩大你的领域和人际网络

成功的人都有一个的坚实可信的交际圈。他们可以从中得到他们需要的专业知识和建议。不断在你的公司内部和外部结交新朋友并发展专业领域的联系。

12. 寻找良师或榜样

我和许多出色的测试工程师一起工作过,并且从他们那里学到了很多东西。为了提高

你的测试技能,你应该寻找“顾问”与他们见面或者榜样向他们效仿。

13. 保持自省

测试工程师善于发现软件的缺陷。如果把这种敏锐运用到自己身上,我们一定能更有效的发现自身的不足之处。

14. 管理你的时间

我们的时间很容易被大块的工作和不断的会议所占据,导致我们没有时间去学习,去深挖更多的Bug,甚至没有时间保持健康的生活状态。为了避免透支,你需要学习如何管理你的时间。

15. 明智地选择测试自动化

自动化测试可能缺乏熟练测试人员的那种“余光视力”。不正确的自动化有时会变成一推庞大而难以维护的代码,并且对衡量软件质量没有什么实际意思。但是精心设计的自动化测试有助于及早发现软件缺陷。

16. 提高你的编程能力

我遇到过一些很有天赋的测试人员,他们倾向于不去写代码。这有一定道理。就像电影评论家在变得挑剔而富有陈见后不会去考虑电影观众的喜恶一样,在我充当编程员的角色时,我想的就不再和用户一样了。但是编程还是一项有价值的技能,他能帮助你更好地阅读代码,理解产品的内在,同时帮助你写一些小工具使得平淡反复的工作变得简单。

17. 参加Bug的审阅 (Triage)

在产品发布前的最后一些日子里,Bug审阅组开会决定哪一些Bug应该修复,哪一些应该留到以后的版本去修复。如果你通常不在这个会议的邀请名单中,那么去主动要求参加。你会看到在测试员信誉,用户影响和已知风险等因素间做出折衷决定的过程。这将会是一种非常有趣的经历。

18. 不断学习

不管是“软技能”,比如公开演讲, 或者编程语言,亦或新的测试技术,成功的测试工程师总是会从繁忙中抽出时间来坚持学习。

19. 爱你所做的事,并把它做好

如果你不能承担放弃当前工作的代价,那么就学着去热爱它。测试人员有时会变得嫉世愤俗,尤其是在困难的发布周期中。享受工作并且不满足于仅仅完成计划内目标的人才会成为优秀的测试工程师。

细心,耐心,责任心等。是做好软件测试的基本要求

而且做好软件测试还需要几个非常重要的素质,并且也是经常会被人遗忘的。

一,分析能力,软件测试考研测试人员的是对功能的分析和总结能力,而且仅对功能的描述,如果是对功能的描述,从大街上随便拉个人都可以来做软件测试。

二,全局能力,为何这么说呢?软件测试现在基本都是在项目一开始就介入,为何,

我相信很多人比我都清楚,因为早介入能早发现问题,但是确实是不是真的能早发现问题呢?还是需要我们从全局去考虑到,需求分析工程师,架构师,开发都是人,是人就会有考虑不全的地方,所以对于测试来说,能够有“众人皆醉我独醒”的心态和全局观是非常重要的,而且这往往也能体现测试人员在相关部门的价值和可信度。

如何做好测试,这个问题在面试的时候经常会被HR问到。当然,她们对答案的了解几乎都是照本宣科。

业内普遍认为测试是技术含量偏低的工作,确实刚毕业的学生能做测试,因为我们理解的测试就是一群“鼠标点击者”在电脑前按照文档机械性重复着枯燥的事情,最好写份报告,工作就算完成了。

对于部分企业或部分项目,这是做测试工作的基本现状。这也是大部分局外人和小部分局内人所理解的测试。

就是这种外界或部分局内人对测试错误理解的氛围,才一定程度的影响了测试人员就业面的狭窄和即将从事测试行业人的认知。

每次,我在跟各个公司的HR讲解如何做好测试和测试与开发的区别有多大的时候,她们都很难真正理解到我对测试的看法,也更难说服她们我还可以做开发,而且会比以前更好。

那么,测试究竟是怎样的工作呢?测试比开发究竟差多少呢?

先从开发与测试的发展讲起:开发从1946年初计算机诞生开始,到现在,顶多有五

十几年的历史。在大陆,开发也就有20年左右的历史。能正规的开始测试应该从95年微软把windows系统的注册表本地化业务交给国内算起,发展将近15年,但真正的测试还是要从93年做软件外包开始,实际发展也就7年时间。

再说什么是开发:大部分人都容易理解了开发,就是按照需求创造出一个新的应用程序呗。那么测试,就是检测开发出来的东西(如api,UI,user experience,internal function,environment-demond such as network bandwidth and System and Memory,etc.)与需求有无差距,还能挖掘出潜在需求,实际结果是否是期望的行为。

我们常说测试是为了能保证产品质量,尽早找出bug。这么说也对,不过还是很抽象,并且在概念的理解上,简单化了测试。

测试——由于历史发展较短,不象开发那样发展那么迅速,可借鉴的东西不象开发那么明显(代码是可见的,测试就难了),所以这就意味着一点:测试更需要人的创新,验证程序的正确性更是需要人们大量的创造性劳动。验证程序的正确性,远不象普通人想象的那样简单。

开发是开发人员使用编程语言按照需求文档写出来另外一套API。测试就是测试人员为了更好验证开发出来的API需求文档,不用去关心产品功能实现,而是首先去考虑开发出来的API是否符合需求(这就是BVT/Function Test),其次是通过设计和搭建好的测试情景去分析对系统,网络,其他API,module模块的影响(白盒测试,集成测试),有些时候需要做性能压力测试。如果出现问题,就要进一步分解测试用例,定位问题所在。

要做到以上几点,会遇到很多挑战,说白了,就是会遇到很多困难,如同开发人员一样,都需要用专业知识与想法来解决。

现在说下困难是怎样的,你才能了解测试人员每天遇到的问题,才会知道需要什么样的人才能做好测试。

第一,测试产品是否符合需求,需要用有效的方式,全面验证需求点。高级测试人员要写很多专业的文档,应用很多IT方面的知识,与更高级更资深的人士探讨需求,去开发出不同的文档来保证将在产品生命周期中的各个阶段都作最正确的事情。普通测试人员每天要做好记录和报告,说明测试了哪些,哪些还没有测试。要求有很好的自我管理的能力。

第二,设计与搭建测试环境。随着开发技术的不断进步,诸如多线程,虚拟化,超大规模数据量的并发,安全性,软件间、不同系统平台间的交互响应这类问题会给搭建环境,模拟真实客户的使用环境,对测试人员来讲都很有挑战。而开发人员更关注于需求实现细节,不做架构师的普通开发人员不会考虑,只要实现出来功能,做个单元测试,接下来就交给测试人员来综合考虑这个开发出来的东西是不是很好用,会带来哪些问题,开发人员很懒,等测试人员检查出来问题,他们才去应付问题,注意,我说的是有些情况他们都是应付而已,掩盖问题。 所以,测试人员往往比开发人员更懂得需求,而且要懂得很多IT知识,才能最大限度的评估出开发出来的东西到底有哪些问题。开发就好比去制作出一个玩具模型,测试人员就是研究这个玩具模型,拆开,放到事前预备好的装模型的模具里检测是否符合规格;再放到更大的玩具模型里, 看看这些小东西跟其他的模型玩具能一起工作。这些工作有些时候是无可借鉴的,不象开发那样,上网搜索就能找到答案,测试就很难,几乎是不可能,只能自己想办法,找出解决办法。

第三,如何去验证程序的正确性本身就是个很有挑战的问题。因为它要求了测试人员要比开发人员考虑更多的东西。比如开发人员开发个客户端的程序,此客户端能跟别的机器上的客户端交互,开发人员只要开发出send和receive的功能,而不去实现多台机器上实际运行的情况是什么样子,但测试人员就必须要做出来实际运行的情况才能验证程序是

否正确。再比如开发人员开发出来一个按钮,它不会考虑这个按钮在哪些&什么情况下会被点击,并且结果是怎样的. 测试人员要想尽办法甚至是创造性的找出这样的环境并且能够模拟点击效果与检查结果。再比如,开发人员不会考虑如何造出5000人同时在线的情况,也很少开发人员考虑到异常访问会不会对开发使用到的对象(假如说cache, session, Page_Load中的方法,事件event, handler)产生不期望的行为。测试人员需要对不同情形作测试,来找到答案。

再看开发与测试的区别:

第一,开发人员关心局部,测试人员要关心全部。测试人员只有细心才能找到bug。

第二,好的测试人员将来更容易成为项目管理者,因为PM就不用关心技术实现细节,测试人员比开发人员更注重流程和管理,更会沟通。

第三,开发人员由于开发周期短,所以会比较急躁,而测试人员更具有好奇心,好奇心能一定程度上的帮助测试人员产生出逆向思维的想法,超出开发人员的考虑边界。

第四,开发人员比测试人员懂得如何实现功能,测试人员也可以去弄懂如何实现的,但他的职责是去使用这个实现的东西。开发人员是制作者,测试是使用者。反恐游戏大家都知道吧,比起佩服开发人员,我们更佩服玩的好的玩家。测试人员是玩家。

什么是好的测试人员:

举国例子:一般的测试人员设计出100的测试用例,仅能找出3个bug,好的测试人员只用30个用例就能找出5个bug,做久了的测试人员,对软件缺陷有灵敏的嗅觉。

很多细节需求在需求文档之外,当测试人员找出这样bug的时候,开发人员都会佩服测试人员的能力。

总结一下,我们目前对测试的成熟度远不如开发,不象开发那样容易找到问题的答案,需要很多IT知识和创造性的劳动(包括开发出测试工具,开发测试框架,搭建模拟出测试环境),要想让测试行业重视与发展起来,就需要从业人员的共同努力,比开发人员更少的浮躁心与突破自我的精神与能力。

开发一个好的软件,40%以上的时间用在测试上,所以软件测试工程师非常重要,用我们的话来说很吃香。现在从事程序员的人有很多,做测试工程师的人少点,工作压力不太大

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

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

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

计算机专业技能

计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者

持久竞争力的测试工程师,则计算机专业技能是必不可少的。计算机专业技能主要包含三个方面:

测试专业技能

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

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

软件编程技能

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

软件编程技能实际应该是测试人员的必备技能之一,在微软,很多测试人员都拥有多年的开发经验。因此,测试人员要想得到较好的职业发展,必须能够编写程序。只有能给

编写程序,才可以胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。

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

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

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

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

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

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

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

软件测试工程师-IT就业新亮点,

根据有关职位统计资料显示,在国外大多数软件公司,1个软件开发工程师就需要辅有2个软件测试工程师。目前,软件测试自动化技术在我国则刚刚被少数业内专家所认知,而这方面的专业技术人员在国内更是凤毛麟角。根据对近期网络招聘IT人才情况的了解,许多正在招聘软件测试工程师的企业很少能够在招聘会上顺利招到合适的人才。

随着中国IT行业的发展,产品的质量控制与质量管理正逐渐成为企业生存与发展的核心。从软件、硬件到系统集成,几乎每个中大型IT企业的产品在发布前都需要大量的质量控制、测试和文档工作,而这些工作必须依靠拥有娴熟技术的专业软件人才来完成。而软件测试工程师就是其中之一。

据了解,由于软件测试工程师处于重要岗位,所以必须具有电子、电机类相关专业知识背景,并且还应有两年以上的实际操作经验。他们应熟悉中国和国际软件测试标准,熟练掌握和操作国际流行的系列软件测试工具,能够承担比较复杂的软件分析、测试、品质管理等任务,并能独立担任测试、品质管理部门的负责人。一般情况,软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。

在具体工作过程中,测试工程师的工作是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。对软件测试工程师而言,必须具有高度的工作责任心和自信心。任何严格的测试必须是一种实事求是的测试,因为它关系到一个产品的质量问

题,而测试工程师则是产品出货前的把关人,所以,没有专业的技术水准是无法胜任这项工作的。同时,由于测试工作一般由多个测试工程师共同完成,并且测试部门一般要与其他部门的人员进行较多的沟通,所以要求测试工程师不但要有较强的技术能力而且要有较强的沟通能力。

因此,在企业内部,软件测试工程师基本处于“双高”地位,即地位高、待遇高,有的人月薪可高达8000元。可以说他们的职业前景非常广阔,从近期的企业人才需求和薪金水平来看,软件测试工程师的年工资有逐年上升的明显迹象。测试工程师这个职位必将成为IT就业的新亮点。

软件测试还是比较容易得,尤其是功能性测试,就是一般说黑盒测试。这些测试一般都是手工进行,测试的过程就是使用软件,按组测试,组长会把这个软件的不同模块分给不同的测试工程师进行测试。测试是比较枯燥的。我们进行测试一般是先测试,测试完成后在写用例,主要是为了节省时间。

软件测试,从不同的角度出发会派生出两种不同的测试原则。从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷;从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求。

应从用户和开发者的角度出发进行软件产品测试的。

为了达到上述的原则,需要注意以下几点:

1.应当把“尽早和不断地测试”作为开发者的座右铭。

2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成。

3.设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。

4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。

5.对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。

6.制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。

8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。

因篇幅问题不能全部显示,请点此查看更多更全内容