如何画好数据流程图(DFD)?

步骤

  • 确定系统的 inputoutput
  • 表层深层 画系统的顶层数据流图。
  • 自顶向下 逐层 分解,画出分层数据流图。

一、理解数据流图

基本概念

   ~~   数据流图 = 数据流(箭头) + 图。所谓数据流,是由一组固定成分的数据组成,表示 数据的流向,除了输入和输出之外,还包括中间加工、存储等环节。

基本元素

  1. →(data flow):箭头,表示 数据流
  2. 〇 (process):圆或椭圆,表示加工;也就是输入数据流经过什么处理后变成了输出数据。
  3. = (file):双杠,表示数据存储
  4. □ (source or destination):方框,表示数据源点或终点。【外部实体】,指除了系统之外,又与系统有联系的人或事物。

注意事项:每个加工都有一个名字和编号。编号能反映该加工位于分层的数据流图的哪个层次和哪张图中。

简记: 用图形的方式,描绘数据在系统中流动和处理的过程。

二、怎么画数据流图?

   ~~    数据流图采用分层图的形式来描述系统数据流向,每一层都代表了系统数据流向的一个抽象水平,层次越高,数据流向越抽象,(因为抽象的东西是很难有什么变化的,这也为我们对系统的设计猜想有了更好的辅助)。高层次的DFD图中处理可以进一步分解为低层次、更详细的DFD图。

在这里插入图片描述

故此,据层次可以将数据流图划分为顶层、中层和底层数据流图。除了顶层数据流图之外,其他数据流图从零开始编号

下面我们以 销售管理系统 来进一步理解并画出DFD图:

(1) 接受顾客的订单,检验订单,若库存有货,进行供货处理,即修改库存,给仓库开备货单,并且将订单留底;若库存量不足,将缺货订单登入缺货记录。

(2) 根据缺货记录进行缺货统计,将缺货通知单发给采购部门,以便采购。

(3) 根据采购部门发来的进货通知单处理进货,即修改库存,并从缺货记录中取出缺货订单进行供货处理。

(4) 根据留底的订单进行销售统计,打印统计表给经理。

1. 确定系统的输入输出

   ~~   一开始想要直接弄清系统包括的所有功能是困难的,所以我们可以尽可能地让考虑的范围扩大一点,尽可能把有的内容都考虑进去,之后在迭代的过程中再加以补充完善。

   ~~    在这一阶段,应该弄清 “系统从哪些外部实体接受什么数据”、“系统向哪些实体送出什么数据” 等信息,这是绘制顶层数据流图的关键

2. 由表及里的画出顶层数据流图

   ~~    在确定号系统的 input 和 output 之后,我们可以利用”加工“将它们连接起来,也就是状态转移关系"加工",“加工”是数据被处理的整个系统,也就是数据组成或值变化的地方。下图为销售管理系统的顶层图:
在这里插入图片描述

顶层图 {\color{grey}{顶层图}} 顶层图
注意事项: 顶层图只有一张,图中的“加工”也只有一个,表示整个系统,不必为其编号。

3. 自顶向下逐层分解,画出分层数据流图

   ~~    对于大型的系统,为了控制设计的复杂性,便于理解,更倾向于从抽象到具体,采用自定向下逐层分解的方式,将一个数据流图分解成若干个数据流子图来分别表示。

   ~~    在还能够继续分解的层次,我们将其称为 中层数据流图,是对 父层 数据流图中 某个加工的细化。这一层数据流图层数的多少,根据系统实现的复杂程度而定。

   ~~   如前面所说,除了顶层图之外,其他层次的图从零开始编号。特殊的是,0层图,因为它是顶层图的加工的第一次分解,将顶层图的 “粗加工” 分解为若干个 “精加工”,并用数据流(箭头)将这些 ”精加工“连接起来,使得顶层图的 input 经过这些处理后,变成相应的 output

在这里插入图片描述

0 层图 {\color{grey}{0层图}} 0层图
(1) 确定 "加工"方法:

   ~~    “加工“用来表示整个开发系统,也就是数据处理的地方。因此0层图数据流 发生变化的地方可以变成若干个 “精加工”。

注意事项:

  1. 每个加工至少有一个 input 和 一个 output。
  2. 一个加工的 output 不应该与 input 同名,即使它们的数据组成完全相同。
  3. 如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号。

在这里插入图片描述

上 : 父图 ; 下 : 子图 {\color{grey}{上:父图;下:子图}} :父图;:子图

  1. 父图与子图的平衡。父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同,此即父图与子图的平衡。

(2)确定数据流的方法

   ~~    一串待处理的数据可以看作数据流。

注意事项:

  1. 画数据流而不是画控制流。数据流具体反应系统在”做什么“,不反应”如何做“,因此箭头上面的数据流名称只能是 名词名词短语,整个图中不反应加工的实际执行顺序。
  2. 外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工

(3)关于数据存储

   ~~   对于未来要使用的数据,可以组织成为一个数据存储(双杠 =)来表示。

注意事项:

  1. 当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。

   ~~   弄清相关细节之后,如下所示,我们只需要对”精加工“进一步细分拆解,直到到达 ”原子加工“ (底层数据流程图:其加工不能再分解的数据流图)为止。

在这里插入图片描述
1 层图 {\color{grey}{1层图}} 1层图



参考链接及资源

如何画好数据流图?

数据流图(DFD)概念及画法

软件工程——数据流图(DFD)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