如何画出规范的 UML 用例图(下)

发表于:2024-1-04 09:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿里云云栖号    来源:知乎

  三、如何用 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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号