软考高级之系统架构师之数据流图和流程图
数据流图
概述
数据流图,DFD,用于表示业务信息系统中的数据流,它表达系统中的据传从输入到存储间所涉及的程序。采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
数据流图 = 数据流 + 图
主要作用
数据流图从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系统所完成的功能。主要作用如下:
- 数据流图是理解和表达用户需求的工具,是需求分析的手段。由于数据流图简明易懂,不需要任何计算机专业知识就可以理解它,因此,系统分析师可以通过数据流图与用户进行交流;
- 数据流图概括地描述系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点;
- 数据流图作为一个存档的文字材料,是进一步修改和充实开发计划的依据。
概念
顶层图:
0层图:就是把顶层图的加工分解成若干个子加工,并用数据流将这些子加工连接起来,使得顶层图的输入数据经过若干子加工处理后,变成顶层图的输出数据流。
1层图:
除顶层数据流图外,其他数据流图从零开始编号。
分类
顶层、中层、底层
根据层级数据流图分为顶层数据流图、中层数据流图和底层数据流图:
- 顶层数据流图:只含有一个加工表示整个系统;输出数据流和输入数据流为系统的输入数据和输出数据,表明系统的范围,以及与外部环境的数据交换关系。
- 中层数据流图:对父层数据流图中某个加工进行细化,而它的某个加工也可以再次细化,形成子图;中间层次的多少,一般视系统的复杂程度而定。
- 底层数据流图:指其加工不能再分解的数据流图,其加工称为原子加工。
逻辑、物理
从另一个角度,数据流图可以分为逻辑图和物理图:
- 逻辑数据流图:描述用以完成某业务功能所涉及的业务层面的数据流动。逻辑数据流图主要表达业务和业务运作,它不关心系统将如何构建。可以忽略实现细节,如计算机配置、数据存储技术、信或消息传递方法,而集中表达系统所执行的功能,如数据收集、数据跟信息的转换和信息报告。
- 物理数据流图:描述系统层面的数据流动。物理数据流程图显示系统将如何被建设起来,包括系统中的硬件、软件、文件和人员。它使逻辑数据流图中描述的程序正确地实现以达到业务目标。
逻辑数据流图
好处
- 逻辑数据流图主要呈现业务信息,该图以业务活动为中心,故有助于与用户间的交流和沟通
- 逻辑数据流图乃基于业务事件而绘制,并且独立于特定的技术或物理布局,这让系统更加稳定
- 逻辑数据流图让分析师更了解正在研究的业务,并确定决策背后的原因。
- 基于逻辑数据流图而实现的系统更容易维护,因为业务功能不会经常发生变化
- 很多时候,逻辑数据流图不包含文件或数据库以外的数据存储,这比物理数据流图更易于绘制
- 通过修改逻辑数据流图可以很容易地产生物理数据流图。
物理数据流图
好处
- 厘清哪些程序是手动的,哪些流程是自动的:手动程序需要详细的文档,而自动化流程则需要开发计算机程序
- 比逻辑数据流图更详细地描述过程,描述处理数据的所有步骤
- 排序过程必须按照特定顺序完成,描述导致有意义结果的活动顺序。例如,必须在生成摘要报告之前执行更新
- 识别临时数据存储:描述临时存储,例如在杂货店中用于顾客收据(报告)的销售交易文件
- 指定文件和打印输出的实际名称:逻辑数据流图描述实际的文件名和报告,以便程序员在系统的开发阶段将它们与数据字典(Data Dictionary)联系起来
- 添加控件以确保过程正确完成。
设计原则
数据流图的设计原则:
- 复杂性最小化原则:DFD分层结构就是把信息划分为晓得且相对独立的一大批子集例子,这样就可以单独考查每一个DFD
- 接口最小化原则:在设计模式时,模型中各个元素之间的接口数或者连接数最小化
- 数据流一致性原则:过程与过程分解数据流一致,有数据流出就有数据流入;数据流入需要有相应的数据加工
四大要素
也叫四种基本符号:
- 外部实体:数据源及数据终点,指系统之外、又与系统有联系的人或事物,它表达该系统数据的外部来源和去处;位于被建模的系统之外的信息生产者或消费者,是不能由计算机处理的成分,它们分别表明数据处理过程的数据来源及数据去向,用标有名字的方框表示
- 数据加工:描述输入数据流到输出数据之间的变换,即输入数据流经过什么处理后变成输出数据。对数据流的变换,一般用圆圈表示
- 数据存储:某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质。可访问的存储信息,一般用标有名字的直线段表示。
- 数据流:处理功能的输入/输出,具有名字和流向的数据,用标有名字的箭头表示
绘制步骤
简单来说,三个步骤:
- 确定系统的输入输出:这个阶段,应该充分了解“系统从哪些外部实体接受什么数据”、“系统向哪些外部实体送出什么数据”等信息,这将是第二步绘制顶层数据流程的关键。
- 由外向里画系统的顶层数据流图:确定系统的输入输出后,我们将可以将它们用“加工”连接起来,“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方。产物:顶层图。
- 自顶向下逐层分解,绘出分层数据流图:对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。产物:0层图、1层图。
数据流图的绘制是一个自项向下、由外到里的过程,通常按照以下几个步骤进行:
- 画系统的输入和输出:在图的边缘标出系统的输入数据流和输出数据流。这一步骤其实是决定研究的内容和系统的范围。在画的时候,可以先将尽可能多的数据流画出来,然后再删除多余的,增加遗漏的。
- 画数据流图的内部:将系统的输入、输出用一系列的处理连接起来,可以从输入数据流画向输出数据流,也可以从中间画出去。
- 为每一个数据流命名:命名的好坏与数据流图的可理解性密切相关,应避免使用空洞的名字。
- 为加工命名:使用动宾短语为每个加工命名。每画好一张数据流图,就需要进行检查和修改,检查和修改的原则如下。
- 数据流图中的所有图形符号只限于前述4种基本图形元素,图上每个元素都必须有名字。
- 每个加工至少有一个输入数据流和一个输出数据流,而且要保持数据守恒。也就是,一个加工的所有输出数据流中的数据必须能从该加工的输入流中直接获得,或者通过该加工能产生的数据。一个加工的输出数据流不应与输入数据流同名,即使它们的组成完全相同。
- 在数据流图中,需按层给加工编号。编号表明该加工处在哪一层,以及上下层的父图与子图的对应关系。
- 规定任何一个数据流图子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致,即父图与子图的平衡。也就是说,父图中的某加工的输入/输出流必须与它的所有子图的输入/输出数据流在数量上和名字上相同。如果父图中的一个输入(输出)数据流对应于子图中的几个输入(输出)数据流,而子图中组成这些数据流的数据项的全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
- 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
- 可以在数据流图中加入物质流,帮助用户理解数据流图,但不可夹带控制流。
注意事项
- 画数据流而不是控制流。数据流反映系统“做什么”,不反映“如何做”,箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序
- 一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流
- 每个加工至少有一个输入数据流和一个输出数据流
- 一个加工的输出数据流,不应与输入数据流同名,即使他们的组成完全相同
- 外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工
- 如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号
- 父图与子图的平衡。父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同,此即父图与子图的平衡
- 当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
常见错误
一个正常的流程为:实体->
加工->
数据存储->
加工->
实体
场景错误:
- 实体
->
实体 - 加工
->
加工 - 数据存储
->
数据存储 - 实体
->
数据存储 - 数据存储
->
实体
错误种类分析:
只有输入没有输出,产生数据黑洞
只有输出没有输入,无中生有
外部实体没有经过加工处理,直接到数据存储
外部实体之间没有加工处理,存在直接数据流
数据存储没有输出的数据流
加工不能只进数据流,同样也不能只出数据流
实体与实体之间有数据流
实体与数据存储之间有数据流,存储和存储之间有数据流
流程图
概述
流程图 = 流程 + 图
所谓流程,IS09000系列国际标准中将流程定义为一组将输入转化为输出的相互群或相互作用的活动。流程有六个要素构成,分别是流程的输入资源、流程中的若干活动、活动的相互作用、输出结果、顾客、最终流程创造的价值。
一个流程会将这6个要素有序串联起来,而流程图则是承载上述程序的图形载体。
根据流程图流动信息的不同,又可以细分为产品流程图、数据流程图、程序流程图:
- 页面流程图,呈现页面跳转顺序
- 数据流程图,用于表达数据流转
- 程序流程图,用户表述程序执行顺序
PFD
程序流程图,又称程序框图,是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上,通过对输入输出数据和处理过程的详细分析,将计算机的主要运行步骤和内容标识出来。
符号规范
几个重要且最常用的符号:
结构规范
流程图有三大结构:
- 顺序结构:按先后顺序执行,
- 选择结构:又称分支结构,判断给定的条件,根据判断结果来控制程序的流程
- 循环结构:又称为重复结构,在程序中需要反复执行某个功能而设置的一种程序结构。根据循环体中的条件,判断重复执行某个功能还是退出循环。又可细分为以下两种形式:
- 先判断后执行的循环结构(当型结构)
- 先执行后判断的循环结构(直到型结构)
路径规范
除符号规范、结构规范,绘制流程图还要注意一些约定俗成的路径规范:
- 绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列
- 一个流程从开始符开始,以结束符结束。开始符号只能出现一次,而结束符号可出现多次。若流程足够清晰,可省略开始、结束符号
- 同一流程图内,符号大小需要保持一致,同时连接线不能交叉,连接线不能无故弯曲
- 流程处理关系为并行关系的,需要将流程放在同一高度
- 处理流程须以单一入口和单一出口绘制,同一路径的指示箭头应只有一个
工具
非常多,如:VISIO、ProcessOn、亿图图示、drawio
区别
- 数据流图中的处理过程可并行;流程图在某个时间点只能处于一个处理过程
- 数据流图展现系统的数据流;流程图展现系统的控制流
- 数据流图展现全局的处理过程,过程之间遵循不同的计时标准;流程图中处理过程遵循一致的计时标准
- 数据流图适用于系统分析中的逻辑建模阶段;流程图适用于系统设计中的物理建模阶段