> 关于数据流图,今天写设计文档需要补充数据流图,借此机会了解一下,以后再遇到就有资料可查了。
# 一、关于数据流图
先看下 [百度百科](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%B5%81%E5%9B%BE) 关于数据流图的解释
> 数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
通俗点来说,`数据流图 = 数据流 + 图`
**所谓数据流,是由一组固定成分的数据组成,表示数据的流向**。这里的数据流向,不仅指数据的输入、输出,还包括中间的加工、储存等一系列的处理环节。
它是以图形的方式描绘数据在系统中流动和处理的过程。
而根据数据流动和处理的环节不同,数据流图可以拆分为四大要素,分别为:

1. **外部实体**:指系统之外、又与系统有联系的人或事物,它表达了该系统数据的外部来源和去处;
2. **数据加工**:描述输入数据流到输出数据之间的变换,也就是输入数据流经过什么处理后变成了输出数据。
3. **数据存储**:某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质。每个数据存储都有一个名字。
4. **数据流**:处理功能的输入/输出,箭头表示数据流向。
# 二、怎么画数据流图
如何绘制数据流图:
**1、确定系统的输入输出**
由于系统究竟包括哪些功能可能一时难于弄清楚,可使范围尽量大一些,把可能有的内容全部都包括进去。
> 这个阶段,应该充分了解“系统从哪些外部实体接受什么数据”、“系统向哪些外部实体送出什么数据”等信息,这将是第二步绘制顶层数据流程的关键。
**2、由外向里画系统的顶层数据流图**
确定系统的输入输出后,我们将可以将它们用“加工”连接起来,**“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方**。
**3、自顶向下逐层分解,绘出分层数据流图**
对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。
**0层图:**就是把顶层图的“加工”分解成若干个“子加工”,并用数据流将这些“子加工”连接起来,使得顶层图的输入数据经过若干“子加工”处理后,变成顶层图的输出数据流。
**(1)确认“加工”方法**
其实我前面也简单提到,“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方。因此,0层图数据流的组成或值变化的地方可以变成若干“子加工”。
**(2)确定数据流的方法**
一起到达、一起处理的数据可看成数据流。
**(3)关于数据存储**
对于以后要使用的数据,可以组织成为一个数据存储来表示。
# 三、数据流图其他注意事项
1. 画数据流而不是控制流。数据流反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
2. 一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流。
3. 每个加工至少有一个输入数据流和一个输出数据流。
4. 一个加工的输出数据流,不应与输入数据流同名,即使他们的组成完全相同。
5. 外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工 。
6. 如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号(这一点,前面也提到过)。
7. 父图与子图的平衡。父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同,此即父图与子图的平衡。
8. 当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
# 四、总结
数据流图的绘制分三步走:
1. **确定系统的输入输出;**
2. **由外向里画系统的顶层数据流图;**
3. **自顶向下逐层分解,绘出分层数据流图。**
> 转自:[如何画好数据流图?](https://zhuanlan.zhihu.com/p/231863024)
-067f65cf7fb64da2bc59f81e3d4e56a9.jpg)
关于数据流图