软件工程第4章总体设计

上传人:san****019 文档编号:70604755 上传时间:2019-01-17 格式:PPT 页数:72 大小:1.03MB
返回 下载 相关 举报
软件工程第4章总体设计_第1页
第1页 / 共72页
软件工程第4章总体设计_第2页
第2页 / 共72页
软件工程第4章总体设计_第3页
第3页 / 共72页
软件工程第4章总体设计_第4页
第4页 / 共72页
软件工程第4章总体设计_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《软件工程第4章总体设计》由会员分享,可在线阅读,更多相关《软件工程第4章总体设计(72页珍藏版)》请在金锄头文库上搜索。

1、第四章 总体设计,第4章 总体设计,可行性分析 - Why? Who? 需求分析 - What? 设计 - How do? 总体设计 (概要设计)确定软件的结构以及 各组成成分(子系统或模块)之间的相互关系 设计 详细设计确定模块内部的算法和数据结构, 产生描述各模块程序过程的详细文档。,总体设计的任务,划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。 设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。,总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上

2、分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,4.1 设计过程,总体设计过程通常由两个主要阶段组成: - 系统设计阶段,确定系统的具体实现方案; - 结构设计阶段,确定软件结构。,典型的总体设计过程包括下述9个步骤:,1. 设想供选择的方案 2. 选取合理的方案 3. 推荐最佳方案 4. 功能分解 5. 设计软件结构 6. 设计数据库 7. 制定测试计划 8. 书写文档 9. 审查和复审,总体设计所书写的文档,(1) 总体设计说明 主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳

3、方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。 (2) 用户手册 根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。 (3) 测试计划 包括测试策略,测试方案,预期的测试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果,概要设计说明书(GB856788),4.2 设计原理,模块化 抽 象 逐步求精 信息隐藏和局部化 模块独立,4.2.1 模块化,模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有

4、一个总体标识符代表它。 - 如:过程、函数、子程序、宏、对象等,都可作为模块。 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。,问题:模块该如何划分?,设:C(x)为复杂程度函数 E(x)为决定解决问题x所需的 工作量(时间)函数 对于两个问题P1和P2, 如果 C(P1)C(P2) 则: E(P1)E(P2) 如果 C(P1+P2)C(P1)+C(P2) 则: E(P1+P2)E(P1)+E(P2) 这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这

5、就是模块化的根据。,4.2.2 抽象,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。 - 就是抽出事物的本质特性(共性),而暂时不考虑它们的细节。 处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。 - 在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;在较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后在最低的抽象层次用可直接实现的方式叙述问题的解法。 软件工程过程的每一步都是对软件解法的抽象层次的一次精化。 在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当由

6、总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最低层。,4.2.3 逐步求精,逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。 逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”,奇妙的数字 7+2,人类信息处理能力的限度,逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略。 他本人的概括说明如下: 我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得

7、出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。,抽象与求精是一对互补的概念。 抽象使得设计者能够说明过程和数据,同时 却忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。 求精则帮助设计者在设计过程中逐步揭示出低层细节。 这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。,4.2.4 信息隐藏和局部化,信息隐藏原理指出:设计和确定模

8、块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。 局部化的概念和信息隐藏概念是密切相关的。 所谓局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。 - 在模块中使用局部数据元素是局部化的一个例子。显然,局部化有助于实现信息隐藏。 如果在测试期间和以后的软件维护期间需要修改软件,那么使用信息隐藏原理作为模块化系统设计的标准就会带来极大好处。,4.2.5 模块独立,模块的独立性是指软件系统中每个模块只 涉及软件要求的具体的子功能,而和软件系统 中其他模块的接口是简单的。,模块之间的 相对独立性 的度量,模块功能强 度的度量,模块的独立程度可以由两个定性标

9、准度量,1. 耦合,耦合性是程序结构中各个模块之间相互关联的度量 它取决于各个模块之间接口的复杂程度、调用模块的方 式以及那些信息通过接口。,低,高,弱,强,耦合性,模块独立性,(1) 非直接耦合,两个模块没有直接关系(模块1和模块2), 模块独立性最强。,模块1,模块2,模块3,模块4,(2) 数据耦合,一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。 属松散耦合。,开发票,计算水费,单价 数量,金额,(3) 标记耦合(特征耦合),如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系, 则称这两个模块间存在标记偶合。,计算水电

10、费,计算水费,计算电费,住户情况,水费,电费,住户情况,“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.,(4) 控制耦合,如果一个模块通过传送开关、标志、名字 等控制信息,明显地控制选择另一模块的功能 就是控制耦合。,(5) 外部耦合,一组模块均与同一外部环境关联(例如, I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。 外部偶合必不可少,但这种模块数目应尽量少。,(6) 公共环境耦合(公共数据区耦合),一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。 公共

11、数据区指: 全局数据结构 共享通讯区 内存公共覆盖区等,A,B,C,公共数据区,公共耦合存在的问题: (1)软件可理解性降低 (2)诊断错误困难 (3)软件可维护性差, (4)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!,(7) 内容耦合,A,B,一模块直接访问另一模块的内部信息 (程序代码或数据),A,B,模块代码重叠,Entry1 Entry2 ,多入口模块,不正常转入另一模块,最不好的耦合形式!,以上给出了 7种耦合类型,这只是从耦合的机制上所做的分类,按耦合的强弱程度的排列只是相对的关系。但它给设计人员在设计程序结构时提供了一决策准则。实际上,开始时两个

12、模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求设计人员按照实际情况进行分析、比较和分析,逐步加以改进,以提高模块的独立性。,总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。,2. 内 聚,一个模块内部元素在功能上相互关联的强度,设计目标:高内聚,模块在软件过程中完成单一的任务,(1) 功能内聚 (Functional Cohesion),一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该

13、模块为功能内聚模块。 内聚性最强,(2) 信息内聚(Informational Cohesion),这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。,信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓,(3) 通信内聚(Communication Cohesion),如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通

14、信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,(4) 过程内聚(Procedural Cohesion),模块内各处理成分相关,且必须以特定次序执行,读入 成绩单,审查 成绩单,统计 成绩,打印 成绩,读入并审查成绩单,统计并打印成绩单,(5) 时间内聚(Classical Cohesion),时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。 例如初始化模块和终止模块,系统结束模块、紧急故障处理模块等均是时间性聚合模块 。,(6) 逻辑内聚(Logical Cohesion),把几种相关功能(逻辑上相似的功能

15、)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。,(7) 巧合内聚(Coincidental Cohesion),当模块内各部分之间没有联系,或者即使有联系,这种联也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。,模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差,内聚与耦合密切相关,同其它模块强耦合的模块意味者弱内聚,强内聚模块意味着与其它模块间松散耦合。 设计目标: 力争强内聚、弱耦合,耦合、内聚与模块独立性关系: 耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。,4.3

16、启发规则,改进软件结构提高模块独立性。 模块规模应该适中。 深度、宽度、扇出和扇入都应适当。 模块的作用域应该在控制域之内。 5. 力争降低模块接口的复杂程度。 6. 设计单入口单出口的模块。 7. 模块功能应该可以预测。,4.4 软件设计过程,1. 制定规范 在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括: - 阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序 - 根据目标确定最合适的设计方法 - 规定设计文档的编制标准 - 规定编码的信息形式,与硬件,操作系统的接口规约,命名规则,2. 软件系统结构的总体设计 基于功能层次结构建立系统 - 采用某种设计方法,将系统按功能划分成模块的层次结构 - 确定每个模块的功能 - 建立与已确定的软件需求的对应关系 - 确定模块间的调用关系 - 确定模块间的接口 -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号