参考文章:
原文链接:https://blog.youkuaiyun.com/qq_41784749/article/details/112227057
原文链接:https://blog.youkuaiyun.com/lipeijie163/article/details/109468861
目录
数据流图(Data Flow Diagram,DFD)是用来描述系统的逻辑模型,在数据流图中没有任何具体的物理元素,只是描绘信息在系统中的流动和处理情况。并且因为数据流图是逻辑系统的图形表示,即使是非计算机专业的人员也能理解。
在 需求分析 阶段 , 使用的工具 , 在 “结构化分析” 中 , 数据流图 ( DFD ) 使用频率很高 ;
数据流图涉及内容 : 基本概念符号 , 数据字典 , 数据平衡原则 ;
一、基本符号元素
数据流图(DFD):用处理、外部实体、数据流、数据存储表示系统需求的图表。
1.处理
数据处理,是对数据进行处理的单元。数据处理名称写在方框内。在分层的数据流图中,处理还应编号。
处理 : 描述 “输入数据流” 到 “输出数据流” 之间的变换 , 即 对数据进行了什么样的处理 , 使得 “输入数据流” 变为 “输出数据流” ;
主要操作 : 在程序中的体现是处理数据的过程 , 向 “处理” 中输入数据流后 , 将数据进行加工 , 处理 , 变换后 , 产生新的 “输出数据流” ;
符号表示 : 使用 圆形 / 圆角矩形 表示加工 ;
2.外部实体
数据源点和终点是软件系统外部环境中的实体(包括人、组织或其他软件系统),统称外部实体。一般只出现在数据流图的顶层图中,表示了系统中数据的来源和去处。
3.数据流
数据流用箭头来表示,箭头方向即数据流动方向,数据流名标在数据流线上面,数据流命名时应尽量准确。
数据流命名 : 每个数据流都有一个命名 , 该命名表达了该数据流传输的数据的含义 ; 如在箭头上标注 “账号信息” , 表示该数据流是传输账号信息的 , 表示数据的内容 ;
PS:除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
数据字典 : 数据流箭头上只标明了 “账号信息” , 没有具体的格式内容 , 是只有账号 , 还是有账号/密码/验证码等信息 , 这些数据详细格式 , 都在数据字典中定义 ;
符号表示 : 数据流使用箭头表示 , 箭头所指的方向 , 代表了数据流向 ;
4.数据存储
数据存储为数据处理所需要的输入流或数据处理的输出数据流提供存储仓库。具体指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。
文件名称 : 每个 数据存储 ( 文件 ) 都有 名字 ;
方向 : 流向文件的数据流 表示 向文件内写入内容 , 从文件流出的数据流 表示 从文件读取内容 。
流向数据存储的数据流可以理解为写入或查询文件,流出的数据流可理解为从文件读数据或查询结果。
符号表示 : 使用 双横线 / 半框形矩形 表示。
数据流图(DFD)例子:
二、DFD分层
数据流图(DFD)可以描述高层次的具有高度概括的系统处理, 也可以描述低层次的具有更详细分解的系统处理。
抽象层次:把系统分解成一个逐步细化的分层集合的建模技术 。
1.分层说明
数据流图分层 , 最上层是 顶层数据流图 , 第二层是 0 层数据流图 , ⋯ , 最底层是 底层数据流图 ,
“顶层数据流图” 与 “底层数据流图” 之间是若干 中层数据流图 ,
中层数据流图 需要进行编号 , 从 0 开始编号 ;
2.顶层数据流图(关联DFD)
顶层数据流图 : 中间的椭圆 是需要开发的 系统 , 周边的矩形 表示的是 外部实体人或组织 , 外部实体 与 系统 之间 , 有数据传输关系 ;
一个形象的说明是 多个人吃火锅 , 外层周边是人 , 中心位置火锅是系统 ;
顶层数据流图 能够表达的信息是非常有限的 , 其 将整个系统 , 使用一个节点表示 ,其可以体现出 系统与外界实体之间的交互 ,但是系统内部的情况 , 系统内部模块之间的数据交换是没有体现的 ;
3.中层数据流图
将 “顶层数据流图” 进行细化 , 细化后的 0 层数据流图 ,
与 顶层数据流图 比较没有变化的部分 : 外部实体 , 外部实体与系统之间的数据流 , 是没有变化的 ;
变化部分 : 有变化的部分是系统内部 , 系统内部进行了细化 , 原来系统是一个节点 , 在中层数据流图中 , 会将一个节点拆分成多个节点 , 这些节点就是系统中的数据处理部件, 即(处理)加工 ;这些数据处理部件 ( 加工 ) 之间会有数据流的交互 。
4.底层数据流图
针对每个处理(加工)节点 , 将其拆分 , 绘制其中的更详细的数据流转情况 ;
数据流图 ( DFD ) 分层 , 是从 顶层 -> 中层 -> 底层 , 逐层进行分解 , 这种分解思路 , 与结构化的开发方法 , 是完全匹配的 ;
因此 , 数据流图 是 结构化 开发方法中 , 最常用的工具 ;
绘制数据流图时 , 要保证 上一层数据流图 与 下一层数据流图 保持平衡 , 这就是 数据流图平衡原则 。
5.DFD片段
DFD片段:用一个单一处理符号表示系统响应一个事件的DFD
-
在DFD片段中,展示了处理、外部实体和内部数据存储之间的交互细节
-
每个DFD片段仅显示要响应该事件的相关的那些数据存储
-
一个DFD片段是为事件表中的每一个事件创建的
6.数据流一致性
- 一个“处理”和该“处理”被详细分解后在数据流内容上应该一致
- 对一个“处理”,有数据流入则必须有相对应的数据流出
- 对一个“处理”,有数据流出则必须有相对应的数据流入
7.黑洞
若输入数据流不完全用来产生输出数据流,称之为黑洞
带有输入数据的但并不用其产生输出数据的 处理或数据存储,如下图中,B,C为输入数据,但是处理中没有用到。
8.奇迹
若输出数据流不完全依赖于输入数据流,称之为奇迹
没有足够数据元素作为输入或产生来源的一个 处理或数据存储,如下图,B不在输入流,但在输出流中。
三、画DFD
1.画系统的输入/输出
最初,把系统视为一个整体,看这个整体与外界的联系。分析有哪些内容是要通过外界获取的,就是系统的输入;有哪些是要向外界提供服务的,就是系统的输出。画系统的输入/输出即先画顶层数据流图.
2.画系统内部
数据流图主要是用于描述系统内部的处理过程。有些内部处理过程比较简单,有些则相当复杂。描述系统内部即画下层数据流图。一般方法是将层号从0开始编号,采用自顶向下,由外向内的原则。
3.画法原则
- 数据流必须连接处理
- 处理和存储必须有进有出
- 同一处理或存储进出数据流不同名
- 每个处理必须既有输入数据流,又有输出数据流
- 所有的数据流必须以一个外部实体开始,并以一个外部实体结束
- 外部实体之间不应该存在数据流
注意事项:
1.命名:在画数据流图中,数据流、数据存储、处理的命名要易于理解其含义。命名时不能使用抽象含义的名字,比如“数据”、“信息”等等。处理名的命名也要反映其处理的功能,不能使用“处理”、“操作”这些笼统的词。
2.数据流图反映的是系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词类,整个图中不反映处理的执行顺序。
3.每个处理至少有一个输入数据流和一个输出数据流,反映出此处理数据的来源与处理的结果。
4.处理的编号:子图的编号是父图中相应加工的编号的扩充,子图上加工的编号的方法是由父图号、小数点及子图的局部号组成。
5.系统分析中要区别物流和数据流。数据流反映能用计算机处理的数据,并不是实物。
6.在数据流图表示系统的数据流向时,一般都要用到父图与子图来描述不同的层次。这时要注意父图与子图的平衡。子图的输入、输出数据流同父图相应 处理 的输入、输出数据流必须一致,即父图与子图的平衡。
7.分层处理的过程中,当某层数据流图中的数据存储不是父图中相应 处理 的外部接口,而只是本图中某些 处理 之间的数据接口,则称这些数据存储为局部数据存储。如果是局部数据存储的话,不要在父图的输入中加入该数据存储,而是在子图相应的 处理 上才把它画出来,这样有助于实现信息隐蔽。
8.要注意分层的合理性,减少 处理 之间输入、输出数据流的数目,增加数据流图的可理解性。
四、DFD图典型错误

例题:
答案:B
(1)E1与E2实体之间不能有数据流(外部实体之间不用存在数据流,违背了数据守恒原则)
(2)E2与DS1之间不能有数据流(外部实体与数据库之间不能直接存在数据流,违背了数据守恒原则)
(3)不应有DF7数据流(数据库之间不存在数据流,违背了数据守恒原则)
(4)P1没有输入(一个加工必须同时有输入输出,违背了守恒处理原则)
(5)P3没有输出(一个加工必须同时有输入输出,违背了守恒处理原则)
(6)P4进出数据流同名(一个加工的输入输出不同名,违背了守恒处理原则)
五、DFD模型总结
- 在关联图中不画数据存储
- 数据流不反映处理顺序,显示数据通过系统的流程,因此“处理”可以并行工作
- “处理/数据存储”既要有输入,又有输出
- 若输入数据流不完全用来产生输出数据流,称之为黑洞
- 若输出数据流不完全依赖于输入数据流,称之为奇迹