Visual Paradigm Desktop | Visual Paradigm Online
Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_TW

DFD深度:如何从上下文图深入到一级图

DFD1 week ago

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

Cartoon infographic illustrating how to drill down from a Context Diagram (Level 0) to a Level 1 Data Flow Diagram, showing decomposition principles, data conservation, process naming conventions, and common pitfalls to avoid in systems analysis

理解DFD的层级结构 🏗️

DFD并非扁平文档,而是具有层级结构。这种结构使分析人员能够从不同详细程度来观察系统。每一层都为流程和数据流增加了更多具体性。

  • 上下文图(第0层): 最顶层。它将系统表示为一个与外部实体交互的单一过程。
  • 一级图: 第一次分解。它将单一过程拆分为主要的子过程。
  • 二级图: 必要时对一级过程进行进一步分解。

从上下文图到一级图的转换,通常是新分析人员面临的最大挑战。这需要在清晰性与细节之间取得平衡。如果图层过高,就缺乏可操作的信息;如果过低,则会变得杂乱,失去整体视野。

上下文图:系统边界 🚧

上下文图是整个DFD系列的锚点。它定义了所研究系统的边界。圆圈内的所有内容都属于系统;圆圈外的所有内容都是外部的。

关键组成部分

  • 中心过程: 用一个圆或圆角矩形表示。它代表整个系统。
  • 外部实体: 数据的来源或目的地。这些可以是人、部门或其他系统。
  • 数据流: 连接实体与过程的箭头。它们代表输入或输出。

定义边界

确立边界至关重要。如果一个实体在当前项目的范围之外,则它属于外部。例如,在薪资系统中,税务机构可能是外部实体,而财务部门可能是内部的。错误识别边界会导致范围蔓延和混乱。

上下文图的最佳实践

  • 保持简洁: 只应有一个中心过程。
  • 限制实体数量: 实体过多会使图表杂乱。应聚焦于与系统直接交互的实体。
  • 清晰命名数据流: 数据流应以名词命名(例如“发票”),而非动词(例如“发送发票”)。
  • 不包含数据存储: 上下文图通常不包含数据存储。所有数据必须来自或流向外部实体。

分解:深入探究的艺术 📉

分解是将一个复杂过程拆分为更小、更易管理的子过程的过程。这是创建一级图的核心机制。这不仅仅是任务的拆分,更是揭示系统内部逻辑的过程。

分解原则

从0级过渡到1级时,必须遵循若干规则以保持逻辑一致性。

  • 数据守恒: 父过程的输入和输出必须与子过程的输入和输出总和相匹配。任何数据都不能凭空消失或出现。
  • 逻辑分组: 子过程应按功能进行分组。例如,“验证订单”和“更新库存”是不同的功能。
  • 过程数量: 虽然没有硬性限制,但一级图通常应包含5到9个过程。如果数量更多,应考虑将它们分组为更高级别的1级图,或拆分图表。
  • 有意义的名称: 过程名称应遵循动词-名词格式(例如,“计算税款”)。这能清楚地区分它们与数据流的不同。

平衡的艺术

最重要的技术要求之一是数据流的平衡。进入0级过程的数据必须等于进入1级过程的数据总和。同样,离开0级过程的数据也必须等于离开1级过程的数据总和。

如果上下文图显示一个“订单表单”进入系统,那么一级图必须显示同一个“订单表单”进入某个子过程。如果一级图显示“客户ID”在内部传递,那么它在0级图中就不能是外部输入或输出,除非该数据在0级图中已存在。

构建一级图 🛠️

一旦分解计划准备就绪,实际构建工作便开始。这包括识别系统的各个主要功能区域。

步骤1:识别主要过程

查看上下文图中的单一过程。提问:为了实现系统的目标,需要哪些主要活动?这些活动将成为一级图中的圆圈或气泡。

  • 是否存在一个明确的数据录入阶段?
  • 是否存在一个明确的处理或计算阶段?
  • 是否存在一个明确的报告或输出阶段?

步骤2:绘制数据流

用箭头连接各个过程。这些箭头表示内部过程之间数据的流动。你还可以绘制箭头,将外部实体与这些新子过程连接起来。

  • 直接流: 数据从一个过程流向另一个过程。
  • 实体流: 数据从外部实体流向一个过程。
  • 存储流: 数据从一个过程流向数据存储,或反之。

步骤3:引入数据存储

