三、如何用 PlantUML 画出规范的用例图
PlantUML 是一个快速创建 UML 图形的组件或者可以说是语言,通过简单和直观的语言来定义图形。其在学习成本、效率、团队协同以及维护成本上都有比较大的优势,所以推荐使用 PlantUML 来画图。
用例图画起来其实很简单,主要就是四个要素,这里以系统用例为例,四个要素分别是系统、执行者、用例、关系。
3.1 系统
系统用一个矩形块表示,在 UML语法中是rectangle。如下:
@startuml
rectangle "xx 系统" {
}
@enduml
3.2 执行者
执行者是用火材人表示,在 UML 语法中是actor,主要有两种写法,如下:
@startuml
'系统执行者的两种写法'
actor Actor1
:Actor2:
'业务执行者的两种写法'
actor/ Actor3
:Actor4:/
@enduml
3.3 用例
用例是用一个椭圆表示。在UML 语法中是usecase ,业务用例和系统用例的两种写法如下:
@startuml
usecase/ " 业务用例 1" as UC1
'业务用例的第二种写法:() + 用例名称 + /'
(业务用例 2)/ as UC3
usecase "系统用例 1" as UC2
'系统用例的第二种写法:() + 用例名称 '
(系统用例 2)
@enduml
3.4 关系
系统用例图中关系主要有四种,分别是关联、包含、扩展、泛化。
3.4.1 关联
关联是执行者和用例之间的一种关系,一般用实线 + 实心箭头表示:
@startuml
actor Actor
rectangle "xx系统" {
usecase "系统用例 1" as UC1
}
Actor -> UC1
@enduml
这里有一点需要注意的是,虽然表示关联关系可以直接用实线如A-B这样表示,但是在用例图中我们尽量用实线+箭头表示,否则如下:
你无法区分 Actor1 和 Actor2 谁是主执行者谁是辅执行者,又或者两个都是主执行者?加上箭头后就非常容易区分,如下:
3.4.2 包含
包含是用例之间的一种关系,其中一个用例(称为基本用例)的行为包含了另一个用例(称为包含用例)的行为,用虚线箭头 + <<include>>表示,箭头指向包含用例。
包含关系意味着包含用例是基本用例中不可缺少的一个执行步骤,如果缺少了该包含用例,基本用例就会变得不完整,可类比类图中对象之间的组合关系。使用包含关系的两个场景:
· 当基本用例较复杂时,可以分解出一些包含用例;
· 当两个或以上的基本用例存在一些重复行为时,可以提炼出一个包含用例;
@startuml
'加入下面代码指定方向,使 UML 从左往右更直观'
left to right direction
actor Actor
rectangle "xx系统" {
usecase "基本用例" as UC1
usecase "包含用例 1" as UC2
usecase "包含用例 2" as UC3
}
Actor --> UC1
UC1 ..> UC2 : <<include>>
UC1 ..> UC3 : <<include>>
@enduml
上面我用了Actor --> UC1、UC1 ..> UC2,有兴趣的可以换成->、.>看看效果
3.4.3 扩展关系
扩展是用例之间的一种关系,其中一个用例(称为扩展用例)的行为增强了另一个用例(称为基本用例)的行为,用虚线箭头 + <<extend>>表示,箭头指向基本用例。
扩展用例是对基本用例的一种补充或强化,即使没有该扩展用例,对基本用例也不会产生直接影响,基本用例自身仍然是完整的。也就是说扩展用例是基本用例的一种可能的补充,如购买运费险就是对下单这一用例的扩展,买不买运费险都不影响下单。
@startuml
left to right direction
actor Actor
rectangle "xx系统" {
usecase "基本用例" as UC1
usecase "扩展用例" as UC2
}
Actor --> UC1
UC1 <.. UC2 : <<extend>>
@enduml
3.4.4 泛化
泛化关系也可以称作继承关系(类比类图中的泛化),用一个实线 + 空心箭头来表示,可以表示执行者间的关系也可以表示用例之间的关系。
@startuml
left to right direction
actor Actor
rectangle "xx系统" {
usecase "支付" as UC1
usecase "微信支付" as UC2
usecase "支付宝支付" as UC3
}
Actor --> UC1
UC1 <|-- UC2
UC1 <|-- UC3
@enduml
四、一个案例
这里我们以某银行的 App 为例,作为银行的一个系统我们对其进行分析:
1.系统:那自然是这个 App
2.系统执行者
a.主执行者:一般来银行办业务的客户都是主执行者,包括个人用户和企业用户;
b.辅执行者:银行,用户在 App 办理的所有业务都需要银行来配合执行;
3.系统用例:作为银行的线上业务,包含转账、查询余额、理财、贷款。
4.关系:这里需要注意的是转账过多有可能会超过限额,这个时候会提示超限;在办贷款业务之前,银行肯定会对用户的资产进行评估,这样才能决定其贷款额度。
@startuml
left to right direction
actor 客户 as Actor
actor 银行 as Actor2
rectangle "某银行App" {
usecase "转账" as UC1
usecase "查询余额" as UC2
usecase "理财" as UC3
usecase "贷款" as UC4
usecase "评估资产" as UC5
usecase "提示限额" as UC6
}
Actor <|-up- 个人用户
Actor <|-up- 企业用户
Actor --> UC1
Actor --> UC2
Actor --> UC3
Actor --> UC4
UC1 ----> Actor2
UC2 ----> Actor2
UC3 ----> Actor2
UC4 ----> Actor2
UC4 .left.> UC5 :<<include>>
UC1 <.down. UC6 :<<extend>>
@enduml
整体用例图如下:
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理