软考高级之系统架构师之数据流图和流程图

数据流图

概述

数据流图,DFD,用于表示业务信息系统中的数据流,它表达系统中的据传从输入到存储间所涉及的程序。采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。

数据流图 = 数据流 + 图

主要作用

数据流图从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系统所完成的功能。主要作用如下:

  • 数据流图是理解和表达用户需求的工具,是需求分析的手段。由于数据流图简明易懂,不需要任何计算机专业知识就可以理解它,因此,系统分析师可以通过数据流图与用户进行交流;
  • 数据流图概括地描述系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点;
  • 数据流图作为一个存档的文字材料,是进一步修改和充实开发计划的依据。

概念

顶层图:
0层图:就是把顶层图的加工分解成若干个子加工,并用数据流将这些子加工连接起来,使得顶层图的输入数据经过若干子加工处理后,变成顶层图的输出数据流。
1层图:

除顶层数据流图外,其他数据流图从零开始编号。

分类

顶层、中层、底层

根据层级数据流图分为顶层数据流图、中层数据流图和底层数据流图:

  • 顶层数据流图:只含有一个加工表示整个系统;输出数据流和输入数据流为系统的输入数据和输出数据,表明系统的范围,以及与外部环境的数据交换关系。
  • 中层数据流图:对父层数据流图中某个加工进行细化,而它的某个加工也可以再次细化,形成子图;中间层次的多少,一般视系统的复杂程度而定。
  • 底层数据流图:指其加工不能再分解的数据流图,其加工称为原子加工。

逻辑、物理

从另一个角度,数据流图可以分为逻辑图和物理图:

  • 逻辑数据流图:描述用以完成某业务功能所涉及的业务层面的数据流动。逻辑数据流图主要表达业务和业务运作,它不关心系统将如何构建。可以忽略实现细节,如计算机配置、数据存储技术、信或消息传递方法,而集中表达系统所执行的功能,如数据收集、数据跟信息的转换和信息报告。
  • 物理数据流图:描述系统层面的数据流动。物理数据流程图显示系统将如何被建设起来,包括系统中的硬件、软件、文件和人员。它使逻辑数据流图中描述的程序正确地实现以达到业务目标。
逻辑数据流图

好处

  • 逻辑数据流图主要呈现业务信息,该图以业务活动为中心,故有助于与用户间的交流和沟通
  • 逻辑数据流图乃基于业务事件而绘制,并且独立于特定的技术或物理布局,这让系统更加稳定
  • 逻辑数据流图让分析师更了解正在研究的业务,并确定决策背后的原因。
  • 基于逻辑数据流图而实现的系统更容易维护,因为业务功能不会经常发生变化
  • 很多时候,逻辑数据流图不包含文件或数据库以外的数据存储,这比物理数据流图更易于绘制
  • 通过修改逻辑数据流图可以很容易地产生物理数据流图。
物理数据流图

好处

  • 厘清哪些程序是手动的,哪些流程是自动的:手动程序需要详细的文档,而自动化流程则需要开发计算机程序
  • 比逻辑数据流图更详细地描述过程,描述处理数据的所有步骤
  • 排序过程必须按照特定顺序完成,描述导致有意义结果的活动顺序。例如,必须在生成摘要报告之前执行更新
  • 识别临时数据存储:描述临时存储,例如在杂货店中用于顾客收据(报告)的销售交易文件
  • 指定文件和打印输出的实际名称:逻辑数据流图描述实际的文件名和报告,以便程序员在系统的开发阶段将它们与数据字典(Data Dictionary)联系起来
  • 添加控件以确保过程正确完成。

设计原则

数据流图的设计原则:

  • 复杂性最小化原则:DFD分层结构就是把信息划分为晓得且相对独立的一大批子集例子,这样就可以单独考查每一个DFD
  • 接口最小化原则:在设计模式时,模型中各个元素之间的接口数或者连接数最小化
  • 数据流一致性原则:过程与过程分解数据流一致,有数据流出就有数据流入;数据流入需要有相应的数据加工

四大要素

