
理解信息在系统中如何流动是系统分析与设计的基础。数据流图(DFD)提供了这种流动的可视化表示。与专注于代码或数据库模式的技术蓝图不同,DFD关注的是数据的流动以及转换数据的处理过程。本指南详细介绍了构建这些图表所使用的必要符号,确保您的文档清晰且精确。
什么是数据流图?🤔
数据流图是一种结构化分析工具。它描绘了信息处理活动的顺序。它并不以编程代码的形式描述系统的逻辑。相反,它展示了数据的流动方向、来源、去向以及变化方式。这种抽象使利益相关者能够在不陷入技术实现细节的情况下理解功能需求。
数据流图具有层次性。它们从高层次概览开始,逐步分解为更详细的视图。这种分解有助于管理复杂性。通过定义边界和交互关系,分析人员可以在开发开始前识别需求中的漏洞或潜在瓶颈。
四个核心符号 🛠️
标准的数据流图符号依赖于四种基本形状。尽管不同方法论(如Yourdon/DeMarco或Gane/Sarson)之间存在差异,但核心概念保持一致。每个符号代表系统边界内的特定功能。
| 符号名称 | 视觉表示 | 功能 |
|---|---|---|
| 外部实体 | 矩形 | 数据的来源或目的地 |
| 处理过程 | 圆形或圆角矩形 | 数据的转换 |
| 数据存储 | 开口矩形 | 静态数据的存储 |
| 数据流 | 箭头 | 数据的移动 |
1. 外部实体 📦
外部实体代表位于所建模系统之外的数据来源或目的地。它们是与系统交互但不属于其内部逻辑的参与者。实体可以是个人、团体、另一个计算机系统或部门。
外部实体通常以矩形表示。在某些符号体系中,它们也可能表现为椭圆。其关键特征是系统向它们发送数据或从它们接收数据。例如,客户就是一个实体。系统处理其订单,但客户本身独立于订单处理软件存在。
- 输入: 数据从实体进入系统。
- 输出: 数据离开系统并流向实体。
重要的是不要将外部实体与处理过程混淆。实体不会转换数据,它只是产生或消耗数据。
2. 处理过程 🔄
处理过程是图表中的主动元素。它们代表将输入数据转换为输出数据的功能。处理过程就是正在进行的工作。它可以是计算、验证检查、决策或数据操作程序。
处理过程通常以圆形或圆角矩形表示。在形状内部,应填写描述该动作的名称,例如“计算总额”或“验证登录”。每个处理过程都必须至少有一个输入和一个输出。如果一个过程有数据输入但没有输出,则是不完整的。
处理过程通过编号来表示层级关系。例如,“处理过程1”可能被分解为“处理过程1.1”、“处理过程1.2”等。这种编号有助于在不同图表之间追踪细节层级。
3. 数据存储 📁
数据存储表示数据被保存以供将来使用的场所。它们是数据的仓库。在物理系统中,这可能是一个数据库表、一个文件,或一个实体文件柜。在逻辑图中,它只是数据存放的位置。
常见的形状包括开口的矩形或平行线。存储内部的名称应为复数形式,表示一组记录,例如“客户文件”或“订单日志”。
- 读取:一个过程从存储中读取数据以供使用。
- 写入:一个过程将数据写入存储以保存它。
数据流进入和离开存储。必须注意的是,数据流在没有经过一个过程的情况下不能直接交叉。你不能在两个数据存储之间画一条直接的线;必须有一个过程位于中间,以说明数据为何移动。
4. 数据流 ➡️
数据流是连接符号的箭头。它们表示数据在系统中的移动。与编程中的控制流不同,数据流代表实际的信息包。
每个箭头都应标注通过它的数据名称。例如,从客户到一个过程的箭头可能标注为“订单请求”。从一个过程到数据存储的箭头可能标注为“新订单记录”。
箭头必须具有单一方向。如果两个点之间数据双向流动,应使用两个独立的箭头。标签必须保持单数或复数的一致性。避免使用模糊的标签,如“数据”或“信息”。应具体明确,例如“收货地址”或“库存报告”。
理解DFD层级 📈
DFD通过分层创建以管理复杂性。这种方法被称为分解。
第0层:上下文图
第0层图是最高层级。它将整个系统表示为一个单一的过程。它突出了系统与外部实体之间的关系。这一视图回答了这样的问题:“系统的边界是什么?”
在此图中,只有一个过程节点。所有数据流都直接连接外部实体与这个中心过程。此层级不显示内部数据存储,因为内部运作是隐藏的。
第1层:主要过程
第1层图将第0层中的单一过程分解为其主要子过程。这使系统被拆分为可管理的部分。你会看到多个过程节点、数据存储以及连接它们的具体数据流。
此层级定义了主要的功能区域。例如,一个电子商务系统可能被分解为“管理库存”、“处理付款”和“处理发货”。每一个都代表一个主要过程。
第2层:详细逻辑
第2层图深入探讨第1层中的特定过程。如果第1层中的某个过程较为复杂,它将拥有自己的图。这使得分析人员能够在不使整体视图混乱的情况下,详细绘制特定功能的每一步。
在此阶段,符号表示变得更加细致。你可能会看到多个数据存储以及复杂的数据流路径。这正是具体业务规则通常被可视化的地方。
规则与规范 ✅
为了保持清晰,DFD必须遵守严格的规则。违反这些规则可能导致混淆和误解。
命名的一致性
相同的数据流在任何地方都必须使用相同的名称。如果你在一个图中标注为“用户ID”,在另一个图中就不能标注为“编号”。一致性有助于在不同层级间追踪数据。
禁止黑洞或奇迹
“黑洞”是指有输入但无输出的过程。这意味着数据消失了,这通常是错误的。而“奇迹”是指有输出但无输入的过程。这意味着数据凭空出现。这两种情况都是图中的逻辑错误。
数据存储平衡
当你分解一个过程时,与父过程相连的数据存储必须继续与子过程保持连接。除非逻辑发生重大变化,否则不能在较低层级删除一个数据存储。数据流必须在各层级之间保持平衡。
箭头方向
箭头表示方向。不要不必要地绘制交叉的箭头。交叉的线条会使图难以阅读。使用弯曲或断点来保持路径清晰。如果两条流交叉,确保它们的数据类型不同,以避免混淆。
DFD与流程图 🧩
人们常常混淆数据流图(DFD)与流程图。虽然它们看起来相似,但用途不同。
流程图描述操作的逻辑和顺序。它显示决策点(菱形)、循环以及步骤的确切顺序。它是过程性的,回答的是“系统如何执行?”
而DFD描述的是数据的移动。它不会明确显示循环或决策逻辑。它关注的是数据的“什么”和“何处”。它回答的是“哪些数据被移动和转换?”
用DFD来表示控制逻辑是错误的。它不应包含决策菱形。如果需要展示逻辑,应使用决策表或结构化英语描述与DFD并列。这种关注点的分离能保持图的清晰。
实际应用 📝
构建图表时,应从上下文图开始。确定系统边界,绘制外部实体,绘制代表系统的单一处理过程,并绘制连接它们的数据流。
接下来,进入一级图。将中心过程分解为主要功能,识别数据存储的位置,确保每个过程都有输入和输出,并检查数据流是否与上下文图一致。
与利益相关者一起审查图表。询问数据流是否符合他们对业务的理解。如果某位利益相关者说:“我们在这里不存储这些数据”,则调整数据存储;如果他们说:“我们不会把数据发送给那个人”,则调整实体。
验证至关重要。如果用户无法理解的图表毫无用处。它作为沟通工具,弥合了技术团队与业务所有者之间的差距。
清晰度的最佳实践 🌟
保持单页上的符号数量在可管理范围内。如果图表过于拥挤,其价值就会丧失。使用子图将其拆分。如果系统规模超出视觉承载能力,不要试图在一张纸上展示整个系统。
使用标准符号。尽管存在不同变体,但坚持使用一种风格(例如,Yourdon/DeMarco 或 Gane/Sarson)可避免混淆。在同一文档中不要混合使用不同风格。
为所有元素添加标签。未标注的箭头毫无意义,未标注的过程含糊不清。即使是简单的图形也需要名称来传达意义。
避免线条交叉。这会造成视觉干扰。如果线条必须交叉,请使用“跳线”或线段中断来表明它们并不相交。
符号语义概要 📋
回顾核心组成部分:
- 实体:位于系统外部。数据源或数据汇。
- 处理过程:位于系统内部。转换数据。
- 存储:位于系统内部。保存数据。
- 数据流:连接上述元素。传递数据。
掌握这些符号,就能清晰地记录复杂系统。它为分析师和开发人员提供了一种共享语言。通过遵循分解和一致性的规则,你创建的图表不仅是图形,更是功能规格说明。
从简单开始。构建上下文。逐步扩展细节。与用户验证。这一迭代过程确保图表真实反映实际情况。











