总体设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《总体设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总体 设计 课件
- 资源描述:
-
1、第四章 总体设计目的和任务:掌握总体设计的目的及任务、分析过程和方法,能够区分目的和任务:掌握总体设计的目的及任务、分析过程和方法,能够区分不同类型的数据流并完成软件结构的设计。(共不同类型的数据流并完成软件结构的设计。(共10学时)学时)重点:重点:1、模块化、抽象、信息隐蔽和局部化、模块独立的概念;、模块化、抽象、信息隐蔽和局部化、模块独立的概念;2、2、启发式原则;、启发式原则;3、3、面向数据流的两种分析方法;、面向数据流的两种分析方法;4 4、能够根据需求分析获得的数据流图进行软件结构的设计;、能够根据需求分析获得的数据流图进行软件结构的设计; 教学内容:教学内容:总体设计的任务总体
2、设计的任务总体设计的基本目的:是回答“概括地说,系统应该如何实现?”;因此总体设计又成为概要设计或初步设计。重要的工作:设计数据结构:通过本阶段的设计工作面将划分出组成系统的物理元素-程序、文件、数据库、人工过程和文档等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在详细设计中设计。设计软件结构:是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成,以及这些模块相互间的关系。总体设计的必要性:可以站在全局高度上,花较少的成本,从抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。4.1 总体设计
3、的过程总体设计过程通常由两个主要阶段组成: 系统设计:确定系统的具体实现方案; 结构设计:确定软件结构典型的过程如下:一、设想供选择的方案从数据流图出发,划分不同的自动化边界,处理分组的各种可能,抛弃技术上行不通的分组方法,设想出供选择实现的物理实现方案,但不评价这些方案。二、选取合理的方案一般来说,从上一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等趁本和高成本的三种方案。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。对每个合理的方案分析员都应该准备下列四份资料:(1)系统流程图(2)组成系统的物理
4、元素清单;(3)成本/效益分析;(4)实现这个系统的进度计划;三、推荐最佳方案分析员应该综合分析对比各种合理方案的利弊,推荐出一个最佳的方案,并为推荐的方案指定详细的实现计划。四、功能分解为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。一般来说,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其它适当的工具简要描述细化后每个处理的算法。五、设计软件结构通常程序中的一个模块完成一个适当的子功能,应
5、该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。软件结构可以使用层次图或结构图来描述。如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构。六、数据库设计对需要数据库的应用领域,分析员应该在需求分析阶段对系统数据要求所做的分析的基础上进一步设计数据库,数据库设计通常包含以下四个步骤:1、模式设计:目的是确定物理数据库结构。第三范式形式的实体及关系数据模型是模式设计过程的输入,模式设计的主要问题是处理具体的数据库管理系统的结构约束。2、子模式设计:用户使用的数据视图
6、3、完整和安全性设计4、优化:主要目的是改进模式和子模式以优化数据的存取。七、制定测试计划在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。八、书写文档1、系统说明:主要内容包含:用系统流程图描述的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其它工具简要描述的各个模块的酸法,模块间的借口关系以及需求、功能和模块三者之间的交叉参照关系等。2、用户手册根据总体设计阶段的结果,修正更改在需求分析阶段产生的初步的用户手册。3、测试计划包括测试策略,测试方案,预期的测试结果,测试
7、进度计划等。4、详细的实现计划5、数据库设计结果九、审查和复审4.2软件设计的概念和原理4.2.1模块化1、模块的概念模块是数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问。如过程、函数、子程序、宏等都可以作为模块。2、模块化的概念模块化就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能满足问题的要求。模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决。原因:(论证)设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果C(P1)C(P
8、2) 显然:E(p1)E(P2)根据人类解决一般问题的经验,一个规律是:C(P1+P2)C(P1)+C(P2) (复杂度)即是说,如果一个问题由P1和P2两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。总上所述,得E(P1+P2)E(P1)+E(P2)因此这个不等式导致“各个击破”的结论。根据以上结论,是否可以将模块无限地划分下去,软件开发工作是否就小得忽略不记?否,原因是当模块数量多了,但设计模块间接口所需要的工作两增加,因此开发工作两由这两个因素决定。4.2.2 抽象抽象:抽出事物的本质特性而暂时不考虑它们的细节。在任何问题的模块化解法时,可以提出许多抽象的层次,在
9、抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;在较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后,在最低的抽象层次用可以直接实现的方式叙述问题的解法。软件工程就是采用的这种方法,采用自顶向下由抽象到具体逐步求精的方法。4.2.3 信息隐蔽和局部化信息隐蔽原理:在设计和确定模块时,应使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。如在模块中使用局部数据元素。4.2.4 模块独立模块独立是模块化、抽象、信息隐蔽和局部化概念的直接结果。开发具有独立功能
10、而且和其他模块之间没有过多的相互作用的模块,就可以作到模块独立。换句话说,希望这样设计软件结构,使得每个模块完成相对独立的特定子功能,并且和其他模块之间的关系很简单。为什么模块独立很重要?(1)有效的模块化的软件比较容易开发出来;(2)独立的模块比较容易测试和维护;模块独立程度的度量标准:耦合:衡量不同模块彼此之间的相互依赖(连接)的紧密程度;内聚:衡量一个模块内部各个元素彼此结合的紧密程度。一、耦合耦合是对一个软件结构内不同模块之间连接程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过借口的数据。在软件设计中对模块耦合的要求:在软件设计中应该追求尽可能松散耦合的
11、系统。原因是:(1)在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多的了解;(2)模块间的联系简单,发生在一处的错误传播到整个系统的可能性小。因此,模块减的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。怎样具体区分模块见耦合程度的强弱?1、数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据;是低耦合,系统中至少必须存在着重耦合,因为只有当某些模块的输出数据作为另一个模块的输入数据时,系统才能完成有价值的功能。一般来说,一个系统内可以只包含数据耦合。2、控制耦合:如果两个模块传递的信息中有控制信息;属于中等程度的耦合,它增加了系统复
12、杂程度,控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。3、公共环境耦合:当两个或多个模块通过一个公共数据环境相互作用时;公共环境耦合可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。该耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显然增加。如果只有两个模块有公共环境耦合,则有下面两种可能:(1)一个模块往公共环境送数据,另一个模块从公共环境中取数据。这是数据耦合的一种形式,是比较松散的一种耦合。(2)两个模块都既往公共环境中送数据又从里面取数据,着重耦合比较紧密,介于数据耦合和控制耦合之间。如果两个模块共享的数据很多,
13、都通过参数传递可能不方便,这时可以利用公共环境耦合。4、内容耦合:如果出现下列情况之一,则两个模块间属于内容耦合:(1)一个模块访问另一个模块的内部数据;(2)一个模块不通过正常入口而转到另一个模块的内部;(3)两个模块有一部分程序代码重叠(一般来说在汇编语言中出现);(4)一个模块有多个入口(即一个模块有集中功能);应该避免使用内容耦合,事实上很多高级程序设计语言已经设计成不允许在程序中出现任何形式的内容耦合。总之:耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。二、内聚内聚标志一个模块内各元素彼此结合的紧
14、密程度,它是信息隐蔽和局部化概念的自然扩展.简单地说,理想内聚的模块只做一件事.设计时应该力求作到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚差不多;但是,低内聚很坏,不要使用.内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有利工具,但是实践表明内聚更重要,应该把更多的精力放在内聚上。内聚的种类:1、低内聚:(1)偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。(2)逻辑内聚:如果一
15、个模块完成的任务在逻辑上属于相同或相似的一类(如:一个模块产生各种类型的全部输出)。(3)时间内聚:如果一个模块包含的任务必须在同一段时间内执行(如,模块完成各种初始化工作)。三种内聚的比较:(1)在偶然内聚的模块中,各种元素之间没有实质性联系,很可能在一种应用场合需要修改这个模块,在另一种场合又不允许着重修改,从而陷入困境。事实上,偶然内聚的模块出现修改错误的概率比其他类型的模块高得多;(2)在逻辑内聚的模块中,不同功能混在一起,合用部分程序代码,即使局部功能的修改有时也会影响全局。因此着类模块的修改也比较困难;(3)时间关系在一定程度上反映了程序的某些实质,所以时间内聚比逻辑内聚好一些。2
16、、中内聚:(1)过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行。使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。(2)通信内聚:如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。3、高内聚(1)顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)。根据数据流程图划分模块时,通常得到顺序内聚的模块,着重模块彼此间的连接比较简单。(2)功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,功能内聚是最高程度的内聚。
17、耦合和内聚的概念是Constantine,Yourdon,Myers和Stevens等人提出来的。按照他们的观点,如果给上述七种内聚的优劣评分,将得到如下结果:功能内聚 10分 时间内聚 3分顺序内聚 9分 逻辑内聚 1分通信内聚 7分 偶然内聚 0分过程内聚 5分在设计时,没有必要精确确定内聚的级别。重要的是设计时力争作到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。4.3 启发式规则在长期开发计算机软件的长期实践中积累了丰富的经验,总结出了一些启发式规则。一、改进软件结构提高模块独立性设计出软件的初步结构之后,应该审
展开阅读全文