
数据流图(通常简称为DFD)是系统分析与设计中的关键视觉工具。它描绘了信息在系统中的流动过程,展示了数据从输入到输出的移动方式。与专注于控制逻辑的流程图不同,数据流图专注于数据本身的流动。这一区别对需要理解系统实质而无需陷入执行时间或条件细节的架构师和分析师至关重要。
创建数据流图需要采用结构化的方法。这不仅仅是绘制图形,更在于建模流程的逻辑和数据完整性。无论你是设计新的软件应用、审计现有工作流程,还是绘制业务流程,一个构建良好的图表都能提供清晰的视角。它帮助利益相关者可视化系统边界,并识别数据的来源和存储位置。
理解核心组件 🧩
在绘制线条和方框之前,必须先理解基本的构建模块。每个数据流图都包含四个主要元素。识别这些组件可确保图表保持一致且易于阅读。
- 外部实体: 这些是数据的来源或目的地。它们存在于系统边界之外。实体可以是用户、另一个系统或一个组织。在图表中,它们通常用方框或圆圈表示。
- 处理过程: 这是动作发生的地方。处理过程将输入数据转换为输出数据。它们代表对数据所进行的工作。一个处理过程必须至少有一个输入和一个输出。它们通常用圆角矩形或圆圈表示。
- 数据存储: 这些表示数据被保存以供后续使用的位置。它们可以是物理数据库、文件柜,甚至电子邮件收件箱。它们不会主动发起动作,而是保存信息。数据存储通常用开口矩形或平行线表示。
- 数据流: 这些是连接各组件的箭头。它们表示数据移动的方向。每个箭头都必须标注所传输数据的名称。
需要注意的是,数据不能在没有中间处理过程的情况下直接从一个实体流向另一个实体,也不能在没有处理过程的情况下从数据存储流向实体。这些规则确保了模型的逻辑完整性。
选择符号风格 🖊️
绘制数据流图有两种主要方法。尽管它们具有相同的底层逻辑,但视觉表现形式不同。选择合适的一种取决于团队的偏好或特定行业的标准。
| 特性 | Yourdon与DeMarco | Gane与Sarson |
|---|---|---|
| 处理过程 | 圆角圆圈 | 圆角矩形 |
| 数据存储 | 开口矩形 | 带粗边的开口矩形 |
| 数据流 | 弯曲箭头 | 弯曲箭头 |
| 外部实体 | 方框 | 方框 |
Yourdon 和 DeMarco 风格通常与较旧的方法论相关联,而 Gane 和 Sarson 风格则广泛应用于现代结构化分析。无论选择何种形状,保持一致性至关重要。在单一文档中混合使用不同风格可能会让读者感到困惑。
定义系统边界 🚧
创建图表的第一步是定义范围。您必须确定系统内部和外部的内容。这通常通过创建上下文图(也称为第 0 层数据流图)来完成。
上下文图将整个系统表示为一个单一过程。它展示了系统与外部实体之间的高层级交互。这提供了系统输入和输出数据的全局视角。绘制时,只需关注输入和输出。目前无需详细说明内部过程。
例如,考虑一个图书馆系统。系统是一个单一的圆圈。外部实体可能包括“图书管理员”和“会员”。数据流可能包括“借书请求”进入系统,以及“贷款收据”离开系统。这种简单视图为更详细的分解奠定了基础。
分解过程 🔄
一旦上下文确立,系统就需要被分解。这一过程称为分解。它涉及将上下文图中的单一过程扩展为多个子过程,从而形成第 1 层数据流图(DFD)。
分解需要谨慎。不能随意添加过程。每个子过程必须处理特定的数据转换。如果一个数据流进入子过程,必须产生特定的输出。如果数据被存储,必须与数据存储连接。
分解的关键步骤
- 识别子过程: 观察主过程。它执行哪些独立的任务?将这些任务分解为单独的圆圈或矩形。
- 连接数据存储: 确定信息保存的位置。如果某项任务更新记录,请绘制流向数据存储的流程。
- 优化数据流: 确保每个箭头都有标签。标签应描述数据内容,而非动作。例如,使用“客户订单”而非“发送订单”。
- 检查一致性: 确保第 1 层图中的数据流与第 0 层图中父过程的输入和输出相匹配。
此过程可以继续。如果第 1 层过程过于复杂,可以进一步分解为第 2 层数据流图。这种递归分解使分析人员能够在不丢失整体上下文的情况下,聚焦于特定关注区域。
绘图与平衡规则 ⚖️
数据流图(DFD)的构建有严格规则。违反这些规则会使图表无效。最关键的概念是“平衡”。
平衡意味着父过程的输入和输出必须与子过程的输入和输出相匹配。如果第 0 层过程的输入是“订单”,那么第 1 层图必须显示相同的“订单”数据进入其中一个子过程。除非是逻辑细节,否则不能在较低层级引入高层级中不存在的新数据。
额外的绘图规则
- 实体之间不得有数据流: 数据必须经过一个过程。不能直接从一个外部实体流向另一个外部实体。
- 数据存储之间不得有数据流: 数据存储保存静态数据。它们之间的移动必须通过一个过程来实现数据的转换或移动。
- 没有过程,数据存储不能有数据流入或流出: 存储不能自行生成或接收数据。必须由一个过程来控制交互。
- 过程命名: 使用动词加名词的方式命名过程。这能明确动作,例如“计算税款”或“更新库存”。
- 数据流命名: 使用名词短语命名数据流。这能明确内容,例如“发票详情”或“付款确认”。
审查与优化 🧐
一旦图表草图完成,审查阶段就至关重要。这包括检查错误、遗漏和清晰度问题。利益相关者应审查图表,以确保其与他们对系统的心理模型一致。
在此阶段,应查找悬空的数据流。这些是无处可去的箭头。每个数据流都必须连接到一个过程、存储或实体。同时检查线条是否交叉。虽然并非严格禁止,但交叉线条会使图表难以阅读。应尽量规划线路以避免交叉。
审查的另一个方面是命名规范。确保同一数据在整个图表中使用相同的名称。如果在一个部分中称为“客户编号”,在另一部分中就不应称为“客户号码”。一致性有助于理解。
随时间维护 🛠️
DFD 不是一次性产物。系统会不断演进,需求也会发生变化。随着系统的变化,图表必须更新以反映新的现实。过时的图表比没有图表更糟糕,因为它会误导开发人员和分析人员。
为你的图表建立版本控制系统。当发生重大变更时,更新版本号。这有助于追踪系统设计的历史。同时,也使新团队成员能够理解系统是如何发展的。
与系统分析相结合 📋
DFD 很少单独使用。它们是更大文档体系的一部分。它们通常与数据字典和过程规范一起出现。数据字典定义了图表中数据元素的属性。过程规范详细说明了特定过程框内的逻辑。
通过结合这些文档,你可以创建一份全面的规范。这份文档支持开发团队构建系统。它确保最终产品与最初的分析保持一致。
关于制图实践的结论
创建数据流图是一项有纪律的沟通练习。它将抽象的需求转化为更易于理解的视觉格式。通过遵循标准组件、符号风格和平衡规则,确保图表能有效实现其目的。
请记住,目标是清晰。如果利益相关者查看图表后能理解系统,那么图表就成功了。如果需要解释来说明与视觉内容相矛盾的内容,那么图表就需要修改。专注于信息的流动,保持符号的一致性,并保持范围清晰。通过实践,构建准确且有用的数据显示图将成为系统设计过程中的自然组成部分。











