引言
在软件架构和业务流程建模的复杂世界中,清晰至上。虽然像类图这样的静态图向我们展示系统由什么组成,活动图则揭示系统如何运行。统一建模语言),它们捕捉了从启动到完成的控制流和数据流,是 UML 的动态脉搏。
可以将活动图视为一种复杂的流程图,专为企业逻辑而设计。它不仅仅列出步骤,还可视化决策点、并行流程、循环以及不同参与者或系统之间的交接。无论您是在记录用户的登录流程、规划订单履行管道,还是设计复杂算法,活动图都提供了一种通用语言,弥合了业务利益相关者与技术人员之间的鸿沟。

本指南重点介绍如何使用PlantUML创建这些强大的图表,PlantUML 是一种基于文本的绘图工具,支持版本控制、易于维护且保持一致的可视化效果。通过掌握下文所述语法和最佳实践,您将能够把抽象流程转化为清晰、可操作的可视化模型。
1. 核心概念与构建模块
每个稳健的活动图都是由一组特定的核心元素构成的。在编写任何代码之前,理解这些构建模块至关重要。

| 元素 | 形状 | 用途 |
|---|---|---|
| 开始节点 | ● | 标记流程的起点(必需) |
| 操作 / 活动 | ▭ 圆角 | 流程中的单个步骤或任务 |
| 决策 / 合并 | ◇ | 分支条件(是/否或多路) |
| 循环(重复) | ◇→◇ | 重复执行操作,直到满足条件 |
| 分叉 / 汇合 | — | 将流程分叉为并行分支并将它们重新汇合 |
| 泳道 | 表格列 | 按以下内容分组活动责任方 / 系统 / 部门 |
| 结束节点 | ◉ | 标记流程的终点(至少需要一个) |
关键术语
- 操作: 流程中的原子步骤,例如:
: 验证支付;. - 控制流: 连接各个操作的箭头,表示执行的顺序。
- 决策节点: 评估守卫条件以确定下一步采取哪条路径。
- 分支/汇合: 一个分支激活并发流(并行处理),而汇合将它们同步回单个线程。
- 泳道: 按职责划分图表。这对于展示部门、用户或微服务之间的交接非常有效。
2. 图表示例
以下是两个综合示例,展示如何将这些元素组合成功能性图表。
示例 A:功能完整的“订单处理”
功能:泳道、决策、循环和分支
该图表模拟了完整的电子商务订单生命周期,涉及客户、订单系统和仓库。
@startuml
<style>
element { MaximumWidth 150 }
start { Backgroundcolor #00695C }
stop { Backgroundcolor #C2185B }
activity{ Backgroundcolor #81D4FA; MaximumWidth 150 }
diamond { Backgroundcolor #FFB74D; MaximumWidth 80 }
arrow { LineColor #424242; Fontcolor #000000 }
swimlane{ Fontcolor #000000; FontSize 14 }
</style>
title 订单处理活动图
|#F0F8FF|客户|
start
:下订单;
|#FFF8E1|订单系统|
:接收订单;
:验证支付;
if (支付已批准?) then (是)
:确认订单;
else (否)
:通知客户;
stop
endif
|#F0F8FF|客户|
:查看确认;
repeat
:检查订单状态;
repeat while (是否要求更改?) 是 (是) 非 (否)
|#FFF8E1|订单系统|
if (库存中有商品?) then (是)
:发货;
else (否)
:通知客户延迟;
endif
|#E8F5E9|仓库|
fork
:打包商品 A;
fork again
:打包商品 B;
end fork
:发货;
|#F0F8FF|客户|
:接收订单;
stop
@enduml
示例 B:聚焦“登录尝试”
功能:决策、循环和提前终止
该图表专注于安全逻辑,处理有效凭证、失败尝试、重试和账户锁定。

@startuml
<style>
element { MaximumWidth 150 }
start { Backgroundcolor #00695C }
stop { Backgroundcolor #C2185B }
activity{ Backgroundcolor #81D4FA; MaximumWidth 150 }
diamond { Backgroundcolor #FFB74D; MaximumWidth 80 }
arrow { LineColor #424242; Fontcolor #000000 }
swimlane{ Fontcolor #000000; FontSize 14 }
</style>
title 登录尝试活动图
|#F0F8FF|用户|
start
:输入凭据;
|#FFF8E1|认证服务|
:验证凭据;
if (有效?) then (是)
:颁发会话令牌;
else (否)
:记录失败尝试;
repeat
:提示重试;
repeat while (剩余尝试次数?) 为 (是) 非 (否)
if (已锁定?) then (是)
:通知管理员;
stop
endif
endif
:授予访问权限;
stop
@enduml
3. PlantUML 语法速查表
使用本参考指南高效构建您自己的图表。
' 开始/停止(必需)
start
stop
' 简单操作(冒号语法 — 始终包含 ; )
:执行某操作;
' 判断(唯一有效形式)
if (条件?) then (是)
:执行操作 A;
else (否)
:执行操作 B;
endif
' 循环
repeat
:可重复操作;
repeat while (继续?) 为 (是) 非 (否)
' 并行分支/合并
fork
:并行路径 A;
fork again
:并行路径 B;
end fork
:合并并继续;
' 泳道(定义泳道,然后切换回来)
|#F0F8FF|销售|
:销售中的活动;
|#FFF8E1|IT|
:IT 中的活动;
4. 指南与内部规则
为确保您的图表可渲染、可读且专业,请遵守以下十条规则:
- 强制开始/停止: 始终以
start并确保所有可能路径都能到达stop。没有终点的图表是不完整的。 - 关闭判断: 始终用
endif结束判断块。否则图表将无法正确渲染。 - 配对循环: 每个
repeat必须具有匹配的重复执行。它们是不可分割的句法对。 - 冒号语法: 使用
:action;格式。请勿使用类似 的旧式简写-> 操作 ->. - 动词 – 名词命名: 使用动词 – 名词对清晰地命名操作(例如,“验证支付”而非仅“支付”),以提高可读性。
- 样式放置: 将
<style>块紧跟在@startuml,后跟标题. - 使用泳道: 对于涉及多个参与者、系统或部门的任何流程,请使用泳道来清晰映射职责。
- 限制宽度: 将活动宽度保持在约 150 像素以下(使用
MaximumWidth) 以防止标签变得难以阅读。 - 避免使用注释: 除非明确要求,否则避免使用注释元素,以保持图表整洁并专注于流程。
- 有意义的标签: 选择描述性的分支标签。虽然
是/否是可接受的,标签如已批准/已拒绝或有库存/无库存可提供即时上下文。
5. 技巧与提示
- 泳道颜色编码: 为每个泳道使用不同的背景色调(如示例所示)。这有助于提高可读性,并帮助观看者立即识别谁负责哪个步骤。
- 仅用于并行性的分支: 使用
分支仅当任务真正独立且可同时进行(例如,包装两个不同的物品)时使用。不要将分支用于顺序步骤。 - 显式建模重试逻辑: 将循环放置在失败情况之后以清晰地建模重试逻辑。这使错误处理路径对开发人员和测试人员一目了然。
- 自然阅读流程: 按从上到下的顺序排列操作。根据流程保持泳道从左到右的一致顺序(例如:客户 → 系统 → 仓库)。
- 复杂分支: 如果需要多路分支,可以使用
elseif,但请保持可读性。对于复杂逻辑,嵌套if语句通常更清晰。
6. 常见用例
活动图是适用于多个领域的多功能工具:
- 业务流程建模: 记录订单履行、员工入职或审批工作流。
- 用例细化: 将高层级用例扩展为逐步的行为模型。
- 算法设计: 记录复杂函数、服务或数据处理管道的控制流。
- 工作流分析: 可视化团队间的工作交接,以识别瓶颈或职责不清之处。
- 错误处理: 规划回退机制、重试循环和失败退出路径。
- 并发分析: 识别并行路径需要同步(分支/合并)的位置,以防止竞态条件。
- 模式合规性: 将实际实施的过程与目标标准或监管要求进行对比。
7. 谁应该使用它?
| 角色 | 为何能帮助他们 |
|---|---|
| 业务分析师 | 使用清晰的泳道记录并重新设计业务流程,以识别低效环节。 |
| 软件架构师 | 建模服务控制流,并将行为模型与结构图(类图/序列图)集成。 |
| 开发人员 | 在编码前设计和沟通复杂算法、状态逻辑及重试流程。 |
| 产品负责人/经理 | 使利益相关者在流程步骤、决策点和用户旅程上达成一致。 |
| 质量保证人员与测试人员 | 从分支、循环和并行路径中推导全面的测试场景。 |
| DevOps / SRE | 记录部署流水线、故障处理策略和运维手册。 |
| 学生 / 教育工作者 | 教授和学习结构化设计原则及 UML 行为建模。 |
✅ 分享图表前的快速检查清单
在最终确定图表之前,请过一遍以下质量保证检查清单:
- 是否
开始存在,且每条路径是否都到达结束? - 所有决策是否都用
endif? - 循环是否由匹配的
repeat/repeat while成对组成? - 分支是否用
fork/fork again打开,并用end fork? - 每个操作是否都以分号
;? - 当涉及多个参与者时,是否使用了泳道?
- “
<style>块和标题是否已正确放置在顶部?
结论
UML 活动图不仅仅是美观的图表;它们是沟通、分析和设计的重要工具。通过利用PlantUML,您能够以代码形式创建这些图表,使其具备版本控制能力、易于更新,并在整个组织中保持一致性。
无论您是在映射简单的用户登录流程,还是在描绘复杂的分布式供应链,其基本原则始终如一:定义起点和终点,明确决策点,尊重并行处理,并通过泳道。借助本指南提供的语法速查表和最佳实践,您现在已具备以精确和清晰的方式建模任何流程的能力。从今天开始绘制图表,将复杂的逻辑转化为可理解的流程。









