1、第四章 概要设计,一 软件设计,1.软件设计的任务 就是把需求分析阶段产生的分析模型转换为用适当手段表示的软件设计模型。 分析模型设计模型设计文档,一 软件设计,2.软件设计的方法 结构化设计方法 面向对象设计方法,一 软件设计,3.软件设计的内容 数据设计:将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数据结构的定义。 体系结构设计:定义软件系统各主要成份之间的关系。 接口设计:根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。 过程设计:则是把结构成份转换成软件的过程性描述。,一 软件设计,4.软件设计的阶段 概要设计/总体设计
2、详细设计,二 模块化设计,1.模块(module) 一个大而复杂的软件系统,根据其功能,划分许多较小的单元,或较小的程序,那么我们把这些较小的单元 就称为-模块。,二 模块化设计,2.模块化设计(module design) 就是按适当的原则把软件划分为一个个较小的,相关而又相对独立的模块。,二 模块化设计,3.模块化设计的思想 1)分解:将问题化大为小,无论其复杂度或求解的工作量都会随之减小。,C(P1+P2)C(P1)+C(P2) E(P1+P2)E(P1)+E(P2),软件工程基本定理,设: C(x) 为复杂程度函数E(x) 为决定解决问题x所需的工作量(时间)函数,二 模块化设计,3.
3、模块化设计的思想 1)分解:,二 模块化设计,3.模块化设计的思想 2)模块独立性: 是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。 衡量模块的独立性的标准:模块间的耦合和模块的内聚。,2) 模块独立性,内聚:模块内部各成分之间的联系。,模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。 功能内聚模块的功能独立性最强。,功能内聚 (Functional Cohesion)
4、,模块中各组成部分是顺序执行的。 通常情况下,上一个处理框的输出就是下一个处理框的输入。,顺序内聚 (Sequential Cohesion),如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。 模块内各个功能是紧密相连的。,通信内聚 (Communication Cohesion),使用流程图做为工具设计程序时,如果流程图太大,可以把流程图中的某一部分划出组成模块,就得到过程内聚模块。 例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,过程内聚(Procedural
5、Cohesion),时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。 例如,初始化模块和终止模块就是时间内聚模块。,时间内聚(Classical Cohesion),这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,逻辑内聚(Logical Cohesion),当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。,偶然性内聚(Coincidental Cohesion),2) 模块
6、独立性,耦合:是程序结构中一个模块与其它模块相互关联的度量。,模块之间耦合性越强,功能独立性越差,这样形成的模块结构界面不好。 要求模块结构达到高内聚,低耦合。,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 非直接耦合的模块独立性最强。,数据耦合 (Data Coupling),一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。,特征耦合 (Stamp Coupling),一组模块数据结构信息,就是特征耦合。这个记录是某一数据结构的子结构,
7、而不是简单变量。,控制耦合 (Control Coupling),如果一个模块通过传送开关、标志、名字等控制参数,明显地控制选择另一模块的功能,就是控制耦合。,外部耦合(External Coupling) 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 公共耦合(Common Coupling) 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种
8、情况。松散公共耦合和紧密公共耦合。,松散的公共耦合,紧密的公共耦合,如果发生下列情形,模块之间就是内容耦合: 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); 一个模块有多个入口。,内容耦合 (Content Coupling),c,进入另一模块内部,模块代码重叠,模块多个入口,三 结构化设计方法(SD-Structured Design),1.SD概述: 结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础发展起来的。 它所提供的方法和原则,主要是用来指导软件的概要设计。它还提供了
9、一种 “结构图” 的描述工具,是专门用来描述软件的总体结构的。,三 结构化设计方法(SD-Structured Design),结构化设计属于面向数据流 的设计方法。 面向数据流的设计要解决的任务,就是在上述需求分析的基础上,将DFD图 映射(Mapping)- 软件系统的结构。 换句话说,这类设计方法,允许把用 DFD图表示的系统逻辑模型,很方便地转换成对于软件结构的初始设计描述。 结构化设计方法中,软件的结构一律用 SC 图来描述。,三 结构化设计方法(SD-Structured Design),2.SD的目的 使程序的结构尽可能反映要解决的问题的结构。 3.SD的任务 完成目标系统的DF
10、D目标系统结构图(SC),三 结构化设计方法(SD-Structured Design),4.SD的设计工具系统结构图(SC Structured Chart ) (1)SC的基本成分 模块:模块用矩形框表示,每个模块有一模块名,反映该模块的功能。 调用:模块之间的调用关系用从一个模块指向另一个模块的箭头来表示,其含义是前者调用后者。,三 结构化设计方法(SD-Structured Design),4.SD的设计工具 (1) SC的基本成分数据:模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示,其中小箭头的方向指出相应数据的传输方向。,三 结构化设计方法(SD-Struct
11、ured Design),4.SD的设计工具 (1) SC的基本成分,三 结构化设计方法(SD-Structured Design),4.SD的设计工具 (2) SC的辅助符号,三 结构化设计方法(SD-Structured Design),4.SD的设计工具 (3)基本概念 深度:指程序结构图中控制的层数。 宽度:指程序结构图中同一层次上模块总数的最大值。 扇出:指该模块直接调用的模块数目。 扇入:指能直接调用该模块数目。,程序系统结构图,2018/12/15,三 结构化设计方法(SD-Structured Design),5.SD方法的步骤 复审DFD图,必要时可再次进行修改或细化。 鉴别
12、DFD图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型。 按照SD方法规定的一组规则,把DFD图映射为初始SC图。 按照SD优化设计的指导原则改进初始SC图,获得最终SC图。,2018/12/15,从 DFD 图导出SC图的步骤,四 数据流图到软件体系结构的映射,1.数据流图类型 变换流-变换分析,2018/12/15,1.数据流图类型事务流事务分析 T称为事物中心 接收输入数据 分析事务确定类型 根据类型取通道,四 数据流图到软件体系结构的映射,2018/12/15,四 数据流图到软件体系结构的映射,1.数据流图类型 混合型数据流图(包含变换流和事务流),四 数据流
13、图到软件体系结构的映射,2.数据流图映射到结构图的步骤 (1)复审和精化数据流图 (2)确定数据流图的类型 (3)将DFD映射成初始结构图 (4)改进初始结构图,四 数据流图到软件体系结构的映射,3.变换分析步骤(一分为三) (1)划分DFD图的边界 (2)建立初始SC图的框架 (3)分解SC图的各个分支,2018/12/15,举例:,w,u 逻 辑输出,c,e 逻 辑输入,2018/12/15,2018/12/15,练习:请将上列给出的具有变换型的DFD图导出它的SC图,四 数据流图到软件体系结构的映射,4.事物分析步骤(一分为二) (1)在DFD图上确定事务中心、接受部分(包括接受路径)和
14、发送部分(包括全部动作路径) (2)画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块。 (3)分解和细化接受分支和发送分支,完成初始的SC图。,2018/12/15,举例:,2018/12/15,通过前一章结构化分析,已获得教材购销系统第三层的两张DFD图,即销售子系统DFD图和采购子系统DFD图。试用结构化设计方法,从上述两张DFD图导出教材,购销系统的总体结构图,包括初始终的SC图和按改进规则进行修改后的最终SC图。 第一步:细化并修改DFD图。,第二步:鉴别DFD图的类型。 第三步:画出SC图的框架。,第四步:分解动作分支,补充动作层与细节层。,2018/12/15,图3.17采购子系统的 SC 图 -,四 数据流图到软件体系结构的映射,5.优化初始SC图的指导规则 (1)模块大小要适中 (2)高扇入/低扇出的原则 (3)改造程序结构图,降低耦合度,提高内聚度。,2018/12/15,请将下列给出的 DFD 图转换成SC图,