什么是数据流图?

数据流图 (DFD) 用于表示业务信息系统中的数据流,它表达了系统中的据传从输入到存储间所涉及的程序。

数据流图可以分为逻辑形和物理形。逻辑数据流图描述了用以完成某业务功能所涉及的、业务层面的数据流动, 物理数据流图则描述系统层面的数据流动。

为什么绘画数据流图?

数据流图以将用以寻找、编辑、存储和分发数据的功能或过程图像化,方便用户和系统设计人员沟通。数据流图的结构也容让开发人员从高点分析系统,继而生成一系列用以深入分析的图表。数据流图被广泛应用,原因如下:

  • 用于表达系统的逻辑信息流
  • 用于寻找系统需求
  • 简单、以理解的图形符号
  • 建立手动和自动系统需求

数据流图的符号

数据流图有四个基本符号。

程序

一个程序负责接收输入的数据,并产生具有不同内容或形式的输出。程序可以简单如将收集的数据保存在数据库,也或者复杂如将数据加以分析并生成报表。

每个程序都有一个名称来标识它所执行的功能。

名字由一个动词组成,后跟一个单数名词。

例子:

  • 申请付款
  • 计算佣金
  • 验证订单

符号

  • 圆角矩形
  • 为了便于参考,程序都被赋予 ID
数据流图程序

程序示例

数据流图程序示例

数据流

数据流是数据从信息系统的一个部分移动到另一个部分的路径。数据流可以表示单个数据元素,例如客户 ID,或者一组数据元素 (或数据结构)。

