结构化分析和设计模块
1.1 数据流图DFD
数据流图是结构化分析的工具,结构化方法就是采用自顶向下逐层分解的思想进行分析(遵循自顶向下,从抽象到具体)。
随着分解层次的增加,抽象级别也越来越低,即越来越接近问题的解。
数据流图的基本图形元素包括数据流、加工、数据存储和外部实体。数据流:加工和数据存储用于构建软件系统内部的数据立项模型,而外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向。外部实体包括:人、物、外部系统、组织机构等。
对基本加工的说明主要有三种方式:结构化语言、判断表(决策表)、判断树(决策树),基本加工的基本原则为:1,对数据流图的每一个基本加工,必须有一个基本加工逻辑说明;2,基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则;3,加工逻辑说明必须描述实现加工的策略而不是实现加工的细节 ;4,加工逻辑说明包含的信息应是充足的,完备的、有用的、无冗余的。
顶层数据流图描述了系统的输入和输出
例如图书馆借书,读者就是外部实体,借书证和图书都是数据流,借阅是加工
建立DFD必须满足以下原则:
1,加工处理和数据流的正确使用(保持数据守恒)。如一个加工必须既有输入又有输出,数据流只能和加工相关,即从加工流向加工、数据源流向加工或加工流向数据源。
2,每个数据流和数据存储都要在数据字典中有定义,数据字典将包括各层数据流图中数据元素的定义
3,数据流图中最底层的加工处理必须有加工处理说明
4,父图和子图必须平衡,即父图中某加工的子图的输入输出(数据流)和分解这个加工的子图的输入输出数据流必须一致,这种一致性不一定要求数据流的名称和个数一一对应,但他们在字典中的定义必须一致,数据流或数据项既不能多也不能少
5,加工处理说明和数据流图中加工处理设计的元素必须保持一致。例如,在加|—处理中,输入数据流必须说明其如何使用,输出数据流说明如何产生或选取,数据存储说明如何选取、使用或修改
6,在一幅图中的图元个数控制在7+2以内
1.2 实体联系图ERD
ERD图有三个要素:实体,属性,联系
实体:目标系统所需要的复合信息的表示,也称之为数据对象
属性:定义数据对象的特征
联系:不同数据对象之间的关系,在该系统中是一个数据对象
1.3 模块结构图
模块结构图由模块,调用,数据,控制信息和转换符号组成
模块:通常指用一个名字就可以调用的一段程序语句,常用 矩形 表示
调用:模块结构图中箭头总是由调用模块指向被调用模块
数据:当一个模块调用另一个模块时,调用模块可以把数据传送到被调用模块供处理,而被调用模块又可以将处理的结果送回到调用模块。模块之间传递的数据,使用与调用平行的带空心圆的箭头平行,并在旁边标注数据名
控制信息:在模块间有时必须传送某些控制信息。
控制信息和数据的主要区别是前者只反应数据的某种状态,不必进行处理。控制信息和控制成分并不等价,控制成分指明指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑。可计算的程序都可以使用顺序、选择、循环这3种控制结构来描述。
转换符号:当模块结构在一张纸上画不下,需要连接到另一张纸上,或者为了避免图上线条交叉时,都可以使用转换符号,圆圈上加上标号。
模块的作用范围应该在控制范围之内,因为控制范围包含了模块本身以及所有直接或简洁从属于该模块的模块集合。
1.4 结构化输出
结构化输出的结果一般包括:一套分层的数据流图、一本数据词典、一组小说明(也称之为加工逻辑说明),补充材料
数据字典是对数据的数据项,数据结构,数据流,数据存储,处理逻辑,外部实体等进行定义和描述,其目的是对数据流程图中各个元素做出详细说明。其条目有数据项,数据流,数据存储,基本加工等。
1.5 模块化设计
模块化设计要求高内聚低耦合
模块化划分应该遵循:
1.模块的大小要适中。尽量使得模块的功能单一,过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低独立性,一般来说,一个模块的大小在50~200行之间。
2.模块的扇入和扇出要合理。扇出指的是一个模块直接调用的下级模块的个数;扇出大表示模块的复杂度高;扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块;扇出太小可以把下级模块进一步分解成若干个子功能模块中去;设计良好的软件结构通常顶层扇出比较大,一般来说,系统的平均扇入和扇出系数为3或4,不应该超过7,否则会增大出错的概率
3.深度和宽度适中。深度表示软件结构中模块层数,如果层数过多,则应该考虑是否有些模块设计过于简单,看能否适当合并。宽度是软件结构中同一层次上的模块总数的最大值,一般来说,宽度越大,系统越复杂,对系统宽度影响最大的是模块的扇出。
1.6 结构化设计
结构化分析的输出是结构化设计的输入,比如接口设计主要依靠软件开发时的接口设计(接口设计的任务是描述软件与外部环境之间的交互关系,软件内模块之间的调用关系。
结构化设计主要包括:
体系结构设计:定义软件的主要结构元素以及关系
数据设计:基于实体联系图确定软件涉及的文件系统的结构以及数据库的表结构
接口设计:描述用户界面,软件和其他硬件设备,其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口
过程设计:确定软件各个组成部分内的算法以及内部数据结构,并选定某种过程的表达形式来描述算法
1.7 结构化开发方法
结构化开发方法由结构化分析、结构化设计和结构化程序设计组成,是一种面向数据流的开发方法。
结构化方法总督指导思想是自顶向下、逐层分解
结构化方法的基本原则是功能的分解与抽象
结构化方法适用于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,而且难以适应需求的变化。
结构化设计方法是一种面向数据流的设计方法,与结构化分析方法衔接。在需求分析阶段,结构化分析方法产生数据流图,而在设计阶段,结构化设计方法将数据流映射为软件系统的模块结构。
数据流图中从系统的输入数据到系统的输出数据流的一串变换形成了一条信息流。其中的信息流一般情况下包括变换流型和事物流型,不同类型的数据流到程序模块的映射方法不同。一个软件系统往往不仅仅只有一种数据流类型
1.8 仓库风格
仓库风格是一种软件体系结构,其中包含一个数据仓库和若干个其他构件。数据仓库位于该体系结构的中心,其他构件访问该数据仓库并对其中的数据进行增删改查等操作
数据库系统,超文本系统,黑板系统都是仓库风格
优点:
1.对可更改性和可维护性的支持
2,对复用的知识源
3,支持容错性和健壮性
缺点:
1,测试困难
2,不能保证有好的解决方案
3,难以建立好的控制策略
4,低效
5,昂贵的开发工作
6,缺少对并行机制的支持