日志文章

2007年08月30日 18:37:40

UML 用例

(中程在线)老版本介绍:http://www.itisedu.com/phrase/200603071221195.html



Use Case 分为Essential Use Case和System Use Case,也叫Traditional User Case 或 Concrete System。

Essential Use Case仅是描述业务信息,描述中不会出现System,Click Button等字眼
System Use Case结合了与系统的交互





摘自:使用UML 进行业务建模:理解业务用例与系统用例的相似和不同之处

业务用例模型与系统用例模型有什么相似之处?

业务用例的 RUP 定义:
" 业务用例从一个外部的,增加值的角度来描述一个业务过程。为了给这个业务的涉众创造价值,业务用例是超越组织边界的业务过程,很可能包括合作伙伴和供应商。"
简单地说,这个定义标识了一些重要点,比如:
  • 一个业务用例描述的是业务过程——而不是软件系统过程。
  • 一个业务用例为涉众创造价值。这些涉众要么是业务参与者要么是业务工作者。
  • 一个业务用例可以超越组织的边界。有些构架师对于这一点有非常严密的态度。许多业务用例确实超越来组织的边界,但是有些业务用例仅仅关注于一个组织。我稍后将在这篇中给出一些例子。
让我们也看看 Podeswa 的书 UML for the IT Business Analyst 中对业务用例的定义:
"业务用例:业务过程是描述这个业务的具体工作流的;一次涉众与实现业务目标的业务之间的交互。它可能包含手工和自动化的过程,也可能发生在一个长期的时间段中。"

系统用例的设计范围就是这个计算机系统设计的范围。它是一个系统参与者,与计算机系统一起实现一个目标。系统用例就是参与者如何与计算机技术相联系,而不是业务过程。



业务用例模型与系统用例模型之间究竟有怎样的差别呢?
业务用例模型与系统用例模型之间主要有三点重大不同之处:设计范围、白盒测试与黑盒测试,以及业务操作者。
范围
在前面的部分中,我借助 Alistair Cockburn 的处于“水平线”上面、下面,或正好处于“水平线”的规定对设计范围进行了讨论。
业务用例着重于业务操作。它们表示实现业务目标的业务中的具体工作流。业务过程可能涉及手工和自动过程,并且在一段长期的时间内进行。
系统用例着重于要设计的软件系统。参与者如何与软件系统进行交互?我们在系统用例说明中书写的事件流应该足够详细,从而用作编写系统测试脚本的出发点。
白盒与黑盒
业务用例常常是以白盒形式编写的。它们描述了被建模的组织中的人和部门之间的交互。我们使用业务用例来说明在“现有”业务模型中组织如何工作。然后我们重构“现有”的业务用例模型,让其面向将要建模的组织的未来设计。我们需要创建什么新角色和部门来提供更多价值,或者消除业务问题?什么角色和部门需要消失?
系统用例几乎总是以黑盒形式编写的。它们描述了软件系统之外的参与者如何与将被设计的系统进行交互。系统用例详细阐明了系统需求。系统用例模型的目的是从涉众的角度说明需求,而不是设计如何满足需求。
业务角色
那么业务角色是什么?在系统用例图中,您只让参与者与用例进行交互。但在业务用例图中,您可以让业务参与者和业务角色与业务用例进行交互。
业务参与者是业务之外的人。它可以是一个角色或其他组织实体。例如,在刑事审判系统中,业务参与者可以是证人、嫌疑犯、外部的政府机构,例如健康服务,或业务实体,例如,业务资信咨询机构。
业务角色是业务内部的某个人或某个部门。在刑事审判系统中,业务角色可以是治安人员、法官、检察官,或假释官。当您实现了一个业务用例,并且创建了时序图和/或 通信图来显示业务参与者、业务角色,和业务实体如何协作执行业务用例时,您将会把业务角色从业务用例模型转入业务分析模型,并且加入所需的额外业务角色来提供业务用例功能。图 1 显示了基于 ISM 项目的示例业务用例图。






其他参考:使用UML建立的完整的系统用例的实现过程









子用例参考:
UML用例中的包含、扩展、泛化关系的理解

如何写好最外围用例







TDD开发的全过程] 一、设计阶段

在用例关系中有有三种关系,一是包括,"include" 一是扩展"extend"一是泛化,当然还有最基本的关系,“关联”

包含关系:
包含关系用于将部分工作流程分离出去,对这部分工作流程来说,基本用例只取决于结果,与获得结果的方法无关。如果这种分离可以简化对基本用例的理解(隐藏详细的行为),或者可以在其他基本用例中复用被分离的行为,您就可以将这部分工作流程分离出去。
基本用例通过包含关系连接到包含用例。包含用例总是抽象的。它描述在执行基本用例的用例实例中插入的行为段。基本用例可控制与包含用例的关系,并可依赖于执行包含用例所得的结果,但是基本用例和包含用例都不能访问对方的属性。从这种意义上来讲,包含用例是被封装的,它代表可以在各种不同的用例中复用的行为。
包含关系用于:(1)从基本用例中分解出来这种的行为:它对于了解基本用例的主要目的不是必需的,只有它的结果才比较重要。(2)分解出两个或者多个用例所共有的行为。


扩展关系:
扩展关系将扩展用例与基本用例连接了起来,通过在基本用例中引用扩展点,可以定义在基本用例的哪些位置插入扩展用例,扩展用例通常是抽象的,但是不是必须抽象。
扩展的目的在于:(1)表明用例的某一部分是可选的(或者可能可选)的系统行为。这样,你就可以将模型中的可选行为和必选行为分开。(2)表明只有在特定条件下(有时候是异常情况下)才执行的分支流,如触发警报。(3)表明可能有一组行为段,其中的一个或者多个段可以在基本用例中的扩展点处插入。所插入的行为段(以及插入的顺序)将取决于在执行基本用例时与主角进行的交互。
扩展是有条件的,它是否执行取决于在执行基本用例时所发生的事件。基本用例并不控件执行扩展的条件,这些条件在扩展关系中进行说明。扩展用例可以访问和修改基本用例的属性。但是基本用例看到到扩展用例,也无法访问它们的属性。
扩展用例以隐含的方式修改基本用例。也可以说,基本用例定义了可以在其中添加扩展用例的模块化的框架,但是基本用例看不见特定的扩展用例。
基本用例自身应该是完整的,即基本用例应该是可理解并且有意义的,而不必引用任何扩展用例。但是基本用例并不独立于扩展用例,因为如果无法遵循扩展用例,就不能执行基本用例。

泛化关系:
用例的泛化关系是指一种从子用例到父用例
的关系,它指定了子用例如何特化父用例的所有特征和行为。
父用例可以特化形成一个或者多个子用例,这些子用例代表了父用例比较特殊的形式。尽管在大多数情况下父用例是抽象的,但是无论是父用例还是子用例这两者都不要求一定抽象。子用例继承父用例的所有结构、行为和关系。同一父用例的子用例都是该父用例的特例。这就是可适用于用用例的泛化关系。
当你发现两个或者多用例在行为,结构和目的方面存在共性时,就可以使用泛化关系。这种情况发生时,你可以用一个新的、通常也是抽象的用例来描述这些共有部分,该用例随后被子用例特化。








Tags: JAVA  

类别: 设计/页面 |  评论(0) |  浏览(730) |  收藏
发表评论
看不清楚,换一张