UML软件工程组织 |
软件测试:不可忽略的阶段 |
作者:Robin F. Goldsmith ,Dorothy Graham著 Blueski编译 本文选自:赛迪网 2003年02月13日 |
在开发模型中,测试常常作为亡羊补牢的事后行为,但也有以测试为中心的开发模型。在本文中,让我们对V模型进行考察,看看它有没有问题? 软件开发的几十年历程业已证明,在开发生命周期中划分阶段的做法是很有好处的。在经典的瀑布模型基础上,还有螺旋模型和过程迭代方法,快速软件开发(RAD)以及较新的Rational统一过程(RUP),但在这些过程方法中,并没有充分强调测试的价值,也没有给测试以足够的重视。 就象开发有开发模型一样,测试也有测试模型,尽管这些方法鲜为人知。部分原因是因为很多测试人员已经在他们的工作中积累了大量的经验,利用这些经验就可以做好他们的工作。总的来说,测试往往要占据整个开发周期的时间,但即使在很多正规的大学中,也没有为那些即将开始软件生涯的学生们设置软件测试课程。 软件专家们不断在提供新的开发模型,这也是实际开发需要使然,与此同时,在开发过程中也不断感受到这些已存在的方法的不足,例如,还没有比RUP更充分的方法,但RUP也存在一些明显的不足,例如,RUP没有对测试计划进行定位。
在传统开发过程中,仅仅把测试过程作为在需求分析、概要设计、详细设计及编码之后的一个阶段,事实上,V模型的推出也是对此所进行的改进。在瀑布模型中,确实给人们造成了这样的不良影响,即在很多重要开发活动完成后,测试只是收尾工作,而不是主要的过程,尽管有时测试会占据项目周期一半的时间,很多项目主管却仍然还是坚持这么认为。
在模型图中的开发阶段一侧,先从定义业务需求开始,然后要把这些需求不断地转换到概要设计和详细设计中去,最后开发为程序代码。在测试执行阶段一侧,执行先从单元测试开始,然后是集成测试、系统测试和验收测试。 V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系: · 单元测试的主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。 · 集成测试主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其它程序部分之间的接口上可能存在的错误。 · 系统测试主要针对概要设计,检查了系统作为一个整体是否有效地得到运行,例如在产品设置中是否达到了预期的高性能。 · 验收测试通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。 在不同的开发阶段,会出现不同类型的缺陷和错误,所以需要不同的测试技术和方法来发现这些缺陷。
测试不仅仅是测试。测试过程还包括确定要测试什么(测试范围和条件)以及产品如何被测试(制作测试用例),建立测试环境,执行测试,最后再评估测试结果,检查是否达到已完成测试的标准,并报告进展情况。而且,仅有这些还不够,根据很多测试者的经验,当你认为什么地方有问题时,你就很可能会在那里发现问题。如测试专家Boris Beizer在他经典的测试著作《Software Testing Techniques (Thomson Computer Press, 1990)》中所说,测试设计可以发现缺陷和错误。 而且,如果你把测试设计放在最后阶段,就错过了发现构架设计和业务逻辑设计中存在的严重问题的时机,到那时,要修复这些缺陷将很不方便,因为缺陷已经扩散到系统中去了,所以这样的错误将很难寻找和修复,并且代价更高。
根据V模型的要求,一旦有文档提供,就要及时确定测试条件,以及编写测试用例,这些工作对测试的各级别都有意义。当需求被提交后,就需要确定高级别的测试用例来测试这些需求。当概要设计编写完成后,就需要确定测试条件来查找该阶段的设计缺陷。 如果测试文档能尽早提交,那么就有了更多的检查和检阅的时间,这些文档还可用于评估开发文档。另外还有一个很大的益处是,测试者可以在项目中尽可能早地面对规格说明书的挑战(测试是一种接受挑战的行为)。 这意味着测试不仅仅是评定软件的质量,测试还可以尽可能早地找出缺陷所在,从而帮助改进项目内部的质量。参与前期工作的测试者可以预先估计问题和难度,这将可以显著地减少总体测试时间,加快项目进度。
情况其实并不是这样的,严格规定不是有效的开发人员和测试人员在应用各种模型过程中所采用的方式。实际上,各种模型只是简单地提醒我们,有必要定义一些必须要做什么(需求)--What,然后描述如何做(设计)--How,然后花很多力气来实现(编码)--Do。V模型所做的是强调每一个开发级别都有一个与之相关联的测试级别,并且建议测试应该在各级别之前进行设计。 各模型并没有规定工作量大小。有效的开发人员总是能将项目分解为可操作的小阶段,例如在迭代式开发中整个项目被分解为很多小片断,并忽略了各片段的实际大小。此时,模型的what-how-do顺序对于按时交付就具有重要意义,而且对于保证每一个阶段目标的实现也非常重要。
有些测试者认为:“是否使用V模型要看该所应用的项目。有些项目需要应用V模型,而有些项目不需要。可以只在需要V模型的项目中采用。”这样的做法实际上对任何模型都是有害的。我们应该尽可能地去应用模型中对项目有实用价值的方面,但不强行地为使用模型而使用模型,否则也没有实际意义。 例如,V模型的反对者经常声称V模型只有对需求非常明确,已经文档化了的项目才有用,因为所有的开发人员和测试人员都需要严格定义好的需求和设计来开展工作。对于当前很多文档需要事后补充,或者根本没有文档的做法下(这已成为一种开发的文化),开发人员和测试人员都面临同样的困惑。在这种情况下,V模型的概念仍然是有用的,但在需求不明确的情况下更难应用,因为不管要开展什么工作,要测试什么,首先需要明确知道开发了什么。 V模型的反对者可能会声称V模型不适用于极限编程(XP),在XP中提倡快速开发,结对编程,在编码之前就已完成测试用例。首先,我们提倡同时应用这两种方法,另外,也需要指出的是XP方法也强调在编程之前尽可能发现需求。 V模型没有明确说明需求和设计文档应如何定义,要定义多少文档,同时V模型也没有说明在各测试阶段如何进行测试设计。在采用XP策略的开发过程中,V模型的支持者认为,可以将单元测试应用于所划分的各个代码片段上,但V模型没有定义各单元测试之间应如何匹配。只在必要的时候,才需要进行集成测试,而最终意义上的集成测试也就是系统测试。尽管一些XP工作者将这些测试看作为“验收测试”,其实际目的只是希望降低让用户进行测试的必要性,同时又希望能确保系统在功能上满足用户业务的需要。
Marick认为:"我们对V模型的需要就象是鱼对自行车的需要一样。"在他的文章中提出了测试过程的新模型。他认为,有些测试要比商业行为更早些,而另外一些测试则要在更晚的时候得以进行。而且,V模型使人很难对不同阶段的系统描述进行综合。 V模型的支持者则认为,虽然在显示面前没有一个模型表现得无可挑剔,但在实践过程中,有些模型还是比较有用的。在下一篇中,我们将审视Marick所提倡的X模型。 (责任编辑 Sunny)
|
版权所有:UML软件工程组织 |