数据流图的考查中需要考生掌握数据流图的基本概念,另外还会涉及数据字典、数据库、面向对象方法、转换图、状态迁移图等概念,考生对这些概念都要有一个非常清晰的认识。
对于基本概念的考查一般都结合在题目中,有时也会针对这些基本概念出题,例如有的题目要求说明逻辑数据流图和物理数据流图之间的主要区别。
数据流贯穿于企业组织的每一个活动中,可以说没有数据流就没有企业的活动。通过对数据流程的分析,一方面可以更准确地了解企业管理活动的全过程,分析出各种管理活动的实质和相互间的关系;另一方面,数据是信息的载体,是正在开发的企业信息系统的主要对象,因此必须对系统调查中所收集的数据和数据处理过程进行分析整理,为以后的新系统逻辑模型、数据库结构和功能模块设计打下基础。
数据流程分析就是把数据在现行系统内部的流动情况抽象出来,舍去了具体组织机构、信息载体、处理工作等物理组成,单纯从数据流动过程来考查实际业务的数据处理模式。数据流程分析主要包括对信息流动、传递、处理、存储等的分析,其目的就是确定合理的数据项,确定合适的数据流向,确认合适的数据处理过程,并发现和解决数据流通中存在的问题。
一个系统的基本组件包括输入流、输出流及处理过程。企业作为一个系统也存在输入流、输出流及处理过程,企业输入流、输出流的表现形式多种多样,在处理过程中经常要涉及各式各样的输入流、输出流。要想很好地了解一个企业的活动,需具体分析其中所包含的各种流。
(1)物资流
工厂输入原材料与零配件,经过加工制造过程,输出成品;商店进货,经过销售过程,把货卖给顾客。这些输入与输出物品的流动都属于物资流。
(2)事务流
事务是指系统与其外部环境或子系统之间发生的交往活动而引起的一系列信息处理活动。例如,工商企业接到订货单,便有开发货单、发票、记账等信息处理活动,它们统称为订单处理,这就是一项事务。再如政府经济行政管理部门接到下级的请示报告,经过调查研究和有关主管人员分析、开会讨论,协调不同意见,做出统一决定,作为对下级的指示,这也是一种事务,可称之为请示报告的处理。这两种事务的流动有一个重要不同之处:工业企业是制造和出售产品的,商业企业是买卖产品的,这是它们的主要业务,事务是随其主要业务而产生的,如原材料的购买、产品的购进与售出等,事务流是伴随物资流而产生的;而政府经济行政管理部门只有事务流,没有物资流,这里的主要业务是事务,即情况的处理。
(3)货币流
货币流是指资金的流动,如购买原材料的付款、工资的支付等。它一般是伴随物资流和劳务偿付而产生的,但在银行业务中则是随存取及信贷业务而产生的。
(4)人员流
人员流是指组织内部工作人员的增减和流动。
(5)机器及设备流
机器及设备也是一种物资流,这里指的是机器、设备等的买卖和流动,它们不同于物质生产的物资流。
(6)数据流
数据流是人们用以记录以上各种流的抽象表达形式。各种流在一个企业内的出现,都各自同时伴随着一个数据流的产生。例如,一个产品制造的物资流,总伴随着生产计划安排,并产生领料单、出料单、生产记录、送货单、入库单等数据的流动。数据流经常贯穿于组织内每个活动中。可以说没有数据流就没有企业的活动。信息的物理表达为数据,票据、凭证、函电、公文等均为数据不同的具体形式。事务流的具体表现也是数据流。因此,数据流和事务流往往会存在于同一渠道内而不易区别。区别的重要标准是,数据流是用以控制其他流的,而事务流则为被控制的对象。数据流在所有各种流中具有特别重要的意义,即任何其他流的产生与存在总伴随有数据流的产生与存在,数据流是对其他流进行控制的依据。
数据流图或称数据流程图(Data Flow Diagram,DFD),它是一种便于用户理解、分析系统数据流程的图形工具,它描述了信息流和数据从输入移动到输出的过程中所经受的各种变换。在数据流图中没有任何具体的物理部件,它摆脱了系统的物理内容,只是精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
数据流图就是组织中信息运动的抽象,是企业信息系统逻辑模型的主要内容之一。这个模型与系统的物理描述无关,它用一种图形及与此相关的注释来表示系统的逻辑功能,表示所开发的系统在信息处理方面要做什么。由于图形描述简明、清晰,不涉及技术细节,所描述的内容是面向用户的,所以数据流图是系统分析人员与用户进行交流的有效手段,也是系统设计,即建立所开发的系统物理模型的主要依据之一。
数据流图的基本成分及其图形表示方法如表1-2所示。
表1-2 数据流图的基本成分及其图形表示方法
(1)加工
加工用圆或椭圆描述,又称数据处理,表示输入数据在此进行变换产生输出数据,以数据结构或数据内容作为加工对象。每个加工都有一个名字和编号。加工的名字通常是一个动词短语,简明扼要地表明要完成的加工。加工的编号能反映出该加工位于分层数据流图中的哪个层次和哪张图中,也能够看出它是哪个加工分解出来的子加工。
(2)数据流
数据流用箭头描述,由一组固定的数据项组成,箭头方向表示数据的流向,作为数据在系统内的传输通道。需要注意的是,数据流图中描述的是数据流,而不是控制流。
数据流大多是在加工之间传输加工数据的命名通道,其名称反映该数据流的含义;也有在数据存储文件和加工之间的非命名数据通道,虽然这些数据流没有命名,但其连接的加工和文件的名称以及流向可以确定其含义。
同一数据流图上不能有同名的数据流。如果有两个以上的数据流指向一个加工,或是从一个加工中输出两个以上的数据流,这些数据流之间往往存在一定的关系。其具体的描述如图1-1所示,其中,“*”表示相邻之间的数据流同时出现(与的关系);“+”表示相邻之间的数据流或者取其中一条,或者同时出现(或的关系);“⊕”表示相邻之间的数据流只取其一(互斥的关系)。
图1-1 数据流
(3)数据存储文件
数据存储文件用双杆描述,在数据流图中起保存数据的作用,又称数据存储或文件,可以是数据库文件或任何形式的数据组织。每个数据存储文件都有一个名字。流向数据存储的数据流可以理解为写入文件或查询文件,从数据存储流出的数据流可以理解为从文件读数据或得到查询结果。
(4)数据源点或终点
数据源点或终点用方框描述,表示数据流图中要处理数据的输入来源或处理结果要送往的地方,在图中仅作为一个符号,并不需要以任何软件的形式进行设计和实现,是系统外部环境中的实体,故称外部实体。它们作为系统与系统外部环境的接口界面,在实际的问题中可能是人员、组织、其他软硬件系统等。一般只出现在分层数据流的顶层图中。
采用数据流图的方式进行数据流程分析一般应遵循以下原则:
(1)明确系统边界。一张数据流图表示某个子系统或某个系统的逻辑模型。系统分析人员要根据调查材料,首先识别出那些不受所描述的系统控制但又影响系统运行的外部环境,这就是系统的数据输入的来源和输出的去处。把这些因素都作为外部实体确定下来。确定了系统和外部环境的边界,就可集中力量分析和确定系统本身的功能。
(2)在总体上遵循自顶向下逐层分解的原则,即按照结构化方法的思想,采用分层的数据流图,把大问题、复杂的问题分解成若干个小问题,然后分别解决。
(3)在局部上遵循由外向里的原则,即先确定每一层数据流图的边界或范围,再考虑流图的内部,先画加工的输入和输出,再画加工的内部。
(4)分层的数据流图一般由顶层、中间层和底层组成。顶层抽象地描述了整个系统的情况,包括系统的范围、系统与外界实体间的关系(输入输出流);底层具体画出了系统的细节;中间层则是从抽象到具体的逐步过渡。
对于不同的问题,数据流图可以有不同的画法。具体操作时可按下述步骤进行。
(1)识别系统的输入和输出
在系统分析初期,系统的功能需求等还不很明确,为了防止遗漏,不妨先将范围定大一些,系统边界确定后。越过边界的数据流就是系统的输入或输出。
可以首先确定所开发的系统的外部实体,即系统的数据来源和去处。然后再确定整个系统的输出数据流和输入数据流,把系统作为一个加工环节,画出关联图。一般应把数据来源置于图的左侧,数据去处置于图的右侧。
(2)绘制系统内部数据流
从系统输入端到输出端(也可反之)逐步把数据流和加工连接起来,当数据流的组成或数据发生变化时,就在该处画一个“加工”。
首先确定系统的主要信息处理功能,按此将整个系统分解成几个加工环节。确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。根据各加工环节和数据存储环节以及输出与输入数据流的关系,将外部实体、各加工处理、数据存储环节用数据流连接起来,为各数据流、各加工环节和数据存储环节命名、编号,这样就形成了所开发系统的数据流图顶层图(总图)的草图。
然后再补充一些细节,如出错处理等。另外,画数据流图的同时还应画上文件,以反映各种数据的存储位置,并表明数据流是流入还是流出文件。再回过头来检查系统的边界,补上遗漏但有用的输入输出数据流,删去那些未被系统使用的数据流。
(3)对复杂加工进行分解
运用“由外向里”、“自顶向下”的方式对加工进行分解。将需要分解的上一层图的加工环节分解成具有明确逻辑功能的数个加工环节,按上一步骤中的做法,对上层需分解的加工环节画出分解数据流草图。
(4)对草图进行检查和合理布局
主要检查分解是否恰当、彻底,DFD中各成分是否有遗漏、重复、冲突之处,各层DFD及同层DFD之间关系是否正确及命名,编号是否确切、合理等,对错误与不当之处进行修改。
(5)和用户交流
和用户交流的主要问题包括:系统逻辑功能的设置和描述是否合理,能否满足用户的信息需求,数据流和数据存储的内容及数据来源和去处(外部项)是否符合实际,描述是否准确、合理;用户在了解数据流图的全部内容后对系统逻辑功能有什么进一步的意见与要求。系统分析人员根据与用户讨论的结果对数据流图的草图进行修订。
(6)检查、修改、完善
系统分析负责人对数据流图进行复审。检查数据流图是否全面、准确地反映了系统调查及用户的意见,勾画出现行系统的数据处理逻辑。如果有不太明确之处,则应重新调查,并进行修改完善;否则通过复审,数据流图绘制过程结束。
数据流图的基本目的是利用它作为系统分析和系统设计以及交流信息的工具。在数据流图中通常仅仅使用4种基本符号,而且不包含任何有关物理实现的细节,因此,绝大多数用户都可以理解和评价它。在绘制数据流图时应注意以下要点:
(1)有时为了增加数据流图的清晰性,防止数据流的箭头线过长,减少交叉绘制数据流条数,一般在一张图上可以重复同名的数据源点、终点与数据存储文件。例如,某个外部实体既是数据源点又是数据汇点,可以在数据流图的不同的地方重复绘制。
(2)适当地为数据流、加工、文件、源/宿命名,名字应反映该成分的实际意义,避免使用空洞的名字。
①为数据流(或数据存储)命名
●名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分。
●不要使用空洞的缺乏具体含义的名字(如“数据”、“信息”、“输入”等)。
●如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,此时应尝试重新分解,看是否能克服这个困难。
②为加工命名
●通常先为数据流命名,再为与之相关联的加工命名。这样命名比较容易,而且体现了人类习惯的“由表及里”的思考过程。
●名字应能反映整个加工的功能,而不是它的一部分功能。
●名字最好由一个具体的动词加上一个具体的宾语组成,同时应尽量避免使用“加工”、“处理”等空洞笼统的动词。
●通常名字中仅包括一个动词,如果必须用两个动词才能描述整个加工的功能,则把这个加工再分解成两个加工可能更恰当些。
●如果在为某个加工命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解。
③为数据源点或终点命名
数据源点或终点并不需要在开发目标系统的过程中设计和实现,它并不属于数据流图的核心内容,只不过是目标系统的外围环境部分(可能是人员、计算机外部设备或传感器装置)。通常,为数据源点或终点命名时采用它们在问题域中习惯使用的名字(如“采购员”、“仓库管理员”等)。
(3)自外向内,自顶向下,逐层细化,完善求精。
① 简化加工间的关系。在数据流图中,加工间的数据流越少,各个加工就越相对独立,所以应尽量减少加工间输入输出数据流的数目。
② 均匀分解。应使一个数据流中的各个加工分解层次大致相同。
(4)保持数据守恒。
① 一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据中获得。
② 每个加工必须既有输入数据流又有输出数据流;在整套数据流图中,每个文件必须既有读文件的数据流又有写文件的数据流,但在某一张子图中可能只有读、没有写,或者只有写、没有读。
③ 保持父图与子图的平衡。也就是说,父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同。
(5)加工细节隐蔽。
根据抽象原则,在画父图时,只需画出加工和加工之间的关系即可,而不必画出各个加工内部的细节。忽略枝节,应集中精力于主要的数据流,而暂不考虑一些例外情况、出错处理等枝节性的问题。
数据流图表现的是数据流而不是控制流。数据流图与传统的程序流程图不同,主要表现在:数据流图是从数据的角度来描述一个系统的,而程序流程图则是从对数据加工的角度来描述系统的;数据流图中的箭头是数据流,而程序流程图中的箭头则是控制流,它表达的是程序执行的次序;数据流图适合于宏观地分析一个组织的业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
对于一个大型企业信息系统,由于在系统分析初期,开发人员对问题的理解深度不够,数据流图也不可避免地会存在某些缺陷或错误,此时就需要进行检查、修改和完善工作。下面介绍如何从正确性和可读性两方面对数据流图进行改进。
数据流图的正确性可从以下几个方面检查:
(1)数据守恒。一个加工环节的输出数据流仅由它的输入数据流确定,这个规则绝不能违背。数据不守恒的错误有两种,一是漏掉某些输入数据流;二是某些输入数据流在加工环节内部没有被使用。
(2)文件使用。在数据流图中,文件与加工环节之间数据流的方向应按规定认真标注,这样有利于对文件使用正确性的检查。例如,如果发现某个文件只有输入流,而没有输出流,则要么是画错了,要么是系统分析出现了问题,因为一个不产生任何输出流的文件是没有意义的。
(3)子图和父图平衡。造成子图与父图不平衡的一个常见原因是在增加或删除一个加工环节时,忽视了对父图或子图的修改。在检查数据流图时应特别注意这一点。
(4)加工和数据流的命名。加工和数据流的名字必须体现被命名对象的全部内容,而不是一部分。对于加工的名字,应检查它的含义与被加工的输入输出数据流是否匹配。
如果数据流图的可读性不强,则即使正确无误,也不会很好地发挥作用。一般可以从以下几个方面提高数据流图的可读性:
(1)简化加工之间的联系。各加工之间的数据流越少,各加工的独立性就越高,因此应当尽量减少加工之间的数据流的数目。加工间的数据流最好控制在1~2条,否则就应考虑对加工进行合并、删除。
(2)分解应当均匀。在同一张数据流图上应避免出现某些加工已是最小功能单元,而另一些加工却还等待继续分解好几层的情况。
(3)命名应当恰当。理想的加工名由一个具体的动词和一个具体的宾语组成。数据流和文件的名字也应具体、明确。命名应尽量做到使人一目了然。
数据流图从总体上描述了系统的逻辑功能,系统内各部分的信息联系及与系统外各有关事物的联系,反映了系统中信息运动的规律,是系统逻辑模型的主要描述形式。但数据流图在描述系统逻辑功能和有关信息内容的细节方面仍存在较大的局限性。例如:
(1)难以在数据流图上标识出数据流、数据存储、加工和外部项的具体内容,如数据流的组成元素、数据存储的数据结构、存取要求、数据量、加工的处理过程与算法等。
(2)不能反映系统中的决策与控制过程。
(3)难以对系统中人机交互过程以及信息的反馈与循环处理进行描述。
因此,在系统分析中,除了用数据流图描述系统逻辑模型外,还要辅以其他工具,如数据字典结构化语言、决策表、决策树等。
从数据流图的基本目标出发,可以考虑在一张数据流图中包含多少个元素合适的问题。一些调查研究表明,如果一张数据流图中包含的加工多于5~9个,人们就难于领会它的含义了,因此,为了表达较为复杂的数据处理过程,数据流图应该分层。当把功能级数据流图细化后得到的加工超过9个时,用一个数据流图往往不够,应该采用画分图的办法。一般按问题的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系。也就是把每个主要功能都细化为一张数据流分图,而原有的功能级数据流图用来描绘系统的整体逻辑概貌。
根据层次关系一般可将数据流图分为顶层数据流图、中间数据流图和底层数据流图,除了顶层数据流图外,其余分层数据流图均从0开始编号。对任何一层数据流图来说,称它的上一层数据流图为父图,称它的下一层数据流图为子图。
顶层数据流图只含有一个加工,表示整个系统;输入数据流和输出数据流为系统的输入数据和输出数据,表明了系统的范围以及与外部环境的数据交换关系。
底层数据流图是指其加工不能再分解的数据流图,其加工称为“原子加工”。
中间数据流图是对父层数据流图中某个加工进行细化,而它的某个加工也可以再次细化,形成子图。中间层次的多少,一般视系统的复杂程度而定。
(1)画系统的输入和输出。把整个软件系统看作为一个大的加工,然后根据系统从哪些外部实体接收数据流,以及系统发送数据流到哪些外部实体,就可以画出系统的输入和输出图,这张图称为顶层图。
(2)画系统的内部。将顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图中的输入数据经过若干个加工处理后变换成顶层图的输出数据流。这张图称为0层图。从一个加工画出一张数据流图的过程实际上就是对这个加工分解的过程。
可以用下述的方法来确定加工:在数据流的组成或值发生变化的地方应画一个加工,该加工的功能就是实现这一变化,另外也可根据系统的功能确定加工。
确定数据流的方法:当用户把若干个数据看作一个单位来处理(这些数据一起到达,一起加工)时,可把这些数据看成是一个数据流。
对于一些以后某个时间要使用的数据可以组织成一个数据存储来表示。
(3)画加工的内部。把每个加工看做一个小系统,而把该加工的输入/输出数据流看做小系统的输入/输出数据流,于是可以用与画0层图同样的方法画出每个加工的DFD图。
对第(3)步分解出来的DFD子图中的每个加工,重复第(3)步的分解,直至图中尚未分解的加工都足够简单(也就是说这种加工不必再分解)为止。至此,就得到了一套分层数据流图。
对于一个软件系统,其数据流图可能有许多层,每一层又有许多张图。为了区分不同的加工和不同的数据流图子图,应对每张图和每个加工进行编号,以利于管理。
(1)父图与子图
假设分层数据流图中的某张图(记为图A)中的某个加工可用另一张图(记为图B)来分解,则称图A是图B的父图,图B是图A的子图。在某一张图中,有些加工需要进一步分解,有些加工则不必分解。因此,如果父图中有n个加工,那么它可以有0~n张子图(这些子图位于同一层),但每张子图都只对应于一张父图。
(2)编号
由于顶层图只有一张,且图中的加工也只有一个,所以不必编号。
0层图只有一张,图中的加工可有多个,加工号可以分别是0.1、0.2、……或者是1、2、……
子图号就是父图中被分解的加工号。
图的加工号由图号、圆点和序号组成。
对于一个规模较大且结构复杂的信息系统,它的数据流图可能包括几千个加工,要把它们都画在同一张纸上是不可能的。为了控制复杂性,通常按照“自顶向下、逐层分解”的技术分层处理,因此在多数情况下,这样的数据流图被称为分层数据流图。
分层数据流图便于人们理解和使用,但在绘制时应注意以下事项:
(1)自顶向下、逐层分解,即是由系统外部至系统内部、由总体到局部、由抽象到具体的系统逻辑模型建立的过程。在整个数据流图绘制过程中,始终要把握住对系统总体目标与总体功能的要求,在给定的系统边界范围内进行工作。为了使数据流图简洁、清晰、功能明确、方便交流,分解的层次和每张图的内容要适当。
根据经验,每张图包含的加工项目以不超过7~8个为宜。加工的分解要抓住主要问题,每个分解后的加工环节功能明确,易于理解,一般分解后的加工先确定输出数据流,再确定输入数据流,然后定义加工的内容,进行命名和编号。需要注意的是,图上不应有无输入或无输出的加工环节。
在数据流图分解中,要保持各层成分的完整性与一致性。数据流图的逐层分解是以加工的分解为中心的,属于功能分解性质。把上层加工环节称为父加工环节,下层环节称为子加工环节。加工的分解可能导致数据流的分解、数据存储的分解甚至外部项的分解。分解时一定要保持父项(被分解项)的内容为对应各子项(即分解后的各项)的内容之和。
下层数据流图不应出现不属于上层图中的数据流子项的新的数据流,但可以出现不属于上层图的数据存储环节子项的新的数据存储环节。因为随着加工的分解,分解后的加工(子加工)之间的界面可能是上层图未定义的数据存储,这就需要在下层图中加以定义、命名与编号。
数据流图逐层分解也可能导致某个或某些外部项的分解。因为分解后的各子加工可能与上层图中某个外部项的不同组成部分相联系。当外部项的分解有助于更明确描述系统某些部分的功能与信息需求时,下层图要对分解后的外部项加以定义和命名。注意,下层图不应出现不属于上层图外部项的子项的新外部项。
(2)数据流必须经过加工环节,每条数据流的输入或输出都是加工,即必须进入加工环节或从加工环节流出。不经过加工环节的数据流(如外部项之间的数据交换)不在数据流图上表示,因为这类数据流与所描述的系统无直接关系。
(3)数据存储环节一般作为两个加工环节的界面来安排。只与一个加工环节有关的数据存储,如果不是公用的或特别重要的,可不在数据流图上画出。直接从外部项来与直接到外部项去的数据流应直接与加工环节相连,而不应通过数据存储环节相连。
(4)适当地为数据流、加工、数据存储、外部实体命名,名字应反映该成分的实际含义,避免空洞的名字。
(5)编号。每个数据加工环节和每张数据流图都要编号。按逐层分解的原则,父图与子图的编号要有一致性,一般子图的图号是父图上对应的加工的编号。例如,0层图的图号为0,其中各加工环节按1,2,3,…顺序编号,1号加工环节分解后的子加工按1.1,1.2,1.3,…编号,2号加工环节按2.1,2.2,2.3,…依此类推。
数据流与数据存储环节也要进行编号以便于编写、分析与维护。编号方法原则上与加工环节的编号方法相同。
(6)保持父图与子图平衡。也就是说,父图中某加工的输入/输出数据流必须与它的子图的输入/输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体恰好是父图中的这一个数据流,那么它们仍然算是平衡的。
(7)保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据中获得。
(8)局部数据存储的隐蔽性。当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口时,那么这些数据存储为局部数据存储。为了强调局部数据存储的隐蔽性,在一般情况下,局部数据存储只有作为某些加工的数据接口或某个特定加工的输入和输出时才画出来,即按照自顶向下的分析方法,某数据存储首次出现时只与一个加工有关,那么该数据存储应作为与之关联加工的局部数据存储,在该层数据流子图中不必画出,而在该加工的子图中画出,除非该加工为原子加工。
在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。
(9)在整套数据流图中,每个加工必须既有输入数据流又有输出数据流,允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工,一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同;每个数据存储必须既有读的数据流又有写的数据流,但在某一张子图中可能是只有读没有写,或者是只有写没有读。
(10)只绘制所描述的系统稳定工作情况下的数据流图,而不描述系统启动或结束工作时功能和数据流运动规律处于变动状态的情况。
(11)画数据流而不要画控制流。
通常在设计分层数据流图需要注意数据平衡原则。
任何一个数据流子图必须与它上一层父图的某个加工对应,二者的输入数据流和输出数据流必须保持一致,即父图与子图的平衡。父图与子图的平衡是数据流图中的重要性质,保证了数据流图的一致性,便于分析人员阅读和理解。
在父图与子图平衡中,数据流的数目和名称可以完全相同,也可以在数目上不相等,但是可以借助数据字典中数据流描述,确定父图中的数据流是由子图中几个数据流合并而成的,即子图是对父图中加工和数据流同时进行分解,因此也属于父图与子图的平衡,如图1-2所示。
图1-2 父图和子图的平衡
每个加工必须有输入数据流和输出数据流,以反映此加工的数据来源和加工变换结果。一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据中获得。
数据流图描述了现行系统的总体框架结构,在数据流图的基础上还需要对其中的每个数据流、文件和数据项加以描述,将这些描述所组成的集合称为数据字典。
数据字典的任务就是对数据流图中出现的所有被命名的图形元素在数据字典中作为一个词条加以定义和说明,目的是进行数据分析和归档,使得每个图形元素的名称都有一个确切的解释,同时也是数据库/数据文件设计的依据。除此之外,数据字典还要对系统分析中其他需要说明的问题进行定义和说明。
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,没有数据流图,数据字典也无法发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。
数据字典是系统逻辑模型的详细、具体说明,是系统分析阶段的重要文件,也是内容丰富、篇幅很大的文件,编写数据字典是一项十分重要而繁重的任务。编写数据字典的基本要求是:
(1)对数据流图上各种成分的定义必须明确、易理解、唯一。
(2)命名、编号与数据流图一致,必要时(如计算机辅助编写数据字典时)可增加编码,方便查询搜索、维护和统计报表。
(3)符合一致性与完整性的要求,对数据流图上的成分定义与说明无遗漏项。数据字典中无内容重复或内容相互矛盾的条目。
(4)格式规范、风格统一、文字精炼,数字与符号正确。
数据字典可以用人工方式建立,事先印好表格,填好后按一定顺序排列,就是一本字典,同时也可以建立在计算机内,数据字典实际上是关于数据的数据库。
数据字典的内容包括数据流、数据文件、加工逻辑、源(汇)点及数据元素等词条的描述。在数据流和数据文件词条的数据字典描述中包含一定的数据结构,对于数据结构常用的描述是定义式。表1-3给出了数据结构定义式可能出现的符号。
表1-3 数据结构定义式可能出现的符号
在数据字典中有6种类型的条目:数据项(数据元素)、数据结构、数据流、数据存储、外部实体和处理。不同类型的条目有不同的属性,现分别说明如下。
数据项也称为数据元素,是最小的数据组成单位,也就是不可再分的数据单位,如学号、姓名等。数据项条目给出了某个数据单项的定义,通常为数据项的值类型、允许的取值范围等。
每个数据项,需要描述以下属性。
●名称:数据项的名称要尽量反映该数据项的含义,便于理解和记忆。
●别名:一个数据项可能名称不止一个。若有多个名称,则需加以说明。
●类型:说明数据项取值是字符型还是数字型等。
●取值范围和取值的含义:指数据项可能取什么值或每一个值代表的意思。
图1-3 数据项的数据字典卡片
●长度:指出该数据项由几个数字或字母组成。例如学号,按某校现在的编法由7个数字组成,其长度就是7个字节。图1-3中给出了几个数据项的数据字典卡片,具体说明了数据字典卡片中有关数据项的内容和含义。
数据结构的描述重点是数据之间的组合关系,即说明这个数据结构包括哪些成分。一个数据结构可以包括若干个数据项或(和)数据结构。这些成分中有3种特殊情况:
(1)任选项:这是既可以出现也可以省略的项,用“[]”表示,例如[曾用名]是任选项。
(2)必选项:在两个或多个数据项中,必须出现其中的一个称为必选项。例如,任何一门课程是必修课或选修课,二者必居其一。必选项的表示办法是将候选的多个数据项用“{}”括起来。
(3)重复项:即可以多次出现的数据项。例如,一张订单可订多种零件,每种零件有产品名、规格、数量,这些属性用“零件细节”表示。在订单中,“零件细节”可重复多次。
数据流条目给出某个数据流的定义,它通常是列出该数据流的各组成数据项。有些数据流的组成比较复杂,可以采用自顶向下分解的方式将它表示成更低层次的组合,一直分解到每个与项目有关的人都清楚其准确含义时为止。由低的数据元素 (或称分量)组成更复杂的数据有以下几种方式:
(1)顺序:即以确定次序连接两个或多个分量。
(2)选择:即从两个或多个可能的元素中选取一个。
(3)重复:即把指定的分量重复零次或多次。
(4)可选:即一个分量是可有可无的(重复零次或多次)。
关于数据流,在数据字典中描述以下属性:
●数据流的来源。数据流可以来自某个外部实体、数据存储或某个处理。
●数据流的去处。某些数据流的去处可能不止一个,如果有多个,则每个去处都要说明。
●数据流的组成。一个数据流可包含一个或多个数据结构。若只包含一个数据结构,注意名称的统一,以免产生二义性。
●数据流的流通量。指单位时间(每日、每小时等)里的传输次数。可以估计平均数或最高、最低流量各是多少。
●高峰时的流通量。
数据存储条目给出某个数据存储文件的定义,通常也是列出其记录的组成数据项。此外,还可以指出数据存储文件的组织方式,如按报单号递增次序排列等。
数据存储的条目主要描写该数据存储的结构及有关的数据流、查询要求。有些数据存储的结构可能很复杂,如“学籍表”,包括学生的基本情况、学生动态、奖惩记录、学习成绩、毕业论文成绩等,其中每一项又是数据结构。这些数据结构有各自的条目分别加以说明,因此在“学籍表”的条目中只需列出这些数据结构,而不要列出这些数据结构的内部构成。数据流图是分层的,下层图是上层图的具体化。同一个数据存储可能在不同层次的图中出现。描述这样的数据存储。应列出最低层图中的数据流。
加工条目是对数据流图中每一个不能再分解的基本加工的精确说明。说明中应精确描述用户要求某个加工做什么,包括加工的激发条件、加工逻辑、优先级、执行频率和出错处理等。其中加工逻辑是最基本的部分,它描述了输入数据流、输入文件与输出数据流、输出文件之间的逻辑关系。常用的加工逻辑描述方法有3种:结构化语言、判定表和判定树。需要在数据字典中描述加工的编号、名称、功能的简要说明及有关的输入、输出。
外部实体是数据的来源或去向,因此,在数据字典中关于外部实体的条目,主要说明外部实体产生的数据流和传给该外部实体的数据流以及该外部实体的数量。外部实体的数量对于估计本系统的业务量有参考作用,尤其是关系密切的主要外部实体。