关于 Data Flow Diagrams
一项使用数据流图(DFD)描述系统内数据移动方式的技能,适用于系统分析、集成设计、隐私审查和安全审计,并说明标准符号与分层方法。
主要功能
- 01DFD 实体、处理、存储与流
- 02绘制 Level 0 上下文图
- 03拆分 Level 1 处理流程
- 04数据守恒与连接规则
- 05区分 DFD 与流程图
适用场景
- 01梳理遗留系统的数据流
- 02追踪个人数据的去向
- 03规划系统集成
- 04审查安全信任边界
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ danhvb/ my-ba-skills --skill data-flow-diagrams安装后在 Claude Code 中输入/data-flow-diagrams确认已加载。
详细介绍
数据流图(DFD)技能
目的
将数据在系统中的流动过程可视化。DFD 展示系统如何处理数据,而流程图展示的是控制流(执行顺序)。
适用场景
- 理解旧系统。
- 分析数据隐私(个人身份信息会流向何处?)。
- 设计集成方案。
- 安全审计(识别信任边界)。
DFD 表示法(Gane & Sarson 或 Yourdon)
- 处理过程(圆形/圆角矩形):转换数据。
- 格式:动词 + 名词。
- 示例:
Calculate Tax、Validate User。
- 外部实体(方形):数据的来源或接收方(超出范围)。
- 示例:
Customer、Bank API、Admin。
- 示例:
- 数据存储(开口矩形/平行线):静态存储的数据。
- 示例:
Customer DB、Orders File。
- 示例:
- 数据流(箭头):数据包的流动。
- 标签:
Order Details、Invoice。
- 标签:
DFD 层级
第 0 层:上下文图
范围:将整个系统视为一个处理过程。 展示内容:系统边界及其与外部环境的交互。
示例:
graph LR
Customer[Customer] -->|Order| System((Order Mgmt System))
System -->|Invoice| Customer
System -->|Payment Info| Bank[Bank]
Bank -->|Confirmation| System
Warehouse[Warehouse] -->|Stock Levels| System
System -->|Shipping Request| Warehouse
注意:第 0 层通常不展示数据存储,除非这些存储由外部系统共享。
第 1 层:系统分解
范围:将“一个处理过程”拆分为多个主要子处理过程(3–7 个气泡)。 展示内容:这些处理过程使用的数据存储。
示例:
- 处理过程 1.0:验证订单
- 输入:订单(来自客户)
- 输出:有效订单
- 处理过程 2.0:计算总额
- 输入:有效订单 + 价格(来自产品数据库)
- 输出:总金额
- 处理过程 3.0:处理付款
- 输入:总金额 + 卡信息
- 输出:收据
方法规则
- 数据守恒:处理过程不能凭空创建数据(必须有输入)。处理过程不能消耗数据却没有输出(黑洞)。
- 禁止直接连接:
- 实体 ↔ 实体(超出范围)
- 实体 ↔ 数据存储(必须经过处理过程)
- 数据存储 ↔ 数据存储(必须经过处理过程)
- 标注:所有箭头都必须标注流动的数据(而非动作)。
DFD 与流程图对比
| DFD | 流程图 |
|---|---|
| 关注数据 | 关注控制流/执行顺序 |
| “Calculate Tax” | “If Tax > 0 Then...” |
| 没有循环/分支 | 包含循环/判断 |
| 默认并行/异步 | 默认顺序执行 |
创建 DFD 的步骤
- 识别实体:谁发送/接收数据?(客户、经理、API)。
- 识别处理过程:会发生哪些逻辑操作?(检查库存、保存用户)。
- 识别数据存储:信息存放在哪里?(文件、表)。
- 绘制第 0 层:将实体连接到“系统”。
- 展开至第 1 层:将系统拆分为子处理过程。
- 验证:检查数据守恒及是否存在缺失的数据流。
最佳实践
- 保持逻辑性:无需考虑物理实现(例如,在逻辑 DFD 中,“纸质文件”和“SQL DB”并无区别)。
- 为处理过程编号:1.0、2.0、3.0。子处理过程:1.1、1.2。
- 控制复杂度:如果某一层包含超过 7 个处理过程,则进一步分解(第 2 层)。
工具
- Visio。
- Lucidchart。
- Draw.io。
- Mermaid(图表样式)。
评论
支持 Markdown