也叫四种基本符号:

  • 外部实体:数据源及数据终点,指系统之外、又与系统有联系的人或事物,它表达该系统数据的外部来源和去处;位于被建模的系统之外的信息生产者或消费者,是不能由计算机处理的成分,它们分别表明数据处理过程的数据来源及数据去向,用标有名字的方框表示
  • 数据加工:描述输入数据流到输出数据之间的变换,即输入数据流经过什么处理后变成输出数据。对数据流的变换,一般用圆圈表示
  • 数据存储:某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质。可访问的存储信息,一般用标有名字的直线段表示。
  • 数据流:处理功能的输入/输出,具有名字和流向的数据,用标有名字的箭头表示

绘制步骤

简单来说,三个步骤:

  1. 确定系统的输入输出:这个阶段,应该充分了解“系统从哪些外部实体接受什么数据”、“系统向哪些外部实体送出什么数据”等信息,这将是第二步绘制顶层数据流程的关键。
  2. 由外向里画系统的顶层数据流图:确定系统的输入输出后,我们将可以将它们用“加工”连接起来,“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方。产物:顶层图。
  3. 自顶向下逐层分解,绘出分层数据流图:对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。产物:0层图、1层图。

数据流图的绘制是一个自项向下、由外到里的过程,通常按照以下几个步骤进行:

  • 画系统的输入和输出:在图的边缘标出系统的输入数据流和输出数据流。这一步骤其实是决定研究的内容和系统的范围。在画的时候,可以先将尽可能多的数据流画出来,然后再删除多余的,增加遗漏的。
  • 画数据流图的内部:将系统的输入、输出用一系列的处理连接起来,可以从输入数据流画向输出数据流,也可以从中间画出去。
  • 为每一个数据流命名:命名的好坏与数据流图的可理解性密切相关,应避免使用空洞的名字。
  • 为加工命名:使用动宾短语为每个加工命名。每画好一张数据流图,就需要进行检查和修改,检查和修改的原则如下。
  • 数据流图中的所有图形符号只限于前述4种基本图形元素,图上每个元素都必须有名字。
  • 每个加工至少有一个输入数据流和一个输出数据流,而且要保持数据守恒。也就是,一个加工的所有输出数据流中的数据必须能从该加工的输入流中直接获得,或者通过该加工能产生的数据。一个加工的输出数据流不应与输入数据流同名,即使它们的组成完全相同。
  • 在数据流图中,需按层给加工编号。编号表明该加工处在哪一层,以及上下层的父图与子图的对应关系。
  • 规定任何一个数据流图子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致,即父图与子图的平衡。也就是说,父图中的某加工的输入/输出流必须与它的所有子图的输入/输出数据流在数量上和名字上相同。如果父图中的一个输入(输出)数据流对应于子图中的几个输入(输出)数据流,而子图中组成这些数据流的数据项的全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
  • 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
  • 可以在数据流图中加入物质流,帮助用户理解数据流图,但不可夹带控制流。

注意事项

  1. 画数据流而不是控制流。数据流反映系统“做什么”,不反映“如何做”,箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序
  2. 一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流
  3. 每个加工至少有一个输入数据流和一个输出数据流
  4. 一个加工的输出数据流,不应与输入数据流同名,即使他们的组成完全相同
  5. 外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工
  6. 如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号
  7. 父图与子图的平衡。父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同,此即父图与子图的平衡
  8. 当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。

常见错误

一个正常的流程为:实体->加工->数据存储->加工->实体

场景错误:

  • 实体->实体
  • 加工->加工
  • 数据存储->数据存储
  • 实体->数据存储
  • 数据存储->实体

错误种类分析:
 只有输入没有输出,产生数据黑洞
 只有输出没有输入,无中生有
 外部实体没有经过加工处理,直接到数据存储
 外部实体之间没有加工处理,存在直接数据流
 数据存储没有输出的数据流
 加工不能只进数据流,同样也不能只出数据流
 实体与实体之间有数据流
 实体与数据存储之间有数据流,存储和存储之间有数据流

流程图

概述

流程图 = 流程 + 图

所谓流程,IS09000系列国际标准中将流程定义为一组将输入转化为输出的相互群或相互作用的活动。流程有六个要素构成,分别是流程的输入资源、流程中的若干活动、活动的相互作用、输出结果、顾客、最终流程创造的价值。

一个流程会将这6个要素有序串联起来,而流程图则是承载上述程序的图形载体。

根据流程图流动信息的不同,又可以细分为产品流程图、数据流程图、程序流程图:

  • 页面流程图,呈现页面跳转顺序
  • 数据流程图,用于表达数据流转
  • 程序流程图,用户表述程序执行顺序

