什么是分类树?
  什么是分类树?设想你希望设计出一个系统用于把一堆的美金硬币分成不同的类别(例如:一分币、五分币、一角币、二角五分币)。假设通过一些测量手段可以区别这些硬币,例如可以用直径来分类。你可以把硬币倒入一个槽,槽的直径恰好能让一角的硬币通过,如果能通过,那么它被划分为一角的硬币;否则继续倒入另外一个槽,槽的直径恰好能让一分币的硬币通过,如果能通过,则被分类成一分币;否则又继续下一个槽,这个槽的直径只容五分币大小的通过,如此类推。这样的过程实际上是在构造一棵分类树。用于构造分类树的判断过程提供了一种有效的方法用于把一堆的硬币归类,而这种方式可以用于更广泛的各种各样的分类问题。
  分类树被广泛应用于各种学科,例如医疗诊断、计算机数据结构、植物分类、心理学的决策论等。我们现在要讨论的是分类树在测试用例的设计方面的应用。
  分类树方法用于测试用例的设计
  测试用例的设计是对测试质量而言非常关键的软件测试活动,因为测试用例集合的选择对测试的深度和测试范围的影响非常大。
  分类树方法是由Grochtmann和Grimm在1993年提出的,是在软件功能测试方面一种有效的测试方法,通过分类树把测试对象的整个输入域分割成独立的类。
  按照分类树方法,测试对象的输入域被认为是由各种不同的方面组成并且都与测试相关。对于每个方面,分离和组成各种类别,而分类结果的各类又可能再进一步地被分类。这种通过对输入域进行层梯式的分类表现为树状结构。随后,通过组合各种不同分类的结果来形成测试用例。
  使用分类树方法,对于测试人员来说重要的信息来源是测试对象的功能规格说明书。使用分类树方法的一个重要的好处是:它把测试用例设计转变成一个组合若干结构化和系统化的测试对象组成部分的过程-使其容易把握,易于理解,当然也易于文档化。
  如何使用分类树方法设计测试用例?
  分类树方法的基本原理是:首先把测试对象的可能输入按照不同的分类方式进行分类,每一种分类要考虑的是测试对象的不同的方面。然后把各种分开的输入组合在一起产生不冗余的测试用例,同时又能覆盖测试对象的整个输入域。
  因此,可以把使用分类树方法设计测试用例的过程分为3大步骤:
  1、识别出测试对象并分析输入空间。
  2、对测试对象的输入空间进行分类。
  3、画出分类树、组合成测试用例。

  在第一个步骤中,测试人员需要确定与测试相关的方面。每个方面应该有精确的限制,从而可以清晰地区别测试对象的可能输入。例如,上图中的大小(Size)、颜色(Colour)、形状(Shape)共同组成了测试对象的可能输入的方面。
  在接下来的步骤,依据测试对象的每个方面对可能的输入进行划分,这个划分是数学上说的"分类".分类的结果形成了各种"类".因此一个"分类"的结果代表了测试对象的某个方面的输入。例如,大小(Size)方面的可能输入是大(Large)或者小(Small);颜色(Colour)方面的可能输入是红色(Red)、绿色(Green)、蓝色(Blue)等。
  后一个步骤是形成测试用例。测试用例是由不同分类的类组合形成,在组合类的时候需要注意逻辑兼容性,也是说交集不能为空。测试人员组合类形成需要的测试用例,以便覆盖测试对象的所有方面并充分考虑它们的组合。例如,测试用例1考虑了大尺寸、红颜色、圆形的输入。
  分类树方法测试用例设计的工具
  如果测试用例是依据软件功能规格来设计的,那么我们叫这种类型的测试为功能测试。虽然功能测试对于验证系统非常重要并且广泛应用在测试中,但是只有很少的方法和工具可以系统地产生相应的测试用例。
  而CTE XL(Classification Tree Editor eXtended Logics)是为数不多的工具之一。它是一个语法控制的、图形化的编辑器。帮助我们更加有效地使用分类树方法进行测试用例的设计。