如何做好测试,这个问题在面试的时候经常会被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知识和创造性的劳动(包括开发出测试工具,开发测试框架,搭建模拟出测试环境),要想让测试行业重视与发展起来,就需要从业人员的共同努力,比开发人员更少的浮躁心与突破自我的精神与能力。 |