软件工程 第4版 教学课件 ppt 作者 张海藩 吕云翔 编著 04第四章:机构化设计

上传人:E**** 文档编号:89494159 上传时间:2019-05-25 格式:PPT 页数:138 大小:1.09MB
返回 下载 相关 举报
软件工程 第4版  教学课件 ppt 作者  张海藩 吕云翔 编著 04第四章:机构化设计_第1页
第1页 / 共138页
软件工程 第4版  教学课件 ppt 作者  张海藩 吕云翔 编著 04第四章:机构化设计_第2页
第2页 / 共138页
软件工程 第4版  教学课件 ppt 作者  张海藩 吕云翔 编著 04第四章:机构化设计_第3页
第3页 / 共138页
软件工程 第4版  教学课件 ppt 作者  张海藩 吕云翔 编著 04第四章:机构化设计_第4页
第4页 / 共138页
软件工程 第4版  教学课件 ppt 作者  张海藩 吕云翔 编著 04第四章:机构化设计_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《软件工程 第4版 教学课件 ppt 作者 张海藩 吕云翔 编著 04第四章:机构化设计》由会员分享,可在线阅读,更多相关《软件工程 第4版 教学课件 ppt 作者 张海藩 吕云翔 编著 04第四章:机构化设计(138页珍藏版)》请在金锄头文库上搜索。

1、软件设计的目标,是设计出所要开发的软件的模型。 概要设计的主要任务是,通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构;详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构 软件设计在软件工程过程中处于技术核心地位,而且不依赖于所使用的软件过程模型。在完成了软件需求分析并写出软件规格说明之后,软件设计就开始了,它是构造和验证软件所需要完成的三项技术活动(设计、代码生成和测试)中的第一项。,第四章:结构化设计,4.1 结构化设计与结构化分析的关系 4.2 软件设计的概念和原理 4.3 模块独立 4.4 启发规则 4.

2、5 表示软件结构的图形工具 4.6 面向数据流的设计方法 4.7 人机界面设计 4.8 过程设计 4.9 过程设计工具 4.10 面向数据结构的设计方法,第四章:结构化设计,软件设计必须依据对软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息。 分析模型(见3.3节)的每个元素都提供了创建设计模型时所需要的信息。图4.1所示描绘了软件设计过程中的信息流。,图4.1 把分析模型转变成软件设计,数据设计把分析阶段创建的信息域模型转变成实现软件所需要的数据结构。在实体关系图中定义的数据对象和关系,以及数据字典和数据对象描述中给出的详细的数据内容,为数据设计活动奠定了坚实的基础 体系

3、结构设计确定了程序的主要结构元素(即程序构件)之间的关系。,过程设计把程序体系结构中的结构元素,变换成对软件构件的过程性描述。从处理规格说明、控制规格说明和状态转换图所获得的信息,是过程设计的基础 设计为我们提供了可以进行质量评估的软件表示,设计是我们把用户需求准确地转变为最终的软件产品的唯一方法。,4.1 结构化设计与结构化分析的关系 4.2 软件设计的概念和原理 4.3 模块独立 4.4 启发规则 4.5 表示软件结构的图形工具 4.6 面向数据流的设计方法 4.7 人机界面设计 4.8 过程设计 4.9 过程设计工具 4.10 面向数据结构的设计方法,第四章:结构化设计,模块是由边界元素

