概述

用例图主要用在需求分析阶段,通过反映用户和软件系统的交互,描述系统的功能需求。
在本文中,我们来演示一下如何使用 PlantUML 进行用例图的绘制。

用例

在用例图中,最基本的元素就是用例和人(角色)了。我们先来看一下如何在一个用例图中表示一个用例:

  1. (First usecase)
  2. (Another usecase) as (UC2)
  3. usecase UC3
  4. usecase (Last\nusecase) as UC4

用例图 - 图1可以看到,在用例同中,表示一个用例的方式有如下两种:

  • 使用 usecase 标识
  • 用 () 进行包围

此外,还可以使用 as 将用例表示为一个别名。

角色

除了用例之外,我们来看一下如何表示一个角色:

  1. skinparam actorStyle hollow
  2. :First Actor:
  3. :Another\nactor: as Man2
  4. skinparam actorStyle awesome
  5. actor Woman3
  6. actor :Last actor: as Person1

用例图 - 图2与用例的表示方式一样,角色也有两种表示方式:

  • 使用 actor 进行标识
  • 使用 :: 进行包围。

同时,它也支持使用 as 将角色标识为一个别名。
此外,可以通过 skinparam 来设置角色的显示样式,支持 awesome(头像)和 hollow(透明人)等几种显示模式。

用例描述

如果想定义跨越多行的用例描述,可以用双引号将其裹起来。
还可以使用这些分隔符:

  1. —(横线)
  2. ..(虚线)
  3. ==(双横线)
  4. __(下划线)

并且还可以在分隔符中间放置标题。

  1. usecase UC1 as "You can use
  2. several lines to define your usecase.
  3. You can also use separators.
  4. --
  5. Several separators are possible.
  6. ==
  7. And you can add titles:
  8. ..Conclusion..
  9. This allows large description."
  10. actor C
  11. C --> UC1

用例图 - 图3PS:需要注意的是,当 as 后为 “” 包围时,”” 内部的内容为用户描述信息, as 之前的内容会作为用例的标识。

使用线框包围

在用例图中,可以使用线框来对一组角色和用例进行分组,示例如下:

  1. left to right direction
  2. actor Guest as g
  3. package Professional {
  4. actor Chef as c
  5. actor "Food Critic" as fc
  6. }
  7. package Restaurant {
  8. usecase "Eat Food" as UC1
  9. usecase "Pay for Food" as UC2
  10. usecase "Drink" as UC3
  11. usecase "Review" as UC4
  12. }
  13. fc --> UC4
  14. g --> UC1
  15. g --> UC2
  16. g --> UC3

用例图 - 图4

箭头连接

