截图
 
	 
        简介
这是软件工程总体设计ppt,包括了软件设计的重要性,设计过程,软件总体设计,设计基本原理,体系结构设计,结构化设计,IDEF0图设计方法,软件结构优化等内容,欢迎点击下载。
软件工程总体设计的ppt是由红软PPT免费下载网推荐的一款课件PPT类型的PowerPoint.
软件工程 Software Engineering
第五章 总体设计
第五章  总体设计
软件设计的重要性
设计过程 
软件总体设计 
设计基本原理 
体系结构设计 
结构化设计 
IDEF0图设计方法 
软件结构优化
总体设计
总体设计的基本目标就是概要地回答系统应该如何实现。所以设计在任何工程产品或系统中,是开发阶段的第一步。设计(design)可以定义为应用各种技术和原理,对一个设备、一个过程或一个系统,作出足够详细的决策,使之有可能在物理上得以实现的过程。
总体设计
系统的总体设计是在前面系统分析的基础上,为后期将要构造的系统实体建立一个模型(model)或表达式(representation)。构造这样的模型需要有开发人员的直觉和以前开发这类实体经验的判断、开发方法的采用、产品质量的准则,是一个综合的过程。而且经过多次的重复,直到最终拿出最后的设计模型。
5.1 软件设计的重要性 
软件设计处于软件工程过程的技术核心地位
5.1 软件设计的重要性
软件设计的重要性还反映在质量上。
5.2 设计过程
软件设计是一个把需求转换为软件表达式的过程。这个表达式过程一般情况下是分为两步走。
从软件工程的角度讲是分为总体设计和详细设计。
总体设计主要是把需求转换为数据结构和软件体系结构,而详细设计主要集中在体系结构表达式的细化,从而产生详细的数据结构和软件的算法表达式。
5.2.1 软件设计的发展 
早期的设计工作中,着重在开发模块化程序模块所需要的准则,以及按照自顶向下(top-down)的方式逐步细化软件体系结构上。
接着,设计定义的过程方面逐渐发展成为一种叫做结构化编程(structured programming)的原则。
之后,提出了把数据流和数据结构翻译成设计定义的方法。
近年来,则建立采用OO的设计方法。
总结过去软件设计的发展,可以归纳为是一个持续发展的过程。
5.2.2设计活动间的关系
总体设计和详细设计除了必须有先进的设计技术外,还要有同步的管理技术支持。如图5-3所示
5.2.3 设计与软件质量
在整个设计过程中,设计每一步的质量都要进行正式的技术评审(formal technical reviews)。要按照设计准则对于设计表达式的质量的评价。我们这里给出下列软件设计原则:
(1)设计应当模块化(modular),也就是说,软件应被逻辑地划分为能完成特定功能和子功能的构件。
(2)设计应形成具有独立功能特征的模块(如子程序或过程)。
软件设计原则(续)
(3)设计应使模块之间和与外剖环境之间接口的复杂性尽量地减少。
(4)设计应该有一个分层的组织结构,这样人们可对软件各个构件进行理性的控制。
(5)设计应有性质不同的可区分的数据和过程表达式。
(6)设计应利用软件需求分析中得到的信息和可重复的方法。
5.3  软件总体设计
需求分析阶段所形成的数据流图是软件总体设计的基础。我们要从可供选择的方案中选取合理的方案,为每一个方案准备一份系统流程图,列出系统组成的物理元素,进行效益分析,制定实现方案的进度。我们要从合理的方案中选择一个最佳的方案向用户推荐。
当用户接受方案后,就要为这个最佳的方案设计软件结构,一般情况下,这个软件结构要通过反复修改使之合理。
同时还要进行必要的数据库设计。在分布式系统中还要进行网络设计。
另外,还要制定测试计划和确定测试要求。
在详细设计前一定要进行软件总体设计。 
5.3.1  总体设计基本任务
1.软件系统结构设计
(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。
(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。
(5)评价模块结构的质量。
总体设计基本任务(续)
2.数据结构及数据库设计
1)数据结构的设计
2)数据库的设计
(1)概念设计
(2)逻辑设计
(3)物理设计
3. 网络系统设计
总体设计基本任务(续)
4. 软件总体设计文档
总体设计说明书的主要内容如下:
(1)引言:编写目的,背景,定义,参考资料。
(2)总体设计:需求规定,运行环境,基本设计概念和处理流程,结构。
(3)接口设计:用户接口,外部接口,内部接口。
(4)运行设计:运行模块组合,运行控制,运行时间。
(5)系统数据结构设计:逻辑结构设计,物理结构设计,数据结构与程序的关系。
(6)系统出错处理设计:出错信息,补救措施,系统恢复设计。
5.评审
5.4 设计基本原理
软件设计要回答下列问题:
(1)使用什么样的准则才能把软件划分成为各个单独的构件?
(2)怎样把功能或数据结构的细节从软件概念表达式中分离出来?
(3)定义软件设计的技术质量有统一的准则吗? 
设计基本原理
5.4.1  抽象
5.4.2  细化
5.4.3  模块化
5.4.4  软件体系结构 
软件总体设计的主要任务就是软件结构的设计。软件体系结构(software architecture)包含了计算机程序的两个重要特性:
(1)过程构件(模块)的层次结构。
(2)数据结构。
软件的需求分析到设计的转换图
不同结构的表示
从下图可以看出,一个问题可以有多种可供选择的结构。选择某种结构又由软件设计方法来决定。 
5.4.5  程序结构
程序结构(program structure)给出了程序构件(模块)的组织(通常叫分层),这种组织包含了控制的层次。 
程序结构可以用许多不同的符号来表示。
1 树形结构图。 
2 Warnier-Orr图
3 Jackson图 
5.4.6  数据结构
数据结构(data structure)定义是一种数据各元素之间逻辑关系的表达式。
一个数据结构的组织和复杂性只受设计者创造性的限制。但是典型的数据结构可以组成更复杂的结构造块。 
数据结构可以给出不同层次的抽象。 
5.4.7  软件过程
软件过程
5.5 体系结构设计
软件体系结构设计(architectural design)的主要目标是设计一个模块化的程序结构。体系结构设计融合了程序结构和数据结构,接口定义能使数据流经程序。要给出各个模块之间的控制关系。 
5.5.1 软件结构图 
软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现,即将来程序的控制层次体系。
软件结构往往用树状或网状结构的图形来表示。软件工程中,一般采用结构图(Structure Chart)简称SC)的工具来表示软件结构。
结构图的主要内容
(1)模块
(2)模块的控制关系
(3)模块间的信息传递
(4)两个附加符号:表示模块有选择调用或循环调用
(5)结构图的形态特征
包括 ①深度 ②宽度 ③扇出 ④扇入
画结构图应注意的事项 
①同一名字的模块在结构图中仅出现一次。
②调用关系只能从上到下。
③不严格表示模块的调用次序,习惯上从左到右。有时为了减少连线的交叉,适当地调整同一层模块左右位置,以保持结构图的清晰性。
5.5.2扇出和扇入与深度和宽度
深度表示控制的层数,宽度表示同一层上控制的最大模块数目。
扇出是被某一模块直接控制的模块数目的度量,扇入则是对某一给定模块被多少个模块直接控制的度量。
一个系统的大小和系统的复杂程度在一定程度上可以用深度和宽度表示。 
高层模块应有较高的扇出,低层模块特别是底层模块应有较高的扇入。
扇出和扇入与深度和宽度
扇出实际上是对问题解的分解。分解过程中需要考虑的问题就是,前面是否已经有一个模块与当前所需要的模块功能相同或相似。若完全相同,则可以共享;若功能类似,则应区分哪些部分相同,这样可以把相同的部分分离出来成为单独的模块,如图5-14至5—16。
扇出和扇入与深度和宽度
扇出和扇入与深度和宽度
高层模块应有较高的扇出,低层模块特别是底层模块应有较高的扇入。 
扇入越大,表示该模块被更多的上级模块共享。多个扇入入口相同,这就避免了程序的重复,因此希望扇入高一点。
但过多又可能是把许多不相关的功能硬凑在一起,形成通用模块。这样的模块必然是低聚合的。
5.5.3模块的藕合
藕合(Coupling)表示软件结构内不同模块彼此之间相互依赖(连接)的紧密程度,是衡量软件模块结构质量好坏的度量,是对模块独立性的直接衡量指标。 
软件设计应追求尽可能松散藕合,避免强藕合
藕合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。  
藕合分类 
数据藕合
控制藕合
共用藕合
内容藕合。
数据藕合
如果两个模块之间只是通过参数交换信息,而且所交换的信息仅仅是数据。被调用模块的输入和输出都只是简单的数据。那么这种藕合称为数据藕合。
数据藕合是最低程度的藕合。
控制藕合 
如果两个模块之间所交换的信息包含控制信息,那么这种藕合称为控制藕合。例如,图5--18中模块A的内部处理逻辑判断是决定执行C还是执行D,这要取决于模块B传来的信息“标志”status。控制藕合是中等程度的藕合。
公用藕合 
当两个或多个模块通过一个公共区相互作用时,它们之间的藕合称为共用藕合。这类公共区可以是全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。例如图5--19中就存在共用藕合 
内容藕合 
内容藕合是最高程度藕合,是应该避免的。内容藕合是指一个模块与另一个模块的内容直接发生联系。例如,一个模块直接转移到另一个模块内部,一个模块使用另一个模块内部的数据等都会产生内容藕合。 
使用藕合的设计原则
尽量使用数据藕合
少用控制藕合
限制共用藕合
完全不用内容藕合。
5.5.4模块的内聚
内聚(Cohesion)表示一个模块内部各个元素彼此结合的紧密程度,是衡量一个模块内部组成部分间整体统一性的度量,它是信息隐蔽概念的自然扩展。理想的模块只做一件事情。
根据模块内部构成情况,模块的内聚可以划分成高、中、低三大类内聚。 
常见的内聚可分成:功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚七类。它们内聚程度依此从高到低,一般认为功能内聚和顺序内聚是高内聚,通信内聚、过程内聚是中内聚,时间内聚、逻辑内聚和偶然内聚是低内聚。
功能内聚 
如果一个模块内所有处理元素完成一个,且仅完成一个功能,则称为功能内聚(Functional Cohesion)。
功能内聚是最高的内聚。
在软件结构中,并不是每个模块都能归结为完成一个功能而设计成一个功能内聚模块。
顺序内聚
如果一个模块内处理元素和同一个功能密切相关,而且这些处理元素必须顺序执行,则称为顺序内聚(Sequential Cohesion)。
通常一个处理元素的输出是另一个处理元素的输入。
通信内聚 
如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚(Communicational Cohesion)。 
过程内聚 
如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚(Procedural Cohesion)。过程内聚模块的各组成功能由控制流联结在一起,实际上是若干个处理功能的公共过程单元。
过程内聚与顺序内聚的区别主要在于:顺序内聚中是数据流从一个处理元流到另一个处理元,而过程内聚中是控制流从一个动作流向另一个动作。
时间内聚 
如果一个模块包含的任务必须在同一段时间内执行称为时间内聚(Temporal Cohesion),也称瞬时内聚。例如,模块完成各种初始化工作,处理故障模块等。下图关闭文件、报警、保留现场等任务都必须无中断地同时处理。
逻辑内聚 
如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如,一个模块产生各种类型的全部输出),称为逻辑内聚(Logical Cohesion)。
对逻辑内聚模块的调用,常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,在多个关连性功能中选择执行某一个功能。
这种内聚较差,增加了模块之间的联系,不易修改。 
偶然内聚
如果一个模块由完成若干毫无关系(或关系不大)的功能的处理元素偶然组合在一起的,就叫偶然内聚(Coincidental Cohesion)。偶然内聚是最差的一种内聚。
常犯这种错误的一种情况是:有时在写完程序后,发现一组语句在多处出现,于是为了节省空间而将这些语句作为一个模块设计,这就出现了藕合内聚。
5.5.5 模块设计一般准则
改进软件结构提高模块独立性
模块规模要适中
深度、宽度、扇入和扇出应适当
降低接口复杂性
设计单入口单出口的模块
5.5.6模块的作用域与控制域
模块的控制域是该模块本身以及所有直接或间接从属于它的模块的集合。
模块的作用域是该模块内一个判断影响的模块的集合。
控制域也成为控制范围,作用域也称为作用范围或影响范围。
控制域是从结构方面考虑的,作用域则是从功能方面考虑的。
模块设计中模块控制域与作用域考虑方面 
作用域应在控制域之内。
判断点位置要适中,尽量使其影响到的模块成为其直接下属模块。
作用域不在控制域范围之内的改进方法 
将包含判断的模块状合并到它的调用模块状之中,使判断处于足够高的位置。
将受判断影响的模块下移到控制域之内。
把判断上移到足够高的位置。
5.6  结构化设计
结构化设计是以结构化分析产生的数据流图为基础,将数据流图按一定的步骤映射成软件结构。L.Constantine和E.Yourdon等人提出结构图是进行软件设计的有力工具。
在需求分析阶段,信息六是考虑的关键问题。我们用数据流图来描述信息在系统中的流动情况。通常所说的结构化方法也就是基于数据流的设计方法。
5.6.1  数据流的类型 
变换型数据流图
事务型数据流图 
1.变换型数据流图 
2.事务型的数据流图
5.6.2  过程步骤
(1)精华数据流图 
(2)确定数据流图类型
(3)找出变换中心
(4)第一层分解
(5)第二层分解
(6)根据优化准则对软件结构求精
(7)描述模块功能、接口及全局数据结构
(8)复查,如果有错,转(2)修改完善,否则进入详细设计
5.6.3  变换分析设计 
1.确定数据流图中的变换中心、逻辑输入和逻辑输出
2.设计软件结构的顶层和第一层——变换结构
3.设计中、下层模块
4.设计的优化
5.6.4  事务分析设计 
1)确定数据流图中的事务中心和加工路径
2)设计软件结构的顶层和第一层——事务结构,事务型软件结构应包括接收分支和发送分支两个部分。
(1)接收分支:负责接收数据
(2)发送分支:通常包含一个调度模块,它控制管理所有的下层的事务处理模块。
3)事务结构中、下层模块的设计、优化等工作同变换结构。
5.6.5  混合流设计 
混合数据流图的映射步骤
(1)确定数据流图整体上的类型
(2)标出局部的数据流图范围,确定其类型
(3)按整体和局部的数据流图特征,设计出软件结构
分层数据流图的映射方法
(1)主图是变换型,子图是事务型
(2)主图是事务型,子图是变换型
5.6.6  结构化设计方法应用示例
销售管理系统的数据流图转换为软件结构图。分析该系统的0层图,它有4个主要功能,即订货处理、进货处理、缺货处理和销售统计。其中,订货处理包括订单处理和供货处理两部分。这4个处理可平行工作,因此从整体上分析可按事务型数据流图来设计,根据功能键来选择4个处理中的一个。 
5.6.7  设计的后的处理
(1)为每个模块提供一份接口说明
(2)为每个模块写一份处理说明
(3)给出设计约束或限制
(4)数据结构说明
(5)进行设计评审
(6)设计优化
5.7  IDEF0图设计方法 
在系统总体设计时,一般按照IDEF0图的分解层次,逐层将其转换成软件结构图。对于某一层的IDEF0图按以下方法转换:
(1)找出该层IDEF0图的父图,搞清父、子图之间的输入/输出、控制关系
(2)以父图的活动为上层模块,子图中的活动为下层模块,画出系统的单层结构图
(3)根据IDEF0图各个活动的输入/输出数据、控制信息及数据库的结构、数据项定义等,确定模块的接口
(4)混合所有层次的结构图,得到系统初始的软件结构图
(5)根据软件结构的优化准则进行精化
5.8 软件结构优化
5.8.1  软件结构设计优化准则
模块独立性准则
控制与作用范围之间的准则
结构特征准则
模块的接口准则
5.8.2  软件结构的HIPO图实例
5.9 小结
软件设计的重要性
设计过程 
软件总体设计 
设计基本原理 
体系结构设计 
结构化设计 
IDEF0图设计方法 
软件结构优化
练习题
1.结构化设计方法的基本思想是什么?它怎样与结构化分析衔接?
2.简述软件总体设计阶段的基本任务。
3.举例说明各种类型的模块耦合。
4.说明:模块,模块化,模块化设计的概念。
5.什么是模块的独立性?设计中为什么模块要独立?对于独立性怎样度量?
练习题
6.试论“一个模块,一个功能”的优点。
7.简述变换流的设计步骤。
8.简述事务流的设计步骤。
9.将第四章练习题10所得的数据流图设计成相应的软件结构图。
10.试论软件设计与软件质量的关系。
谢谢
展开