第五章总体设计91第5章总体设计软件总体设计又称概要设计,它的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计。本章内容主要内容包括:软件总体设计的基本任务,软件设计的基本原理,软件结构以及软件结构设计优化准则,面向数据流的设计方法,IDEFO图的设计方法,以及表示软件结构的另一种图形工具——HIPO图。5.1基础知识5.1.1软件总体设计的基本任务软件总体设计阶段是概要地回答系统应该如何实现。因此要把握与详细设计的区别。要完成如下任务。1.软件系统结构设计按照结构化理论,实现一个系统目标需要程序和数据。所以必须设计出组成这个系统的所用程序结构和数据库(文件)。具体方法如下:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。(2)确定每个模块的功能。(3)确定模块之间的调用关系。(4)确定模块之间的接口,即模块之间传递的信息。(5)评价模块结构的质量。2.数据结构及数据库设计在结构化理论软件系统中,尤其是对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计是很重要的。1)数据结构的设计根据需求分析阶段对系统数据的组成,操作约束和数据之间的描述,确定数据结构特性。总体设计阶段利用逐步细化的方法对数据结构进行深入的设计。2)数据库的设计一般的软件系统都有数据的存储,存储要借助数据库技术。数据库的设计指数据存储文件的设计,设计包括概念设计,逻辑设计和物理设计。3.网络系统设计如果采用的是网络环境,则要进行网络系统的设计。4.软件总体设计文档总体设计说明书是总体设计阶段结束时提交的技术文档。按国际GB8576-88《计算机软件产品开发文件编制指南》的规定,软件设计文档可分为“总体设计说明书”,“详细设计说明书”和“数据库数据说明书”。第五章总体设计925.评审在该阶段,对涉及部分是否完整地实现需求中的功能,性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性,有效性以及各部分之间的一致性等,都一一进行评审。5.1.2软件设计的基本原理1.抽象抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,不考虑其他因素。抽象的概念被广泛应用于软件工程学中。在进行软件设计时,抽象与逐步求精,模块化密切相关,可帮助定义软件结构中模块的实体,有抽象到具体地分析和构造处软件的层次结构,提高软件的理解性。2.细化细化实际是一个详细描述(elaboration)的过程。在高层抽象定义时,我们从功能说明或信息描述开始。就是说明功能或信息的概念,而不给出功能内部的工作细节或信息的内部结构。细化则是设计者在原始说明的基础上进行详细说明,随着不断的细化(详细说明)给出更多的细节。3.模块化在软件的体系结构中,模块是可组合,分解和更换的单位。模块具有以下几种基本属性:(1)接口:指模块的输入与输出。(2)功能:指模块实现什么功能。(3)逻辑:描述内部如何实现要求的功能及所需的数据。(4)状态:指该模块的运行环境,即模块的调用于被调用关系。功能,状态与接口反映模块的外部特征,逻辑反映它的内部特征。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分为若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所需求的功能。4.信息隐藏通过抽象,可以确定组成软件的过程实体。通过信息隐藏,可以定义和实现对模块的过程细节和局部数据结构的存取限制。信息隐蔽指在设计和确定模块时,使一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不可能访问的。5.模块独立性模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件独立性的度量标准:(1)耦合性。指软件系统结构中各模块间相互联系紧密程度的一种度量。(2)内聚性。指模块的功能强度的量度,即一个模块内部各个元素彼此结合的紧密度的度量。5.1.3软件结构图软件结构图时软件系统的模块化层次结构,反映了整个系统的功能实现,即将来程序的控第五章总体设计93制层次体系。软件结构往往用用树状或网状结构的图形表示。结构图的主要内容有:模块、模块的控制关系、模块间的信息传递。结构图的形态特征:(1)深度:指结构图控制的层次,也是模块的层数。(2)宽度:指一层中最大的模块个数。(3)扇出:指一个模块直接下属模块的个数。(4)扇入:指一个模块直接上属模块的个数。5.1.4软件结构设计优化准则软件总体设计的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计,这里提出以下软件结构的设计优化准则。(1)模块独立性准则。在划分模块时,尽量做到高内聚,底耦合,保持模块相对独立性,并以此原则优化初始的软件结构。(2)控制与作用范围之间的准则。一个模块的作用范围应在其控制范围之内,且条件判定所在的模块应与受其影响的模块在层次上尽量靠近。(3)结构特征准则。软件结构的深度、宽度、扇入、扇出应适当。软件结构从形态上看,应是顶层扇出数较高一些,中间层扇出数较底一些,低层扇入数较高一些。(4)模块的接口准则。模块的接口要简单、清晰及含义明确,便于理解,易于实现、测试与维护。5.1.5面向数据流的设计方法结构化设计是以结构化分析产生的数据图为基础,将数据流图按一定的步骤映射成软件结构,因此又称结构化设计(StructuredDesign,简称SD)。1。数据流的类型在各种软件系统中,不论数据流图如何庞大与复杂,根据数据流的特性,一般可分为变换型数据流图和事物型数据流图两类。1)变换的型数据流是由输入、变换(或称处理)和输出三部分组成。变换型数据处理的工作过程一般分为取得数据、变换数据和给出数据。这三步体现了变换型数据流图的基本思想。变换是系统的主加工,是系统变换的中心。变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出。而直接从外部设备输入的数据称为物理输入,反之称为物理输出。外部的输入数据一般要经过输入正确性和合理性检查、编辑及格式转换等预处理,这部分工作都有逻辑输入部分完成,它将外部形式的数据转换成内部形式,送给变换中心。同理,逻辑输出部分把变换中心产生的数据的内部形式转换成外部形式,然后物理输出。当数据流图具有这些特征时,这种信息流就成为变换流。2)事物型的数据流图若某个加工将它的输入流分离成许多发散的数据流,形成许多平行的加工路径,并根据输入的值选择其中一个路径来执行,这种特征的数据流图称为事物型的数据流图,这个加工称为事务处理中心。一个大型的软件系统的数据流图,可能既具有变换型的特征,又具有事务型的特征。例如事务型数据流图中的某个加工可能是变换型。第五章总体设计942.SD方法设计过程(1)精化数据流图:把数据流图转换成软件结构图前,设计人员要参照规范说明书,仔细地研究分析数据流图并参照数据字典,认真理解其中的有关元素,检查有无遗漏或不合理之处,进行必要的修改。(2)确定数据流图类型:如果是变换型,确定变换中心和逻辑输入、逻辑输出的界线,映射为变换结构的顶层和第一层;如果是事务中心和加工路径,映射为事务结构的顶层和第一层。(3)分解上层模块,设计中下层模块结构。(4)根据;优化准则对软件结构求精。(5)描述模块功能、接口及全局数据结构。(6)复查,如果有错,转(2)修改完善,否则进入详细设计。3.变换分析设计当数据流图具有较明显的变换特征时,则按照下列步骤设计。(1)确定数据流图中的变换中心、逻辑输入和逻辑设计。(2)设计软件结构的顶层和第一层——变换结构。(3)设计中、下层模块。对第一层的输入、变换及输出模块自顶向下、逐层分解。1.输入模块的下属模块的设计。输入输出下属模块的输入模块的功能是向它的调用模块提供数据,所以必须要有数据来源。这样输入模块应由接收输入数据和数据转换调用模块所需信息两部分组成。因此,每个是;输入模块可以设计成两个下属模块;一个接收、一个转换的。用类似的方法一直分解下去,直到物理输入端。2.输出模块的下属模块的设计。输出模块的功能是将它的调用模块产生的结果送出,它由将数据转换下属模块所需的形式和发送数据两部分组成。这样每个输出模块可以设计成两个下属模块:一个转换、一个发送,一直到物理输出端。2.变换模块的下属模块的设计。根据数据流图中变换中心的组成情况,按照模块独立性的原则来组织其结构,一般对数据流图中每个基本加工建立一个功能模块。3.设计的优化。4.事务分析设计方法(1)确定数据流图中的事务中心和加工路径。当数据流图中的某个加工明显地将一个数据流分解成多个发散的输出数据流时,该加工就是事务中心。从事务中心辐射出去的数据流为各个加工路径。(2)设计软件结构的顶层和第一层——事务结构。首先设计一个顶层模块,它是一个主模块,有两个功能,一是接受数据,二是根据事务类型调度相应的处理模块。事务型软件结构应包括接收分支和发送分支两个部分。1接收分支:负责接收数据,它的设计与变换型数据流图的输入部分设计方法相同.第五章总体设计952发送分支:通常包含一个调度模块,它控制管理所有的下层的事物处理模块.当事物类型不多时,调度模块可与主模块合并.(3)事务结构中,下层模块的设计与优化等工作同变换结构.5.1.6IDEFO图设计方法基于IDEFO图的设计也是结构化设计技术之一,它以系统的功能模型和信息结构为基础设计系统的软件结构.由于IDEFO图按照自顶向下逐层对系统进行分解,并且对系统的每一功能的输入,输出,约束和机制都进行饿全面的描述.因此,在系统总体设计时,一般按照IDEFO图的分解层次,逐层将其转换成软件结构图.5.1.7表示软件结构的另一种图形工具----HIPO图HIPO图既可以描述软件总的模块层次结构---H图(层次图),又可以描述每个模块输入/输出数据,处理功能及模块调用的详细情况---IPO图.HIPO图是以模块分解的层次性以及模块内部输入,处理及输出三大基本部分为基础建立的.5.2单元练习5.2.1填空题1.在软件系统结构中,模块是可组合,分解和更换的单元.模块具有_____,_____,______,和______等属性.2概要设计文档主要有:______,______,______,_______.3数据库的设计指______的设计,主要进行以下几方面的设计:________,_______,_______.4.软件设计基本任务包括_______,______,_______,_______四个方面.5抽象是认识复杂现象过程中使用的思维工具,即抽出事物______的,______的特性而不考虑它的______,不考虑其他因素.6.软件结构的设计是以______为基础的,以需求分析的结果为依据,从实现的角度进一步分化为______,并组成模块的______.7.软件设计是一个把______转换为_____的过程,包括_____和______.8在大型数据处理系统的功能分析和设计中,同时要进行数据分析和数据设计.数据库的概念设计与逻辑设计分别对应于系统开发中的______与______,而数据库的物理设计与模块的______相对应.9.进入了设计阶段,要把软件做什么的_______变换为怎么做的______,即着手实现软件的需求,并将设计的结果反映在_____文档中.10.概要设计评价是对设计部分是否完整实现了需求中规定的______,______等要求,设计反感的______,关键的处理及内外部接口定义_____,______,各部分之间的_____等等一一都进行评审.11.在软件需求分析阶段,已经搞清楚了软件______的问题,并把这些需求通过______描述出来,这也是目标系统的_______.第五章总体设计9612.在一个模块中,_______,_______,和_______反映模块的外部特性,______反映它的内部特性.13.______是指在设计和确定模块时,使得一个模块内包含的信息(过程和数据),对于不需要这些信息的其他模块来说,是不能______的.14.开发一个大而复杂的软件