码迷,mamicode.com
首页 > 其他好文 > 详细

关于测试的一些"误解"

时间:2014-08-27 18:45:29      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:测试   软件质量   

1)Testing & QA(Quality Assurance)
在我刚开始接触测试的时候,就一直没有分清楚Testing和QA的区别,一直认为QA的工作包括了测试的内容。直到有次去download一个测试工具的试用版,忽然发现填写个人信息的职务选择中就有Testing Manager,也有QA Manager,心里已经感觉这两者不能混为一谈。

它们到底有什么不同呢?

首先让我们来了解什么是QA,软件质量保证负责在软件开发全过程中,监控,保证和改善实施的过程,确保所有经过协商同意的约定和流程被执行,达到其标准,并确保相关的问题被妥善处理。从某种意义上说,质量保证偏重于“预防”。

而测试是对系统或软件进行检查和评估,它偏重于“检测”。也可以这样认为,软件测试主要是负责“品质保障”,而软件质量保证主要是负责“过程保障”。因为软件测试也是软件开发过程中的一部分,所以QA也会检查测试的过程是否按照规定的流程被执行。软件测试和软件质量保证的一个共同的目标就是两者都是为了提高软件的质量。

在大部分的软件企业内部,Testing和QA都是独立的部门和汇报对象,负责不同的工作。这也是CMM中所要求的。但Testing和QA也是可以合成一个独立的组织进行工作,其是否能够发挥最大的优点视乎不同的组织和组织架构。


2)测试和调试
测试不同于调试,调试也不属于测试。要理解这个道理很简单,测试人员是从来不用进行调试的。测试的目的是发现错误,而调试则是定位和修正错误。调试可能发生在编码开始之后的任何时间内,调试始终与测试是相联的。


3)细心就可以做好测试
有些人认为,细心的人就可以做好测试,甚至在不少招聘测试人员的要求中,也特别着重说明需要这个人细心。
首先,不管什么行业,细心总可以看作是一个优点,没有人喜欢丢三落四,粗枝大叶的员工。同样,细心也是测试人员所必要拥有的条件之一。但是,细心并不代表全部,让我们来从下面这个简单的例子来说明。
假设有甲,乙两个测试人员,都是刚刚开始学习测试,同时去测试一种应用软件,除了细心程度外,两人的其他知识和背景都完全相同。其中,甲比较粗心,乙比较细心。然后,甲和乙同时进行测试,也就是使用,操作这个应用软件。如果这个应用程序总共有100个隐藏的缺陷的话,甲可能找到了其中的30个,乙可能找到了其中的50个。从这点来看,细心的人仿佛比粗心的人更适合来进行测试。
但仔细一想,他们两个是在进行的不正确的测试。没有测试计划,没有测试案例,即使是他们本人,如果重复进行一次测试的时候所能够发现的问题都可能和第一次大相径庭。测试没有计划性,带有偶然性,随便性,且不可重复。可以说,这样的测试是没有价值,没有意义的测试,程序中还有大量的隐藏的问题,这样的产品,用户是难以接受的。
现在换成一个有经验的软件测试人员丙来指导他们进行测试,测试人员丙根据这个应用软件的相关文档和特点,制定了测试计划,测试人员甲,乙也在丙的帮助和检查中,完成了相关的测试案例。然后他们根据完成的测试案例去进行测试,各发现了90个隐藏的错误,软件的质量得以较大的提高。这个时候的测试过程是有计划,可以重现的测试过程,完全不依赖实际测试人员是否细心与否。此时,你就很清楚的了解到,做好测试,细心并不是主要的,讲究方法和技巧,才能将测试真正的做好。


