原文链接:http://www.cnblogs.com/spring5/archive/2012/04/29/2485238.html
最近备战软考,复习到数据流图,学习成果与大家分享。
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。(百科)
谈谈我的一点理解
有时候我们要开发或者理解一个系统,总体的系统结构我们弄清楚了,但是细节上需要再深入,而数据流图“自顶向下,由外到内,逐步细化”的思想就凸显出很重要的作用,它可以作为我们系统分析的指导方法。
数据流图分析关注的重点是数据,将面向控制的信息作为数据进行处理,包括了系统的所有数据,能准确的抽象系统数据的流向和处理过程.概括的描述当数据在系统流程中流动和处理的移动变换过程;数据流图分层进行分析,对顶层图的分析可以发现是否有输入信息或需要输出的信息被遗漏,容易及早发现系统各部分的逻辑错误,也容易修正.每一层都明确强调“需要什么”,“干了什么”“给出什么”;
这样逐层分解下去,系统被严密的展开,系统的框架就展现出来了.采用数据流图进行分析,可以提高分析的可见性和可控性,更容易理解软件要完成什么功能,数据来源于哪里,结果要输出到哪里等等,清晰明了。
下面我们来看看数据流图的组成,设计原则和应用
基本图形符号
加工(数据处理):输入数据在此进行变换产生输出数据。加工对象为:数据结构或数据内容。
数据流:箭头表示数据流向,作为加工之间传输数据的命名通道(数据流有名字),或数据存储文件与加工之间的非命名通道(数据流没名字,但其连接的加工和文件的名字,和流向可以确定其含义)。
同一个数据流图上不能有同名的数据流,如果两个以上的数据流指向一个加工,或是从一个加工中输出两个以上的数据流,这些数据流往往存在一定关系,如图:
数据存储文件:流向数据存储的数据流可以理解为写入文件或查询文件,从数据存储流出的数据流可以理解为从文件读数据或得到查询结果。
数据源点或终点:是系统外部环境中的实体,也称外部实体。它们作为系统与系统外部环境的接口界面,在实际问题中可能是人员、组织、其他硬件系统等。一般出现在顶层数据流图中。
数据流图的设计原则
下面我们通过一些示例来说明这些设计原则
示例1:
上图违反了父图与子图的平衡原则。
因为父图中有提货单输出流,但子图中没有与这条输出流相关的输出流。
我们看两者的输入流,父图的输入流是订货单,而子图的输入流是数量,账号,客户,这是平衡的,因为子图的三条输入流是对父图输入流的分解,同样子图中的加工4.1,4.2,4.3也可以看成是对父图加工4的分解,这符合自顶向下,逐层细化原则
示例2:
下面是一张有错的数据流图。
(1)根据数据守恒原则,外部实体和外部实体,外部实体和数据存储之间不能存在数据流,,存储与存储之间也不应该有数据流,数据流必须跟加工有关,没有加工数据流不可能流来流去的。
(2)对于加工,输入是A,输出还是A,也违反了数据守恒原则,输入与输出一样,加工没有作用。
(3)对于加工,只有输入没有输出,违反了数据守恒原则。比如,人不可能只吃饭,不大小便。嘿嘿
(4)对于加工,只有输出没有输入,违反了数据守恒原则。比如,人不可能一直大小便,但不吃饭。嘿嘿
示例3:
加工细节隐蔽原则说的是:在画父图时,只需画出加工和加工之间的关系,而不必画出各个加工内部的细节,例如上面的父图中,并没有画出加工1的内部细节
再进行对加工1进行细化的时候,我们就应该画出它的内部细节,如第二个图。
简化加工之间的关系:加工间的数据流越少,各个加工就越相对独立,耦合越低,所以应尽量减少加工间输入/输出数据流的数目。
均匀分解:不要出现,一些加工分解了10层,而另一些加工分解了3层这样的情况
忽略枝节:暂时不要考虑一些例外情况,出错处理等枝节性问题。
表现的是输入流而不是控制流:不要和程序流程图混淆,数据流图,强调从数据加工的角度来描述系统,自然是数据流。
这些原则中,最重要的当属:保持父图与子图平衡,保持数据平衡,加工细节隐蔽
一般从这三个原则来考查一张数据流图是否正确。
数据字典
数据字典的就是对数据流图中出现的所有被命名的图形元素在数据字典中作为一个词条加以定义,使每个图形元素的名称都有一个确切的解释。
在对数据流和数据文件词条进行描述时可能包含一定的数据结构,对于数据结构的描述常用的是定义是。如下表
在数据字典中有4种类型的条目:
1、数据项条目:通常为数据项的值类型,允许的取值范围等
2、数据流条目:给出某个数据流的定义,列出该数据流的各组成数据项。
3、文件条目:对文件的定义,列出期组成的数据项
4、加工条目:对每个不能再分解的加工做说明,包括加工的激发条件,加工的逻辑,优先级等等。
示例:
图书管理系统中
查询请求信息=[查询读者请求信息|查询图书请求信息]
读者情况=读者号+姓名+所在单位+{借书情况}
根据上面的定义表,我们很容易看出这些条目的意思。
下面我们来看一个数据流图的综合应用问题,这样有助于我们理解数据流图。
需求:
根据以上信息提出的几个问题!希望对这几个问题的解析,能加深大家对数据流图的理解。
对于问题1:
我们前面提到过,
可以通过数据流图那三个重要设计原则(保持父图与子图平衡,保持数据平衡,加工细节隐蔽)来考查一张数据流图是否正确。
1、查看是否平衡,即子图中的输入流合输出流和父图是否对应;
2、查看数据守恒,处理查询请求没有输入,登记读者信息没有输出.
正确应该如红色箭头画法。
对于问题2:
1、首先我们看到对于加工2,父图和子图是平衡的,所以,本题只能是2.1和2.2或者他们和文件之间缺少数据流。
只得根据需求描述去分析到底缺失哪些数据流。
根据在原需求中的
我们可以很轻松的判断出缺少哪些数据流,如下图红色箭头
对于问题3:这是一个数据字典的应用问题。
根据以上我们截取需求中的信息,,注意红色部分,再结合我们开始介绍的数据字典定义符号的使用,即可很轻松解决这个问题。
管理工作请求单=[购入新书|读者借书|读者还书|图书注销]
入库单=分类目录号+书名+作者+价格+数量+购书日期。
数据流图就到这了,我是懂了,不知道你懂了没?