一个用例图是一种 UML 行为图,用于展示外部用户或系统如何与系统进行交互。它侧重于从参与者角度系统所执行的操作而非内部实现细节。

用例图在需求分析阶段尤为有用,因为它们提供了系统功能和范围的高层视图。
1. 用例图展示的内容

用例图通常包含以下内容:
-
系统边界——定义被建模系统内部包含的内容。
-
参与者——与系统交互的外部用户、组织、设备或系统。
-
用例——系统提供的目标或服务。
-
关联——参与者与用例之间的通信链接。
-
用例之间的关系——例如
<<包含>>和<<扩展>>. -
泛化——参与者或用例之间的继承关系。
用例图通常不展示以下内容:
-
算法步骤
-
数据库表
-
程序类
-
内部工作流
-
详细的用户界面布局
-
随时间推移的消息序列
这些细节更适合用活动图、类图、序列图或状态图来表示。
2. 核心概念
系统边界
系统边界是一个包围属于该系统的用例的矩形。
例如,在在线购物系统中:
+--------------------------------------+
| 在线购物系统 |
| |
| (浏览商品) |
| (下订单) |
| (支付) |
+--------------------------------------+
参与者保持在边界之外,因为它们位于系统外部。
边界有助于明确范围的系统。如果某项功能位于边界之外,则它不由被建模的系统实现。
参与者
一个参与者是指任何与系统交互以实现目标的外部实体。
参与者可以包括:
-
人类用户
-
外部应用程序
-
硬件设备
-
其他组织
-
时间或计划事件(当被建模为外部触发器时)
示例:
-
客户
-
图书管理员
-
支付网关
-
管理员
-
电子邮件服务
参与者代表一个角色,不一定是特定的人。例如,“客户”通常比“亚历克斯”更好。
参与者可以是:
-
主要参与者——发起交互以实现目标。
-
辅助参与者——为系统提供服务。
例如,客户可以发起“下订单”,而支付网关支持“处理支付”。
用例
一个用例表示系统提供的有意义的目标或服务。
良好的用例名称通常遵循以下形式:
动词 + 宾语
示例:
-
注册账户
-
搜索目录
-
提交申请
-
生成报告
-
取消预订
-
处理支付
用例应描述可观察的结果,而不是内部实现步骤。
优先选择:
下订单
而非:
验证订单对象
第二种描述的是内部操作,而非用户目标。
关联
关联是参与者与用例之间的通信链接。
它表明参与者参与或发起该用例。
客户 ---- (下订单)
关联通常不表示顺序、控制流或方向。如果交互的顺序很重要,请使用序列图或活动图。
3. 用例之间的关系
<<include>>
使用<<include>>当一个用例总是使用另一个用例时。
例如,下订单可能总是需要身份验证:
(下订单) ..> (验证客户) : <<include>>
基本用例依赖于被包含的用例。
使用include时:
-
该行为是强制性的。
-
该行为被多个用例复用。
-
提取该行为可提高清晰度。
示例:
(取款) ..> (验证卡片) : <<include>>
(查询余额) ..> (验证卡片) : <<include>>
两个用例都需要卡片验证。
<<extend>>
使用<<extend>>当额外行为是可选的,或条件性地插入到基本用例中时。
(应用折扣) ..> (下订单) : <<extend>>
折扣行为仅在满足资格条件的情况下发生。
使用extend时:
-
该行为是可选的。
-
它仅在特定条件下发生。
-
基础用例无需它即可完成。
示例:
-
“添加礼品包装”扩展“下订单”。
-
“申请退款”扩展“取消订阅”。
-
“发送促销邮件”扩展“完成注册”。
箭头从扩展用例指向基础用例。
泛化
泛化表示参与者或用例之间的“是一种”关系。
例如:
高级客户 --|> 客户
高级客户是客户的一种类型,并继承客户的所有交互。
当多个参与者共享共同行为时,参与者泛化可能很有用:
管理员 --|> 员工
图书管理员 --|> 员工
谨慎使用泛化。如果关系仅仅是“使用”或“参与”,关联通常更为合适。
4. 主要参与者和辅助参与者
考虑一个在线支付场景:
-
“客户”是主要参与者,因为他们发起购买。
-
“支付网关”是辅助参与者,因为它根据系统请求处理支付。
一个简单的模型可能如下所示:
客户 ---- (下订单)
(下订单) ---- 支付网关
这种区分很有用,因为它明确了谁从用例中受益,以及涉及哪些外部系统。
5. 如何识别用例
发现用例的一个实用方法是提问:
-
谁使用该系统?
-
每个参与者希望实现什么目标?
-
该系统提供哪些服务?
-
哪些事件会触发系统行为?
-
系统必须与哪些外部系统进行交互?
-
哪些行为是始终必需的?
-
哪些行为是可选的或条件性的?
对于每个参与者,列出他们的目标:
| 参与者 | 目标 | 可能的用例 |
|---|---|---|
| 客户 | 查找产品 | 搜索产品 |
| 客户 | 购买产品 | 下订单 |
| 客户 | 支付订单 | 进行支付 |
| 管理员 | 维护产品数据 | 管理目录 |
| 支付网关 | 授权支付 | 处理支付 |
目标应对参与者具有实际意义。避免将每个微小的系统操作都转化为用例。
6. 命名指南
使用清晰、以目标为导向的名称。
良好示例:
-
创建账户
-
更新个人资料
-
提交索赔
-
跟踪货运
-
批准请求
-
生成发票
避免使用模糊的名称:
-
系统处理
-
处理数据
-
用户功能
-
运行操作
避免过多的技术细节:
-
执行 SQL 查询
-
调用 REST 端点
-
实例化支付服务
这些可能是有效的实现步骤,但通常不适合作为高层级用例。
7. 示例:图书馆管理系统
假设图书馆系统支持以下功能:
-
会员搜索图书
-
会员借阅图书
-
会员归还图书
-
图书管理员管理目录
-
逾期通知
-
罚款支付处理
可能的参与者:
-
会员
-
图书管理员
-
通知服务
-
支付服务
可能的用例:
-
搜索目录
-
借阅图书
-
归还图书
-
计算罚款
-
缴纳罚款
-
管理目录
-
发送逾期通知
关系:
-
借书用例包含检查会员资格用例。
-
借书用例包含检查图书可用性用例。
-
归还图书用例包含计算罚款用例。
-
缴纳罚款用例与支付服务交互。
-
发送逾期通知用例与通知服务交互。
8. PlantUML 示例
以下 PlantUML 代码为图书馆系统创建了用例图:

