系统流程图栏目 ·

系统流程图怎么画:从文字描述到可交付流程图的 6 步

系统流程图怎么画:从文字描述到可交付流程图的 6 步。把“文字流程”变成可交付的系统流程图:边界定义、节点命名、分支条件、异常重试、验收清单与导出交付(PNG/draw.io),并附文本生成流程图工具入口。

先给结论:能“交付”的流程图,不靠画得漂亮,靠三件事写得硬

很多人说“我会画流程图”,但一到评审/交接就翻车:

  • 需求方看不懂:不知道从哪里开始、到哪里结束
  • 研发对不上:关键分支条件没写清,异常路径被省略
  • 测试没法验:每一步的输入/输出/成功失败判定不明确

所以这篇文章讲的不是“怎么把图画出来”,而是怎么把一段文字描述,变成一张可评审、可落地、可验收的系统流程图

能交付的流程图通常具备三件事:

  1. 边界清楚:触发条件、开始点、结束点、范围外的事情写明白
  2. 分支可验证:每个判断节点的出边都有明确条件(是/否、成功/失败、存在/不存在、超时/未超时……)
  3. 异常不缺席:至少覆盖“失败怎么办、重试/回滚/补偿怎么走、人工介入在哪里”

如果你已经把流程用文字列出来了,不想再花时间对齐排版,可以用“文本 → 自动排版”的方式快速得到一张可读的流程图,然后把精力用在逻辑上:

下面进入正题:6 步把文字描述变成可交付流程图


第 1 步:写清“边界四件套”(这是流程图最常见的缺失项)

在你画任何节点之前,先用 3~5 句话把边界写下来。你可以按这四个维度写,写完就能立刻发现“这流程其实还没定义清楚”。

边界四件套:

  • 触发(Trigger):谁在什么条件下触发?(用户点击/定时任务/上游回调/消息到达)
  • 输入(Input):流程开始时系统拿到了什么?(参数、上下文、权限、前置状态)
  • 输出(Output):这个流程要交付什么结果?(订单状态、支付结果、通知、数据落库)
  • 结束(End):什么情况下算“结束”?有没有多个结束态?(成功结束、失败结束、人工处理中止)

同时,顺手写一句范围外:哪些事情不在本流程里(例如“风控审核属于另一个子流程”)。

为什么这一步很值钱?因为它会逼你把“流程图的阅读对象”也想清楚:

  • 给业务/产品评审:边界和例外尤其重要
  • 给研发落地:输入/输出与状态机一致最重要
  • 给测试验收:结束条件与失败路径最重要

第 2 步:把文字拆成“节点清单”,先追求完整,再追求优雅

这一步的目标不是“排版”,而是把信息从自然语言里提炼出来。

2.1 节点命名用一个简单规则:动词 + 名词(尽量可执行)

同一个动作在不同人眼里可能是不同意思,所以节点名要尽量可执行、可落地。

推荐:

  • 发送验证码
  • 校验验证码
  • 创建用户
  • 生成订单
  • 冻结库存
  • 记录日志

不推荐(太虚/太大/不可验证):

  • 处理请求
  • 进行校验
  • 系统处理
  • 完成下单

2.2 节点数量控制:7~15 个“主节点”最适合评审

  • 少于 7 个:信息不够,通常缺少异常/分支/结束态
  • 多于 15 个:阅读负担太高,建议拆成子流程(例如“支付”拆出去)

一个好用的判断标准:

  • 这张图能不能在 2 分钟内讲清楚?
  • 每个节点能不能对应到一个接口/一个函数/一个人工动作?

如果不能,就说明粒度需要调整。


第 3 步:把“分支”写成可验证的判断条件(这是流程图的灵魂)

流程图之所以比文字更强,是因为它强迫你把分支写清楚。

3.1 判断节点要回答两件事

  1. 判断的依据是什么?(状态、返回码、是否存在、金额是否足够、是否超时……)
  2. 每条出边对应哪一个条件?(成功/失败、是/否、命中/未命中)

