软件设计师(下午题)数据流图基础知识

全文参考:软件设计师教程

基本概念

数据流图也称数据流程图(Data Flow Diagram, DFD),它是一种便于用户理解、分析系 统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、 输出和数据存储等,是系统逻辑模型的重要组成部分。

基本图像元素说明

软件设计师(下午题)数据流图基础知识

1)  数据流 数据流由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向可以有以下 几种:

从一个加工流向另一个加工;

从加工流向数据存储(写);

从数据存储流向加工(读);

从外部实体流向加工(输入);

从加工流向外部实体(输出)。

DFD中的每个数据流用一个定义明确的名字表示。除了流向数据存储或从数据存储流出的 数据流不必命名外,每个数据流都必须有一个合适的名字,以反映该数据流的含义。 值得注意的是,DFD中描述的是数据流,而不是控制流。 数据流或者由具体的数据属性(也称为数据结构)构成,或者由其他数据流构成。组合数据流是由其他数据流构成的数据流,它们用于在高层的数据流图中组合相似的数据流,以使数 据流图更便于阅读。

2)  加工 加工描述了输入数据流到输出数据流之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。每个加工都有一个名字和编号。编号能反映出该加工位于分层DFD中的哪个层次 和哪张图中,也能够看出它是哪个加工分解出来的子加工。 一个加工可以有多个输入数据流和多个输出数据流,但至少有一个输入数据流和一个输出 数据流。

数据流图中常见的3种错误。

加工有输入但是没有输出,我们称之为“黑洞”。因为数据输入到过程,然后就消失 了。在大多数情况下,建模人员只是忘了输出。

加工有输出但没有输入。在这种情况下,输入流似乎被忘记了。 加工输入不足以产生输出,我们称之为“灰洞”。

这有几种可能的原因:一个错误 的命名过程;错误命名的输入或输出;不完全的事实。灰洞是最常见的错误,也是最使人为难的错误。一旦数据流图交给了程序员,到一个加工的输入数据流必须足以产生输出数据流。

3)  数据存储

数据存储用来存储数据。通常,一个流入加工的数据流经过加工处理后就消失了,而它的某些数据(或全部数据)可能被加工成输出数据流,流向其他加工或外部实体。除此之外,在 软件系统中还常常要把某些信息保存下来以供以后使用,这时可以使用数据存储。

每个数据存储都有一个定义明确的名字标识。可以有数据流流入数据存储,表示数据的写 入操作;也可以有数据流从数据存储流出,表示数据的读操作;还可以用双向箭头的数据流指 向数据存储,表示对数据的修改。

4)    外部实体(外部主体)
外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和 系统所产生的数据的归宿地(宿)。

扩充符号

比较生僻,了解一哈,我是没有遇到过

在DFD中,一个加工可以有多个输入数据流和多个输出数据流,此时可以加上一些扩充符 号来描述多个数据流之间的关系
1)    星号(*)
星号表示数据流之间存在“与”关系。如果是输入流则表示所有输入数据流全部到达后才 能进行加工处理;如果是输出流则表示加工结束将同时产生所有的输出数据流。
2)    加号(+)
加号表示数据流之间存在“或”关系。如果是输入流则表示其中任何一个输入数据流到达 后就能进行加工处理;如果是输入流则表示加工处理的结果是至少产生其中一个输出数据流。
3)    异或(㊉)
异或表示数据流之间存在“互斥”关系。如果是输入流则表示当且仅当其中一个输入流到 达后才能进行加工处理;如果是输出流则表示加工处理的结果是仅产生这些输出数据流中的一个。

层次结构

从原理上讲,只要纸足够大,一个软件系统的分析模型就可以画在一张纸上。然而,一个 复杂的软件系统可能涉及上百个加工和上百个数据流,甚至更多。如果将它们画在一张图上, 则会十分复杂,不易阅读,也不易理解。
根据自顶向下逐层分解的思想,可以将数据流图按照层次结构来绘制,每张图中的加工个 数可大致控制在“7加减2”的范围内,从而构成一套分层数据流图。
1)    层次结构
分层数据流图的顶层只有一张图,其中只有一个加工,代表整个软件系统,该加工描述了 软件系统与外界之间的数据流,称为顶层图。
顶层图中的加工(即系统)经分解后的图称为〇层图,也只有一张。处于分层数据流图最 底层的图称为底层图,在底层图中,所有的加工不再进行分解。分层数据流图中的其他图称为 中间层,其中至少有一个加工(也可以是所有加工)被分解成一张子图。在整套分层数据流图 中,凡是不再分解成子图的加工称为基本加工。

2)  图和加工的编号

首先介绍父图和子图的概念。