PFD

程序流程图,又称程序框图,是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上,通过对输入输出数据和处理过程的详细分析,将计算机的主要运行步骤和内容标识出来。

符号规范

几个重要且最常用的符号:
在这里插入图片描述

结构规范

流程图有三大结构:

  • 顺序结构:按先后顺序执行,
  • 选择结构:又称分支结构,判断给定的条件,根据判断结果来控制程序的流程
  • 循环结构:又称为重复结构,在程序中需要反复执行某个功能而设置的一种程序结构。根据循环体中的条件,判断重复执行某个功能还是退出循环。又可细分为以下两种形式:
    • 先判断后执行的循环结构(当型结构)
    • 先执行后判断的循环结构(直到型结构)

路径规范

除符号规范、结构规范,绘制流程图还要注意一些约定俗成的路径规范:

  1. 绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列
  2. 一个流程从开始符开始,以结束符结束。开始符号只能出现一次,而结束符号可出现多次。若流程足够清晰,可省略开始、结束符号
  3. 同一流程图内,符号大小需要保持一致,同时连接线不能交叉,连接线不能无故弯曲
  4. 流程处理关系为并行关系的,需要将流程放在同一高度
  5. 处理流程须以单一入口和单一出口绘制,同一路径的指示箭头应只有一个

工具

非常多,如:VISIO、ProcessOn、亿图图示、drawio

区别

  • 数据流图中的处理过程可并行;流程图在某个时间点只能处于一个处理过程
  • 数据流图展现系统的数据流;流程图展现系统的控制流
  • 数据流图展现全局的处理过程,过程之间遵循不同的计时标准;流程图中处理过程遵循一致的计时标准
  • 数据流图适用于系统分析中的逻辑建模阶段;流程图适用于系统设计中的物理建模阶段

实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/104896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 查找波峰和波谷

import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks# 生成示例信号 x np.array([1, 3, 7, 1, 2, 6, 0, 4, 3, 2, 5, 1])# 寻找波峰 peaks, _ find_peaks(x)# 寻找波谷(使用信号的负数形式) valleys, _ find_pe…

【html】图片多矩形框裁剪

说明 由于项目中需要对一个图片进行多选择框进行裁剪&#xff0c;所以特写当前的示例代码。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><base href"/"><title>图片裁剪</tit…

第1篇 目标检测概述 —(3)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;主要包括几个指标&#xff1a;精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、交并比&#xff08;IoU&#xff09;、平均…

GitLab升级16.5.0后访问提示502

系统是兼容CentOS8的TencentOS3.1 GitLab原来的版本是16.4.1 使用yum升级时发现GitLab有新版本,决定升级。 升级过程无异常,出现升级成功的提示。 可是意外的时,访问站点时提示502. GitLab比较吃资源,启动的服务较多。之前也有等会就正常的情况。 这次没那么幸运,一…

js创建 ajax 过程

目录 前言&#xff1a;AJAX 技术的重要性 详解&#xff1a;创建 AJAX 请求的步骤 1. 创建 XMLHttpRequest 对象 2. 配置请求 3. 处理响应 4. 发送请求 5. 处理异步请求 解析&#xff1a;AJAX 请求的重要性和限制 总结&#xff1a; 前言&#xff1a;AJAX 技术的重要性 …

FastAPI 快速学习之 Flask 框架对比

目录 一、前言二、FastAPI 优势三、Hello World四、HTTP 方法五、URL 变量六、查询字符串七、POST 请求八、文件上传九、表单提交十、Cookies十一、模块化视图十二、数据校验十三、自动化文档Swagger 风格ReDoc 风格 十四、CORS跨域 一、前言 本文主要对 FastAPI 与 Flask 框架…

驱动开发5 阻塞IO实例、IO多路复用