虽然上下文图中不包含它们,但一级图通常会包含数据存储。数据存储是数据静止存放的地方。它可以是一个数据库、一个文件,或一个实体文件柜。

绘制数据存储时:

  • 使用开口矩形或在你的方法论中定义的特定符号。
  • 确保每个数据存储至少有一个写入它的过程和一个读取它的过程。
  • 避免创建“黑洞”,即数据进入存储但从未离开;也避免创建“奇迹”,即数据离开存储但从未进入。

常见错误与纠正 ⚠️

即使是经验丰富的分析师在创建数据流图时也会出错。及早识别这些模式可以节省验证阶段的时间。

1. 黑洞

黑洞是一个有输入但无输出的过程。这意味着数据被消耗而没有产生任何结果。在一个功能系统中,每个输入都必须产生某种形式的输出或数据存储。

2. 奇迹

奇迹是一个有输出但无输入的过程。这意味着数据凭空产生。每个输出都必须源自某种输入数据。

3. 控制流

数据流图跟踪的是数据流,而不是控制流。控制流表示启动或停止一个过程的信号(例如,“开始按钮被按下”)。如果你看到一个看起来像控制信号的流,它很可能是实际的数据(例如,“开始请求”)。数据流图不会显式处理时间或逻辑控制。

4. 流量不平衡

当一级图的输入与上下文图的输入不一致时就会发生这种情况。绘制完一级图后,务必验证数据的守恒性。

数据流图层级对比 📊

下表总结了各层级之间的差异,以帮助理解在何时使用哪个层级。

特征 上下文图(第0层) 一级图
中心过程 一个单一过程 多个子过程
数据存储 是,已包含
详细程度 高层次概要 功能分解
外部实体 所有主要实体 子集或相同实体
主要目的 定义系统范围 定义内部逻辑

验证与优化 🔍

初稿完成后,必须对图表进行验证。这并非一次性的检查,而是一个不断审查和优化的循环。

  • 同行评审:请另一位分析师查看该图表。他们可能会发现你认为显而易见但文档中缺失的数据流。
  • 利益相关者确认:与业务用户一起走查该图表。询问这些数据流是否符合他们的日常操作。
  • 完整性检查: 确保每个外部实体都有连接。确保每个数据存储都有访问权限。
  • 一致性检查: 检查命名规范。确保某处的“订单”在另一处不会被称作“采购申请”。

深度方面的高级考量 🧠

当你深入DFD结构时,将面临关于粒度的决策。你应该深入到什么程度?

粒度阈值

没有通用规则,但存在一些通用指导原则:

  • 功能完整性: 一个过程应代表一个完整的企业功能。
  • 可管理性: 图表应能完整显示在标准页面或屏幕上,无需滚动。
  • 复杂性: 如果一级过程包含超过7个子过程,可能需要为其单独创建二级图表。

处理数据存储

数据存储可能会使视觉流程变得复杂。确保它们被合理放置。不要画一条线穿过一个过程。如果必须穿过一个过程,应使用连接点或连接符号来表明这是经过而非交互。

外部实体与内部参与者

区分系统内部的参与者和外部的参与者。如果人类操作员是系统工作流程的一部分(例如,录入数据的职员),他们可能是内部参与者,但通常会被表示为外部实体,因为他们位于软件边界之外。在此定义上保持一致至关重要。

文档编写最佳实践 📝

图表只是故事的一部分。需要文字描述来解释逻辑。

  • 过程字典: 创建一份文档,描述每个过程。包括输入、输出以及使用的具体逻辑(例如,“如果余额 < 0,则标记为逾期”)。
  • 数据字典: 定义每一个数据元素。明确数据类型、长度和允许的取值。
  • 图例: 如果使用自定义符号,请提供图例以解释其含义。

下钻过程总结 🔄

成功从上下文图过渡到一级图需要有条不紊的方法。这并非简单地画更多方框,而是揭示系统的真相。

  • 从一个清晰的上下文图开始,明确系统边界。
  • 识别构成系统的各个主要功能区域。
  • 应用数据守恒原则以确保平衡。
  • 在信息被保留的地方添加数据存储。
  • 与利益相关者核对以确保准确性。

通过遵循这些结构化步骤,您将为系统设计奠定坚实基础。一级图成为开发人员的蓝图,也是业务利益相关者的沟通工具。它弥合了抽象需求与具体实现之间的差距。

Loading

Signing-in 3 seconds...

Signing-up 3 seconds...