例子:

  • Customer_info (姓氏,名字,SS#,电话号码等)
  • Order_info (OrderId,Item#,OrderDate,CustomerID 等)。

数据流示例

数据流图数据存储示例

符号

  • 带输入箭头的直线即为输入数据流
  • 带输出箭头的直线即为输出数据流

注意:

由于每个程序都将数据从一种形态转换为另一种形态,故每个程序必须至少有一个输入数据流和一个输出数据流。

一些数据流的规则

数据流图的一大原则是数据不能自行转换成另一形态,数据必须经由某程序的处理才可被分发至系统的某个部份。通过这条规则,我们可以非常容易地识别出错误的画法并加以纠正。

错误 正确画法 原因
错误的数据流图01 正确的数据流图01 没有经由程序处理,故实体不能将数据传送至另一个实体。
错误的数据流图02 正确的数据流图02 数据不能直接从实体移动到数据存储而没有事先经由程序处理。
错误的数据流图03 正确的数据流图03 数据不能直接从数据存储移动至实体而没有事先经由程序处理。
错误的数据流图04 正确的数据流图04 数据不能直接从一个数据存储移动到另一个数据存储而没有事先经由程序处理。

其他常犯的错误

当一个程序步骤的输出与其输入不匹配时,会出现第二类错误,它们可以分类为:

  • 黑洞 - 程序步骤可能有输入流,但没有输出流。
  • 奇迹 - 一个程序步骤可能有输出流,但没有输入流。
  • 灰孔 - 程序步骤的输出可能大于其输入的总和
数据流图的常犯错误

数据存储

当系统必须保留数据以让一个或多个程序使用或存储数据,便可以数据存储来表达。

符号

  • 将数据写入数据存储,数据流连结线以外出箭头表示。
  • 从数据存储中读取数据,数据流连结线以输入箭头表示。
  • 一些数据存储的例子:库存,应收账款,订单和每日付款。
数据存储符号

数据存储示例

数据存储示例

注意:

  • 数据存储必须以数据流连接到程序。
  • 每个数据存储必须至少有一个输入数据流和至少一个输出数据流(即使输出数据流是一个确认讯息)。

外部实体

外部实体是向系统提供数据或从系统接收输出的人、部门、外部组织或其他信息系统。外部实体是信息系统边界之外的组件,它们代表了信息系统如何与外界交互。

  • 矩形
  • 只提供或接收数据
  • 不处理数据

符号

  • 客户提交订单,然后从系统收到账单
  • 供应商发出发票
数据流图的外部实体

外部实体示例

数据流图的外部实体的示例

注意:

  • 外部实体也被称为终止符,因为它们是数据的源头或目的地。
  • 必须通过数据流将外部实体连接到程序。

高至低分解 (Top-Down Decomposition)

高至低分解用于展示更多细节。透过平整,我们将绘制出多张数据流图,一张比一张详细,直到达到所需的细节层次为止。如下图所示,我们会​​先在最高层次的数据流图中将目标系统表达成单个程序,然后将程序分解成更多层的数据流图,以表达更多细节,直到所有程序都是功能性程序为止。

数据流图之间的一致性

当对数据流图进行高至低分解时,输入和输出数据流必须在数据流图之间保存一致。例如,级别n&n + 1必须具有相同的输入和输出。

数据流图之间的一致性

数据流图指南

背景图 - 第 0 阶

  • 背景图须容于一个页面中 (不能过大)。
  • 背景图中的程序名称须为信息系统的名称。
    • 一些例子:分级系统,订单处理系统,注册系统。
  • 背景图又被称为第 0 阶图。

使用獨特的名稱

  • 别重覆使用相同的名称表达不同的概念。
    • 例如,在不同层次的数据流图中只能有一个实体 CUSTOMER。

数据流图没有交叉线

  • 达到此目的的一种方法是严格控制数据流图中的程序数。

人类只能同时处理 7 + / - 2 个符号

  • 在具有多个程序的较低阶的数据流图中,也不应该有多于九个程序。
  • 避免交叉线的另一种方法是复制外部实体或数据存储。使用特殊符号(如星号)表示重复的符号。

编号习惯

  • 为每个程序符号使用一个唯一的参考号码。
  • 其他程序号码在以下层次中:
    • (1, 2, 3,...);
    • (1.1, 1.2, 1.3, ..., 2.1, 2.2, 2.3,...);
    • (1.1.1, 1.1.2, 1.1.3,...).

背景图

背景图用于表达一个系统的概览,它是数据流图中的最高级别,只包含一个代表整个系统的程序。这程序会被分解成更多细节的主要程序,每个主要程序可能会进一步分解以提供更多细节。

  • 背景图显示了所有的外部实体,以及来自它们的主要数据流。
  • 该图不包含任何数据存储。
  • 背景图的单个程序可以被分解为下一级图中的主要程序,其被称为第 0 阶数据流图。
数据流图的背景图示例

第 1 阶数据流图

第 0 阶数据流图中的程序 (具有整数)可以进一步分解以表示程序的细节。下面的例子显示了程序被分解成下一个阶级(第 1 阶)。

注意:

虽然下面的第 1 階数据流图只有三个程序 ,但是这些程序涉及不少数据的输入和输出,繼而導致交叉线的出現。为避免这个情況,我们可以在数据流图中使用多重視角,讓同一元件重覆出現在圖中的不同位置。

第 1 階数据流图

第 2 阶数据流图

如果一个程序跟大量外部实体存在数据的输入和输出,我们可以首先将该程序和相关的外部实体提取到单独的数据流图,然后再将该进程细化到单独的数据流图级别,通过这种方式可以更容易确保它们之间的一致性。

第2 阶数据流图

逻辑与物理数据流图

数据流图被分类为逻辑形或物理形。逻辑数据流图主要表达了业务和业务运作,它不关心系统将如何构建。我们可以忽略实现细节,如计算机配置、数据存储技术、信或消息传递方法,而集中表达系统所执行的功能,如数据收集、数据跟信息的转换和信息报告。

物理数据流程图显示系统将如何被建设起来,包括系统中的硬件、软件、文件和人员。它使逻辑数据流图中描述的程序正确地实现以达到业务目标。

逻辑数据流图的好处

  • 逻辑数据流图主要呈现业务信息,该图以业务活动为中心,故有助于与用户间的交流和沟通。
  • 逻辑数据流图乃基于业务事件而绘制,并且独立于特定的技术或物理布局,这让系统更加稳定。
  • 逻辑数据流图让分析师更了解正在研究的业务,并确定决策背后的原因。
  • 基于逻辑数据流图而实现的系统更容易维护,因为业务功能不会经常发生变化。
  • 很多时候,逻辑数据流图不包含文件或数据库以外的数据存储,这比物理数据流图更易于绘制。
  • 通过修改逻辑数据流图可以很容易地产生物理数据流图。

物理数据流图的好处

  • 厘清哪些程序是手动的,哪些流程是自动的:手动程序需要详细的文档,而自动化流程则需要开发计算机程序。
  • 比逻辑数据流图更详细地描述过程:描述处理数据的所有步骤。
  • 排序过程必须按照特定顺序完成:描述导致有意义结果的活动顺序。例如,必须在生成摘要报告之前执行更新。
  • 识别临时数据存储:描述临时存储,例如在杂货店中用于顾客收据(报告)的销售交易文件。
  • 指定文件和打印输出的实际名称:逻辑数据流图描述了实际的文件名和报告,以便程序员在系统的开发阶段将它们与数据字典 (Data Dictionary) 联系起来。
  • 添加控件以确保过程正确完成。

精炼逻辑数据流图成物理数据流图

以下示例显示了一家杂货店收银员的逻辑数据流图和物理数据流图:

  • 客户将ITEMS带到注册表中;
  • 所有项目的价格均已预订,然后合计;
  • 接下来,付款最终交给收银员,客户收到收据。

逻辑数据流图示例 - 杂货店

逻辑数据流图说明了所涉及的过程,而没有详细描述活动的物理实现。

逻辑数据流图示例- 杂货店

物理数据流图示例 - 杂货店

  • 物理数据流图显示条形码 - 使用大部分杂货店商品上找到的 UPC PRICE 代码
  • 此外,物理数据流图提到手动处理,如扫描,并表达了临时文件被应用于储存项目的小计
  • 付款可以通过CASH,CHECK或者DEBIT CARD进行
  • 最后,它用上收款人的名字:现金注册收据
物理数据流图示例- 杂货店

Turn every software project into a successful one.