软件工程导论 第5章总体设计

上传人:n**** 文档编号:53974563 上传时间:2018-09-06 格式:PPT 页数:114 大小:1.49MB
返回 下载 相关 举报
软件工程导论 第5章总体设计_第1页
第1页 / 共114页
软件工程导论 第5章总体设计_第2页
第2页 / 共114页
软件工程导论 第5章总体设计_第3页
第3页 / 共114页
软件工程导论 第5章总体设计_第4页
第4页 / 共114页
软件工程导论 第5章总体设计_第5页
第5页 / 共114页
点击查看更多>>
资源描述

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

1、,第5章 总体设计,2,总体设计(概要设计或初步设计),总体设计的基本目的就是回答下面这个问题:“概括地说,系统应该如何实现?”,3,总体设计的必要性,可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构;从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。,4,5.1 设计过程,总体设计过程通常由两个主要阶段组成:系统设计阶段:确定系统的具体实现方案;结构设计阶段:确定软件结构。,5,1. 设想供选择的方案 在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。 数据流图是总体设计的极好的出发点。2. 选取合理的

2、方案 通常至少选取低成本、中等成本和高成本的三种方案。 对每个合理的方案分析员都应该准备下列4份资料:系统流程图;组成系统的物理元素清单;成本/效益分析;实现这个系统的进度计划。,典型的总体设计过程包括下述9个步骤,6,3. 推荐最佳方案 综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。 在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。,7,4.功能分解 为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一

3、系列比较简单的功能。,8,5. 设计软件结构设计软件的体系结构需要在对需求分析阶段生成的数据流图进一步分析和精化的基础上:(1)将系统按照功能划分为模块;通常程序中的一个模块完成一个适当的子功能。(2)确定模块之间的调用关系及其接口;应该把模块组织成良好的层次系统。(3)对划分的结果进行优化和调整。良好的软件结构设计对详细设计及编码阶段的工作都是至关重要的。,软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。 如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构。,9,6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需

4、求的基础上,进一步设计数据库。7. 制定测试计划 在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,10,8. 书写文档应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种: 系统说明:数据流图、成本/效益分析,用层次图等描述的软件构件,用IPO图简要描述各个模块的算法,模块的接口等。 用户手册:根据总体设计阶段的结果,修改在需求阶段产生的初步的用户手册。 测试计划:包括测试策略、测试方案、预期的测试结果,测试进度计划等。 详细的实现计划 数据库设计结果:由数据模型(E-R图)转换成数据库的设计结果。,11,9. 审查和复审 最后应该对

5、总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,12,5.2 设计原理,5.2.1 模块化 模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,这些模块集成起来构成一个整体,可以完成指定的功能以满足用户的需求。模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。模块是构成程序的基本构件。过程、函数、子程序和宏等,都可作为模块。面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。,13,模块化的根据,“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。,14,首先,我

6、们设C(x)为问题x所对应的复杂度函数,E(x)为解决问题x所需要的工作量函数。对于两个问题P1和P2,如果:C(P1) C(P2)即问题P1的复杂度比P2高,则显然有:E(P1) E(P2)即解决问题P1比P2所需的工作量大。,15,在人们解决问题的过程中,发现存在有另一个有趣的规律: C(P1+P2) C(P1)+C(P2) 即解决由多个问题复合而成的大问题的复杂度大于单独解决各个问题的复杂度之和。也就是说,对于一个复杂问题,将其分解成多个小问题分别解决比较容易。由此我们可以推出: E(P1+P2) E(P1)+E(P2) 即将复杂问题分解成若干个小问题,各个击破,所需要的工作量小于直接解

7、决复杂问题所需的工作量。,16,模块化的好处:1、可以降低软件开发的难度;、可以使程序结构清晰,增加易读性和易修改性;、模块化还有利于提高代码的可重用性及团队合作开发大型软件的可行性。,问题:模块是不是越多越好?,17,模块化和软件成本图,当然不是!虽然增加程序中的模块数可以降低开发每个模块的工作量,但同时却增加了设计模块接口的工作量。通过图5.1所示的模块数与软件开发成本的关系图中可以看出,当划分的模块数处于最小成本区时,开发软件的总成本最低。,18,5.2.2 抽象,抽象: 抽象是人类在解决复杂问题时经常采用的一种思维方式,它是指将现实世界中具有共性的一类事物的相似的、本质的方面集中概括起

8、来,而暂时忽略它们之间的细节差异。结构化程序中自顶向下、逐步求精的模块划分思想正是人类思维中运用抽象方法解决复杂问题的体现。,19,软件工程过程的每一步都是对软件解法的抽象层次的精化: 在可行性研究阶段,软件作为系统的一个完整部件; 在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的; 当由总体设计向详细设计过渡时,抽象的程度也就随之减少; 最后,当源程序写出来以后,也就达到了抽象的最低层。,20,5.2.3 逐步求精,定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(72)个知识块上。逐步求精确保每个

