软件工程 第五章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Uncoupled
30
独立性由弱到强(耦合程度由强到弱)排列为:
内容耦合(Content Coupling): 一个模块直接影响另一个
……
例1:A访问C的内部 数据或不通过正 常入口而转入C 的内部。
A
B
A: ………… ………… goto C1 ………… …………
C
D
C: ………… ………… C1: …… ……
模块规模应该适中
经验表明,一个模块的规模不应过大, 最好能写在一页纸内(通常不超过60行语 句)。
42
5.3
启 发 规 则
同一层次上的模 块总数的最大值
软件结构中 控制的层数
深度、宽度、扇出和扇入都应适当
观察大量软件系统后发现,设计得很好 的软件结构通常顶层扇出比较高,中层扇出 较少,底层扇入到公共的实用模块中去(底 是一个模块直接 是能够直接调 层模块有高扇入)。 控制(调用)的
复合耦合
数据耦合 低

偶然型 内聚性 弱
逻辑型
时间型
通信型
顺序型
功能型 强
29
⑴ 耦合(Coupling)
耦合表示一个软件结构内各个模块之间的互连程度,应 尽量选用松散耦合的系统
Great deal of dependence Independent
Highly coupled
Loosely coupled
• 根据系统分析确定的目标,来判断哪些方 案是合理的。
• 在判断哪些方案合理时应该考虑在问题定 义和可行性研究阶段确定的工程规模和目 标,有时可能还需要进一步征求用户的意 见。
7
5.1
设计过程
3.推荐最佳方案 • 综合分析对比各种合理方案的利弊,推荐 一个最佳的方案,并为最佳方案制定详细
的实现计划。
设计软件的结构,确定系统中每个程序是由哪些
模块组成的,以及这些模块相互间的关系。
3
站在全局高度上,花较少成本,从较抽象的层次上 分析对比多种可能的系统实现方案和软件结构,从 中选出最佳方案和最合理的软件结构,从而用较低 成本开发出较高质量的软件系统。
寻找实现目标系统的各种不同的方案
从若干个合理的方案中选取最佳方案
例如:
enter data
check data
manipulate data
39
通信内聚(Communicational cohesion):模块中所有元素
都用同一个输入数据或产生同一个输出数据
例如:从同一磁带上读取不相干的数据 —— 可能破 坏独立性。
高内聚:
顺序内聚(Sequential cohesion):模块内的处理元素和
2、选取合理的方案
• 从上一步得到的一系列供选择的方案中选取若干个合 理的方案,通常,考虑的这些方案中至少应包括低成本、 中成本和高成本的三种方案类型。 • 对每个合理方案要提供以下几方面资料: (1)系统流程图; (2)数据字典; (3)成本/效益分析;
(4)实现这个系统的进度计划。
6
5.1
设计过程




1
第五章 总体设计
5.1 设计过程
5.2
5.3 5.4 5.5 5.6
设计原理
启发规则 描绘软件结构的图形工具 面向数据流的设计方法 小结
2
总体设计又称为概要设计、初步设计
基本目的:系统应该如何实现
划分出组成系统的物理元素——程序、文件、数 据库、人工过程和文档等,每个物理元素仍然处于 黑盒子级
有效的模块化(即具有独立性的模块)的软 件比较容易开发出来; 独立的模块比较容易测试和维护。
27
模块的独立程度由两个定性标准度量, 分别是耦合和内聚。 耦合:衡量不同模块彼此间互相依赖(连接) 的紧密程度; 内聚:衡量一个模块内部各个元素彼此结合 的紧密程度。
28
内容耦合 耦合性
公共耦合
控制耦合
内聚度量一个模块内的各 个元素彼此结合的紧密程 度。设计时应该力求做到 高内聚。
41
5.3
启 发 规 则
改进软件结构提高模块独立性 过小的模块开销大于有效操作,而
且模块数目过多将使系统接口复杂。 设计出软件的初步结构以后,应该审 因此过小的模块有时不值得单独存 查分析这个结构,通过模块分解或合并, 在,特别是只有一个模块调用它时, 通常可以把它合并到上级模块中去 力求降低耦合提高内聚。 而不必单独存在。

