软件结构设计PPT

上传人:y****8 文档编号:138604664 上传时间:2020-07-16 格式:PPT 页数:75 大小:485.50KB
返回 下载 相关 举报
软件结构设计PPT_第1页
第1页 / 共75页
软件结构设计PPT_第2页
第2页 / 共75页
软件结构设计PPT_第3页
第3页 / 共75页
软件结构设计PPT_第4页
第4页 / 共75页
软件结构设计PPT_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《软件结构设计PPT》由会员分享,可在线阅读,更多相关《软件结构设计PPT(75页珍藏版)》请在金锄头文库上搜索。

1、第4章 软件结构设计,设计:应用各种技术和原理,对设备、过程或系统作出足够详细的定义,使之能够在物理上得以实现。 软件结构设计:是一个把软件需求变换为软件表示的过程,是对软件的整体结构、程序结构、数据结构、文件结构、接口定义等的设计,是宏观上的设计。,4.1 软件结构设计概述,软件设计与程序设计的区别:,程序设计就是编程序,这是大家熟悉的,很多人印象中的“做软件”就是编程序, 因此可能有人会把程序设计和软件设计等同起来。这是不对的,软件设计是宏观上的设计。而程序设计仅仅是软件设计的实现,所以做软件决不简单等同与编程序。,4.2 软件结构设计的目标、任务和过程,目标:综合采用各种技术手段,将系统

2、需求转换为数据结构、模块结构(或对象/类结构)的表达形式,并实现系统的性能、安全性、可靠性要求。取得最佳方案。最佳方案的标准:(1)开发费用省;(2)资源消耗低;(3)开发时间短;(4)生产效率高;(5)可靠性较高;(6)可维护性好。,结果:用模块结构图表达。,任务:,结构设计是一个自顶向下,逐步具体的综合性的设计过程。主要内容:,(1)综合分析系统的各种实现方案,提出最佳实现方案的建议。,(2)制定设计规范、标准及约定原则。,(3)软件结构设计:采用某种软件设计方法,按照模块的构造原则,逐步、逐层地设计软件的模块层次结构。,(4)数据结构以及接口的设计。,(5)系统性能设计。,(6)系统安全

3、性能设计:系统的自保护设计;数据一致性设计;容错设计。,(7)系统可靠性设计。,(8)设计文档的编写:结构设计说明书;用户手册;系统初步的测试计划说明书。,(9)设计的审查和复审。,软件结构设计过程:,1. 设想供选择方案; 2.选择合理的方案; 3.推荐最优方案; 4.功能分解; 5.设计软件结构; 6.设计数据库; 7.制订测试计划; 8.书写文档; 9.审查和复审;,4.3 软件设计中的基本概念和原理,1. 模块化 所谓模块,是指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。程序中的每个模块都需要单独命名,通过名字可实现对指定模块的访问。在高级语言中,模块具体表现为函数、子

4、程序、过程等。一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征。输入/输出用于实现模块与其他模块间的数据传送,即向模块传入所需的原始数据及从模块传出得到的结果数据。功能指模块所完成的工作。模块的输入/输出和功能构成了模块的外部特征。内部数据是指仅能在模块内部使用的局部量。程序代码用于描述实现模块功能的具体方法和步骤。模块的内部数据和程序代码反映的是模块的内部特征。,模块化是指将整个程序划分为若干个模块,每个模块用于实现一个特定的功能。划分模块对于解决大型复杂的问题是非常必要的,可以大大降低解决问题的难度。为了说明这一点,我们可对问题复杂性、开发工作量和模块数之间的关系进行以下推

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

6、工作量小于直接解决复杂问题所需的工作量。,根据上面的推理,我们可以得到这样一个结论,模块化可以降低解决问题的复杂度,从而降低软件开发的工作量。虽然增加程序中的模块数可以降低开发每个模块的工作量,但同时却增加了设计模块接口的工作量。通过图4.1所示的模块数与软件开发成本的关系图中可以看出,当划分的模块数处于最小成本区时,开发软件的总成本最低。 模块化不但可以降低软件开发的难度,而且可以使程序结构清晰,增加易读性和易修改性。此外,模块化还有利于提高代码的可重用性及团队合作开发大型软件的可行性。,图4.1 模块数与软件开发成本,2. 模块独立性 1) 耦合性 耦合性是对一个软件结构内部不同模块间联系

7、紧密程度的度量指标。模块间的联系越紧密,耦合性就越高,模块的独立性也就越低。由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。,(1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示:,(2) 公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个

8、模块间就具有了公共耦合关系。 FORTRAN语言中使用的common语句也会在多个模块间建立公共耦合关系。公共耦合的复杂度随着耦合的模块个数的增加而显著增加。在程序设计中,若两个模块间需要交换的数据较多,仅通过参数传递难以实现时,可以考虑采用公共耦合完成,但一定注意尽量降低公共耦合的程度。,(4) 内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻

9、烦,因此,应坚决避免任何形式的内容耦合。实际上,许多高级程序设计语言在规定语法时就已经杜绝了任何形式的内容耦合。 耦合是影响软件复杂度的一个重要因素,设计过程中应力求降低程序的耦合性。在以上所介绍的耦合中,数据耦合的程度最低,其次是公共耦合,再其次是控制耦合,程度最高的是内容耦合。,2) 内聚性 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。模块中组成元素结合的越紧密,模块的内聚性就越高,模块的独立性也就越高。模块的内聚性和耦合性是两个相互对立且又密切相关的概念。事实上,它们是同一事物的两个方面,模块的高内聚性往往就意味着模块间的低耦合性。因为程序中的各个部分必定是有联系

