结构化分析工具之数据流图
什么是数据流
什么是数据流图?
数据流图(Data Flow Diagram)简称:DFD,通过系统对数据“流”的图形表示,是从数据传递和加工角度,显示了系统输入和输出的信息,数据的流向以及最终存储在哪里,能让用户更加直观的明白系统的工作原理。
数据流图是SA方法中用于表示逻辑系统模型的一种工具,它从数据传递和加工的角度,以图形的方式来刻画数据流从输入到输出的变换过程。它是一种图形化的系统模型,它在一张图中展示信息系统的主要需求,即输入、输出、处理(过程)、数据存储。是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
基本元素
由于从 DFD 中可以很容易地看出系统紧密结合的各个部分,而且整个图形模式只有 5 个符号需要记忆,所以深受分析人员的喜爱,因而广为流行。DFD 中包括以下几个基本元素:
- 数据流
符号:→
是由一组固定成分的数据组成,箭头的方向表示数据的流向,箭头的始点和终点分别代表数据流的源和目标。除了流向数据存储或从数据存储流出的数据不必命名外,每个数据流必须要有合适的名字,以反映数据流的含义。从一处到另一处的数据流向,如从输入或输出到一个过程的数据流。 - 加工
符号:○/O
又称过程。一步步地执行指令,完成输入到输出的转换。对数据进行加工处理。加工是对数据进行处理的单元,它接受一定的数据输入,对其进行处理,并产生输出。 - 外部实体
符号:□
也称为源/宿,系统之外的数据源或目的。代表系统之外的实体,可以是人、物或其它系统软件,他指出数据所需要的发源地或系统所产生的数据归属地。 - 数据存储
符号:=
表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。 - 实时链接
符号:当过程执行时,外部实体与过程之间的来回通信。
数据流图的结构
数据流图有两种典型结构:
- 变换型结构
它所描述的工作可表示为输入、主处理和输出,呈线性状态。 - 事务型结构
这种数据流图呈束状,即一束数据流平行流入或流出,可能同时有几个事务要求处理。
数据流图的层次
结构化分析的思路是依赖于数据流图进行自顶而下的分析。这也是因为系统通常比较复杂,很难在一张图上将所有的数据流和加工描述清楚。因此,数据流图提供一种表现系统高层和低层概念的机制。也就是先绘制一张较高层次的数据流图,然后在此基础上,对其中的过程(处理)进行分解,分解成为若干独立的、低层次的、详细的数据流图,而且可以这样逐一地分解下去,直至系统被清晰地描述出来。
数据流图的层次如下图所示:
Context 图
Context 图,也就是系统上下文范围关系图。这是描述系统最高层结构的 DFD 图。它的特点是,将整个待开发的系统表示为一个过程,将所有的外部实体和进出系统的数据流都画在一张图中。
如下图:
Context 图用来描述系统有什么输入、输出数据流,与哪些外部实体直接相关,可以把整个系统的范围勾画出来。当完成了 Context 图的建模之后,就可以在此基础上进行进一步的分解。以上图 为例,进行再分解,在对原有流程了解的基础上,可以得到如下图 所示的结果。
上图 是在 Context 图的基础上做的第一次分解,而在 Context 图中只有一个过程,那就是系统,将其编号为 0。而接下来对 Context 图进行的分解,其实就是对这个编号为 0的过程进行更细化的描述,在这里引入了新的过程、数据存储,为了能够区分其位置的级别,在这层次上的过程将以 1、2、3 为序列进行编号。由于这是对过程 0 的分解,因此也称之为 DFD 0 层图。而可以根据需要对 DFD 0 层图上的过程(编号为 1、2、3)进行类似的分解,那么就称之为 DFD 1 层图,在 DFD 1 层图中引入的新过程,其编号规则就是 1.1,1.2...,以及 2.1,2.2...,以此类推,直到完成分析工作。另外,这里存在一个很关键的要点,那就是 DFD 0 层图是 Context 图的细化,因此所有的输入和输出应该与 Context 图完全一致,否则就说明存在着错误。
如何画 DFD
DFD 的绘制是一个自顶向下、由外到里的过程,通常按照以下几个步骤进行。- 画系统的输入和输出:就是在图的边缘标出系统的输入、输出数据流。这一步其实是决定研究的内容和系统的范围。在画的时候,可以先将尽可能多的输入、输出画出来,然后再删除多余的,增加遗漏的。
- 画数据流图的内部:将系统的输入、输出用一系列的处理连接起来,可以从输入数据流画向输出数据流,也可以从中间画出去。
- 为每一个数据流命名:命名的好坏与数据流图的可理解性密切相关,应避免使用空洞的名字。
- 为加工命名:注意应该使用动宾短语。
不考虑初始化和终点,暂不考虑出错路径等细节,不画控制流和控制信息。