如果A模块读取该项数据,然后调用C模块对该项重新
计算,并进行数据更新。
34
A
D
B
C
全程数 据区
E
(3)公共耦合
• 如果此时C模块错误地更新了该项数据,在往下的处
理中模块E读该数据项时出现错误。 • 表面上看,问题由模块E产生,实际上由模块C引起。
35
控制耦合(Control coupling):一个模块通过传递控制
B: ………… ………… V2=B1+V1 ………… …………
问题: 公共部分的改动将影响所有调用它的模块; 公共部分的数据存取无法控制; 复杂程度随耦合模块的个数增加而增加。
33
A B C 全程数 据区
D
E
(3)公共耦合
• 图中存在公共耦合,假设模块A、C、E都存取全程数据
区(如公用一个磁盘文件)中的一个数据项。
完全不用内容耦合。
37
⑵ 内聚 (Cohesion): 一个模块内各元素结合的紧密程度.
Goal: as cohesive as possible.
低内聚:
偶然内聚(Coincidental cohesion)
逻辑内聚(Logical cohesion)
例如:
from disk from tape
8
5.1
设计过程
4.功能分解
为了最终实现目标系统,必须设计出组成这个系统的所 有程序和文件(或数据库)。
对于大型程序的设计,通常分为两个阶段:结构设计和 过程设计。 结构设计:确定程序由哪些模块组成,以及这些模块之 间的相互关系。
过程设计:确定每个模块的处理过程。
其中,结构设计是总体设计阶段的任务,而过程设计则 是详细设计阶段的任务。
概括起来,暂时忽略它们之间的差异,这就
是抽象。或者说抽象就是抽出事物的本质特
性而暂时不考虑它们的细节。
20
处理复杂系统:用层次的方式构造和分析。
一个复杂的动态系统首先可以用一些高级的 抽象概念构造和理解,这些高级概念又可以 用一些较低级的概念构造和理解,如此进行 下去,直至最低层次的具体元素。
21
信息来控制另一个模块
B Flag
Fn ……
F2 ……
A
Flag
F1
接口单一, 但仍然影响 被控模块的 内部逻辑。
数据耦合(Data coupling): 只有数据在模块之间进行
交换
The most desirable.
36
耦合是影响软件复杂程度的一个重要因
素,应采取下述设计原则: 应该尽量使用数据耦合 少用控制耦合 限制公共耦合的范围
31
例2:部分代码重叠 (常出现在汇编程 序中)
A B
例3:一个模块有 多个入口(功能)
A: ……………… ……………… entry 1: ……………… ……………… entry 2: ……………… ………………

The least desirable
32
公共耦合 (Common coupling):几个模块共享一个数据区域
25
信息隐藏
问题:“为了得到最好的一组模块,应 该怎样分解软件”。
信息隐藏原理指出:应该这样设计和确 定模块,使得一个模块内包含的信息(过程 和数据)对于不需要这些信息的模块来说, 是不能访问的。 实际上,应该隐藏的不是有关模块的一 切信息,而是模块的实现细节。 26
模块独立
开发具有独立功能而且和其他模块之 间没有过多的相互作用的模块,就可以做 到模块独ຫໍສະໝຸດ Baidu。
考虑对任何问题的模块化解法时,可以提出 许多抽象的层次。在抽象的最高层次使用问 题环境的语言,以概括的方式叙述问题的解 法;在较低抽象层次采用更过程化的方法, 把面向问题的术语和面向实现的术语结合起 来叙述问题的解法;最后在最低的抽象层次 用可直接实现的方式叙述问题的解法。
22
逐步求精
定义:“为了能集中精力解决主要问题而 尽量推迟对问题细节的考虑。” Miller法则:一个人在任何时候都只能 把注意力集中在7±2个知识块上 求精要求设计者细化原始陈述,随着每个 后续求精(细化)步骤的完成而提供越来越多 的细节。
13
5.1
设计过程
8.书写文档 文档包括:
• 系统说明
• 用户手册 • 测试计划 • 详细的实现计划 • 数据库设计结果
14
5.1
设计过程
9.审查和复审
• 先技术审查 • 后管理审查
15
5.2
软件设计准则
软件设计准则
模块化
抽象
逐步求精
信息隐藏
模块独立
16
模块化与模块独立
1. 模块化
模块是由边界元素限定的相邻的程序元素( 例如,数据说明,可执行的语句)的序列,而且 有一个总体标识符来代表它。
Global : V1 V2 Global : V1 V2
公共区可以是:全程数据区、共享通信区、内存公共覆盖 区、任何介质上的文件、物理设备等。
A: ………… ………… A1=V1+V2 ………… …………
B: ………… ………… V1=B1 ………… …………
A: ………… ………… V1++ ………… …………
11
5.1
设计过程
数据库的应用越来越广泛,目前大多数的
6.数据库设计 系统都要用到数据库技术。 数据库设计是一项专门的技术,包括模式
设计、子模式设计、完整性和安全性设计和优
化处理等。
12
5.1
设计过程
7.制定测试计划 在软件开发的早期阶段提前考虑软件的测 试计划是很有必要的。这样能促使软件设计人 员在设计时注意到软件的测试问题,从而有利 于提高软件的可测试性。
A:
Read inputs
38
from ……
时间内聚(Temporal cohesion):模块内的功能在
同一时间段内完成
例如:系统的初始化 问题:不同功能混在一个模块中,有时共用部分 编码,使局部功能的修改牵动全局。
中内聚: 过程内聚 (Procedural cohesion):模块内的处理是相 关的,而且必须以特定顺序执行
模块数目 用此模块的上 级的模块数目
43
深度 = 分层的层数。过大表示分工过细。 宽度 = 同一层上模块数的最大值。过大表示系统复杂 度大。 44
23
逐步求精是一项把一个时期内必须解决
的种种问题按优先级排序的技术。它确
保每个问题都将被解决,而且每个问题
都将在适当的时候被解决,但是,在任
何时候一个人都不需要同时处理7个以上
知识块。
24
抽象与求精是一对互补的概念。 抽象使得设计者能够说明过程和数据,同
时却忽略低层细节。
求精则帮助设计者在设计过程中逐步揭示 出低层细节。
模块化就是把程序划分成独立命名且可独立 访问的模块,每个模块完成一个子功能,把这些 模块集成起来构成一个整体,可以完成指定的功 能满足用户的需求。
17
模块化与模块独立
当模块数目增加时每 个模块的规模将减小,开 发单个模块需要的成本 (工作量)确实减少了; 但是,随着模块数目增加, 设计模块间接口所需要的 工作量也将增加。每个程 序都相应地有一个最适当 的模块数目 M ,使得系统 的开发成本最小。
设计软件结构
进行必要的数据库设计 确定测试要求并且制定测试计划
4
5.1
设计过程
• 在数据流图的基础上,考虑各种可能的实
1.设想供选择的方案
现方案。
• 一种常用的方法是,设想把数据流图中的
处理分组的各种可能的方法,抛弃在技术
上行不通的分组方法,余下的分组方法代 表可能的实现策略。
5
5.1
设计过程
统一的功能密切相关,而且这些处理必须顺序执行。 功能内聚(Functional cohesion):所有元素合力完成一 个单一功能,缺一不可
40
模块独立
耦合
耦合是对一个软件结构内 不同模块之间互连程度的 度量。尽量使用数据耦合 ,少用控制耦合,限制公 共环境耦合的范围,完全 不用内容耦合。
内聚
图5.1 模块化和软件成本的关系
18
采用模块化原理的优点
使软件结构清晰,容易设计、容易阅读和理解。 使软件容易测试和调试,从而提高软件的可靠性。 能够提高软件的可修改性。 有助于软件开发工程的组织管理。
19
抽象
人们在实践中认识到,在现实世界中一
定事物、状态或过程之间总存在着某些相似
的方面(共性)。把这些相似的方面集中和
9
5.1
设计过程
• 对数据流图进一步细化,进行功能分解
10
5.1
设计过程
5.设计软件结构
• 软件结构反映系统中模块的相互调用关系:顶
层模块调用它的下层模块以实现程序的完整功
能,每个下层模块再调用更下层的模块,最下
层的模块完成最具体的功能。
• 软件结构通过层次图或结构图来描绘,可以直
接从数据流图映射出软件结构。
相关文档
最新文档