软件工程 第5章:总体设计

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

软件模块化设计的指导思想
分解、抽象、逐步求精 信息隐蔽、模块独立
16
3.模块的基本属性
接口
功能 逻辑 状态
面向对象方法学中的对象是模块
4. 模块的特点
① 输入输出
② 功能
外部特性
③ 内部数据
④ 程序代码
内部特性
一般先确定外部特性,再确定内部特性
15
5. 模块化理论
设:C(x)为问题x的复杂程度
通信内聚
过程内聚 时间内聚
个模块设计,出现偶然内聚。 如果一个模块由完成若干毫无关系 的功能处理元素偶然组合在一起的,
逻辑内聚 偶然内聚
就叫偶然内聚。
偶 然 内 聚
逻 辑 内 聚
时 间 内 聚
3分
过 程 内 聚
通 信 内 聚
顺 序 内 聚
功 能 内 聚
10分
0分 1分
5分 7分 9分
原则:力求做到高内聚,尽量少用中内聚, 不用低内聚。
2、什么是模块化? 模块化:是把程序划分成若干个模块,每个模块完
成一个子功能,把这些模块集总起来组成一个整体,
可以完成制定的功能。
思维模式:问题分解
系统成本=模块成本+模块接口成本
选择一个适当的模块数目是软件成功的关键
最小成本区 成 本
软件总成本
接口成本
模块成本 模块数目
模块化与软件成本
18
特点:先分解,然后再集成
抽象的作用:只考虑事物本质的共性,而暂不考虑
的细节及其它因素。
2、软件工程中的抽象
①可行性研究阶段:是计算机系统的一个元素
②需求分析阶段:使用问题环境中的术语来描述
③概要设计、详细设计阶段:将面向问题的术语和
面向实现的术语结合起来描述解决方法。
④编码阶段:最低层抽象层次,直接叙述问题的解
决方法。
三、逐步求精
3. 推荐最佳方案
分析员应该综合分析对比各种合理方案的利弊,
推荐一个最佳的方案,并且为推荐的方案制定详细
的实现计划。
4.制定规范 制定设计时应共同遵守的标准 例:各部门文档统一编号,各部门机器 接口等统一编号,等等。
5. 软件结构设计
(1)模块化(按功能划分,简单化) (2)确定模块的功能 (3)确定模块间调用关系 (4)确定模块间的接口(信息传递) (5)评价模块结构质量
局部化:把关系密切的软件元素在物理上就近存放
五、模块独立
定量标准
耦合:衡量不同模块彼此间互相依赖的紧密程度; 内聚:衡量一个模块内部各个元素彼此结合的紧密 程度。
1. 耦合性(块间联系)
低———————耦合性—————————高
非 直 接 耦 合
数 据 耦 合
控 制 耦 合
特 征 耦 合
(避免)
外 部 耦 合
公 共 耦 合
内 容 耦 合
(不可能)
(不允许出现)
强——————模块独立性————————弱
内容耦合 公共耦合
A 参数 B
外部耦合
特征耦合 控制耦合
模块间通过参数交换信息(且 仅是数据) 是最低程度的耦合
数据耦合
非直接耦合
模块间不传递任何信息
内容耦合 公共耦合
a B
A
外部耦合
数据耦合
非直接耦合
内容耦合 公共耦合
定义:当两个或两个以上的模块通
过一个公共数据环境相互作用时,
外部耦合
特征耦合 控制耦合
它们之间的耦合称为公共环境耦合,
也称公共耦合或外部耦合。 公共环境:全程变量、共享的通信 区、内存的公共覆盖区、任何存储
数据耦合
非直接耦合
介质上的文件、物理设备等。
内容耦合 公共耦合
特征耦合 控制耦合
status C
D
模块B传来的信息决定了A执行C还是D
数据耦合
非直接耦合
模块间交换的信息包含控制信息 是中等程度的耦合 不提倡使用控制耦合 模块适当分解后用数据耦合代替
内容耦合 公共耦合
外部耦合
特征耦合 控制耦合
又称标记耦合 传递的是数据结构的地址 可能导致数据的访问失控,给 计算机犯罪提供了机会 尽量避免
外部耦合
特征耦合 控制耦合
数据耦合
非直接耦合
内容耦合表现:
一个模块访问另一个模块的内部数据; 一个模块未通过正常入口进入另一个模块的内部; 两个模块有部分代码重叠; 一个模块有多个入口(多个功能)。
Leabharlann Baidu
耦合原则
软件设计应追求尽可能松散耦合,避免强 耦合,这样模块间的联系就越小,模块的独立
性就越强,对模块的测试、维护就越容易。
偶 然 内 聚
逻 辑 内 聚
时 间 内 聚
过 程 内 聚
通 信 内 聚
顺 序 内 聚
功 能 内 聚
弱——————模块独立性————————强
功能内聚 顺序内聚
如果一个模块内所有处理元素完 成一个功能,则称为功能内聚。 是最高程度的内聚 实际中,并不是每个模块都能 设计成一个功能内聚模块
通信内聚
过程内聚 时间内聚
2、设计软件的结构——确定系统中每个程序的组
成模块,及模块间的关系。
5.1 设计过程
5.2 设计原理 5.3 启发规则 5.4 软件结构图形 5.5 面向数据流的设计方法
1
5.1 设计过程
两个主要阶段
系统设计阶段:确定系统的具体实现方案;
结构设计阶段:确定软件结构。
典型的总体设计过程的11个步骤 1. 设想供选择的方案
在各种可能的实现方案中选出最佳方案 最好的出发点:需求分析得出的数据流图 通常至少提供或选取低、中和高三种成本方案。
2. 选取合理的方案
提出低、中、高三种备选方案
依据:工程规模和目标,征求用户意见
每个方案应准备4份资料:
(1)系统流程图; (2)系统物理元素清单; (3)成本/效益分析; (4)系统的进度计划。
5.3 启发规则
人们在软件开发的实践中积累了很多经验, 总结这些经验得出了一些启发式规则。这些规则 虽然不像基本原理和概念那样普遍适用,但在许
多场合仍能给我们很多有益的启示,帮助我们找
到改进设计、提高质量的途径。
1、提高结构独立性
多个高耦合度的模块(复杂度低),考虑合并 多个模块公有的子功能,考虑独立模块调用 相关模块的功能分析,消除重复功能
1、什么是逐步求精? 为了能集中精力解决主要问题而尽量推 迟对问题细节的考虑
2、逐步求精的理论依据
Miller法则
一个人在任何时候都只能把注意力集中
在(7±2)个知识块上
四、 信息隐藏和局部化
信息隐蔽原理 设计模块时,调用模块只能访问被调用模块内 自己需要的信息(过程和数据),而不是全部。 局部化原理
③ 下移受判断影响的模块
5. 降低模块接口的复杂度
模块接口复杂是软件发生错误的一个主要原因。 模块的接口要简单、清晰、含义明确,便于理解, 易于实现、测试与维护。 讨论:求一元二次方程的根的模块: 模块1:Quad_Root(TBL,X)。其中数组TBL传送方程 的系数,用数组X回送求得的根。 模块2:Quad_Root(A,B,C,Root1,Root2)。其中A、B、 C是方程的系数,Root1,Root2是算出的两个根
不能违背模块独立原理单纯追求高扇入
经验:顶层扇出比较高,中层扇出较少,底 层模块扇入较高。
扇出、扇入过大的改进
4. 模块的作用域应在控制域之内
作用域:受该模块内一个判定影响的所有模块的集合
控制域:模块本身以及所有直接或间接从属于它的模 块的集合
改进方法:
① 上移判断点
② 判断所在的模块与父模块合并
软件设计任务
从工程管理的角度看,软件设计分两步完成。
总体设计(概要设计)
——将需求转化为数据结构和系统结构 详细设计(过程设计) ——通过结构的细化,得到详细的数据结构和算法
总体设计阶段两个任务
1、划分出组成系统的物理元素——程序、文件、
数据库、人工过程和文档等,但每个物理元素仍
然处于黑盒级(具体内容在详细设计时展开)
宽度越大系统越复杂
影响宽度的最大因素——扇出
扇出:是一个模块直接控制(调用)的模块数目 经验:典型系统的平均通常是3或4(上限5~9) 常见问题及改进:
扇出太大时,适当增加中间层次的控制模块
扇出太小时,进一步分解成下级模块,或者合并
到它的上级模块中去(不能违背模块独立原理)
扇入:有多少上级模块直接调用 扇入越大,则共享该模块的上级模块数目 越多,模块通用性越强。
易维护性
9. 制定测试计划
能促使设计人员在设计时注意提高软件的可测试性。
10. 书写文档
(1) 总体设计说明书
系统流程图、物理元素清单、成本/效益分析
最佳方案的概括描述,精化的数据流图,用层次图
或结构图描绘的软件结构,用IPO图或其他工具 简要描述的各个模块的算法,模块间的接口关系, 以及需求、功能和模块三者之间的交叉参照关系
功能内聚 顺序内聚
如:模块的初始化 故障处理模块 紧急故障 处理模块
通信内聚
过程内聚 时间内聚
1.关闭文件 2.报警 3.保留现场
逻辑内聚 偶然内聚
如果一个模块包含的任务必须在同 一段时间内执行,称为时间内聚。 也称为瞬时内聚。
需要有一个功能开关
功能内聚 顺序内聚
增加了模块之间的联系,不 易修改,内聚性较差。
6. 处理方式设计 ① 功能与性能的算法 ② 模块的控制方式 ③ 信号的接收发送形式
7. 数据结构及数据库设计
(1)数据结构的设计
数据设计是把分析模型中的信息描述转换为实体
软件所需要的数据结构。
(2)数据库设计 选用哪一种数据库?
8、可靠性设计(也称质量设计)
确定软件可靠性和质量指标,考虑质量措施。
2. 模块规模应该适中
心理学角度
当一个模块包含的语句数超过30以后, 模块的可理解程度迅速下降。
建议: 最好能写在一页纸内(不超过60行语句)
3. 深度、宽度、扇出和扇入应适当
深度: 控制的层数 (系统的大小 和复杂程度) 层数过多+模
块相对简单→
适当合并
宽度:软件结构内同一个层次上的模
块总数的最大值
等。
(2) 用户手册(需求分析阶段的初步的用户手册)
(3) 制定测试计划(测试策略,测试方案,预期的测 试结果,测试进度计划) (4) 详细的实现计划 (5) 数据库设计说明
11. 审查和复审
5.2 设计原理 一、 模块化
1、什么是模块?
具有输入输出、逻辑功能、运行程序和内部数据这 四种属性的一个程序。 特点:单独命名且可以通过名字来访问 (过程、函数、子程序、宏)
逻辑内聚 偶然内聚
功能内聚 顺序内聚
如果一个模块内处理元素与同一个
功能密切相关,且这些处理元素必
须顺序执行,则称为顺序内聚。
通信内聚
过程内聚 时间内聚
求一元二次 方程根模块
1.输入方程系数 2.求解
3.打印方程的解
逻辑内聚 偶然内聚
功能内聚 顺序内聚
如果一个模块中所有处理元素都使 用同一个输入数据和(或)产生同 一个输出数据,称为通信内聚,也 称数据内聚。
第5章 总体设计
数据 对象 描述
加工 实体数据 规约 关系 流图 数据 图 字典
过程 设计 接口设计 体系结构设计
状态转换图
控制规约
数据设计
分析模型
软件
信息域需求
设计 功能与性 能需求
数据 设计
系统结构设计
过程设计
编码
程序模块
测试
开发阶段的信息流
有效的软件
软件设计是后续开发步骤及软件维 护工作的基础。如果没有设计,只能建 立一个不稳定的系统结构。
通信内聚
过程内聚 时间内聚
X A Y B Z C
合并
X
Y ABC
Z
逻辑内聚 偶然内聚
如果模块完成的任务在逻辑上相同 或相似,称为逻辑内聚。
功能内聚 顺序内聚
A
B
C
是最差的一种内聚
W模块 常见的情形:在写完程序时,发 X=Y+Z GET CARD 现一组语句在多处出现,于是为 IF I=5 THEN E=0 … 了节省空间而将这些语句作为一
从文件FILE中读出数据
通信内聚
过程内聚 时间内聚
A
1.由数据产生报表A 2.由数据产生报表B
逻辑内聚 偶然内聚
功能内聚 顺序内聚
过程内聚Vs.顺序内聚 数据流
单元
控制流
单元
通信内聚
过程内聚 时间内聚
动作
动作
逻辑内聚 偶然内聚
如果一个模块内的处理元素是相关 的,而且必须以特定的次序执行, 称为过程内聚
A B C 全程数 据区 D
外部耦合
特征耦合 控制耦合
E
会给错误诊断带来困难,使软
件的可维护性、可理解性降低
数据耦合
非直接耦合
内容耦合 公共耦合
定义:一个模块与另一个模块 的内容直接发生联系
高度的耦合 对维护带来严重的困难 应坚决避免使用 许多高级程序设计语言不允许 出现任何形式的内容耦合
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)
二、抽象
1、什么是抽象?
抽象是认识复杂现象过程中使用的思维工具
耦合是影响软件复杂程度的一个重要因素 提高模块独立性,降低耦合度的措施
(1)耦合方式上:降低模块间接口的复杂性(接口
方式、接口信息、参数个数)
(2)传递信息类型上:尽量使用数据耦合,少用控
制耦合和特征耦合,限制公共环境耦合的范围,完
全不用内容耦合。
2. 内聚
理想的内聚是 一个模块只做 一件事情
低———————内聚性—————————高
相关文档
最新文档