在用例图中,可以使用 —> 来连接角色和用例。
其中:

  • 横杠越多表示箭头越长;
  • 在箭头后增加一个冒号和文字可以连对箭头增加标签;
  • 默认情况下,箭头的竖直方向的,当一个 - 号时,会显示为水平连接;
  • 使用 . 来替换 - 时,箭头的显示样式从实线会变为虚线;
  • <— 时会翻转箭头方向进行显示;
  • 还可以使用在箭头中添加 left, right, up 或 down 等关键词来改变方向; ``` User -> (Start) User —> (Use the application) : A small label :Main Admin: —-> (Use the application) : This is\nyet another\nlabel :XXXX: ..> (Use the application) (Use the application) <— :aaa:

:user: -left-> (dummyLeft) :user: -right-> (dummyRight) :user: -up-> (dummyUp) :user: -down-> (dummyDown)

  1. ![](https://cdn.nlark.com/yuque/__puml/202e943b3efd6ea6b595ee3c06fc41c4.svg#lake_card_v2=eyJ0eXBlIjoicHVtbCIsImNvZGUiOiJVc2VyIC0-IChTdGFydClcblVzZXIgLS0-IChVc2UgdGhlIGFwcGxpY2F0aW9uKSA6IEEgc21hbGwgbGFiZWxcbjpNYWluIEFkbWluOiAtLS0-IChVc2UgdGhlIGFwcGxpY2F0aW9uKSA6IFRoaXMgaXNcXG55ZXQgYW5vdGhlclxcbmxhYmVsXG46WFhYWDogLi4-IChVc2UgdGhlIGFwcGxpY2F0aW9uKVxuKFVzZSB0aGUgYXBwbGljYXRpb24pIDwtLSA6YWFhOlxuXG46dXNlcjogLWxlZnQtPiAoZHVtbXlMZWZ0KVxuOnVzZXI6IC1yaWdodC0-IChkdW1teVJpZ2h0KVxuOnVzZXI6IC11cC0-IChkdW1teVVwKVxuOnVzZXI6IC1kb3duLT4gKGR1bW15RG93bikiLCJ1cmwiOiJodHRwczovL2Nkbi5ubGFyay5jb20veXVxdWUvX19wdW1sLzIwMmU5NDNiM2VmZDZlYTZiNTk1ZWUzYzA2ZmM0MWM0LnN2ZyIsImlkIjoiaGxpdFoiLCJtYXJnaW4iOnsidG9wIjp0cnVlLCJib3R0b20iOnRydWV9LCJjYXJkIjoiZGlhZ3JhbSJ9)此外,如果一个角色或者用例继承于另一个,那么可以用 <|--符号表示:

:Main Admin: as Admin (Use the application) as (Use) User <|— Admin (Start) <|— (Use)

  1. ![](https://cdn.nlark.com/yuque/__puml/91538ab55c89385b2201bb9841a54774.svg#lake_card_v2=eyJ0eXBlIjoicHVtbCIsImNvZGUiOiI6TWFpbiBBZG1pbjogYXMgQWRtaW5cbihVc2UgdGhlIGFwcGxpY2F0aW9uKSBhcyAoVXNlKVxuVXNlciA8fC0tIEFkbWluXG4oU3RhcnQpIDx8LS0gKFVzZSkiLCJ1cmwiOiJodHRwczovL2Nkbi5ubGFyay5jb20veXVxdWUvX19wdW1sLzkxNTM4YWI1NWM4OTM4NWIyMjAxYmI5ODQxYTU0Nzc0LnN2ZyIsImlkIjoiaHRmc1kiLCJtYXJnaW4iOnsidG9wIjp0cnVlLCJib3R0b20iOnRydWV9LCJjYXJkIjoiZGlhZ3JhbSJ9)在箭头表示中,可以定制箭头颜色和风格,基本的格式如下:

color;line.[bold|dashed|dotted];text:color

  1. ```
  2. actor foo
  3. foo --> (bar) : normal
  4. foo --> (bar1) #red;line.bold;text:red : red bold
  5. foo --> (bar2) #green;line.dashed;text:green : green dashed
  6. foo --> (bar3) #blue;line.dotted;text:blue : blue dotted

用例图 - 图5

注释

可以用 note left of , note right of , note top of , note bottom of 等关键字给一个对象添加注释。
注释还可以通过 note 关键字来定义,然后用.. 或者 — 等连接其他对象。

  1. :Main Admin: as Admin
  2. (Use the application) as (Use)
  3. User -> (Start)
  4. User --> (Use)
  5. Admin ---> (Use)
  6. note right of Admin : This is an example.
  7. note right of (Use)
  8. A note can also
  9. be on several lines
  10. end note
  11. note "This note is connected\nto several objects." as N2
  12. (Start) .. N2
  13. N2 .. (Use)

用例图 - 图6

构造类型

在用例图中,可以使用 << 和 >> 来定义角色或者用例的构造类型。

  1. User << Human >>
  2. :Main Database: as MySql << Application >>
  3. (Start) << One Shot >>
  4. (Use the application) as (Use) << Main >>
  5. User -> (Start)
  6. User --> (Use)
  7. MySql --> (Use)

用例图 - 图7

样式调整

在用例图中,可以使用 skinparam 来改变字体和颜色,例如:

  1. skinparam handwritten true
  2. skinparam usecase {
  3. BackgroundColor DarkSeaGreen
  4. BorderColor DarkSlateGray
  5. BackgroundColor<< Main >> YellowGreen
  6. BorderColor<< Main >> YellowGreen
  7. ArrowColor Olive
  8. ActorBorderColor black
  9. ActorFontName Courier
  10. ActorBackgroundColor<< Human >> Gold
  11. }
  12. User << Human >>
  13. :Main Database: as MySql << Application >>
  14. (Start) << One Shot >>
  15. (Use the application) as (Use) << Main >>
  16. User -> (Start)
  17. User --> (Use)
  18. MySql --> (Use)

用例图 - 图8除了通过 skinparam 来进行样式定制之外,还可以像箭头一样,在行内对角色、用例进行样式定制:

  1. actor a
  2. actor b #pink;line:red;line.bold;text:red
  3. usecase c #palegreen;line:green;line.dashed;text:green
  4. usecase d #aliceblue;line:blue;line.dotted;text:blue

用例图 - 图9