▶3.2.3 数据流图
数据流图是描述系统中数据流程的图形工具,它标识了一个系统的逻辑输入和逻辑输出以及把逻辑输入转换为逻辑输出所需要的加工。
▶3.2.3.1 数据流图的组成
数据流图由四种基本成分组成。
(1)数据流——用箭头表示,箭头旁边用文字加以标记;
(2)加工——用圆圈表示,圆圈内用文字加以标记;
(3)数据存储——用双线表示,双线旁边用文字加以标记;
(4)数据的源点和终点——用方框表示,方框内用文字加以标记。四种基本成分的作用和组成。
(1)数据流。它是一条流水线,在这条流水线上有一组由一定成分组成的数据在流动。登记表由姓名、性别、出生日期、籍贯、毕业学校、党团员等组成。
数据流的流向由箭头方向指出,可从加工流向加工,也可以从加工流向数据存储或从数据存储流向加工,也可以从源点流向加工或从加工流向终点。每条数据流均有一个合适的名字,表明数据流的含义,但流入或流出数据存储的数据流可以不命名。
(2)加工。它是对数据进行的操作。每个加工除了命名外,还有一个编号,说明这个加工在层次分解中的位置。
(3)数据存储。它是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息。数据流反映了系统中流动的数据,表现出动态数据的特征;数据存储反映了系统中静止的数据,表现出静态数据的特征。
(4)源点和终点。它表示系统中数据的来龙去脉,通常存于系统之外的人和组织之中。源点和终点的表达不必很严格,它只是起到注释作用,补充说明系统与其他外界环境的联系。
图3-3中的学生档案管理系统,说明了数据流图是如何由四种基本成分组成。
▶3.2.3.2 数据流图的结构
一个实际的软件系统是非常复杂的,为了描述它们的信息流向和加工,用一套分层的数据流图来描述,有顶层、中间层、层底之分。
(1)顶层。决定系统的范围,决定输入输出数据流,它说明系统的边界,把整个系统的功能抽象为一个加工。顶层数据流图只有一张。
(2)中间层。顶层之下是若干中间层,某一中间层既是它上一层加工的分解结果,又是它下一层若干加工的抽象,即它又可进一步分解。
(3)层底。若一张数据流图的加工不能进一步分解,这张数据流图就是底层的数据流图。故底层数据流图的加工是由基本加工构成的,所谓基本加工是指不能再进行分解的加工。
▶3.2.3.3 分层数据流图的画法
画分层数据流图时,应根据分解和抽象的原则自顶向下逐层分解画出。在画各层数据流图时,要注意父图与子图的平衡,各层数据流图及其加工的编号和数据守恒问题。
(1)父图与子图的平衡。在分层数据流图直接相邻的两层中,上层是下层的父图,下层是上层的子图。一般来说,父图中有几个加工,下层就有几个子图,但子图的个数也可以少于父图中加工个数,即父图中有些加工可能是基本加工,它就没有子图。
父图中某个加工的输入输出数据流应该同相应的子图的输入输出流的数目相同,分层数据流图的这种特性称为父图与子图的平衡。
(2)子图的编号规则。子图的编号即为父图相应加工的编号;子图中加工的编号由子图号、小数点、局部号构成。顶层只有一张,只有一个加工,不必编号。
(3)数据守恒。所谓数据守恒是指加工的输入输出数据流是否匹配,即一个加工既有输入数据流又有输出数据流。[1]
▶3.2.3.4 完善数据流图
画出了分层数据流图后,应进一步完善,提高数据流图的可理解性。
在对加工进行分解时,应注意分解的均匀性,即分解为大小均匀的几部分,应避免不均匀的分解,即在某一张数据流图中,某些加工已是基本加工,而另一些加工还可以进一步分解为好几层,这时应重新分解。一个加工一次分解为多少个子加工为好?经验证明不超过7个为宜。分解过少,可能有较多的层次,分解过多,使人难以理解。一般分解应是自然的,概念上是合理的,清晰的。若一张子图上的所有加工都是不可再分解的基本加工,这时分解过程就可结束了。
▶3.2.3.5 数据字典
数据流图描述软件系统的信息流程和加工,但并没有对各个成分进行详细说明,SA方法使用数据字典对这些成分进行详细说明。数据流图中的数据流名、数据存储名、数据项名、基本加工名的严格定义的集合构成了数据字典。数据字典是SA方法重要工具之一,与数据流图配套,缺一不可。数据流图中的非基本加工不必描述,它们是基本加工的抽象,可用基本加工的组合来说明,源点终点也不必在数据字典中描述。因此数据字典中有如下四种条目:数据流、数据存储、数据项和基本加工。
数据字典的作用是建立一组一致的定义,便于用户与分析员之间、用户与程序员之间的通讯,使程序员用一致的数据项和数据存储定义来描述数据库和数据结构,避免了模块接口和系统接口的不一致性。
建立数据字典时要求无冗余,同一件事不能在几处说明,否则引起修改的麻烦。为避免冗余,需要建立一些约定。数据字典可用人工管理,也可用计算机管理。
▶1.符号约定
数据字典的描述方法可采用卡片格式。对数据流、数据存储和数据项的描述可采用如下符号:
(1)“+”表示与。例如:登记表=姓名+专业+班级+年龄+性别+籍贯;
(2)“|”表示或。例如:存期【1|2|3|5】,表示银行存期可有1年,2年,3年,5年,而“【】”表示选择项。
(3)“{}”表示重复。例如:发票={发票行},表示一张发票有若干行。
▶2.数据字典条目的描述
对于数据流名、数据存储名、数据项名的条目,有若干项是共同的。名字表示该条目的名称;种类表示是数据流、数据存储、数据项或基本加工中的某一种;简述是该条目的作用、含义的简单描述;别名是指该条目名的另一个名字;组成是指该条目由哪些数据成分构成,可用上述的符号约定来描述。各种条目还有自己专有项目。基本加工条目中还有该基本加工的编号、激发条件、执行频率、加工逻辑等。加工逻辑是指用户对这个加工的逻辑要求,而不是具体怎样实现,不要给出具体变量和控制流程的具体细节,引入这些细节会给用户阅读需求说明书带来困难,另外,过早引入细节就限制了设计人员的自由。
▶3.加工逻辑的描述
加工逻辑是基本加工条目中的一项重要内容,有三种工具来描述加工逻辑:结构化语言,判定表,判定树。
结构化语言是描述加工逻辑的常用工具,它是介于自然语言和形式语言之间的一种语言,其结构分为内、外两层,外层语法是比较具体的,内层语法比较灵活。外层语法描述操作的控制结构,如顺序、选择和循环等,这些控制结构将加工中的各个操作连起来。内层语法通常由分析员根据系统的具体特点及用户接受能力灵活决定,一般来说,只有祈使句一种,明确地表达“加工”要做什么,加工对象用的名词都是数据字典中定义过的词或自定义的词,动词要避免用“处理”等抽象的词汇,不用形容词和副词,允许引入运算符和关系符。
在描述加工逻辑时,如果有一系列逻辑判断,用结构化语言描述就不直观,也不简捷,这时可用判定表或判定树来描述。判定表是用表格的形式列出在什么条件下做什么处理,一目了然。判定树是以一棵从左向右生长的树型表示来描述在各种条件下要做的事情,树的各个分支表示某种条件,分支的端点表示该分支对应的条件下要做的处理。[2]
▶4.数据字典的用途
数据字典作为分析阶段的工具,有助于改进分析人员和用户间的通信,进而消除很多的误解,同时也有助于改进不同的开发人员之间的通信。开发人员如果都能按数据字典描述的数据设计模块,则能避免许多因数据不一致而造成的麻烦。此外,数据字典对于应用系统中的数据库设计也起着重要作用。