如果某图(记为A)中的某一个加工分解成一张子图(记为B),则称A是B的父图,B是A的子图。若父图中有n个加工,则它可以有n张子图,但每张子图只对应一张父图。为了方便对图进行管理和査找,可以釆用下列方式对DFD中的图和加工编号:

①  顶层图中只有一个加工(代表整个软件系统),该加工不必编号。

②  〇层图中的加工编号分别为1、2、3…。

③  子图号就是父图中被分解的加工号。

④ 对于子图中加工的编号,若父图中的加工号为x的加工分解成某一子图,则该子图中的 加工编号分别为x.l、x.2、x.3…。

分层数据流图的绘制

这里给出步骤,我也没画过,也没遇到相关的题

1)    画系统的输入和输出
系统的输入和输出用顶层图来描述,即描述系统从哪些外部实体接收数据流,以及系统发 送数据流到哪些外部实体。
顶层图只有一个加工,即待开发的软件系统。顶层图中的数据流就是系统的输入/输出信息。 顶层图中通常没有数据存储

2)    画系统的内部
将顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图中的输入数据经过若干个加工处理后变换成顶层图的输出数据流,这张图称为0层图。从一个加工画 出一张数据流图的过程实际上就是对这个加工的分解

3)确定加工,然后逐次确定数据流,存储即源和宿(起点和终点)

4)检查工作

4.1)    分层数据流图的一致性和完整性
分层数据流图的一致性是指分层DFD中不存在矛盾和冲突。这里讲的完整性是指分层DFD 本身的完整性,即是否有遗漏的数据流、加工等元素。所以,分层DFD的一致性和完整性实 际上反映了图本身的正确性。但是图本身的正确性并不意味着分析模型的正确性,分析模型的 正确性要根据模型是否满足用户的需求来判断。

1   分层数据流图的一致性
父图与子图的平衡。父图与子图平衡是指任何一张DFD子图边界上的输入/输出数据流 必须与其父图中对应加工的输入/输出数据流保持一致。
由于一张子图是被分解的加工的一种细化,所以,这张子图应该保证可以画到父图中替代 被分解的加工,因此保持父图与子图平衡是理所当然的。

1) 数据守恒。数据守恒包括两种情况:

第一种情况是指一个加工的所有输出数据流中的 数据必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生。
第二种情况是加工未使用其输入数据流中的某些数据项。这表明这些未用到的数据项是多 余的,可以从输入数据流中删去。当然,这不一定就是错误,只表示存在一些无用数据。然而 这些无用的数据常常隐含着一些潜在的错误,如加工的功能描述不完整、遗漏或不完整的输出 数据流等。因此,在检查数据守恒时,不应该忽视对这种情况的检査。

2)局部数据存储。这里讨论分层数据流图中的一个数据存储应该画在哪些DFD中,不应 该画在哪些DFD中。
在一套完整的分层DFD中,任何一个数据存储都应有写和读的数据流,否则这个文件就 没有存在的必要。除非这个数据存储的建立是为另一个软件系统使用或者这个数据存储是由另 一个软件系统产生和维护的。
在自顶向下分解加工的过程中,如果某个加工需要保存一些数据,同时在将加工的同一张 DFD上至少存在另一个加工需要读这些数据,那么该数据存储应该在这张DFD上画出。也就 是在一张DFD中,当一个数据存储作为多个加工之间的交界面时,该数据存储应该画出。如 果在一张DFD中,一个数据存储仅与一个加工进行读/写操作,并且在该DFD的父(祖先)图 中未出现过该数据存储,那么该数据存储只是相应加工的内部文件,在这张DFD中不应该画出。

3) 一个加工的输出数据流不能与该加工的输入数据流同名。同一个加工的输出数据流和输入数据流,即使它们的组成成分相同,仍应该给它们取不同的名字,以表示它们是不同的数 据流。但是允许一个加工有两个相同的数据流分别流向两个不同的加工。

2    分层数据流图的完整性
1)    每个加工至少有一个输入数据流和一个输出数据流。一个没有输入数据流或者没有输 出数据流的加工通常是没有意义的。当出现这种情况时,常常意味着可能遗漏了某些输入数据 流或输出数据流。
2)   在整套分层数据流图中,每个数据存储应至少有一个加工对其进行读操作,另一个加 工对其进行写操作。对于某一张DFD来说,可以只写不读或只读不写。
3)   分层数据流图中的每个数据流和文件都必须命名(除了流入或流出数据存储的数据 流),并保持与数据字典一致
4)    分层数据流图中的每个基本加工都应有一个加工规约

数据字典(DD)

数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中 的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。其中,对加工的描述 称为“小说明”,也可以称为“加工逻辑说明”。

仅需了解下表即可,次数涉及内容也不是很多

软件设计师(下午题)数据流图基础知识