第四章 软件总体设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
2018/10/13
49
模块间耦合的类型

耦 合 (低耦合)
无直接耦合
数据耦合 标记耦合

模 块 独 立 性 弱

(中耦合)
(较强耦合)
控制耦合
外部耦合 公共耦合
高 (强耦合)
内容耦合
概述(P66)
需求分析解决系统“做什么”的问 题,软件设计解决系统“怎么做” 的问题,分为总体设计(概要设计) 和详细设计.软件设计是把软件需求 变换成为软件的具体解决方案.
2018/10/13
1
剩下的阶段
▲ 总体设计
▲ ▲ ▲ ▲
详细设计 编码 调试 维护
2018/10/13
2
软件设计分为两个阶段:
控制结构(程序结构)
控制结构是软件模块间 关系的表示
2018/10/13
6
控制结构图示(P68)
2018/10/13
7
控制结构的层次规则
只有一个顶层(0层)模块 0层外任一模块都会在它的邻层存在一模块与 它有关 同层模块间不发生联系
2018/10/13
8
软件结构度量术语
(一个模块 扇出 直接调用 的模块数)
例如:初始化系统模块、 系统结束模块、 紧急故障处理模块等均是时间性聚合 模块.
2018/10/13 29
通信聚合
一个模块内各个组成部分的处理动作 都使用相同的输入数据或产生相同 的输出数据.
2018/10/13
30
通信聚合模块例
职工工资 记录
产生工资 报表 职工工资报 表
平均工资 计算平均 工资
门诊 管理 挂 号 单 挂 号 费 总 挂号 病历 计 处理 管理
2018/10/13
药库 管理
药房 管理
病房 管理
财务 管理
处方 管理
出库 处理
常规 处理
进药 管理
15
结构图的优点



结构图具有很高的可读性,容易使人理解,也 容易和用户讨论 结构图是自顶向下逐层扩展,能够表达总体一 级的软件结构 结构图既有严密性,又有灵活性 结构图易于维护和修改
成绩
计算平均分 计算最高 分 输出结果
41
去除模块间控制耦合的方法
控制耦合增加了理解和编程的复杂性,调 用模块必须知道被调模块的内部逻辑,增加 了相互依赖 (1)将被调用模块内的判定上移到调用模块中进 行 (2)被调用模块分解成若干单一功能模块
42
改控制耦合为数据耦合举例
A
平均成绩 B1 B2
最高成绩
2018/10/13
16
模块

模块是具有一定功能的可以用名词调用的程序 语句集合,如:


独立的汇编程序 COBOL的段和节 Pascal过程 FORTRAN的子程序 汇编的宏
2018/10/13
17
模块化(Modularity)
模块化是好的软件设计的一个基本准则 从整体上把握 问题,隐蔽细节
计算平均分
计算最高分
43
公共耦合(公共数据区耦合)
一组模块引用同一个公用数据区(也称全 局数据区、公共数据环境)。
公共数据区指:



全局数据结构 共享通讯区 内存公共覆盖区等
44
公共耦合举例
A B C
公共数据区C
模块A、B、C间存在错综复杂的联系
45
公共耦合存在的问题
(1)软件可理解性降低 (2)诊断错误困难 (3)软件可维护性差, (4)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!
E (c)
协调模块
E F F
(b)
(d)
12
SC中的选择调用
A根据内 部判断决定 是否调用B A按另一判 定结果选择调 用 C或 D
A
B
2018/10/13
C
D
13
SC中的循环调用
A
B
C
A根据内在的循环重 复调用B、C等模块
2018/10/13 14
结构图(SC)举例
处方 计 总 费 号 挂 医院管理系统
2018/10/13
50
耦合、聚合与模块独立性关系

耦合与聚合都是模块独立性的定性标准, 都反映模块独立性的良好程度。但耦合 是直接的主导因素,聚合则辅助耦合共 同对模块独立性进行衡量。
2018/10/13
51
改进软件结构设计的指导原则
(软件结构设计的启发式规则)
(1)评价软件初始结构,通过模块的分解与合并减 少模块之间的耦合度,增加聚合度 (2)模块功能的完善化 (3)将模块的作用限制在模块的控制范围内 (4)深度、宽度、扇出和扇入适中 (5)模块大小适中 (6)降低模块接口的复杂性 (7)模块功能可预测 (8)避免模块的病态连接,力争单入口,单出口
偶然聚合 逻辑聚合 时间聚合 通信聚合 顺序聚合 功能聚合
2018/10/13
25
偶然聚合(巧合聚合)
例: T
P
Q
S
MOVE READ MOVE
A
TO B CARD FILE C TO D
模块T中的三个语句没有任何联系 缺点:可理解性差, 可修改性差
2018/10/13 26
逻辑聚合