1 阻塞IO 进程1 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h>int main(int argc, char co…

【2021集创赛】Arm杯三等奖:基于FPGA的人脸检测SoC设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;合肥工业大学 队伍名称&#xff1a;芯创之家 指导老师&#xff1a;邓红辉、尹勇生 参赛杯赛&#xff1a;Arm杯 参赛人员&#xff1a;王亮 李嘉燊 金京 获奖情…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

Hadoop分布式安装

首先准备好三台服务器或者虚拟机&#xff0c;我本机安装了三个虚拟机&#xff0c;安装虚拟机的步骤参考我之前的一篇 virtualBox虚拟机安装多个主机访问虚拟机虚拟机访问外网配置-CSDN博客 jdk安装 参考文档&#xff1a;Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并…

干货很干:5个有效引流方法,让客户找上门

如何才能把用户引流到私域&#xff1f;是很多老板&#xff0c;店主&#xff0c;线上创业者的卡点&#xff0c;今天分享5个实用方法&#xff1a; ✅线下导流 ✅巧用搜索 ✅同行互推 ✅社群引流 ✅内容输出 所以引流不仅需要知道方法&#xff0c;还需要知道底层逻辑&#xff0c;也…

uniapp开发微信小程序的巨坑

1、不能使用v-show 2、关于插槽的巨坑 这里我真的是摸索了好久。 小程序版本&#xff1a; hbuilderx版本&#xff1a; 其他版本不知道会不会出现以下情况。 如果组件中带有插槽&#xff0c;那么使用插槽时有以下要注意&#xff1a; 1、如果子组件通过slot&#xff0c;向外…

SQL sever中的函数(基础)

目录 一、聚合函数 1.1聚合函数概述 1.2SUM(求和)函数 1.3AVG(平均值)函数 1.4MIN(最小值)函数 1.5MAX(最大值)函数 1.6COUNT(统计)函数 1.6.1COUNT函数用法分类 1.6.2COUNT函数用法示例 1.7DISTINCT(取不重复记录)函数 1.8查询重复记录 二、数学函数 2.1数学函数…

ELK概述部署和Filebeat 分布式日志管理平台部署

ELK概述部署、Filebeat 分布式日志管理平台部署 一、ELK 简介二、ELK部署2.1、部署准备2.2、优化elasticsearch用户拥有的内存权限2.3、启动elasticsearch是否成功开启2.4、浏览器查看节点信息2.5、安装 Elasticsearch-head 插件2.6、ELK Logstash 部署&#xff08;在 Apache 节…

中国密码算法与NIST标准对比

1. 引言 NIST定义AES为标准的对称密钥加密算法。但NIST被指出可能在加密算法中添加NSA后门。为此&#xff0c;在中国&#xff0c;ShāngM (SM) 系列密码算法&#xff0c;作为TLS 1.3集成和无线认证的备选方案&#xff1a; SM2&#xff1a;定义了认证&#xff08;签名&#xf…

cuda卸载

去查看你的电脑显卡对应的cuda版本&#xff0c;不然还是一整个用不到gpu的情况嘿嘿. 啊啊啊啊打开控制面板看一下&#xff0c;驱动不要乱卸载&#xff1a; 这些东西不能全部卸载了哦&#xff0c;只能卸载含有“CUDA”的那几个&#xff08;其实其他的可能也没有用 但是不懂的哇 …

用Rust和cURL库做一个有趣的爬虫

以下是一个使用 Rust 和 cURL 库的下载器程序&#xff0c;用于从wechat下载音频。此程序使用了 [/get_proxy] 提供的代码。 extern crate curl;use std::io::{self, Read}; use std::process::exit; use curl::easy::Easy;fn main() {let url "https://www.wechat.com/au…

vue3 源码解析(1)— reactive 响应式实现

前言 本文是 vue3 源码解析系列的第一篇文章&#xff0c;项目代码的整体实现是参考了 v3.2.10 版本&#xff0c;项目整体架构可以参考之前我写过的文章 rollup 实现多模块打包。话不多说&#xff0c;让我们通过一个简单例子开始这个系列的文章。 举个例子 <!DOCTYPE html…

Web攻防05_MySQL_二次注入堆叠注入带外注入

文章目录 MYSQL-二次注入-74CMS思路描述&#xff1a;注入条件&#xff1a;案例&#xff1a;74CMS个人中心简历功能 MYSQL-堆叠注入-CTF强网思路描述注入条件案例&#xff1a;2019强网杯-随便注&#xff08;CTF题型&#xff09; MYSQL-带外注入-DNSLOG注入条件使用平台带外应用场…

Mybatis-Plus CRUD

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Mybatis-Plus CRUD 通用 Service CRUD 封装 IService 接口&#xff0c;进一步封装 CRUD 采用 get 查询、remove 删除 、list 查询集合、page 分页的前缀命名方式区分 …