从用例到测试用例的追踪
上一篇 / 下一篇 2010-09-09 16:56:04 / 个人分类:基础知识
http://www.ibm.com/developerworks/cn/rational/04/r-3217/ |
一个需求被定义成 "系统必须遵从的条件或能力"。 它可以是:
图1显示了带有不同需求级次的需求金字塔 图1. 需求金字塔 最高层的是涉众需求。通常,一个项目包含五到十五个这样的高层需求。较低层次的是特性,用例和补充规约。不同层次的需求有不同的细节。越低的层次需要越多的细节。例如,一个需求可以是:"数据必须是持久的"。特性可以将此需求精化为:"系统应当使用一个关系数据库"。在补充规约层次,需求会更加详细:"系统应当使用Oracle 9i数据库"。层次越低,需要越详细的需求。 追踪是这样一种技术,在系统中它能为不同层次的需求之间提供关联。这个技术帮助你确定任何需求的起源。图 2 阐述了从高层次到低层次需求是如何被追踪的。每一个需求通常映射到几个特性,然后这几个特性映射到用例和补充需求。 图2. 追踪需求金字塔 用例描述了功能性的需求,补充规约描述了非功能性的项目。另外,每个用例映射到许多场景。映射用例到场景,是一对多的关系。 场景映射到测试用例也是多对一的关系。另一方面,在需要与特性之间,是多对多的映射。 追踪起到了几个重要的作用:
一个追踪项是一个项目元素,其需要从另一个元素进行追踪。按照IBM Rational RequisitePro,它是一个需求类型的实例所表示的任何事情。在RequisitePro中一些需求类型的例子是涉众需求,特性,用例,参与者,和术语条款。 在RequisitePro中,有一种按照特定视图展示追踪性的便利方法。图3 显示了将特性映射到用例的一个例子。 图3. 在RequisitePro中的追踪关系 这里有一些问题,这些箭头应指向哪里:是从更低的层次到更高的层次,还是从更高的层次到更低的层次。甚至在RequisitePro中的两个例子使用了两个不同的方法。答案是没有关系,只要你在项目中始终如一地使用它们就可以了。 参与者是与系统交互的某人或某事。用例是根据操作顺序的一个系统描述。它为参与者产生了一个看的见的结果或数据值。以下是用例的一些特征:
用例的目的是促使开发者、顾客和用户之间对系统应做些什么达成一致。用例在开发者和顾客之间达成了某种契约。它同时也是用例实现的基础,它在程序设计中起到了非常重要的作用。另外,你可以从用例中产生序列图,协作图和类图。此外,你可以从用例产生用户文档。用例可能还在计划迭代的技术内容方面有帮助,并且使系统开发者更好地了解系统的意图。最后,你可以使用它们作为测试例程的输入。 用例图显示了参与者和用例之间的关系。在本文我们使用一个在线书店作为项目的一个例子。图4 展示了这个项目的用例图。 图4. 用例图 用例的通用格式是:
基本流程包括最通常的一系列行为,此步骤发生在每件事正确运转的时候。可选流程表现了流程的变更,包括不很普遍的情况和错误条件。环境图是用例图的一部分,向参与者和其它用例显示了特殊用例之间的关联。活动图是一个解释用例的流程图。环境图和活动图不是必须的,但是可以帮助你可视化用例和它在项目中的位置。 在我们的在线书店项目中,用例的基本流程的安置顺序也许像这样:
除了基本流程以外,还有许多可选流程。例如,第一个可选流程描述了当用户是一个新的用户时所发生的事情(不是在线书店的已注册用户)。在基本流程中,用户经常拥有一个用户ID和密码。相反,可选流程 1 描述了当第一次用用户需要注册并提供顾客数据时的情况。可选流程的另一个例子是无效的密码。用户输入了错误的密码,系统显示错误信息。 表 1 显示了"安置顺序"用例中的可选流程:
下列约定用于为事件流命名: 基本流程:B 可选流程:A1,A2, A3,... 在基本流程中的步骤:B1,B2, B3, ... 在可选流程1中的步骤:A1.1, A1.2, A1.3, ... 在可选流程2中的步骤: A2.1, A2.2, A2.3, ... 为得到可选流程,使用活动图 5。图 5显示了描述用例的活动图。 图5. 活动图 基本流程是一条向下的直线,然而可选流程可以是向前或向后的循环线。 在创建一个测试用例之前,你需要为所给用例确定全部的场景。一个场景是用例的一个实例。它描述了一个贯穿事件流的特殊路径。图 6是一个假设的图表,它描绘了一个拥有基本流程B和可选流程A1, A2, A3, A4的用例。为了找到全部的场景,我们需要画出贯穿于此图的所有场景。 图6. 在用例中找到场景 每一个可选流程都有一个场景,并且每个结合的可选流程都有一个场景。显然,这里场景多于可选流程,因为一个场景用于A1,另一个场景用于A2,还有一个场景用于这两个的结合。 描述场景最简单的方法是提供一系列的可选流程,例如,做两遍流程A2,然后做一遍流程A6: SC16:A2,A2,A6。 另一种描述场景的方法是列出它的所有步骤,但是这种方法既困难又未必详细。 如果你陷了无限循环(向后循环),这时该怎么办?理论上它将产生无限的场景。图 7显示了一个无限循环。 图7. 无限循环。 最合理的方法是做一遍基本流程,一遍循环流程,然后再做一遍循环流程。如果程序能为这两个循环都工作的话,你能假设它能为所有的循环工作。 书籍订阅的例子中包含了一个基本流程和8个可选流程。它们中的4个向前走,另外4个向后走。如果你想描述全部可能的用例结合,你将有超过4000个场景 (这里有8个可选流程,我们想让其中4个做两次,因为他们向后循环,所以是2的(8+4)次幂,,等于4096。很明显,我们不需要把他们全部做完。 选择能代表这四千个场景的一个合理子集。通常,明智的做法是选择一个基础流程,一个覆盖了每一个可选流程的场景,以及一些合理的可选流程的结合。使用表 1的例子,做一个包含流程A1和A7的场景也许没有什么意义,因为它们在图标上分隔太远以至于不能互相影响。但是,做A1和A2是有意义的,因为他们互相紧埃,之间互相影响。 表 2 图解了选择的场景:一个代表基本流程,8个代表每一个可选流程,6个反射可一些流程的结合(特别是那些拥有两个距离很近的向后循环)。 以下15个场景值得测试: 表2. 值得测试的场景
在RequisitePro中场景不是一个标准的需求类型,所以你需要增加它成为一个新的需求种类。为了完成它,去Project Properties,选择Requirement Types 标签,然后点击 Add。接下来,填充到适当的区域 (如图 8所示),然后点击OK。 图8. 增加一个需求类型场景 创建了这个需求类型之后,我们应当输入全部的场景并设置从用例到这些场景的追踪,如图 9所示。 图9. 从用例到场景的追踪 在RequisitePro中,你可以用用例的名字和一系列可选流程的名字为场景命名(例如:UC1, A6, A7)。 既然你有了所有的场景,你就需要获得测试用例。这里需要完成4个步骤:
以下部分描述了这些步骤的细节。 在所给场景的所有步骤中你需要确定全部输入的变量。例如,在某些步骤中,如果用户输入了用户ID和密码,这就产生了两个变量。一个变量是用户ID,另一个变量是密码。变量也可以被用户选择(例如,保存更改或取消)。 这里是书籍订购例子的全部变量: 在步骤B2中,这里有两个变量:电子邮件地址和密码。它们全是字符串。在步骤B3中,搜索一本书,这个变量是一个搜索字符串,因此它也是字符串。 在步骤B4,我们需要从系统返回的目录中选择一本书。在步骤 B8中,我们需要选择送货方式。Amazon.com 提供了4个选择。 如果它们引发不同的系统行为,选项将是"明显不同的"。例如,如果我们选择大概6到10的字符长的用户id,以下的输入显然是不同的 :
然而,"Alexandria" 和 "JohnGordon" 却不是明显不同,因为它们都是有效的用户id,可以使系统有相同的反应。 以下的指导方针描述了一些特殊的例子。 一个选项可以认为是非常不同的,如果:
如果我们测试数字,我们会考虑以下选项:
你怎么知道区域内能够输入的最大和最小的长度?这个需求可以从不同的来源得到。有时,它来自于商业的分析或顾客。例如,如果我们输入Dun 和 Bradstreet 数字,这就被看成是一个公司,它总是包含9个数字。这是商业的需求。 然而,它一般不会来自于顾客和用户。如果你问客户姓名区域有多长,它们会告诉你不用担心长度,只要要合理即可。在此例中,设计步骤决定了变量的长度而不是需求步骤所决定的。 另一种情形,数据分析师或者数据库设计者会提出建议——例如,在如果公司的全部应用软件中姓名应在30个字符以内,你的申请的用户名就得依照这个标准。 不管需求的来源是何处,在我们做测试用例之前它都要被同意并且备份。 这里有一个关于上述讨论的需求应该在哪里进行文档化的问题。在用例中一个增加这个需求的地方是被称为Special Requirements的地方。另外一个可以放置这种需求的地方是术语表或者数据字典。另外,你可以详细说明一个独立的文档类型,在那里你可以描述全部应用程序中的所有变量。在许多用例中如果同样的变量出现在许多界面中时,这就变得特别有意义,因此你可以在一个文档里说的所有名字截止在30个字符以内,全部的地址截至在100个字符以内。然而,如它们对一个用例是特殊的,最好把它们加到那个用例的特殊需求中。 表 3显示了在示例项目的基础数据流程中为变量确定的选项:
在前面的步骤,你确定了所有的选项。在此步骤,你需要在一系列的测试用例中使它们结合在一起。 图 10用图描述了测试的选项。每一个纵队都有一个需要测试的变量,每一行是一个选项:R 是正常, E 是空, 然后是一个字符,50个字符,51个字符,等等。 "L" 代表非常大, "I" 代表非法的。 图 10:每个步骤的待测试选项 后面有妨碍的选项把用户从基本流程中抛离出去:它们表示在可选流程中描述的一些错误。因为你一般为第一个场景设计特殊用例,所以你可以移动它们(在一些其它的场景中测试它们)。 无论剩下了什么,你需要创建最小数量的覆盖全部情形的测试用例。 通过连接圈创建测试用例,如图 11所示。 图 11:合并选项以创建测试用例 为了创建第一个测试用例,你可以选择并连接任何选项。当你创建第二个测试用例时,跳出第一个用例没有使用的选项。继续增加测试用例直到全部图的节点(如图 11所示)被覆盖。通常你需要从4到6测试用例去覆盖全部需要测试的选项。然而,一些特殊的情形需要的更多。 测试用例的分配可以在测试用例分配表格中描绘,如表 4所示。
表 4 描述了图11中每列包含不同的测试用例。每一行相应的是用户输入的变量。 在此步中,你替换如"一个非常长的名字" 或"扩展很长的电话号码"这样的占位符为像"Georgiamitsopolis" 和 "011-48 (242) 425-3456 ext. 1234"这样实际有价值的东西。在此步,你还可以分裂表 4所示的表格中的测试用例,为每个测试用例创建独立的表格。 如书籍订购使用用例的测试用例 1,你就可以创建一个像表 5这样的表格。这就给你的测试者创建一个文档。测试者将跟随总队2和3的方向,并且记录纵队5,6,7的结果。 表 5:最终的测试用例
RequisitePro再一次帮助你创建追踪关系。在产生了全部的测试用例以后,你可以设置从场景到测试用例的追踪。 图 12显示了全部的场景:从不同的可选流程合并中产生21个场景。 图12 :追踪矩阵 在设置了场景和测试用例之间的追踪关系后,我们可以创建一个显示从用例到测试用例全部追踪方法的追踪树。 这里有两个选项。第一个选项——如图 13显示——用于追踪到用例外,用来显示上层的用例并且追踪场景和测试用例。 图 13:用例的追踪树 第二个方法是测试用例中的追踪,如图14所示。在此种情况下,追踪树看起来会有不同:你从测试用例开始,然后追踪场景和用例。 图 14:测试用例的追踪树 进行这种追踪的一个最主要的原因--并且花费时间将其加入到RequisitePro中--是为了让你知道当一些事情发生变更时需要重新测试什么。追踪和所谓的可疑关联,如图 15所示,为你显示了由于先前的场景和用例发生了变化,哪些测试用例也要随之改变。 图 15:可疑关联 如何映射到IBM Rational统一过程(RUP)呢?它们大多数发生在过程中的先启和精化阶段。只要你有了用例之后,我们就可以开始建立场景和测试用例。图 16描述了这些活动对应于RUP方法论中的哪些地方。 图 16:映射到RUP阶段的追踪活动 当建立场景和测试用例时,你可以给用例设计者反馈并且精炼一下需求。这有助于在过程中尽早改变一些任务,并且最终为团队尽快完成任务做出贡献。在整个精化阶段以及几乎是整个构造阶段中都会使用测试用例。 本文介绍了一种从用例中产生功能测试用例的方法。这是使用此方法的一些益处:
你创建的测试用例能够用于人工测试,也可以用于像IBM Rational Robot这样的自动化测试。这种方法已经在许多项目中获得了成功。
|
TAG: