结构化总体设计
➢ 公共耦合。在软件系统中,可能有独立于模块而存在的数 据文件、公共变量和公共数据环境。模块之间通过访问公 共数据环境从而实现通信。
➢ 内容耦合。内容耦合是一种耦合性很强的耦合,这种耦合 严重影响了模块的独立性。它的表现形式主要有以下几种: i. 模块直接访问另一模块的内部数据;
ii. 模块不通过正常的入口转到另一模块内部;
第3篇 软件开发及维护
第7章 结构化总体设计
09:43
1
©曲阜师范大学计算机科学学院
第7章 结构化总体设计
本章的主要目标是运用结构化方法,介绍软 件总体设计的相关工作。读完本章,你将了解以 下基本内容:
软件设计的基本原理。 软件设计的启发式规则。 软件结构的描述工具。 面向数据流的结构化设计过程。
09:43
2
©曲阜师范大学计算机科学学院
Contents
7.1 软件设计的基本概念和原理 7.2 软件结构的描绘工具 7.3 面向数据流的设计过程 7.4 启发式设计 7.5 设计优化原则
09:43
3
©曲阜师范大学计算机科学学院
7.1 软件设计的基本概念和原理
在完成了需求分析之后,项目开发人员对 系统的需求有了完整准确的理解,即知道 了“做什么”,接下来就是回答“怎么 做”。
7.1.2 信息隐蔽
信息隐蔽是指每个模块的内部实现细节对外 部来说是看不见的,即模块内部的数据、代码等 信息不允许其他不需要这些信息的模块使用。这 样主要有两个好处,一是利于模块之间相互有效 隔离,使每个模块更加具有独立性,二是可以使 系统具有更好的健壮性,以及更好的可维护性 。
09:43
5
©曲阜师范大学计算机科学学院
如果可以把一个模块作为一种独立单元(无段参考其他模块) 来理解,那么,这样的模块是易于构造和易于修改的。
如果对系统需求的微小修改只会针对个别模块,而不是对 整个系统的修改,则修改所引起的副作用将最小。
如果在一个模块内出现异常情况时,它的影响仅局限在该 模块内部,则由错误引起的副作用最小。
09:43
8
➢ 数据耦合。模块与模块之间发生联系,彼此之 间通过接口参数实现通信,传递的接口参数是 用于计算的,它们不会影响内部程序执行的路 径。我们提倡用数据耦合,它是一种较弱的耦 合方式。
09:43
10
©曲阜师范大学计算机科学学院
➢ 控制耦合。如果在数据耦合的基础上,模块间接口参数不 仅传递数据,同时还传递标志、名字、开关等控制信息, 从而影响模块的内部程序执行路径。显而易见,控制耦合 比数据耦合的耦合性要强一些,它属于中等程度的耦合。 如果需要通过接口传递模块内多项功能的选择时,就需要 用到控制耦合。
耦合度量了各模块之间相互关联的程度,各 个模块之间接口的复杂程度、接口数据对模块内 部运算的影响程度、使用模块的方式都决定了耦 合的强弱。以下是耦合的几种主要形式:
➢ 非直接耦合。两个模块之间的联系,仅限于被 共同模块控制和调用,它们之间没有直接的联 系,那么这种耦合就成为非直接耦合,因为模 块和模块之间没有数据通信,所以它的耦合形 式是最弱的。
一般来说,采用耦合和内聚这两个定性的技 术指标来对这一模块的独立性进行衡量。内聚性 可以衡量各模块内部功能的结合强度,模块内部 各元素之间结合得越紧密,则它的内聚性就越高; 耦合性显示了模块与模块之间相互的依赖关系, 模块与模块之间联系越紧密,耦合性就越高。
09:43
9
©曲阜师范大学计算机科学学院
7.1.5 耦合
第一个阶段为总体设计阶段,期间项目开 发人员确定软件系统的基本框架;第二阶 段为详细设计阶段,期间确定软件系统的 内部实现细节。
09:43
4
©曲阜师范大学计算机科学学院
7.1.1 抽象
抽象是人类在认识复杂世界时所使用的最有 力的工具。抽象是从众多的事物中抽取出共同的、 本质性的特征,而舍弃其非本质的特征。例如苹 果、香蕉、梨、葡萄、桃子等,它们共同的特征 就是水果。
把模块内聚分为以下几种主要类型:
功能内聚、信息内聚、通信内聚、过程内聚、 时间内聚、逻辑内聚和偶然内聚。
©曲阜师范大学计算机科学学院
7.1.4 模块独立
模块独立是模块化、抽象、信息隐蔽的直接 结果,是指系统中的模块尽可能地只涉及自己特 定的子功能,并且模块接口简单,与其他模块没 有过多的通信。如果系统中每个模块都具有很好 的独立性,系统实现起来就更加容易。因此,模 块独立性是衡量软件中模块质量最重要的指标。
09:43
7
©曲阜师范大学计算机科学学院
那么如何确定一个软件系统的模块数目?
分别从模块可分解性、可组装性、可理解性、连 续性和保护性五个方面来理解:
如果一种设计方法提供了把问题分解为子问题的系统化机 制,它就能降低整个问题的复杂性,从而可以实现一种有 效的模块化解决方案。
如果一种设计方法能把现有的(可重用的)设计构件组装成 新系统,它就能提供一种并非一切从头开始的模块化解决 方案。
7.1.3 模块化设计
人们不断创新的目的在于更加高效。从软件 开发的角度来看,人们希望开发维护同样一个系 统所使用的时间最短,所耗费的成本最低。软件 系统模块化就是出于这样的目的,提出了一种提 高开发效率的思想。
在结构化分析方法中,模块的规模可大可小, 是一个功能单位。模块可以是软件系统中的一个 子系统,也可以是子系统内一个功能程序块(由边 界元素限定的数据说明、可执行的语句等的序列, 而且有一个总体标识符来代表它。
iii. 模块之间存在一部分代码重叠;
iv. 某个模块有多个入口。
内容耦合致使模块的变动变得非常困难,程序维护和 升级也极其困难,这要求在设计软件结构时,不允许出现 内容耦合。
09:43
11
©曲阜师范大学计算蔽概念的自然扩展,它度量 了模块内部各个元素彼此结合的紧密程度,元素 之间联系越紧密,其内聚性越强。
09:43
6
©曲阜师范大学计算机科学学院
模块化可以简化软件问题,一个系统模块越多,模块 与模块之间的通信或接口就越多,希望依靠模块化将系统 不断被分解而使软件成本不断降低的愿望可能是不切实际 的。随着系统的分解,系统中模块数目将会增加,模块接 口也会增加,软件构造会由此变得复杂起来,模块连接的
难度也会由此加大。