数据流图(DFD)是系统分析与设计中的基础工具。它们提供了信息在系统中流动的可视化表示。理解DFD的深度对于确保需求被准确捕捉至关重要。本指南探讨了从高层次的上下文图逐步深入到详细的一级图的过程。我们将不依赖特定软件工具,研究分解、数据守恒和结构完整性等原则。

DFD并非扁平文档,而是具有层级结构。这种结构使分析人员能够从不同详细程度来观察系统。每一层都为流程和数据流增加了更多具体性。
从上下文图到一级图的转换,通常是新分析人员面临的最大挑战。这需要在清晰性与细节之间取得平衡。如果图层过高,就缺乏可操作的信息;如果过低,则会变得杂乱,失去整体视野。
上下文图是整个DFD系列的锚点。它定义了所研究系统的边界。圆圈内的所有内容都属于系统;圆圈外的所有内容都是外部的。
确立边界至关重要。如果一个实体在当前项目的范围之外,则它属于外部。例如,在薪资系统中,税务机构可能是外部实体,而财务部门可能是内部的。错误识别边界会导致范围蔓延和混乱。
分解是将一个复杂过程拆分为更小、更易管理的子过程的过程。这是创建一级图的核心机制。这不仅仅是任务的拆分,更是揭示系统内部逻辑的过程。
从0级过渡到1级时,必须遵循若干规则以保持逻辑一致性。
最重要的技术要求之一是数据流的平衡。进入0级过程的数据必须等于进入1级过程的数据总和。同样,离开0级过程的数据也必须等于离开1级过程的数据总和。
如果上下文图显示一个“订单表单”进入系统,那么一级图必须显示同一个“订单表单”进入某个子过程。如果一级图显示“客户ID”在内部传递,那么它在0级图中就不能是外部输入或输出,除非该数据在0级图中已存在。
一旦分解计划准备就绪,实际构建工作便开始。这包括识别系统的各个主要功能区域。
查看上下文图中的单一过程。提问:为了实现系统的目标,需要哪些主要活动?这些活动将成为一级图中的圆圈或气泡。
用箭头连接各个过程。这些箭头表示内部过程之间数据的流动。你还可以绘制箭头,将外部实体与这些新子过程连接起来。
虽然上下文图中不包含它们,但一级图通常会包含数据存储。数据存储是数据静止存放的地方。它可以是一个数据库、一个文件,或一个实体文件柜。
绘制数据存储时:
即使是经验丰富的分析师在创建数据流图时也会出错。及早识别这些模式可以节省验证阶段的时间。
黑洞是一个有输入但无输出的过程。这意味着数据被消耗而没有产生任何结果。在一个功能系统中,每个输入都必须产生某种形式的输出或数据存储。
奇迹是一个有输出但无输入的过程。这意味着数据凭空产生。每个输出都必须源自某种输入数据。
数据流图跟踪的是数据流,而不是控制流。控制流表示启动或停止一个过程的信号(例如,“开始按钮被按下”)。如果你看到一个看起来像控制信号的流,它很可能是实际的数据(例如,“开始请求”)。数据流图不会显式处理时间或逻辑控制。
当一级图的输入与上下文图的输入不一致时就会发生这种情况。绘制完一级图后,务必验证数据的守恒性。
下表总结了各层级之间的差异,以帮助理解在何时使用哪个层级。
| 特征 | 上下文图(第0层) | 一级图 |
|---|---|---|
| 中心过程 | 一个单一过程 | 多个子过程 |
| 数据存储 | 无 | 是,已包含 |
| 详细程度 | 高层次概要 | 功能分解 |
| 外部实体 | 所有主要实体 | 子集或相同实体 |
| 主要目的 | 定义系统范围 | 定义内部逻辑 |
初稿完成后,必须对图表进行验证。这并非一次性的检查,而是一个不断审查和优化的循环。
当你深入DFD结构时,将面临关于粒度的决策。你应该深入到什么程度?
没有通用规则,但存在一些通用指导原则:
数据存储可能会使视觉流程变得复杂。确保它们被合理放置。不要画一条线穿过一个过程。如果必须穿过一个过程,应使用连接点或连接符号来表明这是经过而非交互。
区分系统内部的参与者和外部的参与者。如果人类操作员是系统工作流程的一部分(例如,录入数据的职员),他们可能是内部参与者,但通常会被表示为外部实体,因为他们位于软件边界之外。在此定义上保持一致至关重要。
图表只是故事的一部分。需要文字描述来解释逻辑。
成功从上下文图过渡到一级图需要有条不紊的方法。这并非简单地画更多方框,而是揭示系统的真相。
通过遵循这些结构化步骤,您将为系统设计奠定坚实基础。一级图成为开发人员的蓝图,也是业务利益相关者的沟通工具。它弥合了抽象需求与具体实现之间的差距。