引言

  软件测试的关键环节是设计和执行测试用例。测试用例的质量与测试人员的技能、经验以及对被测软件的理解密切相关。如果测试人员对被测软件不甚了解,很难在短时间内设计出有效的测试用例;有的测试用例虽然面面俱到,但冗余现象严重,浪费时间、人力和物力。

  随着软件复用技术的发展,测试复用引起了人们的极大关注,特别是对测试用例复用的研究。所谓测试用例复用,是对一个软件的已执行的测试用例,将其不同程度地应用于该软件新的测试中或其他软件的测试中。测试用例复用是可行和必要的,表现在:1)软件测试对测试人员的经验和技能要求高,通过复用,可提高测试人员技能,解决其经验不足的问题,同时提高软件测试质量;2)软件测试是当前保证软件质量的一种有效手段,但其占用软件开发周期时间长,通过复用,可避免大量重复性劳动,缩短测试周期,提高效率;3)伴随着同一个软件的生存周期,软件经历了单元测试、集成测试、确认测试和系统测试,这一过程产生了成百上千的经过执行确认的高质量的测试用例,在前一测试阶段执行过的一些测试用例可在后续测试阶段中使用,包括在回归测试、维护阶段的版本升级和纠错测试中都可使用;4)同一领域或相同系统架构的不同软件,存在着测试用例复用的可能性,且随着软件复用技术的发展,很多有价值的组件可供使用,这也使测试用例复用成为可能。

  由于软件的抽象性、复杂性和多样性,使得软件测试成为一项复杂的、需要智慧和创造性的工作,要实现测试用例复用并不是一件简单的事情。但测试用例复用是软件测试发展的一个必然趋势。本文从可复用测试用例的评估、描述、设计和使用四个方面对测试用例进行了系统研究,提出了可复用测试用例应具有的特性,为评估测试用例的可复用性提供准则;给出了可复用测试用例的系统描述要素,为规范和使用可复用测试用例提供了基础;提出了面向复用的测试用例设计过程和基于复用的软件测试模型,为测试用例复用提供了方法和实现策略。本文的研究内容在某类实时系统软件测试中进行了应用,证明是有效和科学的。

  1、可复用测试用例特性

  文献中定义了可复用测试用例的六个特性:通用性、简洁性、独立性、有效性、灵活性和检索方便。本文对大量测试用例和测试用例复用的各种应用情况进行了分析,认为可复用测试用例应具有以下特性:通用性、有效性、独立性、标准化和完整性,它们对可复用测试用例而言是充分的也是必要的。上述特性可作为评判一个测试用例是否具有可复用性的准则。

  1)通用性。通用性是指可复用测试用例并不局限于具体的应用,不过分依赖于被测软件的需求、设计和环境,能够在某一类型、某一领域的相似软件的测试中广泛使用。

  当前绝大多数的测试用例都不具有通用性,这样的测试用例只能用于被测软件和其当前环境,不可能用到其他软件中。

  2)有效性。测试用例的目标是发现软件问题,因此,可复用测试用例也必须是能够发现软件问题的,并且是可靠和高效的。

  3)独立性。可复用测试用例的独立性是指,对于测试需求R1和R2,测试用例集分别为cl和C2,c1和c2的交集为空,并且,每个可复用测试用例能够独立运行。测试用例是否具有独立性,决定了测试用例可复用能力的强弱。

  如果测试用例之间存在着相互联系,或测试用例的运行环境取决于其他测试用例的执行状态,那么,其中的测试用例不能复用时,与之相关的测试用例的可复用性也不复存在。

  如何将测试用例的关联性降至低,是设计可复用测试用例必须解决的问题。首先,每个测试用例的目标应尽量独立、单一;其次,测试用例不包含过多的具体实现细节。

  4)标准化。测试用例通常用自然语言来描述,充分体现了测试人员的创造性和个人风格。但对于可复用测试用例,太多的个人风格不利于其他测试人员对测试用例的理解,必然影响其复用。因此可复用测试用例的标准化程度也反映了其易理解和可复用的能力。为此可复用测试用例应遵循统一或规范的格式或结构,规范的命名规则,使用术语、用简明、易懂、无歧义的语言来描述,并且具有详细的文档。

  5)完整性。每个可复用测试用例应包括全部应有的要素,不能有缺失,并且每个要素的描述是充分的。文献规定了测试用例应包括的要素,但对于可复用测试用例而言是不够的,应加以补充。

  2、面向复用的测试用例设计过程

  当前,测试用例设计都砥向不同的具体应用,与被测软件是紧耦合的。考虑到复用的目的,测试用例的设计应不同于以往。本文提出了面向复用的测试用例设计过程,给出了设计过程中应实施的各项活动,主要包括被测软件(系统)共性分析、测试策略分析、设计测试用例、测试用例评审、测试用例执行和修改、测试用例入库共六个步骤,如图l所示。该过程对现有测试用例的复用处理也是适用的。

  2.1共性分析

  同一领域或相同架构的软件存在着共性需求。通过共性分析或领域分析,并结合任务分析等方法,梳理出被测软件所属领域或相同类型软件的相同或相似特征及需求,例如,工作流程、共性场景、功能、性能等,从而挖掘出可复用点,例如,相对独立且类似的功能、相同的构件、相似的业务流程。该步骤实质上要抽象出被测软件应用领域的概念,类似于设计模式中的共性分析。

  这项活动需要领域专家、软件专家、设计人员、测试专家等人员参与。

  2.2 测试策略分析

  针对共性分析挖掘出的可复用点,分析各复用点的测试策略,包括测试类型、测试方法、测试环境、测试覆盖率等内容。