结构化分析方法 SA
结构化分析方法 SA 方法的基本思想是自顶向下,逐层分解,把一个大问题分解成若干个小问题,每个小问题再分解成若干个更小的问题。
SA 方法分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中一般使用 E-R 图表示数据模型,用 DFD 表示功能模型,用状态转换图(STD) 表示行为模型。这三个模型有着密切的关系,它们的建立不具有严格的时序性,而是一个迭代的过程。
数据流图
DFD 是 SA 方法中的重要工具,是表达系统内数据的流动并通过数据流描述系统功能的一种方法。DFD 还可被认为是一个系统模型,在信息系统开发中,如果采用结构化方法,则一般将 DFD 作为需求规格说明书的一个组成部分。
DFD 的主要作用
DFD 从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系 统所完成的功能。具体来说,DFD 的主要作用如下:
- DFD 是理解和表达用户需求的工具,是需求分析的手段。由于DFD简明易懂,不需要任何计算机专业知识就可以理解它,因此,系统架构设计师可以通过 DFD 与用户进行交流。
- DFD 概括地描述了系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点。
- DFD 作为一个存档的文字材料,是进一步修改和充实开发计划的依据。
DFD 的基本符号
在 DFD 中,通常会出现 4 种基本符号,分别是数据流、加工、数据存储和外部实体 (数据源及数据终点)。数据流是具有名字和流向的数据,在DFD中用标有名字的箭头表示。加工是对数据流的变换,一般用圆圈表示。数据存储是可访问的存储信息,一般用直线段表示。外部实体是位于被建模的系统之外的信息生产者或消费者,是不能由计算机处理的成分,它们分别表明数据处理过程的数据来源及数据去向,用标有名字的方框表示。
DFD 的层次
SA 方法的思路是依赖于 DFD 进行自上而下的分析。这也是因为系统通常比较复杂,很难在一张图上就将所有的数据流和加工描述清楚。因此,DFD提供一种表现系统高层和低层概念的机制。也就是先绘制一张较高层次的DFD,然后在此基础上,对其中的加工进行分解,分解成为若干个独立的、低层次的、详细的 DFD , 而且可以这样逐一地分解下去,直至系统被清晰地描述出来。看下图,圆圈就是加工,矩形是实体,箭头是数据流,两条直线是数据存储。
- 顶层图。顶层图是描述系统最高层结构的 DFD ,它的特点是将整个待开发的系统表示为一个加工,将所有的外部实体和进出系统的数据流都画在一张图中。
顶层图用来描述系统有什么输入和输出数据流,与哪些外部实体直接相关,可以把整个系统的范围勾画出来。 - 逐层分解。当完成了顶层图的建模之后,就可以在此基础上进行进一步的分解。
如何画 DFD
DFD 的绘制是一个自顶向下、由外到里的过程,通常按照以下几个步骤进行:
- 画系统的输入和输出:在图的边缘标出系统的输入数据流和输出数据流。这一步其实是决定研究的内容和系统的范围。在画的时候,可以先将尽可能多的数据流画出来,然后再删除多余的,增加遗漏的。
- 画 DFD 的内部:将系统的输入、输出用一系列的处理连接起来,可以从输入数据流画向输出数据流,也可以从中间画出去。
- 为每一个数据流命名:命名的好坏与 DFD 的可理解性密切相关,应避免使用空洞的名字。
- 为加工命名:使用动宾短语为每个加工命名。
每画好一张 DFD , 就需要进行检查和修改,检查和修改的原则如下:
- DFD 中的所有图形符号只限于前述 4 种基本图形元素,图上每个元素都必须有名字。
- 每个加工至少有一个输入数据流和一个输出数据流,而且要保持数据守恒。也就是,一个加工的所有输出数据流中的数据必须能从该加工的输入流中直接获得,或者通过该加工能产生的数据。一个加工的输出数据流+应与输入数据流同名,即使它们的组成完全相同。
- 在 DFD 中,需按层给加工编号。编号表明了该加工处在哪一层,以及上下层的父图与子图的对应关系。
- 规定任何一个 DFD 子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。此即父图与子图的平衡。也就是说,父图中的某加工的输入输出流必须与它的所存子图的输入输出数据流在数量上和名字上相同。值得注意的是,如果父图中的一个输入(输出)数据流对应于子图中的几个输入(输出)数据流,而子图中组成这些数据流的数据项的全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
- 在整套 DFD 中,每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
- 可以在 DFD 中加入物质流,帮助用户理解 DFD ,但不可夹带控制流。
重点关注,数据流图的平衡原则,如下所示。
- 父图 ( 上层数据流图 ) 与 子图 ( 下层数据流图) 平衡。个数一致:两层数据流图中的数据流个数一致。方向一致:两层数据流图中的数据流方向一致。
- 子图内部的平衡。黑洞:加工只有输入没有输出。奇迹:加工只有输出没有输入。灰洞:加工中输入不足以产生输出。每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
状态转换图
大多数业务系统是数据驱动的,所以适合使用 DFD。但是,实时控制系统却主要是事件驱动的,因此,行为模型是最有效的描述方式。
STD 通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为。此外,STD还指出了作为特定事件的结果将执行哪些动作(例如,处理数据等)。状态是任何可以被观察到的系统行为模式,每个状态代表系统的一种行为模式。
在 STD 中,用圆形框或椭圆框表示状态,通常在框内标上状态名。状态规定了系统对事件的响应方式。系统对事件的响应可以是做一个(或一系列)动作,也可以是仅仅改变系统本身的状态。
STD 描述了系统如何在各种状态之间移动。事件是在某个特定时刻发生的事情,它是对引起系统从一个状态转换到另一个状态的外界事件的抽象。例如,内部时钟指明某个规定的时间段已经过去,鼠标移动或单击等都是事件。简而言之,事件就是引起系统状态转换的控制信息。
在 STD 中,从一个状态到另一个状态的转换用箭头线表示,箭头表明转换方向,箭头线上标上事件名。必要时可在事件名后面加一个方括号,括号内写上状态转换的条件。也就是说,仅当方括号内所列出的条件为真时,该事件的发生才引起箭头所示的状态转换。
STD 既可以表示循环运行过程,也可以表示单程生命期。当描述循环运行过程时,通常不关心循环是怎样启动的。当描述单程生命期时,需要标明初始状态(简称为 "初态",系统启动时进入初始状态)和最终状态(简称为"终态",系统运行结束时到达最终状态)。
在 STD 中,初始状态用实心圆表示,最终状态用一对同心圆(内圆为实心圆)表示。
数据字典
DFD 描述了系统的分解,即系统由哪几部分组成,各部分之间的联系等,但是,对于数据的详细内容却无法在 DFD 中得到反映。数据字典是在DFD 的基础上,对 DFD 中出现的所有命名元素都加以定义,使得每个图形元素的名字都有一个确切的解释。
DFD 和数据字典等工具相配合,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。
数据字典的条目
数据字典中一般有 6 类条目,分别是数据元素、数据结构、数据流、数据存储、加工逻辑和外部实体。
数据字典的作用
数据字典是所有人员工作的依据,统一的标准。它可以确保数据在系统中的完整性和一致性。
数据字典的管理
为了保证数据的一致性,数据字典必须由专人(数据管理员)管理。数据管理员的职责就是维护和管理数据字典,保证数据字典内容的完整性和一致性。任何人,包括系统架构设计师、软件设计师、程序员,如果要修改数据字典的内容,都必须通过数据管理员。数据管理员还要负责把数据字典的最新版本及时通知有关人员。