你会发现很多“看起来正确”的流程图,其实无法落地:因为判断写成了“条件不明的情绪”。

反例(不可验):

  • 是否异常?
  • 是否有问题?
  • 是否成功?(成功的定义是什么?返回码?状态?)

更可落地的写法:

  • 返回码 == 0?
  • 用户状态 ∈ {已实名, 未实名}?
  • 库存冻结结果:成功 / 失败(失败原因:不足 / 超时 / 并发冲突)

3.2 给每个判断节点做“覆盖性检查”

最常见的坑是:判断节点只画了“是”,没画“否”;或者只画了“成功”,没画“失败”。

你可以用这几个问题做自查:

  • 是否把所有可能都覆盖了?(至少二分:是/否,成功/失败)
  • 是否存在“默认走向”?如果有,默认条件是什么?
  • 是否有“既不是 A 也不是 B”的情况?(比如三态:成功/失败/超时)

当流程里出现“超时”“重试”“幂等”这些词时,覆盖性检查尤其重要。


第 4 步:用“连线句子”把图写出来(先写文字连线,再画图会快很多)

如果你直接上画布,很容易把时间浪费在拖拽对齐、线条打结上。

更高效的方式是:先把连线关系写成一组短句,再把它变成图。

推荐格式(读起来像一句话):

  • 源节点 -条件→ 目标节点

这样做的好处是:

  • 你会被迫把条件写出来
  • 你能很快发现“某个节点只有出边没有入边(悬空)”或“走不出去(死路)”
  • 你能更容易和同事在 IM/PRD 里讨论(不用截图来回改)

一个很小的例子(只演示结构,不当模板库)

假设你在画“用户注册 + 登录”的主流程,连线可以先写成这样(示意):

  • 开始 → 输入手机号
  • 输入手机号 → 发送验证码
  • 发送验证码 -发送成功→ 输入验证码
  • 发送验证码 -发送失败→ 提示失败原因
  • 输入验证码 → 校验验证码
  • 校验验证码 -通过→ 创建/登录用户
  • 校验验证码 -不通过→ 提示错误并允许重试
  • 创建/登录用户 → 结束

注意这里没有展开“创建用户的内部细节”,因为那应该是子流程。

如果你想把这些连线快速排版成图,并导出给同事(PNG)或给研发(draw.io),可以直接用文本生成:


第 5 步:补齐“交付级别”的三类信息:角色/状态/异常

如果你的流程图只是“顺序步骤 + 一两个判断”,它很可能只适合课堂作业,不适合系统交付。

交付级别通常要补齐三类信息:

5.1 角色(谁在做)——决定你是否需要泳道

当流程里出现以下情况,建议引入泳道(或至少在节点里标注角色):

  • 同一个流程跨多个系统(前端/后端/第三方)
  • 同一个流程跨多人(用户/客服/财务)
  • 同一步骤的执行主体会变化(自动/人工)

最小化做法:在节点名前加前缀即可,例如:

  • 【用户】提交申请
  • 【系统】校验参数
  • 【人工】复核资料

泳道不是为了“好看”,是为了避免评审时出现这种争论:

  • “这一步是前端做还是后端做?”
  • “通知是我们发还是第三方回调?”

5.2 状态(处于什么状态)——让流程和状态机对齐

业务系统里很多核心对象都有状态:订单、退款单、审批单、工单……

流程图如果只画动作,不画状态,研发落地和测试验收会很痛苦。建议至少做到:

  • 关键节点能对应到关键状态变化
  • 结束节点对应到终态(例如“已完成/已关闭/处理中止”)

一个实用技巧:

  • 把对象名写出来:订单/退款单/审批单
  • 在节点旁边用括号标状态:生成订单(待支付)

这会让“流程”和“数据库字段/枚举值”更容易对齐。

5.3 异常(失败怎么办)——至少覆盖三条通用失败路径

