软件工程第5章1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模块独立的概念是模块化,抽象,信息隐藏和局 部化概念的直接结果. 模块独立性重要的理由:第一,有利于软件实现; 第二,有利于维护测试. 衡量模块的独立程度的定性标准度量: 内聚和耦合. 模块独立性比较强的模块应该是具有高内聚性和 的低耦合度。
耦合
1、定义:是对一个软件结构内不同模块之间互连程 序的度量.耦合强弱取决于模块间接口的复杂程度, 进入或访问一个模块的点,以及通过接口的数据. 模块分解的一个目标是使块间联系尽可能小,块间联 系的大小可从三个方面衡量 ① 方式 — 块间联系方式有“直接引用”或 “用过程语句调用”。 ② 作用 — 块间传送的共用信息(参数)类型, 可为“数据型”、“控制型”或“混合型”(数 据/控制型)。 ③ 数量 — 块间传送的共用信息的数量。
5.1 设计过程 总体设计过程通常由两个主要阶段组成:系统设计阶段, 确定系统的具体实现方案;结构设计阶段,确定软件结 构。典型的总体设计过程包括下述9个步骤:
1.设想供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.设计数据库 7.制定测试计划 8.书写文档 9.审查和复审
修 改 修 改
需求 说明书
总体 设计
复审
软件结构
可接受
详细 设计
复审
模块描述
设计 说明书
软件设计工作流程
总体设计的基本目的:进行系统设计和结构设计. 系统设计:确定系统的具体实现方案; 结构设计:确定软件结构.
软件设计阶段的任务可分为三部分: 1、划分模块,确定软件结构 2、确定系统的数据结构 3、设计用户界面
输出 状态标志
零件制造商
t
u
6
零件编号
零件名称
一个程序的模块互连图
三、启发式规则 1、改进软件结构提高模块独立性 2、模块规模应该适中
3、深度、宽度、扇出和 扇入都应适当 深度:表示软件结构中 控制的层数。 宽度:是软件结构中同 一个层次上的模块总数 的最大值。 扇出:是一个模块直接 控制(调用)的模块数 目。 扇入:有多少个上级 模块直接调用它。
有人说,模块化是为了使一个复杂的大型程序能被人的智力所 管理,软件应该具备的惟一属性。如果一个大型程序仅由一个 模块组成,它将很难被人所理解。下面根据人类解决问题的一 般规律,论证上面的结论。 设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需 要的工作量(时间)。对于两个问题P1和P2,如果C(P1)>C(P2) 显然E(P1)>E(P2) 根据人类解决一般问题的经验,另一个有趣的规律是 C(P1+P2)>C(P1)+C(P2) 也就是说,如果一个问题由P1和P2两个问题组合而成,那么它 的复杂程度大于分别考虑每个问题时的复杂程度之和。 综上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2) 这个不等式导致“各个击破”的结论——把复杂的问题分解成 许多容易解决的小问题,原来的问题也就容易解决了。这就是 模块化的根据。
MOVE A TO B READ CARD FILE MOVE C TO D 偶然型模块
逻辑型模块 2、逻辑型(Logical Cohesion) 将几个逻辑上相似的功能放在一个模块中,调用时由调用 模块传递的参数确定执行的功能。由于要进行控制参数的传递, 必然要影响模块的内聚性。如图所示由调用模块传递的参数, 经过判定后,才能确定是进行读还是进行写操作。
常用的设计方法有:SD法、Jackson法、HIPO法、 Warnier法等。
软件结构是软件模块之间关系的表示,它决定了整 个系统的结构,也确定了系统的质量。模块之间的 关系可有多种,但都可以归结为一种层次关系。软 件结构表示软件系统的构成,是软件模块间关系的 表示. 本节讨论如何进行软件结构的设计,设计的准则以 及为了提高软件系统的质量.
4、模块的作用域应该在控制域之内 作用域:定义为受该模块内一个判定影响 的所有模块的集合。 控制域:是这个 模块本身以及所有直接或 间接从属于它的模块的集合。
5、力争降低模块接口的复杂程度 6、设计单入口单出口的模块 7、模块功能应该可以预测
5.4
描绘软件结构的图形工具
(一)层次图和HIPO图
顺序型
功能型 强
偶然型 内聚性 弱
逻辑型
时间型 过程型
通信型
1、偶然型(Coincidental Cohesion) 又称为巧合型,为了节约空间,将毫无关系(或者联系不 多)的各成分放在一个模块中。这样的模块显然不易理解,不 易修改。
调用模块 判定
读 一 个 记 录 写 一 个 记 录
P
Q
R T 被 调 用 模 块
3、特征耦合(Stamp Coupling) 一个模块传送给另一个模块的参数是一个复合的 数据结构。例如,包含几个数据单项的记录。 4、控制耦合(Control Coupling) 一个模块传递给另一模块的信息是 用于控制该模块内部逻辑的控制信号。 显然,对被控制模块的任何修改,都 会影响控制模块。
第5章 5.1 5.2 5.3 5.4 5.5 5.6 习题
总体设计 设计过程 设计原理 启发规则 描绘软件结构的图形工具 面向数据流的设计方法 小结
从工程管理的角度来看,软件设计分两步完成;分为 总体设计(概要设计)和详细设计两个阶段。首先做 概要设计,将软件需求转化为数据结构和软件的系统 结构。然后是详细设计,即过程设计。通过对结构表 示进行细化,得到软件详细的数据结构和算法。
A B 深度
I
扇出为3
C F
K
D G L
扇入为2
1层
H M 2层 3层
E
J
N
扇入为3
宽度 软件结构示意图
练习1:在软件结构化设计中,好的软件结构设 计应该力求做到( ) A.顶层扇出较少,中间扇出较高,底层模块低扇入 B.顶层扇出较高,中间扇出较少,底层模块高扇入 C顶层扇入较少,中间扇出较高,底层模块高扇入 D.顶层扇入较少,中间扇入较高,底层模块低扇入
三、逐步求精
逐步求精:为了能集中精力解决主要问题而尽量推 迟对问题细节的考虑. 抽象和求精是设计者在设计过程中解决问题的基本 方法.
(四)信息隐藏和局部化
信息隐藏原理指出:设计和确定模块,应使得一个模 块内包含的信息(过程和数据)对于不需要这些信息 的模块来说,是不能访问的. 局部化:是指把一些关系密切的软件元素物理地放 得彼此靠近.
求解方程的功能模
块
下图是某校系统的一部分 (1)和(2)分别是同一模块的两个不同设计方案 评价一下哪种方案最佳? 为什么?
班级 / 成绩汇总
班级 / 成绩汇总
甲
取班级成绩
平均/最高 成绩
甲 取班级成绩
平均成绩
最高成绩
乙
取平均成绩 或最高成绩
(1)
乙1 取平均成绩
(2)
乙2 取平均成绩
练习:分析下图的层次图,确定每个模块的内聚类型
5.2
设计原理
一、模块化 1、模块:是由边界元素限定的相邻程序元素的序列, 而且有一个总体标识符代表它.模块是程序对象有 名字的集合 2、模块化:把程序划分成独立命名且可独立访问的 模块,每个模块完成一个子功能. 模块化的目的是将系统“分而治之”,模块化 能够降低问题的复杂性,使软件结构清晰,易阅 读、易理解,易于测试和调试,因而也有助于提 高软件的可靠性。
A
Flag
f1 f2
B
... fn
5、数据耦合(Data Coupling) 一个模块传送给另一个模块的参数是一个单个的数 据项或者单个数据项组成的数组。
内聚
内聚:一个模块内各个元素彼此结合的紧密程序., 理想内聚的模块只做一件事情. 设计原则:力求做到高内聚,通常中等程度的内聚 也是可以采用的,而且效果和高内聚相差不多;但是 低内聚很坏,不要使用.
Entry1
A
B
A
B
…. Entry2 ….
多重入口
进入另一模块内
部分代码重迭
2、公共耦合(Common Coupling) 若干模块访问一个公共的数据环境,则它们之间 的耦合称为公共耦合。公共环境可为全局数据结构、 共享的通信区、内存的公共覆盖区等。显然,公共 数据区的变化,将影响所有公共耦合模块,严重影 响模块的可靠性和可适应性,降低软件的可读性。
模块分解的一个目标是使块间联系尽可能小,达 到这个目标可通过以下措施。 ⑴每个模块用过程语句(或函数方式等)调用 其他模块。 ⑵模块间传送的参数为数据型。 ⑶模块间公用的信息(如参数等)尽量少。
内容耦合 耦合性 高
公共耦合 特征耦合
控制耦合 数据耦合 低
1、内容耦合(content coupling) 一个模块直接访问另一模块的内部数据。 一个模块不通过正常入口转到另一模块的内部。 一个模块有多个入口。 两个模块有部分代码重迭。
⑵调用:从一个模块指向另一个模块的箭头表示前 一模块对后一模块的调用,一般是上层调用下层。 ⑶数据:调用箭头边上的小箭头表示调用时从一 个模块传送给另一模块的数据。通常在短箭头附 近应注有信息的名字,
控制
数据
模块1
values
data
模块2
values data data data
模块3
模块4
模块5 模块5
(五)模块独立
⑴功能 即指该模块实现什么功能,做什么事情。 必须注意,这里所说的模块功能,应是该模块本 身的功能加上它所调用的所有子模块的功能。 ⑵逻辑 即描述模块内部怎么做。 ⑶状态 即该模块使用时的环境和条件。 所谓模块的独立性,是指软件系统中每个模块只 涉及软件要求的具体的子功能,而和软件系统中 其他模块的接口是简单的。即功能专一,模块之 间无过多的相互作用的模块。
计算多地点日平均温度的程序
计算多个地点 的日平均温度
初始化变量SUM 并打开文件
创建新的 温度记录
存储温度
关闭文件并 打印平均温度
读取地点、时 间和温度
计算特定地点的 日平均温度
分析下图,确定模块之间的耦合类型(p,t,u之间共用 一个数据库)
P 1
q 4
3 r 5 s
2
6
编 输入 号 1 飞机类型 2 飞机零件清单 3 功能代码 4 飞机零件清单 5 零件编号
但是,模块的数量应适当。
图5.1 模块化和软件成本
采用模块化原理的好处: 1、使软件结构清晰,不仅容易设计也容易阅读 和理解; 2、能够提高软件的可靠性; 3、能够提高软件的可修改性; 4、有助于软件开发工程的组织管理;
二、抽象 抽象:人类在认识复杂现象的过程中使用的 最强有力的思维工具,是对现实世界中一定事 物、状态或过程之间存在的某些相似的方面 (共性) 的集中和概括,并暂时忽略它们之间 的差异,或者是指出事物的本质特性而暂时不 考虑它们的细节.
累加 结果 打印
顺序型模块
顺序型模块,编辑功能的输入是读入功能的 输出,打印功能的输入是累加功能的输出。
7、功能型(Sequential Cohesion) 一个模块包括而且仅包括完成某一具 体功能所必须的所有成分。或者说,模块 的所有成分都是为完成该功能而协同工作、 紧密联系、不可分割的。 例如仅完成以下功能的模块为功能模块: A 求一元二次方程 ● 求平方根 ● 求解一元二次方程 ● 计算利息 B 求平方根 ● 判素数
(二)结构图
结构图(Structure Chart,简称SC图)是精确表达 软件结构的图形表示方法,它以特定的符号表示模 块、模块间的调用关系和模块间信息的传递。结构 图的主要构成有: ⑴模块(Module):用矩形框表示,框中写有模块 的名字,说明模块的功能。模块是程序对象有名字 的集合。例如:过程、函数、子程序、宏等。
3、时间型(Temporal Cohesion) 将需要同时执行的成分放在一个模块中,因为模 块中的各功能与时间有关,因此又称为时间内聚 或经典内聚。 4、过程型 如果一个模块内的处理元素是相关的,而且必须以 特定次序执行。
wk.baidu.com
5、通信型(Communicational Cohesion) 模块中的成分引用共同的输入数据,或者产生 相同的输出数据,则称为是通信内聚模块。
模块调用图
调用次序为上层调用下层; 同层按照数据传递 关系确定;一般从左到右执行。 执行过程即按照数据流向进行。
A
打印 报告1 打印 报告2 打印 报告2 打印 删除
B
存入
C
修改 打印
(a)
(b)
通信型模块
(c)
6、顺序型(Sequential Cohesion) 模块中某个成分的输出是另一成分的输入。由于 这类模块无论数据还是执行顺序,模块中的一部分依 赖于另外一部分。因此具有较好的内聚性。
A
读入
数据
B
编辑