4)对测试人员的要求可比开发人员低
来自某招聘信息,招聘软件开发人员和软件测试人员各一名。学历要求,开发人员:本科或以上,测试人员:专科或以上;来自某公司高层,“测试不就是找个人把程序安装,运行一遍嘛”;看看软件企业内部,开发人员的薪水明显和测试人员不是一个档次;来自软件设计人员,“我们不把程序写出来,测试能有东西测吗?”。仿佛可以从各个方面来论证测试人员的能力会比开发人员差,事实是这样的吗?
如果把整个软件企业比作一门大炮的话,销售和市场肯定是那炮膛,开发和测试就是炮弹。如果没有炮膛,那炮弹到的确没太大用,当然如果你愿意用手扔炮弹的话。但是如果没有测试,开发出来的炮弹就很可能是哑弹,废弹。轻者打中目标不会爆炸,严重的还没有出膛就爆了。没有通过检测的炮弹,你不敢用,没有通过测试的软件,你就敢用吗?测试并不是简单的把程序安装,运行一遍,涉及到相当多的方法,策略和技巧。在现实的软件开发过程中,开发和测试各司其职,开发需要对设计,编程,调试非常熟悉,要有相当的知识深度,而测试就需要对书写计划,案例,编写脚本,执行测试非常熟悉,同时因为在测试中的接触面比开发更广,所需要的理解能力,综合能力也要求很强,要有相当的学习能力和知识广度。
如果开发人员的能力很强,而测试人员的能力并不相配的话,那最后也一样会出现哑弹,只有两方面人员的能力相当,协调一致,才有可能做出优质的炮弹。


5)测试可以由开发人员进行
相信绝大多数的读者都赞成测试不应该由开发人员进行。测试由专门的测试人员进行,相比之下会更快,更好,不管开发人员是自己测试自己的程序,还是和其他的开发人员进行互换测试。
测试工作需要客观的态度和冷静的头脑。人们常由于各种原因具有一种不愿意否定自己工作的心理,认为揭露自己程序中的问题不是一件愉快的事情,或者自己认为自己的程序已经没有问题。这种心理状态就成为了测试自己程序的障碍。许多户主都知道,揭掉糊墙纸(破坏性过程)是不容易的,若糊墙纸原先是由他而不是别人贴上的,他几平会感到难以忍受的沮丧。所以,大部分程序员都由于不能使自己进入必要的精神状态(不是抱着要揭露出自己程序中错误的态度),因而不能有效地测试自己的程序。在现实中,你经常可以听到开发人员说,“不用测试了,我都测过来,不会有问题的”,也是具体的体现。
除了这个心理学问题之外,还有一个重要的问题:程序中可能包含由于程序员对问题的叙述或说明的误解而产生的错误。如果是这种情况,当程序员测试自己的程序时,往往还会带着同样的误解和惯性思维去测试,致使问题难以发现。
再者,可以把测试看做是写文章,正如许多作者所知,校对或批评自己的思想,观点是非常困难的。也就是说,在自已的工作中找出缺陷往往是人的心理状态所不容的。
测试人员不光可以克服上述的问题,还可以以其他的角度和眼光来看到软件产品,优秀的测试人员,还可以逼真的从客户角度来考虑。软件测试组织有着独立的组织机构,可以在测试中减小软件开发组织的干扰,独立,专业,冷静,客观的测试和评估软件产品。
所以,无论从技术上还是管理上,无论从过程还是目标的完成有效程度来看,软件测试都应该由单独的测试组织来进行,而不应该由开发人员进行。


6)测试可以发现所有的问题
有人认为,只要使用正确的方法和给予足够长的时间,就可以发现程序中所有的错误。这种认为是错误的,除非这个应用程序足够的简单。
要保证一个应用程序没有任何错误,一个必要要素在程序内部的所有路径,分支,循环都已经被遍历过。而这对于相当部分的程序是不可能的,举例来说,一个只需要100行源代码的C程序,其中包含了一个执行20次的循环,那么它所包含的不同执行路径数高达10的13方条。假设要对这么的路径进行穷举测试,即使一秒钟可以完成1000条路径的测试,完成全部的测试也需要3170年。

以上情况说明,这样的测试实施起来是不现实的。即使程序中没有类似的情况,错误还是没有可能完全避免。首先测试具有偶然性,输入A数据是正确的,B数据却可能是失败的;即使在这次输入A正确的,在下次另外一种环境下,同样的A数据却可能失败。根据IBM的一项研究表明-一些错误运行几个小时就表现出来,而其他一些错误要数年之后才出现。

缺陷(错误)是不可以完全避免的,只能做到在允许范围内足够的少。

关于测试的一些"误解"

标签:测试   软件质量   

原文地址:http://blog.csdn.net/guanning0109/article/details/38874049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!