当前位置: 首页 > news >正文

【软件工程】数据流图/DFD概念符号/流程图分层/数据字典

【软件工程】数据流图/DFD概念符号/流程图分层/数据字典

目录

【软件工程】数据流图/DFD概念符号/流程图分层/数据字典

一、数据流图 ( DFD ) 简介

二、数据流图 ( DFD ) 概念符号

1、数据流

 2、加工 ( 核心 )

3、数据存储

4、外部实体

三、数据流图 ( DFD ) 分层 

1、分层说明 

2、顶层数据流图

3、中层数据流图

4、底层数据流图

四、数据字典

五、据流图平衡原则 :

1、父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图 ) 平衡

2、子图内平衡

六、数据流图绘制原则


一、数据流图 ( 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、子图内平衡

子图内平衡 : 对于数据流图的任意一个加工 , 既有输入 , 又有输出 ;

加工 : 描述 “输入数据流”“输出数据流” 之间的变换 , 即 对数据进行了什么样的处理 , 使得 “输入数据流” 变为 “输出数据流” ;

主要操作 : 在程序中的体现是 处理 数据的过程 , 向 “加工” 中输入数据流后 , 将数据进行加工 , 处理 , 变换后 , 产生新的 “输出数据流” ;

黑洞 : 某个加工 , 只有输入 , 没有输出 , 称为黑洞 ;

奇迹 : 某个加工 , 只有输出 , 没有输入 , 称为奇迹 ;

六、数据流图绘制原则

数据流图数据流 , 加工 , 数据存储 , 外部实体 组成 , 先找出 三个具体存在的事物 外部实体 , 加工 , 数据存储 , 然后在为这些事物添加 数据流 箭头 ;

拿到一个需求之后 , 绘制数据流图流程 :

① 外部实体 : 找出外部实体 , 使用系统的 人 或 组织 ;

② 加工 : 找出系统中的 中间件 加工 , 处理数据用的 ;

③ 数据存储 : 找到 暂时存储数据的载体 , 数据存储 ;

④ 数据流 : 在上述 外部实体 , 加工 , 数据存储 基础上 , 绘制 数据流 箭头 ;

相关文章:

【软件工程】数据流图/DFD概念符号/流程图分层/数据字典

【软件工程】数据流图/DFD概念符号/流程图分层/数据字典 目录 【软件工程】数据流图/DFD概念符号/流程图分层/数据字典 一、数据流图 ( DFD ) 简介 二、数据流图 ( DFD ) 概念符号 1、数据流 2、加工 ( 核心 ) 3、数据存储 4、外部实体 三、数据流图 ( DFD ) 分层 1、…...

时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现CNN卷积神经网络时间序列预测未…...

Python中的字符串与字符编码

Hello,这里是Token_w的博客,欢迎您的到来 今天文章讲解的是Python中的字符串与字符编码,其中有基础的理论知识讲解,也有实战中的应用讲解,希望对你有所帮助 整理不易,如对你有所帮助,希望能得到…...

图数据库_Neo4j学习cypher语言_使用CQL命令002_删除节点_删除属性_结果排序Order By---Neo4j图数据库工作笔记0006

然后我们再来看如何删除节点 可以看到首先 我们这里 比如我要删除张三 可以看到 match (n:student) where n.name = "张三" delete n 这样就是删除了student集合中,name是张三的节点 然后我们再来看 如何来删除关系 match (n:student)-[r]->(m:student) where…...

C语言学习笔记---数据的存储详解

C语言程序设计笔记---015 C语言数据的存储1、数据类型的意义1.1、unsigned与signed数据类型例程11.2、补码与原码相互转换例程2 2、大小端的介绍2.1、大小端的例程12.2、大小端的例程2 --- 判断当前编译器环境属于大端或小端 3、综合练习题探究数据的存储3.1、练习题13.2、练习…...

js中的常见事件(鼠标事件,键盘事件,表单事件......)

JavaScript中的事件(Event)是指在网页中发生的某些特定操作(例如单击、加载页面等),可以被JavaScript代码捕获和处理。常见的事件有: 鼠标事件:单击(click)、双击(dblclick&#xff…...

学校如何公布录取情况?源代码公布了

作为一名负责公布学生录取情况的老师,对于录取查询公布工作我们可以按照以下流程来进行公布: 1. 录取结果准备:首先,你需要确保录取结果的准确性和完整性。与招生办公室或相关部门核对录取名单,确保没有遗漏或错误。如…...

JAVA基础知识(一)——Java语言描述、变量和运算符

TOC(Java语言描述、变量和运算符) 一、JAVA语言描述 1.1 java语言描述 JDK、JRE、jVM三者之间的关系,以及JDK、JRE包含的主要结构有哪些? JDKJre java的开发工具(javac.exe java.exe javadoc.exe) jre jvmjava的核心类库 为什…...

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) …...

冉冉升起的星火,再度升级迎来2.0时代!

文章目录 前言权威性评测结果 星火大模型多模态功能插件功能简历生成文档问答PPT生成 代码能力 福利 前言 前几天从技术群里看到大家都在谈论《人工智能大模型体验报告2.0》里边的内容,抱着好奇和学习的态度把报告看了一遍。看完之后瞬间被里边提到的科大讯飞的星火…...

centos7安装erlang及rabbitMQ

下载前注意事项: 第一:自己的系统版本,centos中uname -a指令可以查看,el8,el7,rabbitMQ的包不一样! 第二:根据rabbitMQ中erlang version找到想要下载rabbitMQ对应erlang版本&#x…...

项目介绍:《WeTalk》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

目录 引言: 前言: 技术栈: 主要功能: 功能详解: 1. 用户注册与登录: 2. 添加好友 3. 实时聊天 4. 消息未读 5. 删除聊天记录 6. 删除好友 未来展望: 项目地址: 结语&am…...

(el-Table)操作(不使用 ts):Element-plus 中Table 表格组件:多选修改成支持单选及表格相关样式的调整

Ⅰ、Element-plus 提供的 Table 表格组件与想要目标情况的对比: 1、Element-plus 提供 Table 组件情况: 其一、Element-ui 自提供的 Table 代码情况为(示例的代码): // Element-plus 自提供的代码: // 此时是使用了 ts 语言环境…...

【JAVA】变量的作用域与生存周期

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言变量的作用域变量的生命周期局部变量全局变量 前言 变量,我们学习过程中逃不掉的知识,无论在哪种语言中我们都需要学会去合理的运用它,今…...

中科亿海微FIFO使用

引言 FPGA(现场可编程门阵列)是一种可编程逻辑器件,具有灵活性和可重构性,广泛用于数字电路设计和嵌入式系统开发。在FPGA中,FIFO(First-In, First-Out)是一种常见的存储器结构,用于…...

使用maven打包时如何跳过test,有三种方式

方式一 针对spring项目&#xff1a; <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> …...

005-Spring 扩展点 :PostProcess

目录 Spring 扩展点 &#xff1a;PostProcess介绍PostProcess大纲文字明细使用方法示例Autowired 功能实现Resource 功能实现 后记 Spring 扩展点 &#xff1a;PostProcess 介绍 Spring 核心做的事情其实很简单就是&#xff1a;控制反转和依赖注入 也就是把 Class 解析为 Bea…...

MFC中的窗体绘制事件函数:OnCtlColor、OnPaint、OnNcPaint、OnDrawItem、OnEraseBkgnd、OnDraw

文章目录 CWnd::OnCtlColorCWnd::OnPaintCWnd::OnNcPaintCWnd::OnDrawItemCWnd::OnEraseBkgndCWnd::InvalidateRectCView::OnDraw 参考&#xff1a;https://learn.microsoft.com/ CWnd::OnCtlColor 即将绘制子控件时&#xff0c;框架会调用此成员函数。 afx_msg HBRUSH OnCt…...

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验。

dialogbot&#xff1a;开箱即用的对话机器人解决方案&#xff0c;涵盖问答型对话、任务型对话和聊天型对话等多种场景&#xff0c;支持网络检索问答、领域知识问答、任务引导问答和闲聊问答&#xff0c;为您提供全方位的对话交互体验。 人机对话系统一直是AI的重要方向&#xf…...

TCP服务器—实现数据通信

目录 前言 1.接口介绍 2.编写服务器 3.编写客户端 4.编译链接 5.测试 6.总结 前言 今天我们要介绍的是使用TCP协议实现数据通信&#xff0c;相比于之前写的UDP服务器实现数据信&#xff0c;在主体逻辑上并没有差别。客户端向服务器发送信息&#xff0c;服务器接受信息并回…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...