1,结构化设计 (Structured Design),信息学院计算机系 张翠肖,2,结构化设计,结构化设计(Structured Design, SD )是结构化开发方法的核心,与SA、SP密切联系主要完成软件系统的设计3,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 SD方法应用示例,,4,软件的特征 层次性:反映软件整体的性质 (结构图) 过程性:反映局部的性质(框图) 因此,SD分为:总体设计和详细设计两阶段 1.总体设计(概要设计)解决系统的模块结构,即分解模块,确定系统模块的层次结构任务:① 划分模块② 确定模块功能③ 确定模块间调用关系④ 确定模块间界面文档:模块结构图(软件结构图SC)及其模块功能说明1 结构化设计步骤,5,2.详细设计对模块图中每个模块的过程进行描述,常用的描述的方式有:伪代码, 流程图,N-S图,PAD图等1 结构化设计步骤,6,总体 设计,复审,,,,修 改,详细 设计,,模块描述,复审,,,,修 改,软件设计工作流程,首先做概要设计,将软件需求转化为数据结构和软件的系统结构然后是详细设计,即过程设计。
通过对结构表示进行细化,得到软件详细的数据结构和算法1 结构化设计步骤,SD法的设计总则,根据软件结构的准则,模块化准则,软件独立性准则得到结构化设计的总则是:,“降低块间联系,提高块内联系”,1 结构化设计步骤,结构化方法总体设计的步骤是: ⑴ 从DFD图导出初始的模块结构图 ⑵ 按照SD法设计总则,改进模块结构图8,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 SD方法应用示例,,9,2 软件结构与软件结构图,软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量模块之间的关系可有多种,但都可以归结为一种层次关系软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素—模块及模块之间的调用关系,模块之间的数据传递关系10,2.1 软件结构的基本概念,二、模块化模块化就是将系统划分为若干个模块,每个模块完成一个子功能模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图。
一、模块(Module)模块是程序对象有名字的集合例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素软件结构图,11,软件的层次结构,顶层,1层,2层,扇入为2,扇出为3,扇入为3,,,,,3层,,4层,软件结构示意图,有关指标: ⑴深度:表示软件结构中从顶层模块到最底层模块的层数 ⑵宽度:表示控制的总分布 ⑶扇出数:指一个模块直接控制下属的模块个数 ⑷扇入数:指一个模块的直接上属模块个数一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构如图所示12,2.2 软件的树状结构和网状结构,由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构树状结构的特点是:整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系13,在网状结构中,任何两个模块间都可以有双向的关系,不分层次。
任何两个模块都是平等的,没有从属关系网状结构,(a),(b),比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构2.2 软件的树状结构和网状结构,14,2.3 软件结构图(SC),,模块5,模块5,模块4,模块4,模块1,模块3,模块2,,,,,,,,,,values,values,data,data,模块1,模块2,模块3,,,,values,,,values,,,data,,data,,结构图(Structure Chart,简称SC图)是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递结构图的主要构成有:⑴模块(Module):用矩形框表示⑶数据:,模块调用图,⑵调用:用箭头表示调用关系data,,,,15,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 SD方法应用示例,,16,要把数据流图(DFD)转换成软件结构,必须研究DFD的类型。
各种软件系统,不论DFD如何庞大复杂,一般可分为变换型数据流图和事务型数据流图两类 1. 变换型数据流图变换型的DFD是由输入、变换(或处理)和输出三部分组成,如图1所示,虚线为标出的流界 变换型数据处理的工作过程一般分为取得数据、变换数据和给出数据这三步体现了变换型DFD的基本思想3 数据流图的类型,图 1 变换型DFD,变换是系统的主加工,变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出而直接从外部设备输入的数据称为物理输入,反之称为物理输出外部的输入数据一般要经过输入正确性和合理性检查、编辑及格式转换等预处理,这部分工作都由逻辑输入部分完成,它将外部形式的数据变成内部形式,送给主加工同理,逻辑输出部分把主加工产生的数据的内部形式转换成外部形式然后物理输出因此变换型的DFD是一个顺序结构3 数据流图的类型,19,2. 事务型的数据流图若某个加工将它的输入流分离成许多发散的数据流,形成许多平行的加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD称为事务型的数据流图,这个加工称为事务处理中心,如图2所示3 数据流图的类型,图 2 事务型DFD,3 数据流图的类型,21,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 举例,,22,结构化设计方法的过程如下: (1) 精化DFD: 把DFD转换成软件结构图前,设计人员要仔细地研究分析DFD并参照数据字典,认真理解其中的有关元素,检查有无遗漏或不合理之处,进行必要的修改。
2)确定DFD类型: 如果是变换型,确定变换中心和逻辑输入、逻辑输出的界线,映射为变换结构的顶层和第一层;如果是事务型,确定事务中心和加工路径,映射为事务结构的顶层和第一层 (3)分解上层模块,设计中下层模块结构 ,4 结构化设计过程,23,(4) 根据优化准则对软件结构求精5) 描述模块功能、接口及全局数据结构6)复查,如果有错,转(2)修改完善,否则进入详细设计DFD 初始SC(结构图) SC,,,类型,分析,优化,启发式规则,4 结构化设计过程,24,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 SD方法应用示例,,25,当DFD具有较明显的变换特征时,则按照下列步骤设计:1. 确定DFD中的变换中心、逻辑输入和逻辑输出主加工 — 描述了系统的主要功能、特征特点:输入/输出数据流较多,往往不止一个逻辑输入/输出 — 是指输入/输出主加工的数据流输入流 — 把物理输入转换为逻辑输入的数据流 输出流 — 是将逻辑输出转换为物理输出的数据流。
5 变换分析设计,26,确定主加工的方法:从物理输入端开始,沿着数据流方向向系统中心寻找,直到有这样的数据流:它不能再被看作是系统的输入,则它的前一个数据流就是系统的逻辑输入同理,从物理输出端开始,逆数据流方向向中间移动,可以确定系统的逻辑输出介于逻辑输入和逻辑输出之间的加工就是变换中心,用虚线划分出流界,DFD的三部分就确定了5 变换分析设计,2. 设计软件结构的顶层和第一层——变换结构变换中心确定以后,就相当于决定了主模块的位置,这就是软件结构的顶层其功能是主要完成所有模块的控制,它的名称是系统名称,以体现完成整个系统的功能 主模块确定之后,设计软件结构的第一层第一层至少要有输入、输出和变换三种功能的模块:为每个逻辑输入设计一个输入模块,其功能为向顶层模块提供相应的数据; 为每个逻辑输出设计一个输出模块,其功能为输出顶层模块的信息 为变换中心设计一个变换模块,它的功能是将逻辑输入进行变换加工,然后逻辑输出,5 变换分析设计,28,,,,输 入 流,转换流,输出 流,,,输 入 流,转换流,输出 流,M,CI,,,CT,CO,,,,,,C,C,D,D,,,,CI,CT,CO,变换分析技术,,,,5 变换分析设计,3. 设计中、下层模块对第一层的输入、变换及输出模块自顶向下、逐层分解。
1) 输入模块的下属模块的设计输入模块的功能是向它的调用模块提供数据,所以必须要有数据来源这样输入模块应由接收数据和转换成调用模块所需的信息两部分组成因此,每个输入模块可以设计成两个下属模块:一个接收,一个转换用类似的方法一直分解下去,直到物理输入端 ,5 变换分析设计,2) 输出模块的下属模块的设计输出模块的功能是将它的调用模块产生的结果送出,它由将数据转换成下属模块所需的形式和发送数据两部分组成这样每个输出模块可以设计成两个下属模块:一个转换,一个发送,一直到物理输出端3) 变换模块的下属模块的设计根据DFD中变换中心的组成情况,按照模块独立性的原则来组织其结构,一般对DFD中每个基本加工建立一个功能模块,,5 变换分析设计,4 . 设计的优化以上步骤设计出的软件结构仅仅是初始结构,还必须根据设计准则对初始结构精细和改进,求精办法包括:(1) 输入部分的求精:对每个物理输入设置专门模块,以体现系统的外部接口;(2) 输出部分的求精:为每个物理输出设置专门模块,同时注意把相同或类似的物理输出模块合并在一起,以减低耦合度 (3) 变换部分的求精:根据设计准则,对模块进行合并或调整。
,5 变换分析设计,32,M,CI,,,CT,CO,,处理C,取B,转换B,,,转换D,送E,,,,,,,取A,转换A,,,转换E,送F,,,变换分析技术,,,,F,5 变换分析设计,33,5 变换分析设计,34,总之,软件结构的求精,带有很大的经验性往往形成DFD中的加工与SC中的模块之间是一对一的映射关系,然后再修改但对于一个实际问题,可能把DFD中的两个甚至多个加工组成一个模块,也可能把DFD中的一个加工扩展为两个或更多个模块,根据具体情况要灵活掌握设计方法,以求设计出由高内聚和低耦合的模块所组成的、具有良好特性的软件结构 ,5 变换分析设计,35,内容提纲,结构化设计步骤 软件结构与软件结构图 数据流图类型 结构化设计过程 变换分析设计 事务分析设计 SD方法应用示例,,36,对于具有事务型特征的DFD,则采用事务分析的设计方法结合图4,说明该方法的设计过程1. 确定DFD中的事务中心和加工路径当DFD中的某个加工具有明显地将一个输入数据流分解成多个发散的输出数据流时,该加工就是事务中心从事务中心辐射出去的数据流为各个加工路径 2. 设计软件结构的顶层和第一层——事务结构设计一个顶层模块,它是一个主模块,有两个功能,一是接收数据,二是根据事务类型调度相应的处理模块。
事务型软件结构应包括接收分支和发送分支两个部分6 事务分析设计,。