把几种相关功能(逻辑上相似的功能) 组合在一模块内,每次调用由传给模块 的参数确定执行哪种功能。
(1)总体设计(概要设计) 确定软件的结构以及各组成成分 (子系统或模块)之间的相互关系。 (2)详细设计 确定模块内部的算法和数据结构,产生描 述各模块程序过程的详细文档。
2018/10/13
3
总体设计的任务


将系统划分成模块 决定每个模块的功能 决定模块的调用关系 决定模块的界面,即模块间传递的数据
2018/10/13
10
结构图(SC Structure Chart)
SD方法在概要设计中的主要表达工具
约定:
编辑学生记录 不加区分的数据 学生数据 数据信息 控制信息
2018/10/13
学号 无此学生 读学生记录
11
SC中的四种模块
A
B
C
D
传入模块 A
(a)
2018/10/13
传出模块
B
变换模块
2018/10/13
4
软件总体设计基础(P67)
▲ 模块 模块就是程序对象的有名字的集合或者说是一 系列过程的总称. ▲ 软件结构 软件的结构就是软件内部各模块之间的关系表 示. ▲ 总体设计 总体设计是软件总体结构的设计. ▲ 详细设计 详细设计是软件模块内部的过程设计.
2018/10/13 5
46
内容耦合
Entry1 …… Entry1 …… 多入口模块
A
B
A
一模块直接访问 另一模块的内部 信息 (程序代码 或数据)
B
模块代码重 叠
最不好的耦合形式 !!!
47
图形表示耦合关系
紧密耦合-有 很多依赖关系
松散耦合-有 少量依赖关系
无耦合-没有依赖关系
2018/10/13 48
耦合强度依赖的因素:
2018/10/13
57
作用范围和控制范围
作用范围 判定
Top X A B1 Y B X A B1 Y B B2 X
Top X A B1 B B2
Top Y
A
B
图1.作用范围在控制范围之外 图2.作用范围在控制范围之内,但判定位置太高 图3.作用范围在控制范围之内,正确实现 图4.理想的作用范围和控制范围
(1)执行规定功能部分 (2)出错处理部分 (3)需返回给调用者数据时, 返回是否正确结束标志。
2018/10/13
54
(3)系统结构的作用范围和控制范 围



系统中某一层上模块中的判定或者条件语句 (例如If语句)在系统中会产生多种后果,根 据该判定的结果去执行或不执行其他层的某个 模块。 该模块就是“条件依赖”于某个判定 判定的“作用范围”是指包含“条件依赖”于 该判定的处理的全部模块 一个模块的“控制范围”是指模块本身和它的 全体子模块
(4) 减少高扇出争取高扇入
计算实发工资
取得 计时 薪金 编外 税收 编外 常规 编外 工资 制工 制工 人员 人员 人员 数据 资额 资额 工资 扣款 税款 扣款 扣款
2018/10/13
27
逻辑聚合模块
A E B F C G E、F、G逻辑 功能相似,组 成新模块EFG C A1 B1 C1 公用代码段
A
B
公用代码段
EFG模块内部逻辑 EFG 缺点:增强了耦合程度(控制耦合) 不易修改,效率低 2018/10/13
28
时间聚合(经典聚合)
模块完成的功能必须在同一时间 内执行,这些功能只因时间因素 关联在一起。
55
2018/10/13
将模块的作用限制 在模块的控制范围内 如果模块 X
A
C D F E G H
J
I K L
B
C 作出的 决策影响 了模块L, L超出了C 的控制范 围
模块C的控制范围: C、D、E、F、G、H
2018/10/13 56
作用范围和控制范围