在系统里,“异常路径”往往比“成功路径”更容易出事故。

建议你至少覆盖下面三类:

  1. 校验失败:参数不合法/权限不足/状态不允许
  2. 外部失败:第三方返回失败/超时/网络异常
  3. 并发与幂等:重复提交/回调重复/并发修改冲突

每一类异常都要回答:

  • 失败后用户看到什么?(提示/重试/引导人工)
  • 系统做什么?(记录、告警、重试、补偿、回滚)
  • 状态落在哪?(失败终态/处理中态/待人工态)

如果你不想把异常全画在主图里(会很乱),可以用两种方式:

  • 主图只画“异常出口”到一个节点:异常处理/补偿,然后另画一张子流程图
  • 或者在节点旁边用注释列出异常分类(但不要把注释写成一整段长文)

加一段“交付加分项”:让流程图直接可用于研发落地的 3 个对齐方法

很多流程图在评审时能讲清楚,但到了研发阶段仍然会出现反复确认。原因通常不是“图不够好看”,而是图里的信息没和实现的关键物料对齐。下面这 3 个对齐方法不需要你新增复杂画法,但能显著减少沟通成本。

方法 1:把关键节点对齐到“接口边界”(这能避免前后端互相甩锅)

对于每个主节点,你可以问自己一句话:**这一步的执行边界在哪里?**常见边界有三种:

  • 前端动作(仅 UI/交互):例如“展示表单/输入校验提示”
  • 后端接口(一次请求-响应):例如“创建订单接口/提交审批接口”
  • 异步任务/消息消费:例如“回调处理/定时补偿/发通知”

当你把节点对齐到边界后,就能顺手补齐三个落地信息(不用写很长):

  • 输入:依赖哪些字段/上下文(例如 userId、订单号、幂等键)
  • 输出:成功时返回什么,失败时返回什么(返回码/错误类型)
  • 责任方:谁负责实现/谁负责告警(团队或系统)

这样做的价值是:评审时大家能直接对齐“这一步到底算谁的工作”,不会在会后再开二次对齐会。

方法 2:把流程关键节点对齐到“状态变化点”(测试会非常感谢你)

如果你的流程涉及核心对象(订单、退款单、审批单、对账单……),建议在流程图里明确 3~5 个状态变化点。你可以用“动作 + 状态”的方式标注:

  • 生成订单(待支付)
  • 支付回调入库(已支付/支付失败)
  • 发货完成(已发货)
  • 超时关闭(已关闭)

然后做一个非常实用的检查:

  • 每个状态变化点是否都有触发条件?(回调到达、任务扫描、人工操作)
  • **状态是否可逆?**如果可逆,逆向路径是什么(撤销/回滚/补偿)
  • 是否存在“中间态”(处理中/待人工),它的退出条件是什么

你会发现,一旦你把状态写出来,很多“文字描述里被忽略的边界”会立刻暴露:

  • “处理中”到底什么时候会结束?
  • “失败”是终态吗?还是可以重试后成功?
  • 超时关闭后,是否允许继续支付?(这就是常见事故点)

方法 3:把异常路径对齐到“可观测性”(日志/告警/审计)

系统落地时,异常不只是“提示用户”,还需要可观测性,否则出了问题你只能靠猜。

建议你在这几个位置至少留一个“观测点”意识(不必画成节点,写在注释也行):

  • 跨系统调用:调用第三方/上游下游接口
  • 金额/库存/权益变化:涉及资产的地方
  • 状态变化:从一个枚举切换到另一个枚举
  • 人工介入:客服/财务/运营审核

每个观测点你只需要想清楚:

  • 这一步失败时,我要靠什么定位?(日志字段/traceId/业务单号)
  • 需要告警吗?阈值是什么?(例如连续失败/超时率异常)
  • 需要审计吗?谁做了什么动作要留痕?

如果你把这三类对齐做完,你的流程图基本就能直接变成研发任务拆分的依据。