4、限定的相邻的程序元素(如数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。 模块化就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求,4.2.1 模块化,设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果 C(P1) C(P2) 显然 E(P1) E(P2) 根据人类解决一般问题的经验,另一个有趣的规律是 C(P1+P2) C(P1) + C(P2) 也就是说,如果一个问题由P1和P2两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时

5、的复杂程度之和。 综上所述,得到下面的不等式:E(P1+P2) E(P1) + E(P2) 这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题时,原来的问题也就容易解决了。这就是模块化的根据。,上面的不等式似乎还能得出下述结论:如果无限地分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了。事实上,还有另一个因素在起作用,从而使得上述结论不能成立。参看图4.2,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本(工作量)确实减少了。但是,随着模块数目增加,设计模块间接口所需要的工作量也将增加。,图4.2 模块化与软件成本,根据这两个因素,得出了图中的总成本曲

6、线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。虽然我们目前还不能精确地预测出M的数值,但是在考虑模块化解决方案的时候,总成本曲线确实是有用的指南。本章讲述的设计原理和启发规则,可以在一定程度上帮助我们确定合适的模块数目。,(1)模块可分解性 如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现一种有效的模块化解决方案。 (2)模块可组装性 如果一种设计方法能把现有的(可重用的)设计构件组装成新系统,它就能提供一种并非一切都从头开始做的模块化解决方案。,模块化定义的5条标准,(3)模块可理解性 如果可以把一个模块作为一种独立单元(

7、无须参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。 (4)模块连续性 如果对系统需求的微小修改只导致对个别模块、而不是对整个系统的修改,则修改所引起的副作用将最小。 (5)模块保护性 如果在一个模块内出现异常情况时,它的影响局限在该模块内部,则由错误引起的副作用将最小。,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性;因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性;模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序

8、员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写复杂的模块。,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。 由于人类思维能力的限制,如果每次面临的因素太多,是不可能做出精确思维的。处理复杂系统的唯一有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。,4.2.2 抽象,软件工程过程的每一

9、步都是对软件解法的抽象层次的一次精化。 逐步求精和模块化的概念,与抽象是紧密相关的。 软件结构顶层的模块,控制了系统的主要功能并且影响全局;在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。,逐步求精是人类解决复杂问题时采用的基本技术,也是许多软件工程技术(如规格说明技术、设计和实现技术、测试和集成技术)的基础。可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。” 可以把逐步求精看做是一项把一个时期内必须解决的种种问题按优先级排序的技术。逐步求精确保每个

10、问题都将被解决,而且每个问题都在适当的时候解决。,4.2.3 逐步求精,逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化过程细节的层次而开发出来的。 求精实际上是细化过程。 抽象与求精是一对互补的概念。抽象使得设计者能够说明过程和数据,同时却忽略低层细节。,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。 实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节,因此,有人主张把这条原理称为“细节隐藏”。但是,由于历史原因,人们已经习惯于把这条原

11、理称为“信息隐藏”。,4.2.4 信息隐藏,隐藏”意味着有效的模块化可以通过定义一组独立的模块来实现。这些模块彼此之间只交换那些为了完成软件功能而必须交换的信息。“抽象”有助于定义组成软件的过程实体,“隐藏”则定义并施加了对模块内部过程细节和模块使用的局部数据结构的访问限制。,4.1 结构化设计与结构化分析的关系 4.2 软件设计的概念和原理 4.3 模块独立 4.4 启发规则 4.5 表示软件结构的图形工具 4.6 面向数据流的设计方法 4.7 人机界面设计 4.8 过程设计 4.9 过程设计工具 4.10 面向数据结构的设计方法,第四章:结构化设计,模块独立的概念是模块化、抽象、逐步求精、

12、信息隐藏等概念的直接结果,也是完成有效的模块设计的基本标准。 开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。 模块的独立性很重要的原因主要有两条:有效的模块化(即具有独立的模块)的软件比较容易开发出来,这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要;,独立的模块比较容易测试和维护,这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够“插入”模块。总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。 模块的独立程度可以由两个定性标准来度量,这两个标准分别称为内聚和耦合。耦合衡

13、量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。,耦合(Coupling)是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。 在软件设计中应该追求尽可能松散耦合的系统。在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解。 如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。,4.3.1 耦合,数据耦合是低耦合。系统中至

14、少必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。,公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境,那么这种耦合有下面两种可能。 一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。 两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。,如果两个模块共享的数据很多,都通过参数传递可

15、能很不方便,这时可以利用公共环境耦合。最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合: 一个模块访问另一个模块的内部数据; 一个模块不通过正常入口而转到另一个模块的内部; 两个模块有一部分程序代码重叠(只可能出现在汇编程序中); 一个模块有多个入口(这意味着一个模块有几种功能)。,内聚(Cohesion)标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。 内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。 低内聚有如下几类:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松

16、散的,就叫做偶然内聚。如果一个模块完成的任务在逻辑上属于相同或相似的一类(如一个模块产生各种类型的全部输出),则称为逻辑内聚。如果一个模块包含的任务必须在同一段时间内执行(如模块完成各种初始化工作),则称为时间内聚。,4.3.2 内聚,偶然内聚的模块中,各种元素之间没有实质性联系 逻辑内聚的模块中,不同功能混在一起,合用部分程序代码 时间关系在一定程度上反映了程序的某些实质,所以时间内聚比逻辑内聚好一些:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚;如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。,高内聚也有两类:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。 功能内聚是最高程度的内聚。,耦合和内聚的概念是Constantine、Yourdon、Myers和Stevens等

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

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

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