作用范围应该是这个判定所在模块的控 制范围的一个子集 但是实际上,在系统中控制范围和作用 范围的关系常常并非如此。
2018/10/13 22
衡量独立性标准(P73)
▲ 聚合
聚合是衡量一个模块内部各个元素之间 的彼此结合的紧密程度. ▲ 耦合 耦合是衡量不同模块之间相互依赖的紧 密程度.
2018/10/13
23
独立性理想目标
理想目标: 低耦合、高聚合
2018/10/13
24
块内联系(聚合)



2018/10/13 21
模块独立性度量(P73)
▲ 模块独立的概念
模块独立是指该模块能完成一个相对独立的特 定子功能,并且与其他模块之间的接口很简单. 模块独立是软件设计模块化、抽象和信息隐蔽 的直接结果. ▲ 独立的优势 1.具有独立模块的软件比较容易开发,接口简 化,有利于团队合作. 2.独立的模块比较容易测试和维护.
"各个击破"理论
2018/10/13 19
模块度
软件总成本 成 本 或 工 作 量
最小成本区域 M
集成成本
成本/模块 模块数量
2018/10/13 20
模块的特征(P72)
▲ 抽象
抽象是抽出事物的本质特性而暂时不考 虑他们的细节. ▲ 信息隐蔽 模块所包含的信息,不允许其它不需要 这些信息的模块访问,独立的模块间仅 仅交换为完成系统功能而必须交换的信 息。
产生职工工资报表并计算平均工资模块
2018/10/13 31
顺序聚合
模块内各处理成分相关, 且必须以特定次序执行
2018/10/13
32
顺序聚合模块
读入 成绩单 审查 成绩单 统计 成绩 打印 成绩
读入并审查成绩 单
统计并打印成绩 单
2018/10/13
33
功能聚合
模块仅包括为完成某个功能所必须的所 有成分。 模块所有成分共同完成一个功 能,缺一不可 聚合性最强

2018/10/13
34
模块间联系(耦合)(P73)



非直接耦合 数据耦合 特征耦合 控制耦合 公共耦合 内容耦合
2018/10/13
35
非直接耦合
两个模块没有直接关系(模块1和模 块2),模块独立性最强。
模块1
பைடு நூலகம்模块2
模块3
2018/10/13
模块4
36
数据耦合
一模块调用另一模块时,被调用模 块的输入、输出都是简单的数据(若干 参数)。 属松散耦合。
2018/10/13 52
(1)模块分解、合并,消除重复功能
X
Q1
C
Y
Q2
C
X
Q’
Y
X
Q1
Y
Q2
改进前 Q1、Q2功 能相似
2018/10/13
重复部分
改进方法1: C 将Q1、Q2 合并为Q’ 改进方法2: 不可取 将Q1、Q2的公共 部分分离出来 53
(2) 模块功能的完善化
完整的模块应包括三部分:
深 度
(模块的 层数)
扇入 (调用一个给定模
块的模块个数)
宽度
(同一层最大模块数)
2018/10/13 9
结构图(SC Structure Chart)
结构图主要成分(page 69)
模块——用方框表示,方框中写有模块的名字,一个模 块的名字应适当地反映这个模块的功能,这就在某种 程度上反映了块内联系; 调用——从一个模块指向另一个模块的箭头表示前一模 块中含有对后一模块的调用; 数据——调用箭头旁边的小箭头表示调用时从一个模块 传入送给另一个模块的数据,小箭头也指出了传送的 方向。
分解
复杂问题
较小问题
分解 可减小解题所需的总的工作
2018/10/13 18
例:将问题(P1+P2)分解为P1,P2
设函数C(x)定义问题 x 的复杂程度 函数E(x)确定解决问题 x 需要的工作量 对问题P1和P2,如: C(P1) > C(P2) 显然: E(P1) > E(P2) 有规律:C(P1+P2) > C(P1)+C(P2) E(P1+P2) > E(P1)+E(P2)
37
数据耦合举例
开发票 单价 数量 金额
计算水费
38
特征耦合
两个模块与同一个数据结构(包括 若干个数据项)有关。
39
控制耦合
一模块向下属模块传递的信息 (开 关量、标志等控制被调用模块决策的变 量) 控制了被调用模块的内部逻辑。
40
控制耦合举例
B A 平均/最高 (控制信号) B 计算平均分 或最高分 平均/最高? 读入分数
相关文档
最新文档