第 6 步:交付前用“验收清单”自查(避免上线后才发现逻辑洞)

画完流程图并不等于完成。真正要交付时,你需要像测试一样对流程图做验收。

6.1 结构验收(流程是否闭环)

  • 是否至少一个开始节点?是否存在多个开始?(如果有,是否合理)
  • 是否存在至少一个结束节点?结束节点是否都是合理的终态?
  • 是否存在死循环?如果有循环,退出条件是什么?
  • 是否存在悬空节点(只有入边没有出边 / 只有出边没有入边)?
  • 是否存在“跳跃式连线”(从很早直接跳到很后)导致阅读困难?

6.2 逻辑验收(分支是否可验证)

  • 每个判断节点的每条出边是否都有明确条件?
  • 条件是否互斥且覆盖?(不会出现“两个条件都成立”或“都不成立”)
  • 判断依据是否可观测?(能通过返回码/字段/状态判断,而不是“主观感觉”)

6.3 落地验收(研发/测试能不能用)

  • 每个关键节点是否能对应到一个接口/任务/人工动作?
  • 是否明确了失败时的用户提示与系统行为?
  • 是否标出关键数据点?(例如订单号、退款单号、审批单号)
  • 是否标出日志/审计点?(至少在跨系统、状态变化、金额变化处)

如果你把这三类验收做完,你的流程图基本就能“拿去用”了。


常见反例:看起来没问题,但一落地就会出事

下面这些问题很常见,你可以对照自己的图快速排雷:

  1. 把“说明文字”塞进节点名:节点名变成一段话,图马上不可读。解决:把说明挪到注释,节点保持短。
  2. 分支条件写成“成功/失败”但不定义成功:解决:写清返回码、状态、字段。
  3. 主流程只画成功路径:解决:至少补齐“校验失败/外部失败/超时”出口。
  4. 状态变化没标:解决:关键对象至少标 3~5 个核心状态,让测试知道该验证什么。
  5. 一个节点承担多个动作:例如“校验并创建并通知”。解决:拆成 2~3 个节点,每个节点只做一件事。

FAQ:画系统流程图时经常被问到的问题

Q1:流程图到底画到什么粒度才算合适?

看用途。

  • 用来“讲清楚业务逻辑”:画到业务动作层(7~15 个主节点),复杂部分拆子流程。
  • 用来“指导研发实现”:关键节点要能映射到接口/任务/状态变化,异常路径不能缺。
  • 用来“测试验收”:每个判断要可验证,结束态要明确,必要时补充数据点与日志点。

一句话:能让下一位接手的人不需要再问你 10 个问题,粒度就差不多了。

Q2:需要每张图都画泳道吗?

不需要。只有当“谁在做”会引发误解时,泳道才值得引入。

如果流程主要发生在同一个系统里,角色单一,用节点前缀标注(【系统】/【用户】)就够了。

Q3:异常路径画太多会不会让图很乱?

会,所以建议你做“主图 + 子图”的分层:

  • 主图保留关键失败出口(例如“进入异常处理/补偿”)
  • 子图展开重试/告警/人工介入/补偿动作

这样既能交付,也不会一张图塞满。

Q4:导出交付时用 PNG 还是 draw.io?

  • PNG:适合发群里、写 PRD、做评审,人人看得见
  • draw.io:适合研发维护、版本迭代、二次编辑

交付时最稳妥的是:PNG + 可编辑源文件(draw.io 或其他源格式)一起给。


最后:把“画图时间”省下来,留给逻辑与验收

系统流程图最贵的不是画布上的对齐,而是你对边界、分支、异常与状态的思考。

如果你已经有文字步骤,建议用“文本 → 自动排版”快速生成图,再按本文的清单补齐逻辑细节、做验收。

需要的话可以直接从这里开始:

另外,如果你想把“文字版流程”写得更像一份可交付的规格说明,也可以把你现有的步骤粘进去试试: