数据流图(DFD)仍然是系统分析与设计的基石。它们以可视化的方式展示了系统内信息的流动,突出显示数据如何进入、通过处理过程以及最终离开系统。对于系统分析师而言,掌握清晰、准确绘制图表的技能不仅是一项技术能力,更是一种沟通的必要条件。本指南概述了确保您的DFD有效发挥作用的关键最佳实践。

数据流图是一种结构化建模技术,用于可视化数据在系统中的流动。与侧重于控制流和决策逻辑的流程图不同,DFD严格聚焦于数据本身。它回答以下问题:数据从哪里来?它经历了什么变化?最终去往何处?
在创建DFD时,目标是抽象复杂性。您是在描绘业务逻辑,而不必陷入代码、数据库模式或特定硬件等实现细节中。这种抽象使得利益相关者无需具备技术专长也能理解系统。
无论采用何种具体方法(如Yourdon & DeMarco或Gane & Sarson),所有DFD都依赖于一组标准符号。理解这些组件是迈向最佳实践的第一步。
| 组件 | 符号形状 | 功能 |
|---|---|---|
| 处理过程 | 圆或圆角矩形 | 将输入数据转换为输出数据。 |
| 外部实体 | 矩形 | 系统外部数据的来源或去向。 |
| 数据存储 | 开口矩形 | 用于后续使用的数据存储(文件、数据库)。 |
| 数据流 | 箭头 | 显示组件之间数据的流动。 |
复杂系统无法在单一视图中表示。DFD是分层的。将其分解为不同层级,可以实现逐步细化。
这是最高层级的视图。它将整个系统表示为一个单一的处理过程。它展示了系统的边界以及与外部实体的交互方式。它不显示内部过程或数据存储。
该图将上下文图中的单一过程分解为主要的子过程。它引入了数据存储,并展示了数据在主要功能区域之间的流动方式。
这些图进一步深入第0层中的特定过程。它们用于详细设计和实施指导。
| 层级 | 详细程度 | 主要受众 |
|---|---|---|
| 上下文 | 高层级 | 管理层、利益相关者 |
| 0级 | 功能 | 项目经理、架构师 |
| 1级及以上 | 详细 | 开发人员、测试人员 |
为了创建稳健且可维护的DFD,请遵循这些结构和逻辑规则。
标签至关重要。读者应在无需图例的情况下就能理解图表。模糊性会导致开发错误。
数据守恒是一条基本规则。进入一个过程的数据必须等于离开该过程的数据,尽管数据已发生转换但不能丢失。你不能有一个凭空创造数据(魔法)或在没有记录的情况下删除数据的过程(除非明确设计)。
一个常见错误是将决策逻辑混入数据流中。DFD展示的是数据的流动,而不是决策的实现方式。如果需要决策,应在单独的规格说明或决策表中记录,而不是在DFD上用菱形符号表示。
数据必须流入和流出数据存储。一个过程不能孤立地存在。
视觉清晰性至关重要。一张看起来像一盘意大利面的图表毫无用处。
即使经验丰富的分析师也会犯错。了解常见的陷阱有助于你保持高质量。
一个有输入但无输出的处理过程。这意味着数据被消耗却未产生任何结果。在正常运行的系统中,这在逻辑上是不可能的,除非数据被丢弃,而这种情况必须明确标示出来。
一个有输出但无输入的处理过程。这表明数据凭空出现。每个输出都必须有其来源。
外部实体不应在不经过系统的情况下直接向彼此传递数据。如果实体A向实体B提供数据,该数据必须先进入系统,经过处理,再离开。
如果你将一个数据流称为“用户数据”在上下文图中,就不要再称它为“客户信息”在0层图中。保持一致性有助于可追溯性。
不要在0层图中详细列出每一个步骤。应保持在功能层面。如果你在罗列每一个按钮点击,你实际上是在构建UI线框图,而不是数据流图(DFD)。
DFD不是孤立创建的。它们必须与业务需求保持一致。
DFD是一份动态文档。系统部署后,该图表仍需持续维护。
为了确保您的DFD专业且实用,请在设计过程中随时参考此检查清单。
区分DFD与其他建模技术非常重要,以避免混淆。
使用合适的工具完成合适的工作,可以防止建模疲劳,并确保每个图表在文档套件中都发挥独特的作用。
创建数据流图需要在技术准确性和业务沟通之间取得平衡。通过遵循既定的最佳实践,可以确保你的图表不仅仅是绘图,而是系统成功功能蓝图。注重清晰性、一致性和验证。当利益相关者看到你的图表并说:“是的,这正是我们工作的样子”,你就达成了目标。
请记住,图表是一种手段,而不是目的本身。其价值在于它所激发的理解以及在编写代码之前帮助避免的错误。优先考虑数据流的逻辑,保持严格的命名规范,并确保层次结构合理。通过实施这些实践,你的系统分析将更加稳健、清晰且有效。