UML 用例图展示了系统提供的内容以及与之交互的对象(人或事物)。在“图即代码”的工作流中,图的源文件是纯文本:编辑文本、渲染图表,并将源文件与项目文档一同保存。

PlantUML 支持用例图。Visual Paradigm 的 VPasCode 编辑器提供 PlantUML 编辑器和预览功能,并具备 AI 辅助的图表生成与编辑特性。
1. 用例图传达的内容
用例图侧重于系统范围和用户目标而非工作流的逐步操作细节。图表通常包含:

-
系统边界:一个矩形框,用于命名被建模的系统。
-
参与者:系统外部的角色,与系统进行交互。参与者可以是人、组织、设备或外部系统。
-
用例:系统提供的一种能力或目标,通常以椭圆形表示,并用动词短语命名,例如“下订单”。
-
关联:一条表示参与者参与某个用例的连线。
-
用例关系:包含、扩展和泛化。
参与者代表角色,而非具体个人。如果外部支付服务与所建模的系统进行交互,它也可以被视为一个参与者。
用例图有助于明确系统范围、与利益相关者讨论需求、识别外部依赖,并为开发和测试提供统一的概览。当需要详细信息(如前置条件、主要步骤、备选流程和结果)时,应将用例图与书面用例描述配合使用。
2. 关系一览

-
参与者与用例的关联:一条表示交互的普通连线。
-
<<包含>>:包含用例始终使用被包含的行为。虚线箭头指向从包含用例指向被包含用例。例如,下订单可能始终包含支付授权。 -
<<扩展>>:扩展用例在特定条件下为基本用例添加行为。虚线箭头指向从扩展用例到基础用例。例如,应用促销可能会扩展下单操作。 -
泛化:专用参与者或用例继承自更通用的元素。带空心三角形的实线指向通用元素.
一个有用的区分:include 表示必需行为;extend 表示条件性附加行为。
3. PlantUML 基础
PlantUML 图表以@startuml开始,以@enduml声明参与者使用actor,声明用例使用usecase,声明系统边界使用rectangle。别名使元素在关系中的引用更加便捷。

@startuml
left to right direction
actor Customer
rectangle "Online Store" {
usecase "Browse products" as Browse
usecase "Place order" as Place
}
Customer --> Browse
Customer --> Place
@enduml
从左到右方向指示 PlantUML 将图表水平布局。随着图表的变化,PlantUML 可能会调整精确的布局。
4. 示例:基本在线商店

@startuml
left to right direction
actor Customer
actor Administrator as Admin
rectangle "Online Store" {
usecase "Browse products" as Browse
usecase "Place order" as Place
usecase "Track shipment" as Track
usecase "Manage catalog" as Manage
}
Customer --> Browse
Customer --> Place
Customer --> Track
Admin --> Manage
@enduml
客户可以浏览商品、下单并跟踪发货。管理员负责管理商品目录。该图表有意省略了订单处理内部的步骤。
5. 示例:include 和 extend
假设下单总是需要支付授权,而应用促销则是可选且有条件的。

@startuml
left to right direction
actor Customer
rectangle "Online Store" {
usecase "Place order" as Place
usecase "Authorize payment" as Payment
usecase "Apply promotion" as Promotion
}
Customer --> Place
Place ..> Payment : <<include>>
Promotion ..> Place : <<extend>>
@enduml
该Place ..> Payment箭头表示“下单”包含必需的支付行为。该Promotion ..> Place箭头表示当满足条件时,“应用促销”扩展了“下单”。
在用例描述或注释中记录该条件——例如,“客户输入有效的促销代码”。
6. 示例:参与者泛化与外部系统
专用参与者从更通用的参与者继承交互。当外部服务与系统交互时,它们也可以作为参与者。

@startuml
left to right direction
actor "User" as User
actor "Registered customer" as Customer
actor "Payment gateway" as Gateway
Customer --|> User
rectangle "Online Store" {
usecase "Browse products" as Browse
usecase "Place order" as Place
usecase "Process payment" as Pay
}
User --> Browse
Customer --> Place
Place ..> Pay : <<include>>
Gateway --> Pay
@enduml
“已注册客户”是“用户”的特化版本,并继承通用用户交互。支付网关位于在线商店边界之外,但参与支付用例。
7. 示例:用例泛化
泛化可用于表示更广泛用例的特化版本。空心三角形指向通用用例。

@startuml
left to right direction
actor Customer
rectangle "Payment System" {
usecase "Make payment" as Payment
usecase "Pay by card" as Card
usecase "Pay by bank transfer" as Transfer
}
Customer --> Card
Customer --> Transfer
Card --|> Payment
Transfer --|> Payment
@enduml
当特化用例共享一个通用目标但存在实质性差异时使用此方法。如果变体仅仅是条件步骤,则<<扩展>>关系或书面用例描述可能更清晰。
8. 在 VPasCode 中工作
一个实用的工作流程:

-
定义范围。确定系统边界、参与者角色以及每个角色希望实现的目标。
-
创建草稿。直接编写 PlantUML,或要求 AI 助手生成用例图。
-
审查代码并预览。确认参与者位于系统边界之外,用例位于边界之内,且箭头指向正确方向。
-
优化模型。替换模糊的名称,移除实现细节,仅在关系反映真实需求时添加。
-
请求针对性的 AI 编辑。例如:“添加一个外部支付网关参与者,并使用包含关系展示所需的支付交互。其余部分保持不变。”
-
与利益相关者进行验证。检查图表是否反映了系统的实际范围和用户目标。
-
保存源代码。保留
.puml将文本与项目文档一起保存,或纳入版本控制系统。在需要时导出图像以用于文档或演示文稿。
AI 辅助示例提示
为在线商店创建 PlantUML 格式的 UML 用例图。包含系统边界、客户和管理员角色,以及浏览商品、下订单、跟踪发货和管理目录等目标。将支付授权显示为下订单所必需的包含行为。将应用促销显示为下订单的条件扩展行为。仅返回有效的 PlantUML 源代码。
将 AI 生成的代码视为初稿。在使用前,请审查角色、边界、关系及业务假设。
9. 常见陷阱

-
将内部组件建模为角色:角色应为与主题交互的外部角色或系统。
-
将用例命名为实现任务:优先使用“跟踪发货”而非“调用跟踪 API”。”
-
使用
<<include>>来表示可选行为:Include 表示基本用例所必需的行为。 -
反转关系箭头:Include 指向被包含的用例;extend 指向基本用例。
-
在一个图表中堆砌过多细节:使用高层级图表表示范围,然后使用单独的图表或文本描述详细场景。
-
假设渲染成功即意味着模型正确:PlantUML 可能渲染出仍未能准确反映需求的图表。
10. 审查清单
在分享图表前,请确认:

-
系统边界清晰。
-
每个角色均为外部角色并代表一种职能。
-
用例名称描述了有意义的目标。
-
角色关联反映了实际交互。
-
Include 关系是必需的;extend 关系是条件性的或有其他合理依据的。
-
泛化箭头指向通用角色或用例。
-
图表在其预期尺寸下保持可读性。
-
由人工智能生成的假设已与熟悉需求的人员进行了审查。