9、问题都将解决,而且每个问题将在适当的时候被解决,在任何时候一个人都不需要同时处理7个以上的知识块。,21,采用自顶向下逐步求精、由抽象到具体的思维方式好处? 、降低了软件开发中每个阶段的工作难度; 、简化了软件的设计和实现过程; 、有助于提高软件的可读性、可测试性和可维护性; 、在程序设计中运用抽象的方法还能够提高代码的可重用性。,22,(1)信息隐藏:设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。信息隐蔽的目的:主要是为了提高模块的独立性,减少将一个模块中的错误扩散到其他模块的机会。但是需要强调一点,信息隐蔽并不意味着某个模块中的内部信息对

10、其他模块来说是完全不可见或不能使用的,而是说模块之间的信息传递只能通过合法的调用接口来实现。显然,信息隐蔽对提高软件的可读性和可维护性都是非常重要的。,5.2.4 信息隐藏和局部化,23,(2)局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。如模块中的局部数据元素是局部化的一个例子。局部化和信息隐藏概念是密切相关的,局部化有助于信息隐藏。,24,模块的独立性是指软件系统中每个模块只 涉及软件要求的具体的子功能,而和软件系统 中其他模块的接口是简单的。,5.2.5 模块独立,不同模块之间 互连程度 的度量。,模块功能强 度的度量。,模块的独立程度可以由两个定性标准度量, 这两个标准分别称

11、为耦合和内聚。,25,模块独立是模块化、抽象、信息隐藏和局部化概念的直接结果。模块的独立性的优点: 比较容易开发出有效模块化(即具有独立的模块)的软件。 独立的模块比较容易测试和维护。,26,1) 耦合性耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。决定耦合性高低的主要因素由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。,低,高,耦合性,27,注意!在软件设计中应该追求尽可能松散耦合的系统。否则影响系统的可理解性、可测性、可靠性和可维护性。,28,耦合程度强弱的

12、区分,无耦合:如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,模块间无任何连接。,29,(2) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示:,30,31,(4)特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素。,struct studentchar name20; int age; int math;int english; ;,32,(5) 公共环境耦合。若两个或多个模块通过引用公共数据相互联系,

13、则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。,33,(6)内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口(这意味着一个模块有几种功能)。最不希望要的耦合!,34,耦合采取下述设计原则,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则: 尽量使用数据耦合, 少用控制耦合和特征耦合, 限制公共环境耦合的范围, 完全不用内容耦合。,35,课堂练习:两个模块都是用同一张数据表,这种耦合属于()A. 数据耦合

14、B. 控制耦合C. 公共环境耦合 D. 内容耦合,36,课堂思考:请问如何将下面的控制耦合转变成数据耦合?,数据耦合,控制耦合,37,内聚,内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。理想内聚的模块只做一件事情!设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;不要使用低内聚。,38,内聚,内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具。经实践证明,保证模块的高内聚性比低耦合性更为重要,在软件设计时应将更多的注意力集中在提高模块的内聚性上。模块的内聚性主要可划分为如

15、下几种不同的类型。,39,低内聚,偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。 逻辑内聚: 一个模块完成的任务在逻辑上属于相同或相似的一类。 时间内聚:一个模块包含的任务必须在同一段时间内执行。,被调用模块,逻辑内聚,40,中内聚,过程内聚 一个模块内的处理元素是相关的,而且必须以特定次序执行。 通信内聚 模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。,41,高内聚,顺序内聚 一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)。 功能内聚 模块内所有处理元素属于一个整体

16、,完成一个单一的功能。,42,上述七种内聚的优劣评分(分值越高,内聚程度越好),将得到如下结果: 功能内聚 10分 时间内聚 3分 顺序内聚 9分 逻辑内聚 1分 通信内聚 7分 偶然内聚 0分 过程内聚 5分,低,高,强,弱,内聚性,模块独立性,人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发式规则。往往能帮助他们找到改进软件设计提高软件质量的途径。体系结构设计的启发规则有如下7点。,5.3 启发规则,1. 改进软件结构,提高模块独立性设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。 例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。,2. 模块规模应该适中经验表明,一个模块的规模不应过大,最好能写在一页纸内(通常不超过60行语句)。,3. 深度、宽度、扇出和扇入都应适当 软件结构中的深度和宽度不宜过大! (1)深度:表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。如果层数过多则应该考虑是否有许多管理模块过分简单了,能否适当合并。(2)宽度:是软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

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