谈测试的目的

发表于:2010-9-27 13:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cxzhq2002(CSDNblog)    来源:51Testing软件测试网采编

分享:

  测试的目的是什么呢?这是一个看起来很简单、不太值得讨论的问题,但往往这样的问题其实是很难回答的,比如人生的意义是什么?好,现在我们就来,列举一下我们经常听到的对这个问题的回答:

  “ 软件测试的目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。”,这个定义听起来很正确,但用它来指导测试会带来很多问题。比如有的组织用发现的bug数来衡量测试人员的业绩,其实这就是这种测试目的论在后面作祟,其结果如何呢:其一,有一些不够敬业的测试人员会找来一些无关痛痒的bug来充数,结果许多时间会被浪费在这些无关痛痒的bug上(其实应该修复,何时修复,严重程度是什么,优先级是什么,等等);其二,测试人员会花很大力气设计一些复杂的测试用例去发现一些迄今尚未发现的缺陷,而不关心这些缺陷是否在实际用户的使用过程当中是否会发生,从而浪费了大量的宝贵时间。究其根源,就是因为对测试目的的这种错误理解造成的,为什么这么说呢?因为软件里bug的数量是无从估计的,那么如果测试的目的是为了找bug,那么测试工作将变成一项无法完成也无法衡量进度而且部分无效的工作(因为有些bug在实际的运行过程当中根本不会发生)。

  “测试的目的就是为了保证软件质量”,这个定义也是看似正确,但实际上,混淆了测试和质量保证工作的边界。软件质量要素有很多,包括:Understandability、 Conciseness、Portability、Consistency、Maintainability、Testability、 Usability、Structures、Efficiency、Security等等,所以,软件质量保证和测试其实关注的方向是不同的。

  那么测试的目的应该是什么呢?IEEE在1983年提出了软件测试的定义:

  “使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。”

  所以,简言之,测试的目的应该是验证需求,bug(预期结果与实际结果之间的差别)是这个过程中的产品而非目标。测试人员应该象工兵一样,在大部队(客户)预期前进的方向上探雷、扫雷(bug),而不需要去关心那些根本没有人会去碰的地雷。衡量一个测试人员应该去衡量他/她测试了多少需求(测试工作量),漏过了多少bug(测试有效性)。

  因此,我们可以看到有好的需求文档/体系对测试工作的必要性,我们看到许多测试团队在业务需求/软件需求不完备的情况下,往往或重新编写测试需求。在未来的博文里,我们会在介绍为什么用例(Use Case)技术会有助于开发人员和测试人员的沟通。

  总结:

  测试的目的主要有以下8个方面:

  1、验证软件需求和功能是否得到完整实现

  测试首先必须用来验证软件的需求和功能是否得到完整实现。

  其次是验证软件在正常和非正常情况下的功能和特性。测试不仅要验证软件在正常情况下的功能和特性是否可以使用和达到期望值,更多的是验证在非正常情况下功能和特性能否达到期望的要求。

  比如一个计算器程序,正常情况下当用户输入正确的数字表达式时要能够计算出正确的结果,但是当用户输入错误的表达式时,软件要给用户提示说用户输入错误,而不能出现运行异常(如崩溃)。

  2、验证软件是否可以发布使用

  软件是否可以发布使用需要经过测试来验证,未经测试的软件是不能发布的。

  即使是内部使用的软件也同样需要测试,软件的发布需要经过验收测试。

  3、发现软件系统的缺陷、错误及不足

  软件系统的缺陷,错误及不足需要经过测试来发现。目前发现软件系统的缺陷、错误及不足的主要手段有评审、检视、走读、单元测试、集成测试、系统测试等。

  4、获取软件产品的质量信息

  软件产品的质量信息也必须通过测试才能获取,没有经过测试的软件,软件质量的好坏是无从知道的,最多只能根据开发人员的水平进行推测。经过测试后,就可以得到开发各阶段发现的缺陷数,进而可以较为准确地推测出软件潜在的缺陷数。

  5、预防下一版本可能出现的问题

  测试不仅可以用来发现当前版本的问题,还可以根据目前发现的问题进行分析,找出当前版本出现的问题有哪些类型,产生这些类型问题的根源是什么。然后采取相应的措施。比如当前版本出现了很多SQL文方面的错误,那么就可以加强员工对SQL文的培训。

  6、预防用户使用软件时可能出现的问题

  把没有经过测试的软件提供给用户使用,将会使用户在使用过程中遭受大量挫折,大大降低了愉快的用户体验。测试可以有效地发现大部分影响使用的错误,经修正后软件预防了用户使用软件时可能出现的问题。

  7、提前发现开发过程中的问题和风险

  写系统测试用例时可以发现需求中的问题和遗漏,写集成测试用例时可以发现高层设计中的问题,写单元测试用例则可以发现详细设计和编码中的问题。通过测试,可以在早期阶段就发现这些错误,大大降低开发的风险。

  8、提供可以用以分析的测试结果数据

  测试还能提供用以分析的测试结果数据、测试问题记录表等数据。在测试完成后进行分析,可以了解主要有哪些类型的缺陷,进而分析产生这些类型缺陷的原因。还可以分析开发各阶段发现的问题数,把他们与以前的经验数据进行对比分析,从而知道在开发阶段中哪个阶段是薄弱环节,进而重点针对薄弱环节进行加强。”

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • msw_cn
    2010-10-08 16:00:33

    受教了。但有个问题怎么知道测试人员漏掉了多少bug呢?这样做和统计发现的bug数所产生的效果有什么区别吗?

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号