数据流图(DFD)是系统分析师理解、设计和记录复杂信息系统时所依赖的基础工具。它们以可视化方式展示数据在系统中的流动过程,突出显示处理过程、数据存储以及外部交互。本指南概述了构建准确且实用的数据流图所需的基本原则、符号和方法论,且无需依赖特定的专有工具。

什么是数据流图?📊
数据流图是信息系统中数据流动的图形化表示。与侧重于控制流和逻辑的流程图不同,数据流图关注的是数据从输入到输出的转换过程。它们通过将系统分解为更小、更易管理的部分,帮助分析师梳理系统的功能需求。
数据流图不会详细展示时间顺序或决策逻辑。相反,它们回答一些关键问题,例如:
- 数据来自何处?
- 数据在系统内部会发生什么变化?
- 数据处理后会去往何处?
- 数据存储在何处?
通过可视化这些要素,分析师可以在编码开始前识别出瓶颈、冗余流程和安全漏洞。数据流图所使用的符号通常遵循尤尔登和德马科的标准,尽管也存在一些变体。
为何系统分析师需要数据流图💡
对系统分析师而言,清晰性至关重要。利益相关者常常难以理解技术术语,而可视化图表则弥合了业务需求与技术实现之间的差距。数据流图在分析阶段发挥着多项关键作用:
- 沟通: 它们充当了业务利益相关者与技术团队之间的通用语言。
- 文档记录: 它们为未来的系统维护提供了系统行为的永久记录。
- 分析: 它们揭示了在初步访谈中被忽略的缺失流程或数据存储。
- 验证: 它们有助于验证系统是否满足既定需求。
| 优势 | 对项目的影响 |
|---|---|
| 需求验证 | 通过确认范围内的内容和范围外的内容,减少范围蔓延。 |
| 系统设计 | 指导数据库设计和API架构。 |
| 培训 | 帮助新团队成员快速理解系统逻辑。 |
| 调试 | 有助于将数据错误追溯到其源头。 |
核心组件和符号 🛠️
理解数据流图(DFD)的基本构成要素对于绘制准确的图表至关重要。标准DFD符号中使用了四个主要元素。
1. 外部实体
外部实体表示系统边界之外的数据源或目标。它们是与系统交互的用户、其他系统或组织。在图表中,这些通常用矩形或方形表示。
- 示例:客户、银行、库存系统。
- 注意:如果内部用户或部门属于所建模的系统,则不应将其作为外部实体包含在内。
2. 处理过程
处理过程将输入数据转换为输出数据。它们代表系统执行的功能或操作。在DFD中,处理过程通常用圆形或圆角矩形表示。每个处理过程至少需要一个输入和一个输出。
- 示例:计算税款、验证用户、生成报告。
- 注意:避免使用数据术语命名处理过程(例如“存储数据”)。应使用动作动词。
3. 数据存储
数据存储表示系统内用于后续使用的数据存放位置。它们并不暗示特定技术(如SQL数据库或Excel表格),而是表示数据的逻辑位置。这些通常用开口矩形或平行线表示。
- 示例:客户数据库、订单历史、文件仓库。
- 注意:数据流可以流入和流出存储,但外部实体不能直接连接到数据存储。
4. 数据流
数据流表示实体、处理过程和存储之间的数据移动。它们用箭头表示。箭头上的标签描述的是被移动的数据包,而不是所执行的动作。
- 示例:发票、付款详情、用户凭证。
- 注意:箭头必须是单向的。如果数据双向流动,应使用两个独立的箭头。
| 元素 | 形状 | 功能 |
|---|---|---|
| 外部实体 | 矩形 | 系统外部的数据源或目标 |
| 处理 | 圆 / 圆角矩形 | 转换数据 |
| 数据存储 | 开放矩形 | 存储数据以供将来使用 |
| 数据流 | 箭头 | 显示数据移动的方向 |
DFD的层级 📉
DFD是分层的。你从高层次的概览开始,逐步将过程分解为更详细的子过程。这种技术被称为分解。
第0层:上下文图
上下文图是抽象程度最高的层级。它将系统表示为一个单一的过程(通常是一个大圆),并显示所有与之交互的外部实体。它定义了系统的边界。
- 一个过程: 整个系统由一个气泡表示。
- 输入/输出: 显示主要的数据流进入和离开系统。
- 无数据存储: 上下文图通常不显示内部数据存储。
第1层:功能分解
第1层DFD将上下文图中的单一过程分解为主要的子过程。这一层级揭示了系统的主功能,而不会陷入琐碎的细节中。
- 主要过程: 通常为5到9个过程,以保持可读性。
- 数据存储: 在此处引入内部存储库。
- 一致性: 输入和输出必须与上下文图保持一致。
第2层:详细分解
第二层数据流图从第一层中选取特定的处理过程并进一步分解。这适用于需要更高粒度的复杂功能。
- 重点:仅特定过程被分解;其他过程仍保持为第一层的圆泡。
- 细节: 显示特定的数据转换和中间存储。
创建数据流图:分步指南 📝
构建数据流图需要采用结构化的方法,以确保准确性和一致性。遵循以下步骤,构建一个稳健的图表。
步骤1:定义系统边界
识别系统内部和外部的内容。这决定了哪些实体是外部的,哪些是内部的。边界之外的所有内容都是外部实体。
步骤2:识别外部实体
列出所有与您的系统交互的人、部门或系统。为每个实体赋予唯一名称。避免使用“用户”之类的模糊名称;应使用具体角色名称,如“管理员”或“访客”。
步骤3:绘制主要数据流
绘制箭头连接实体与系统。用传输的数据对这些流进行标注(例如:“登录请求”、“销售报告”)。确保每个实体至少有一个连接。
步骤4:定义核心处理过程
将系统分解为逻辑功能。使用动词-名词格式命名每个过程(例如:“处理订单”)。确保每个过程都有输入和输出。
步骤5:添加数据存储
识别数据必须保存的位置。将处理过程连接到数据存储,以显示读取和写入操作。请记住,数据流可以从处理过程流向存储,也可以从存储流向处理过程。
步骤6:审查与平衡
检查父图与子图之间的输入和输出是否匹配。这被称为“平衡”。如果第一层过程的输入是“客户数据”,则子图也必须接收“客户数据”。
验证规则与最佳实践 ✅
为确保您的数据流图在技术上可靠且实用,请遵守以下验证规则。
- 无幽灵流: 每个数据流都必须连接到一个处理过程或存储。不要让箭头悬空。
- 黑洞: 处理过程不能有输出而没有输入。如果数据进入,必须对其进行处理。
- 奇迹: 处理过程不能有输入而没有输出。每个转换都必须产生结果。
- 数据存储命名: 数据存储使用复数名词(例如:“订单”),数据流使用单数名词(例如:“订单”)。
- 处理过程命名: 使用主动动词。避免根据处理的数据来命名过程(例如,使用“验证密码”而不是“密码”)。
- 一致性: 确保不同层级的图表中相同的数据流标记一致。
- 复杂度控制: 如果一个泡泡过于拥挤,就对其进行分解。每个图表的目标是包含5到9个过程。
常见陷阱,应避免 ⚠️
即使是经验丰富的分析师也会犯错。意识到常见错误可以节省评审会议的时间。
- 混淆控制与数据: DFD 显示的是数据,而不是控制流。不要显示决策菱形或循环(除非用于表示数据存储)。
- 实体与存储之间的直接连接: 外部实体不能直接写入数据存储。所有数据必须先经过一个过程。
- 过度技术性细节: 不要显示数据库表或文件名。保持逻辑性,而非物理性。
- 缺失的反馈回路: 如果一个过程需要从前一个输出获取输入,请确保流程被正确表示。
- 命名不一致: 避免对同一数据使用同义词(例如,“客户”与“客户”)。坚持使用一种术语。
逻辑型与物理型 DFD 🔄
分析师通常为同一系统创建两种类型的图表。理解它们之间的区别对于有效沟通至关重要。
| 特性 | 逻辑型 DFD | 物理型 DFD |
|---|---|---|
| 关注点 | 业务需求和规则。 | 实现细节和技术。 |
| 过程名称 | 通用动作(例如,“计算价格”)。 | 具体动作(例如,“运行税算法 V2”)。 |
| 数据存储 | 逻辑容器(例如,“库存”)。 | 物理文件或表格(例如“SQL 表 INV”)。 |
| 时间 | 不显示时间或频率。 | 可能显示批处理或实时触发。 |
| 用例 | 需求收集与设计。 | 系统架构与开发。 |
区分DFD与其他图表 📐
很容易将DFD与其他建模工具混淆。以下是它们的区别。
- DFD与流程图:流程图显示逻辑流程(if/else、循环)。DFD显示数据流动。流程图回答“接下来会发生什么?”而DFD回答“数据去往何处?”
- DFD与ERD:实体关系图关注数据结构以及实体之间的关系。DFD关注数据的流动与转换。
- DFD与用例图:用例图展示用户交互与目标。DFD展示支持这些目标的内部机制。
维护与更新DFD 🔄
DFD不是一次性交付物。系统会不断演变,图表也必须随之更新。定期维护可确保文档保持准确。
- 版本控制:跟踪变更。用版本号或日期标记图表。
- 变更请求:新增功能时,在编码开始前更新DFD。
- 评审周期:安排与利益相关者的定期评审,以确认图表与当前操作一致。
- 集成:确保DFD与其他工件(如需求规格和数据库模式)保持一致。
实际示例:电子商务订单系统 🛒
为了说明这些概念,考虑一个在线商店。上下文图会将“客户”和“支付网关”作为外部实体展示。
在一级DFD中,系统过程“订单管理”被拆分为:
- 过程:“接收订单”
- 过程:“验证库存”
- 处理:”处理付款”
- 处理:”发货”
数据流包括“订单详情”、“库存检查”和“确认”。数据存储包括“产品目录”和“交易日志”。这种分解确保了客户旅程中的每一步都得到充分考虑。
关于掌握DFD的最后思考 🎯
创建有效的数据流图需要耐心和对细节的关注。这是一项通过实践不断改进的技能。通过关注数据流动而非逻辑,您为开发人员和利益相关者提供了一张清晰的路线图。请记住,目标是清晰,而非复杂。保持图表简洁、一致,并与业务现实保持一致。
在您继续作为系统分析师的工作过程中,使用DFD来发现隐藏的需求并优化系统设计。它们仍然是在复杂环境中可视化信息流最可靠的工具之一。











