当前位置:文档之家› 软件工程 第五章

软件工程 第五章

模块数目 用此模块的上 级的模块数目
43
深度 = 分层的层数。过大表示分工过细。 宽度 = 同一层上模块数的最大值。过大表示系统复杂 度大。 44
信息来控制另一个模块
B Flag
Fn ……
F2 ……
A
Flag
F1
接口单一, 但仍然影响 被控模块的 内部逻辑。
数据耦合(Data coupling): 只有数据在模块之间进行
交换
The most desirable.
36
耦合是影响软件复杂程度的一个重要因
素,应采取下述设计原则: 应该尽量使用数据耦合 少用控制耦合 限制公共耦合的范围
9
5.1
设计过程
• 对数据流图进一步细化,进行功能分解
10
5.1
设计过程
5.设计软件结构
• 软件结构反映系统中模块的相互调用关系:顶
层模块调用它的下层模块以实现程序的完整功
能,每个下层模块再调用更下层的模块,最下
层的模块完成最具体的功能。
• 软件结构通过层次图或结构图来描绘,可以直
接从数据流图映射出软件结构。
概括起来,暂时忽略它们之间的差异,这就
是抽象。或者说抽象就是抽出事物的本质特
性而暂时不考虑它们的细节。
20
处理复杂系统:用层次的方式构造和分析。
一个复杂的动态系统首先可以用一些高级的 抽象概念构造和理解,这些高级概念又可以 用一些较低级的概念构造和理解,如此进行 下去,直至最低层次的具体元素。
21
A:
Read inputs
38
from ……
时间内聚(Temporal cohesion):模块内的功能在
同一时间段内完成
例如:系统的初始化 问题:不同功能混在一个模块中,有时共用部分 编码,使局部功能的修改牵动全局。
中内聚: 过程内聚 (Procedural cohesion):模块内的处理是相 关的,而且必须以特定顺序执行
完全不用内容耦合。
37
⑵ 内聚 (Cohesion): 一个模块内各元素结合的紧密程度.
Goal: as cohesive as possible.
低内聚:
偶然内聚(Coincidental cohesion)
逻辑内聚(Logical cohesion)
例如:
from disk from tape
内聚度量一个模块内的各 个元素彼此结合的紧密程 度。设计时应该力求做到 高内聚。
41
5.3
启 发 规 则
改进软件结构提高模块独立性 过小的模块开销大于有效操作,而
且模块数目过多将使系统接口复杂。 设计出软件的初步结构以后,应该审 因此过小的模块有时不值得单独存 查分析这个结构,通过模块分解或合并, 在,特别是只有一个模块调用它时, 通常可以把它合并到上级模块中去 力求降低耦合提高内聚。 而不必单独存在。
2、选取合理的方案
• 从上一步得到的一系列供选择的方案中选取若干个合 理的方案,通常,考虑的这些方案中至少应包括低成本、 中成本和高成本的三种方案类型。 • 对每个合理方案要提供以下几方面资料: (1)系统流程图; (2)数据字典; (3)成本/效益分析;
(4)实现这个系统的进度计划。
6
5.1
设计过程
图5.1 模块化和软件成本的关系
18
采用模块化原理的优点
使软件结构清晰,容易设计、容易阅读和理解。 使软件容易测试和调试,从而提高软件的可靠性。 能够提高软件的可修改性。 有助于软件开发工程的组织管理。
19
抽象
人们在实践中认识到,在现实世界中一
定事物、状态或过程之间总存在着某些相似
的方面(共性)。把这些相似的方面集中和
Global : V1 V2 Global : V1 V2
公共区可以是:全程数据区、共享通信区、内存公共覆盖 区、任何介质上的文件、物理设备等。
A: ………… ………… A1=V1+V2 ………… …………
B: ………… ………… V1=B1 ………… …………
A: ………… ………… V1++ ………… …………

如果A模块读取该项数据,然后调用C模块对该项重新
计算,并进行数据更新。
34
A
D
B
C
全程数 据区
E
(3)公共耦合
• 如果此时C模块错误地更新了该项数据,在往下的处
理中模块E读该数据项时出现错误。 • 表面上看,问题由模块E产生,实际上由模块C引起。
35
控制耦合(Control coupling):一个模块通过传递控制
8
5.1
设计过程
4.功能分解
为了最终实现目标系统,必须设计出组成这个系统的所 有程序和文件(或数据库)。
对于大型程序的设计,通常分为两个阶段:结构设计和 过程设计。 结构设计:确定程序由哪些模块组成,以及这些模块之 间的相互关系。
过程设计:确定每个模块的处理过程。
其中,结构设计是总体设计阶段的任务,而过程设计则 是详细设计阶段的任务。
设计软件的结构,确定系统中每个程序是由哪些
模块组成的,以及这些模块相互间的关系。
3
站在全局高度上,花较少成本,从较抽象的层次上 分析对比多种可能的系统实现方案和软件结构,从 中选出最佳方案和最合理的软件结构,从而用较低 成本开发出较高质量的软件系统。
寻找实现目标系统的各种不同的方案
从若干个合理的方案中选取最佳方案
B: ………… ………… V2=B1+V1 ………… …………
问题: 公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。
33
A B C 全程数 据区
D
E
(3)公共耦合
• 图中存在公共耦合,假设模块A、C、E都存取全程数据
区(如公用一个磁盘文件)中的一个数据项。
23
逐步求精是一项把一个时期内必须解决
的种种问题按优先级排序的技术。它确
保每个问题都将被解决,而且每个问题
都将在适当的时候被解决,但是,在任
何时候一个人都不需要同时处理7个以上
知识块。
24
抽象与求精是一对互补的概念。 抽象使得设计者能够说明过程和数据,同
时却忽略低层细节。
求精则帮助设计者在设计过程中逐步揭示 出低层细节。
统一的功能密切相关,而且这些处理必须顺序执行。 功能内聚(Functional cohesion):所有元素合力完成一 个单一功能,缺一不可
40
模块独立
耦合
耦合是对一个软件结构内 不同模块之间互连程度的 度量。尽量使用数据耦合 ,少用控制耦合,限制公 共环境耦合的范围,完全 不用内容耦合。
内聚
模块化就是把程序划分成独立命名且可独立 访问的模块,每个模块完成一个子功能,把这些 模块集成起来构成一个整体,可以完成指定的功 能满足用户的需求。
17
模块化与模块独立
当模块数目增加时每 个模块的规模将减小,开 发单个模块需要的成本 (工作量)确实减少了; 但是,随着模块数目增加, 设计模块间接口所需要的 工作量也将增加。每个程 序都相应地有一个最适当 的模块数目 M ,使得系统 的开发成本最小。
复合耦合
数据耦合 低

偶然型 内聚性 弱
逻辑型
时间型
通信型
顺序型
功能型 强
29
⑴ 耦合(Coupling)
耦合表示一个软件结构内各个模块之间的互连程度,应 尽量选用松散耦合的系统
Great deal of dependence Independent
Highly coupled
Loosely coupled
考虑对任何问题的模块化解法时,可以提出 许多抽象的层次。在抽象的最高层次使用问 题环境的语言,以概括的方式叙述问题的解 法;在较低抽象层次采用更过程化的方法, 把面向问题的术语和面向实现的术语结合起 来叙述问题的解法;最后在最低的抽象层次 用可直接实现的方式叙述问题的解法。
22
逐步求精
定义:“为了能集中精力解决主要问题而 尽量推迟对问题细节的考虑。” Miller法则:一个人在任何时候都只能 把注意力集中在7±2个知识块上 求精要求设计者细化原始陈述,随着每个 后续求精(细化)步骤的完成而提供越来越多 的细节。
有效的模块化(即具有独立性的模块)的软 件比较容易开发出来; 独立的模块比较容易测试和维护。
27
模块的独立程度由两个定性标准度量, 分别是耦合和内聚。 耦合:衡量不同模块彼此间互相依赖(连接) 的紧密程度; 内聚:衡量一个模块内部各个元素彼此结合 的紧密程度。
28
内容耦合 耦合性
公共耦合
控制耦合
25
信息隐藏
问题:“为了得到最好的一组模块,应 该怎样分解软件”。
信息隐藏原理指出:应该这样设计和确 定模块,使得一个模块内包含的信息(过程 和数据)对于不需要这些信息的模块来说, 是不能访问的。 实际上,应该隐藏的不是有关模块的一 切信息,而是模块的实现细节。 26
模块独立
开发具有独立功能而且和其他模块之 间没有过多的相互作用的模块,就可以做 到模块独立。
Uncoupled
30
独立性由弱到强(耦合程度由强到弱)排列为:
内容耦合(Content Coupling): 一个模块直接影响另一个
……
例1:A访问C的内部 数据或不通过正 常入口而转入C 的内 goto C1 ………… …………
C
D
C: ………… ………… C1: …… ……
11
5.1
设计过程
数据库的应用越来越广泛,目前大多数的
6.数据库设计 系统都要用到数据库技术。 数据库设计是一项专门的技术,包括模式
相关主题