@startuml
left to right direction
title Library Management System - Use Case Diagram
actor Member
actor Librarian
actor "Notification Service" as Notification
actor "Payment Service" as Payment
rectangle "Library Management System" {
usecase "Search Catalog" as UC_Search
usecase "Borrow Book" as UC_Borrow
usecase "Return Book" as UC_Return
usecase "Check Membership" as UC_CheckMember
usecase "Check Book Availability" as UC_CheckAvailability
usecase "Calculate Fine" as UC_CalculateFine
usecase "Pay Fine" as UC_PayFine
usecase "Manage Catalog" as UC_ManageCatalog
usecase "Send Overdue Notification" as UC_Notify
}
Member --> UC_Search
Member --> UC_Borrow
Member --> UC_Return
Member --> UC_PayFine
Librarian --> UC_ManageCatalog
Librarian --> UC_Borrow
Librarian --> UC_Return
Payment --> UC_PayFine
Notification --> UC_Notify
UC_Borrow ..> UC_CheckMember : <<include>>
UC_Borrow ..> UC_CheckAvailability : <<include>>
UC_Return ..> UC_CalculateFine : <<include>>
UC_Notify ..> UC_Return : <<extend>>
@enduml

9. 示例说明
参与者
actor Member
actor Librarian
actor "Notification Service" as Notification
actor "Payment Service" as Payment
该图建模了两个人类参与者和两个外部服务。
别名,例如as Notification使较长的名称在后续引用时更加简便。
系统边界
该矩形定义了系统的范围。矩形内的用例由图书馆系统提供。
参与者关联
这些关联表明,成员可以搜索目录并借阅图书。
在基本用例图中,箭头方向通常不具有语义重要性,其主要作用是使图表更易读。
包含关系
用例_借阅 ..> 用例_检查成员 : <<include>>
用例_借阅 ..> 用例_检查可用性 : <<include>>
借阅图书始终需要成员资格检查和可用性检查,因此这些被建模为包含用例。
扩展关系
这表明逾期通知行为是与归还图书相关联的附加行为。
然而,在真实的需求模型中,更自然的设计可能是将“发送逾期通知”与计划流程或参与者(如“图书馆调度员”)关联起来。最佳关系取决于实际的业务规则。
10. 更详细的用例规格说明
图表提供概览,但每个重要用例通常应有文本规格说明。
用例:借阅图书
| 字段 | 描述 |
|---|---|
| 名称 | 借阅图书 |
| 主要参与者 | 会员 |
| 辅助参与者 | 图书管理员 |
| 目标 | 借阅一本可借图书 |
| 前置条件 | 会员已注册;图书存在 |
| 触发器 | 会员请求借阅图书 |
| 主流程 | 系统验证会员资格,检查可用性,记录借阅,并更新图书状态 |
| 备选流程 | 图书不可用 |
| 备选流程 | 会员资格已过期 |
| 后置条件 | 借阅已记录,图书标记为已借出 |
用例图不应试图包含所有细节。该图提供地图,而规范提供行为。
11. PlantUML 语法参考
声明参与者
actor Customer
actor "Payment Gateway" as Gateway
声明用例
usecase "Place Order" as PlaceOrder
usecase "Process Payment" as ProcessPayment
创建系统边界
rectangle "在线商店" {
usecase "浏览商品" as Browse
usecase "下订单" as Order
}
连接参与者与用例
包含
扩展
参与者泛化
包分组
包可以直观地分组相关用例:
rectangle "银行系统" {
package "账户管理" {
usecase "开立账户" as OpenAccount
usecase "关闭账户" as CloseAccount
}
package "支付" {
usecase "转账" as TransferFunds
usecase "支付账单" as PayBill
}
}
注释
note right of PlaceOrder
客户在下单前必须经过身份验证。
end note
12. 改进图表布局
PlantUML 会自动布局图表,但多种技术可提升可读性。
控制方向
当参与者应出现在两侧、用例位于中心时,这通常非常有用。
其他常见方向包括:
使用别名
无需重复冗长的名称:
然后引用:
RegisterAccount ..> VerifyIdentity : <<include>>
分组相关用例
使用包或嵌套矩形来分隔功能区域:
package "订单管理" {
usecase "创建订单" as CreateOrder
usecase "取消订单" as CancelOrder
}
避免过多交叉
当线条交叉过多时,图表会变得难以阅读。你可以通过以下方式改进:
-
将相关参与者放置在靠近其用例的位置
-
将用例分组到包中
-
将一个大型图表拆分为多个小型图表
-
使用别名以实现清晰的引用
-
避免不必要的关系
13. 常见错误
将内部功能建模为用例
这通常过于技术化:
验证数据库连接
序列化请求
调用支付 API
优先选择具有外部意义的目标:
进行支付
提交申请
生成报告
将每个参与者都视为人
外部系统和设备也可以作为参与者:
-
支付网关
-
身份提供商
-
仓储系统
-
条码扫描器
-
通知服务
使用include表示可选行为
如果行为是可选的,请使用扩展 而不是 包含.
错误:
下订单 ..> 应用优惠券:<<包含>>
如果应用优惠券是可选的,请使用:
应用优惠券 ..> 下订单:<<扩展>>
使用 扩展 表示强制行为
如果某种行为总是发生,通常应使用 包含.
下订单 ..> 验证客户:<<包含>>
无意义地直接连接用例
两个用例之间的连线应表示有效的 UML 关系。避免随意连接,仅暗示用例之间存在某种关联。
创建一张巨型图表
用例图应在高层级上清晰传达信息。如果它包含数十个参与者和用例,请创建多个按子系统或业务领域组织的图表。
展示顺序
用例图不显示一个用例发生在另一个用例之前。如需展示顺序,请使用序列图或活动图。
14. 何时使用其他 UML 图表
用例图最适合表示系统范围和用户目标。当需要更多细节时,应将其与其他图表结合使用:
| 需求 | 有用图表 |
|---|---|
| 用户目标和系统范围 | 用例图 |
| 详细工作流 | 活动图 |
| 交互顺序 | 序列图 |
| 静态领域结构 | 类图 |
| 对象生命周期 | 状态机图 |
| 部署架构 | 部署图 |
| 组件与依赖关系 | 组件图 |
15. 推荐的建模过程
-
定义系统边界。
-
识别所有外部参与者。
-
识别每个参与者的目标。
-
将这些目标转换为用例。
-
将参与者与其参与的用例连接起来。
-
识别必须的可复用行为,并使用以下符号对其进行建模:
<<include>>. -
识别可选或条件行为,并使用以下符号对其进行建模:
<<extend>>. -
仅在存在真实的“是-a”关系时才添加泛化。”
-
与利益相关者一起审查该图。
-
为重要用例添加文本规范。
-
如果图表变得拥挤,请将其拆分。
16. 紧凑的 PlantUML 模板
您可以将其作为起点:

@startuml
left to right direction
title 系统用例图
actor 用户
actor "外部系统" as ExternalSystem
rectangle "系统名称" {
usecase "主要用户目标" as MainGoal
usecase "所需共享行为" as RequiredBehavior
usecase "可选行为" as OptionalBehavior
}
用户 --> MainGoal
ExternalSystem --> MainGoal
MainGoal ..> RequiredBehavior : <<include>>
OptionalBehavior ..> MainGoal : <<extend>>
@enduml 核心原则是建模外部可见的目标而非内部实现细节。一个优秀的用例图能让人立即理解系统边界、参与者、功能以及重要依赖关系。
参考资料
- 如何在 Visual Paradigm 中创建 UML 用例图: 涵盖参与者创建、系统边界、关联关系以及包含/扩展关系的分步指南。
- 2026 年用例图终极指南: 全面讲解核心符号、最佳实践以及 AI 驱动的建模工作流。
- 连接需求与设计:用例建模实用指南: 展示 PlantUML 实现与核心建模概念的实际案例研究。
- 掌握 AI 驱动的用例图:简短教程: 关于如何使用 AI 驱动工具从领域描述生成并优化用例图的教程。
- 实践二:动手进行用例建模: 手动与借助 AI 构建图书馆管理系统图的动手练习。
- 轻松掌握用例图: 概述 Visual Paradigm 的用例图功能,包括事件流编辑器和活动图生成。