10、的,若将其中密切相关的部分放在同一个模块中,模块间的联系就会降低;反之,若将密切相关的部分分散放在不同的模块之中,模块间的联系必然会加强。在进行模块化设计时,耦合性和内聚性都是必须考虑的重要指标。但在软件设计时应将更多的注意力集中在提高模块的内聚性上。模块的内聚性主要可划分为如下几种不同的类型。,(1) 偶然内聚。若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。例如,程序中多处出现一些无联系的语句段序列,为了节省内存空间将其组合成为一个模块,这个模块就属于偶然内聚。偶然内聚的模块由于组成部分之间没有实质的联系,因此难于理解和修

11、改,会给软件开发带来很大的困扰。偶然内聚是内聚程度最低的一种,在软件设计时应尽量避免。,(2) 逻辑内聚。若一个模块可实现多个逻辑上相同或相似的一类功能,则称该模块的内聚为逻辑内聚。例如,将程序中多种不同类型数据的输出放在同一个模块中实现,这个模块就属于逻辑聚合。逻辑内聚比偶然内聚的内聚程度高一些。虽然逻辑聚合模块的组成部分之间有一定的关系,但不同功能混在一起并公用模块中的部分代码,给修改带来了一定的麻烦。另外,为了在调用模块时能选择执行其中的某个功能,需要传递相应的控制参数,因而会造成模块间的控制耦合,降低模块的独立性。,(3) 时间内聚。若一个模块包含了需要在同一时间段中执行的多个任务,则

12、称该模块的内聚为时间内聚。例如,将多个变量的初始化放在同一个模块中实现,或将需要同时使用的多个库文件的打开操作放在同一个模块中,都会产生时间内聚的模块。由于时间内聚模块中的各个部分在时间上的联系,其内聚程度比逻辑内聚高一些。但这样的模块往往会和其他相关模块有着紧密的联系,因而会造成耦合性的增加。,(4) 过程内聚。若一个模块中的各个部分相关,并且必须按特定的次序执行,则称该模块的内聚为过程内聚。在结构化程序中,通常采用程序流程图作为设计软件和确定模块划分的工具,因此,这样得到的模块往往具有过程内聚的特性。 (5) 通信内聚。若一个模块中的各个部分使用同一个输入数据或产生同一个输出数据,则称该模

13、块的内聚为通信内聚。由于通信内聚模块中的各个部分都与某个共同的数据密切相关,因此内聚性高于前几种内聚。,(6) 顺序内聚。若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据),则称该模块的内聚为顺序内聚。例如,在一个处理学生成绩的模块中,前一个部分根据成绩统计出及格的学生人数,后一个部分根据及格人数计算出学生的及格率。根据数据流图划分出的模块通常都是顺序内聚的模块。由于顺序内聚模块中的各个部分在功能和执行顺序上都密切相关,因此内聚程度很高且易于理解。,(7) 功能内聚。若一个模块中各个组成部分构成一个整体并共同完成一个单一的

14、功能,则称该模块的内聚为功能内聚。由于功能内聚模块中的各个部分关系非常密切,构成一个不可分割的整体,因此功能内聚是所有内聚中内聚程度最高的一种。 在以上所介绍的七种内聚中,按照内聚性从低到高进行排列的结果如图4.2所示。,图4.2 内聚性的排列,3. 抽象 抽象是人类在解决复杂问题时经常采用的一种思维方式,它是指将现实世界中具有共性的一类事物的相似的、本质的方面集中概括起来,而暂时忽略它们之间的细节差异。在软件开发中运用抽象的概念,可以将复杂问题的求解过程分层,在不同的抽象层上实现难度的分解。在抽象级别较高的层次上,可以将琐碎的细节的信息暂时隐藏起来,以利于解决系统中的全局性的问题。软件开发过

15、程中从问题定义到最终的软件生成,每一阶段都是在前一阶段基础上对软件解法的抽象层上的一次求精和细化。,结构化程序中自顶向下、逐步求精的模块划分思想正是人类思维中运用抽象方法解决复杂问题的体现。软件结构中顶层的模块抽象级别最高,控制并协调软件的主要功能且影响全局;软件结构中位于底层的模块抽象级别最低,具体实现数据的处理过程。采用自顶向下、由抽象到具体的思维方式,不但降低了软件开发中每个阶段的工作难度,简化了软件的设计和实现过程,还有助于提高软件的可读性、可测试性和可维护性。此外,在程序设计中运用抽象的方法还能够提高代码的可重用性。,4. 信息隐蔽 信息隐蔽是指一个模块将自身的内部信息向其他模块隐藏

16、起来,以避免其他模块不恰当的访问和修改,只有对那些为了完成系统功能所必须的数据交换才被允许在模块间进行。信息隐蔽的目的主要是为了提高模块的独立性,减少将一个模块中的错误扩散到其他模块的机会。但信息隐蔽并不意味着某个模块中的内部信息对其他模块来说是完全不可见或不能使用的,而是说模块之间的信息传递只能通过合法的调用接口来实现。显然,信息隐蔽对提高软件的可读性和可维护性都是非常重要的。,5. 逐步求精 “为了能集中精力解决主要问题而尽量推迟对问题细节的考虑”。可以看作是一项把一个时期内必须解决的种种问题按优先级排列序的技术,是由Niklaus Wirth提出的一种自顶向下的设计策略。求精实际上是一个细化过程。抽象与求精是一对互补的概念。,4.4 启发式规则,(1) 降低模块的耦合性,提高模块的内聚性。 为了提高软件中各个模块的独立性,提高程序的可读性、可测试性和可维护性,在软件体系结构设计时应尽可能采用内聚性高的模块,如最好实现功能内聚;尽量只使用数据耦合,限制公共耦合的使用,避免控制耦合的使用,杜绝内容耦合的出现。,(2) 保持适中的模块规模。

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

当前位置:首页 > 高等教育 > 其它相关文档

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