独立性测试
1.1 软件测试的定义
追本溯源,什么是软件测试?先我们看看一些著名的对软件测试的定义。
l Testing is the process of establishing confidence that a program or system does what it is supposed to (Hetzel, 1973).
测试是建立信心的过程,一个程序或系统做了它应该做的事情(Hetzel,1973)。
l Testing is the process of executing a program or system with the intent of finding errors (Myers, 1979).
测试是执行一个程序或系统的过程,目的是寻找错误(迈尔斯,1979)。
l Software Testing is the process of exercising or evaluating a system by manual or automatic means to verify that it satisfies specified requirements or to identify differences between actual and expected results (IEEE 610.12, 1990)
软件测试是一种通过手工或自动的方式对系统进行测试或评估的过程,以验证它是否满足特定的需求,或者识别实际和期望结果之间的差异(IEEE 610.12,1990)
l Testing is any activity aimed at evaluating an attribute or capability of a program or system. Testing is the measurement of software quality (Hetzel, 1984)
测试是任何旨在评估程序或系统的属性或能力的活动。测试是软件质量的测量。(Hetzel,1984年)
l Testing is demonstrating that a system is fit for purpose (Evans, et al, 1996)
测试表明一个系统是适合的(埃文斯,et al,1996年)
l Testing is a process of planning, preparation and execution to establish the characteristics of a software product and to determine the difference between the actual and required status (Pol and Van Veenendaal, 1996)
测试是一个计划、准备和执行的过程,以确定软件产品的特征,并确定实际和需要的状态之间的区别(波尔和Van Veenendaal,1996)
l Software Testing is a process consisting of all life cycle activities concerned with checking software and software-related work products (Gelperin and Hetzel, 1988)
软件测试是一个包含所有与检查软件和软件相关工作产品相关的生命周期活动的过程(Gelperin和Gelperin,1988年)
l Testing is the process of exercising software to verify that it satisfies specified requirements and to detect errors (BS7925-1, 1998)
测试是执行软件的过程,以验证它是否满足指定的需求和检测错误(bs7925-1,1998)
l As the objective of a test should be to detect faults, a “successful” test is one that does detect a fault (ISEB, 1999)
由于测试的目标应该是检测故障,一个“成功的”测试是一个检测到错误的测试(ISEB,1999)
综上软件测试是软件开发中的一项活动。这是一项针对软件的调查,该软件向涉众提供有关软件质量的信息。不同的人对软件测试有不同的定义,但一般来说,软件测试的目标是:
n 确保软件符合约定的需求和设计
n 应用程序按预期工作
n 应用程序不包含严重的bug
n 根据用户期望实现其预期用途
对于软件测试还有一个经典的解释。
Are we doing the right job?
Are we doing the job right?
下图表示测试阶段和对应的代价。
1.2 什么是独立性测试?
独立测试对应于一个独立的团队,职责分离,他们参与测试活动,而不是开发人员,以避免作者的偏见,并且通常更有效地发现缺陷和失败。
就像人们重视独立性,因为它保证了公正和有成效的结果,独立的测试对于产品的质量是至关重要的。如果一个程序员或集成测试人员执行测试的职责,就会有偏见。错误将被遗漏,而这些错误将通过测试的方式被根除。一个由专业人员组成的团队,他们不参与产品的开发,但他们是项目的一部分,可以用来测试产品,并保证一定程度的独立性,但不会提供一个完全独立的解决方案,这对于成功的产品测试至关重要。
独立的重要性毋庸置疑。想象一下,一名法官拜访了那些他必须起诉的人。这一影响将使他倾向于支持,而不是反对起诉。
想象一个程序员编写程序,然后自己测试它。他不会想要破坏他的产品。他急切地想要把它推向市场,赚到钱。在测试他的程序时,他会有偏见,并且会以安全的方式进行测试。他将以一种不会打破它的方式来测试它,因为它害怕不得不花更多的时间来修复它。
相反,需要一个独立的团队,他们对这个项目没有任何感觉或看法,并且将完全独立地行动。他们将尝试从各个角度找出程序中的错误和错误。这个独立的团队不会关心如何将这个项目投入到公众中去赚钱,但是他们会想要打破这个产品,因为这是他们的目的和赚钱的手段。
这就是为什么Boris Beizer写了一本书软件测试技术,他说,只有5%的程序员的教育是为了学习如何在他的程序中找到缺陷,而在实际中,他花了一半的时间来测试他所创造的程序。
独立测试的水平
下表显示了测试独立性的不断增加:
1)由开发人员自己完成的测试。
2)独立测试人员将其让给开发团队。
3)组织内部的独立测试团队。
4)不同组织的独立测试人员。
5)外包测试团队的其他组织成员。
独立测试的好处:
1)测试人员从中立的角度看待每个缺陷。
2)测试人员完全没有偏见,测试人员看到的是什么,而不是开发人员认为。
3)测试人员对质量没有任何假设。
独立测试的缺点:
1)与开发团队的隔离有时会导致过时的文档或版本引用。
2)独立的测试执行通常是最后一个阶段,在此过程中任何延迟都会影响受到版本或产品的发布。
3)开发人员可能对质量不负责任,因为他们可能认为独立测试团队的测试系统中有问题。
4)独立测试一定会受到通信阻碍。
一个独立的测试团队可以容易发现比在编程团队中的测试人员或者是一个程序员自测更多的、其他的和不同的缺陷。在业务分析人员、营销人员、设计师和程序员带来他们自己的假设下的规范和实现项目测试中,一个独立的测试团队将关注不同的假设测试和评审,这常常有助于揭露隐藏的缺陷和问题。独立的测试人员可以向高级管理层如实报告他的结果,不会担心,指出问题会受到的同事和经理的报复。一个独立的测试团队通常有一个单独的预算,这有助于确保适当的级别上的钱是花在测试人员培训、测试工具、测试设备,等。此外,在一些组织中,测试人员在一个独立的测试团队会更容易有一个职业生涯引导到更高级的角色测试。
独立测试人员和测试团队有可能被隔离。采取人际隔离的形式从程序员、设计师,和项目团队隔离,也可以采取的形式从业务目标隔离。隔离反而导致了沟通问题,不友好和敌意。缺乏对项目目标的认同和支持,会受到测试对象的谴责和背后的政治中伤。即使是很好的集成测试团队也会遇到问题。其他的项目干系人可能会认为独立的测试团队是正确的或者错误的,但都会认为独立测试是一个瓶颈和一个延迟的来源。一些程序员放弃了对质量的责任,说,好吧,我们现在有了这个测试团队,为什么我需要对代码进行单元测试呢?