大纲要求
- 理解和掌握数据流图的基本概念,包括逻辑数据流图和物理数据居流图的区别和联系。
- 理解系统需求说明,根据需求说明绘制出数据流图,设计系统数据流的输入/输出。
- 理解各子系统和上下层数据流图的关系,掌握数据流图的原则和规律。
- 了解用于系统设计的转换图、状态迁移图等。
考试信息
分数:15
常出考题:
- 填写实体、数据文件名称;
- 找出遗漏的数据流;
- 指出错误/多余的数据流;
- 找出数据流图中的多余文件等。
- 近几年把数据字典、数据库、面向对象设计等知识结合到了数据流图中考查,但一般难度都不大。
1.1 数据流图的基本概念
1.1.1 基本概念
数据流图又称数据流程图(Data Flow Diagram,DFD),是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
1.1.2 DFD的基本成分
- 外部实体(External Agent)。外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生的数据的归宿地。
- 加工(Process)。加工描述了输入数据流到输出数据流之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。每个加工都有一个名字和编号。编号能反映出该加工位于分层DFD中的哪个层次和哪张图中,也能够看出它是哪个加工分解出来的子加工。
- 数据存储(Data Store)。数据存储用来表示存储的数据,每个数据存储都有一个名字。
- 数据流(Data Flow)。数据流由一组固定成分的数据组成,表示数据的流向。值得注意的是,DFD中描述的是数据流,而不是控制流。除了流向数据存储或从数据存储流出的数据流不必命名外,每个数据流都必须有一个合适的名字,以反映该数据流的含义。
1.1.3 分层数据流图的画法
- 画系统的输入和输出。把整个软件系统看作一个大的加工,然后根据系统从哪些外部实体接收数据流,以及系统发送数据流到哪些外部实体,就可以画出系统的输入和输出图,这张图称为顶层图。
- 画系统的内部。将顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图中的输入数据经过若干个加工处理后变换成顶层图的输出数据流。这张图称为0层图。从一个加工画出一张数据流图的过程实际上就是对这个加工的分解。
- 可以用下述方法来确定加工:在数据流的组成或值发生变化的地方画一个加工,这个加工的功能就是实现这一变化;也可根据系统的功能确定加工。
- 确定数据流的方法:当用户把若干个数据看作一个单位来处理(这些数据一起到达,一起加工)时,可把这些数据看成一个数据流。对于一些以后某个时间要使用的数据,可以组织成一个数据存储来表示。
- 画加工的内部。把每个加工看作一个小系统,该加工的输入输出数据流看成小系统的输入/输出数据流。于是可以用与画0层图同样的方法画出每个加工的 DFD 子图。对第3步分解出来的DFD子图中的每个加工重复第3步的分解直至图中尚未分解的加工都足够简单(也就是说这种加工不必再分解)为止。至此,就得到了一套分层数据流图。
1.1.4 对图和加工进行编号
对于一个软件系统,其数据流图可能有许多层,每一层又有话许多张图。为了区分不同的加工和不同的 DFD 子图,应该对每张图和每个加工进行编号,以利于管理。
1.父图与子图
假设分层数据流图里的某张图(记为图 A)中的某个加工可用月另一张图(记为图 B)来分
解,则称图 A 是图 B 的父图,图 B 是图 A 的子图。在一张图中,有些加工需要进一步分解,有些加工则不必分解。因此,如果父图中有n个加工,那么它可以有0~n张子图(这些子图位于同一层),但每张子图都只对应于一张父图。
2.编号
- 顶层图只有一张,图中的加工也只有一个,所以不必编号。
- 0层图只有一张,图中的加工号可以分别是0.1,0.2...或1,2...
- 子图号就是父图中被分解的加工号。
- 图的加工号由图号、圆点和序号组成。
1.1.5 应注意的问题
- 应适当地为数据流、加工、数据存储、外部实体命名,且名字应反映该成分的实际含义,避免空洞的名字。
- 画数据流而不要画控制流。
- 每条数据流的输入或者输出都是加工。
- 一个加工的输出数据流不应与输入数据流同名,即使它们的的组成成分相同。
- 允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工。
- 保持父图与子图平衡。也就是说,父图中某加工的输入/输出数据流必须与其子图的输入/输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
- 在自项向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。
- 保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据。
- 每个加工必须既有输入数据流,又有输出数据流。
- 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中可能是只有读没有写,或者是只有写没有读。
1.2 补充和完善数据流
遇到这类问题,首先要想到分层数据流图的数据流平衡原则,即父图和子图的输入/输出数据流一致,这是找出遗漏数据流非常重要的技巧。其次,每个加工至少有一个输入数据流和一个输出数据流,反映此加工的数据来源和结果,加工的输出数据流应该都有其对应的输入数据流。再次,要找出遗漏的数据流,最根本的依据还是说明。因为除了图之外,题目中最重要的部分就是说明。说明部分详细介绍了系统的功能,是找出所缺数据流的基本入口。
有时数据流平衡原则不作为解题的直接方法,而作为排除的手段,然后根据说明或其他方法找到图中遗漏的数据流。
1.3 找出错误或多余的数据流
要找出错误或多余的数据流,解题方法可以参考完善数据流的方法。一般可以先进行上下层图的对照和分析,然后检查是否每个加工至少有一个输入数据流和一个输出数据流,是否加工的输出数据流都有其对应的输入数据流。而最根本的判断标准仍然是题目的说明部分。所以考生一定要耐心、认真地阅读题目中对系统功能的阐述和说明,然后解题时再次阅读说明,从中找到依据和突破口。
1.4 找出多余的文件
在某层数据流图中,只画流程图各加工之间的公共数据文件时,如果一个文件仅作用于一个加工,即和该文件有关的输入/输出数据流只涉及一个加工,那么该文件可以作为局部文件出现在该加工的子图中,在父图中则可以省略。这个规则是为了使整个流程图的层次结构更为清晰、科学。当然这些文件如果画出,并不会造成理解的错误。
另外,如果某层图只有一层细化图,即该层图没有子图,则不存在局部文件和外部文件之分,其中涉及的任何文件都不作为多余的文件。
1.5 添加实体、数据字典条目
此类题一般难度比较小,可以根据说明部分找出答案。同时还可以结合给出的数据流
图查看有关记录需要输入给哪些加工,这些加工输出哪些字段。