Java 子系统

子系统级别测试是一个非常重要的测试级别,其目的在于验证组件是否遵守它们的接口规范并且与其它组件干净地集成。子系统测试填补了类级别测试和系统级别测试之间的不足,并且在管理范围和重点方面特别有用。

如果整个测试套件侧重于类级别测试,则会遇到集成问题而结束。另一方面,如果只进行子系统级别测试,则测试覆盖率还是比较狭窄,这是因为它不会为您提供对单个类的足够控制权。

使用下面的一般过程来测试子系统:

  1. 定义属于子系统的类。
  2. 标识子系统中的综合状态。
  3. 通过状态图表定义一般流。
  4. 定义更多测试以使测试覆盖率最大化。

定义属于子系统的类

从理论上讲,应该将大部分的测试精力放在类级别测试上,并且标识可以集成到一起作为子系统来进行测试的若干组类。要定义子系统的内容,需要标识用来提供内聚服务的那些类。您应该根据下列条件来进行选择:

标识子系统中的综合状态

在标识了您想作为一个子系统来测试的一组类之后,使用基于状态的分析来帮助您从更高级别了解想要验证的方案。由于您正在处理子系统,因此必须考虑综合行为。我们之所以要谈论综合行为,这是因为当达到某种状态时,许多单个对象也就达到了这种状态。

例如,以用来管理购房过程的房地产系统为例。大家都理解,这种类型的系统具有几种状态,例如,PreapprovedCustomer、OfferAccepted、HomeInspectionCompleted 和 PurchaseAndSaleSigned。

还可能具有用来定义子系统的若干个类,例如,Customer、House、Seller、Visit、Offer、Lender、Appraiser、Mortgage、CreditReport、CreditBureau、ApprovalLetter、HomeInspection、PurchaseandSale、LoanApplication、ClosingContract 和 Commission 等等。

在此示例中,可以将某种状态(例如,PurchaseAndSaleSigned 状态)看作若干个类和状态的综合行为,如下所示:

状态
Customer UnderAgreement
House UnderAgreement
Seller UnderAgreement
Offer Accepted
ApprovalLetter Delivered
HomeInspection Completed
CreditReport UptoDate

通过状态图表定义一般流

要制定测试方案,应考虑使系统处于 PurchaseAndSaleSigned 状态而需要执行的不同操作。测试方案应该执行各个操作,以便房地产示例中已经完成了下列任务:

此时,您需要创建一个测试。创建测试的最简单方式就是为您想与之交互的第一个类中方法生成测试。在此例中,可以从 Customer 类中选择 getCreditReport 方法,因为它是该方案中将调用的第一个方法。当您构建方案时,添加测试所需要的对象。务必包括子系统的所有状态和转换。完成之后,应定义要在整个方案中使用的值。由于测试方案涉及的范围可能很广泛,因此最好使测试数据相当简单,只使用一些典型值和有限数目的数据分区。

定义更多测试以使测试覆盖率最大化

在通过状态图表定义典型流之后,定义更多方案以使测试覆盖率最大化。这些方案需要处理子系统的各种状态和转换。通常,一个方案类似于先前定义的另一个方案。在此情况下,需要根据先前定义的测试来创建新的测试。在新测试中,将调用先前定义的测试驱动程序并将新消息添加至新的测试时序图以完成流。

因此,可以通过复用先前定义的流来构建复杂方案,并且只创建处理新的转换和状态所需要的少量变化形式。

相关概念
测试策略
基于状态的测试技术
相关任务
测试 Java 方法
测试 Java 类
反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.