【软件工程】数据流图/DFD概念符号/流程图分层/数据字典
目录
[一、数据流图 ( DFD ) 简介](#一、数据流图 ( DFD ) 简介)
[二、数据流图 ( DFD ) 概念符号](#二、数据流图 ( DFD ) 概念符号)
[三、数据流图 ( DFD ) 分层](#三、数据流图 ( DFD ) 分层)
[五、据流图平衡原则 :](#五、据流图平衡原则 :)
[1、父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 平衡](#1、父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 平衡)
一、数据流图 ( DFD ) 简介
数据流图 ( Data Flow Diagram ) :
在 需求分析 阶段 , 使用的工具 , 在 "结构化分析" 中 , 数据流图 ( DFD ) 使用频率很高 ;
数据流图涉及内容 : 基本概念符号 , 数据字典 , 数据平衡原则 ;
二、数据流图 ( DFD ) 概念符号
1、数据流
数据流 : 数据流由 一组固定成分的数据 组成 , 表示 数据的流向 ;
数据流命名 : 每个数据流都有一个 命名 , 该命名表达了 该数据流传输 的 数据的含义 ; 如在箭头上标注 "账号信息" , 表示该数据流是传输账号信息 的 , 表示 数据的内容 ;
数据字典 : 数据流箭头上只标明了 "账号信息" , 没有具体的格式内容 , 是只有账号 , 还是有账号/密码/验证码等信息 , 这些数据详细格式 , 都在 数据字典中定义 ;
符号表示 : 数据流 使用 箭头 表示 , 箭头所指的方向 , 代表了数据流向 ;
2、加工 ( 核心 )
加工 : 描述 "输入数据流" 到 "输出数据流" 之间的变换 , 即 对数据进行了什么样的处理 , 使得 "输入数据流" 变为 "输出数据流" ;
主要操作 : 在程序中的体现是 处理 数据的过程 , 向 "加工" 中输入数据流后 , 将数据进行加工 , 处理 , 变换后 , 产生新的 "输出数据流" ;
符号表示 : 使用 圆形 / 圆角矩形 表示加工 ;
3、数据存储
数据存储 ( 文件 ) : 表示 暂时存储的数据 , 数据存储的粒度是以 表 为单位 ;
文件名称 : 每个 数据存储 ( 文件 ) 都有 名字 ;
方向 : 流向文件的数据流 表示 向文件内写入内容 , 从文件流出的数据流 表示 从文件读取内容 ;
符号表示 : 使用 双横线 / 半框形矩形 表示
4、外部实体
外部实体 : 软件系统之外的 人员 / 组织 ;
符号表示 : 矩形 ;
三、数据流图 ( DFD ) 分层
1、分层说明
数据流图分层 , 最上层是 顶层数据流图 , 第二层是 0 层数据流图 , ⋯ ⋯ , 最底层是 底层数据流图
"顶层数据流图" 与 "底层数据流图" 之间是若干 中层数据流图 ,
中层数据流图 需要进行编号 , 从 0 0 0 开始编号 ;
2、顶层数据流图
顶层数据流图 : 中间的椭圆 是需要开发的 系统 , 周边的矩形 表示的是 外部实体人或组织 , 外部实体 与 系统 之间 , 有数据传输关系 ;
一个形象的说明是 多个人吃火锅 , 外层周边是人 , 中心位置火锅是系统 ;
顶层数据流图 能够表达的信息是非常有限的 , 其 将整个系统 , 使用一个节点表示 ,
其可以体现出 系统与外界实体之间的交互 ,
但是 系统内部的情况 , 系统内部模块之间的数据交换 是没有体现的 ;
3、中层数据流图
将 "顶层数据流图" 进行细化 , 细化后的 0 0 0 层数据流图 ,
与 顶层数据流图 比较没有变化的部分 : 外部实体 , 外部实体与系统之间的数据流 , 是没有变化的 ;
变化部分 : 有变化的部分是系统内部 , 系统内部进行了细化 , 原来系统是一个节点 , 在 中层数据流图 中 , 会将一个节点 拆分成 多个节点 , 这些节点就是系统中的数据处理部件 , 即 加工 ;
这些数据处理部件 ( 加工 ) 之间会有数据流的交互 ,
4、底层数据流图
针对每个加工 节点 , 将其拆分 , 绘制其中的更详细的数据流转情况 ;
数据流图 ( DFD ) 分层 , 是从 顶层 -> 中层 -> 底层 , 逐层进行分解 , 这种分解思路 , 与结构化的开发方法 , 是完全匹配的 ;
因此 , 数据流图 是 结构化 开发方法中 , 最常用的工具 ;
绘制数据流图时 , 要保证 上一层数据流图 与 下一层数据流图 保持平衡 , 这就是 数据流图平衡原则 ;
四、数据字典
数据字典 可以 配合 数据流图 使用 , 对数据进行诠释 , 可以让开发者更加清楚 数据的组成 , 格式 ;
数据字典中包含的符号 :
① "=" : 含义是 "被定义为" ; 如 : x = a + b , 表示 x 数据 被定义为 由 a 与 b 组成 ;
② "+" : 含义是 "与" ; 如 : x = a + b , 表示 x 数据 被定义为 由 a 与 b 组成 ;
③ "[... | ...]" , "[... , ...]" : 含义是 "或" ; 如 : x = [ a , b ] , x = [ a ∣ b ] , 表示 x 由 a 或 b 组成 , 二者选其一 ;
④ "{...}" : 含义是 "重复" ; 如 : x = { a } , 表示 x 由多个 0 , 或多个 a 组成 ;
⑤ "(...)" : 含义是 "可选" ; 如 x = ( a ) , 表示 a 可以出现在 x 数据中 , 也可以不出现 ;
数据字典示例 : 学生数据的数据字典 ;
学生 = 姓名 + 学号 + 年龄 + 年级 + 学校 + 地址
学号 = "1"..."100"
班级 = [一年级 | 二年级 | 三年级 ]
五、据流图平衡原则 :
- 父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 之间的平衡
- 子图 内部的平衡
1、父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 平衡
父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 平衡 :
利用 数据流图平衡原则 , 可以找出 在 细化上层数据流图 时 , 忽略的 数据流 ;
根据 顶层数据流 可以 确定缺失的 底层数据流 ; 根据底层数据流 , 可以补充缺失的顶层数据流 ;
找 0 层数据流图 缺失的数据流时 , 先查看 顶层数据流图 , 在 外部实体 与 系统之间 , 存在哪些 数据流 , 这些数据流 是否 在 0 层数据流图 中出现过 ;
找 顶层数据流图 中缺失的数据流时 , 查看 0 层数据流图中 , 有没有出现缺失的数据流 ;
在 顶层数据流图 与 0 层数据流图 之间 , 只能确定 外部实体 与 系统 之间的数据流 ,
系统内部的数据流 , 在 顶层数据流图中 , 是没有体现的 ;
父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 之间的平衡匹配方法 :
① 个数一致 : 两层数据流图中的 数据流个数一致 ;
② 方向一致 : 两层数据流图中的 数据流方向一致 ;
2、子图内平衡
子图内平衡 : 对于数据流图的任意一个加工 , 既有输入 , 又有输出 ;
加工 : 描述 "输入数据流" 到 "输出数据流" 之间的变换 , 即 对数据进行了什么样的处理 , 使得 "输入数据流" 变为 "输出数据流" ;
主要操作 : 在程序中的体现是 处理 数据的过程 , 向 "加工" 中输入数据流后 , 将数据进行加工 , 处理 , 变换后 , 产生新的 "输出数据流" ;
黑洞 : 某个加工 , 只有输入 , 没有输出 , 称为黑洞 ;
奇迹 : 某个加工 , 只有输出 , 没有输入 , 称为奇迹 ;
六、数据流图绘制原则
数据流图 由 数据流 , 加工 , 数据存储 , 外部实体 组成 , 先找出 三个具体存在的事物 外部实体 , 加工 , 数据存储 , 然后在为这些事物添加 数据流 箭头 ;
拿到一个需求之后 , 绘制数据流图流程 :
① 外部实体 : 找出外部实体 , 使用系统的 人 或 组织 ;
② 加工 : 找出系统中的 中间件 加工 , 处理数据用的 ;
③ 数据存储 : 找到 暂时存储数据的载体 , 数据存储 ;
④ 数据流 : 在上述 外部实体 , 加工 , 数据存储 基础上 , 绘制 数据流 箭头 ;