当前位置:文档之家› 第5章总体设计

第5章总体设计


12
③ 处理方式设计
包括: 功能设计:确定实现功能法,评估算法的性 能. 性能设计:确定实现性能需求必须的算法和模 块间的控制方式
13
5.1 设计的过程
1)系统设计阶段:确定系统的具体解决方案;
⑴ 设想供选择的方案 ⑵ 选取合理方案 ⑶ 推荐最佳方案
2)结构设计阶段:确定软件结构。
⑷ 功能分解 ⑸ 设计软件结构 ⑹ 设计数据库 ⑺ 制定测试计划
“ 模块”
每个模块完成一个特定的子功能;所有模块 按某种方法组成一个整体,完成整个系统所 要求的功能。 软件系统就是通过这些模块的组合来实现。
21
② 模块化的优点
模块化是软件解决复杂问题所具备的手段, 可降低软件复杂性,减少开发工作量,从而 降低开发成本,提高软件生产率,是模块化 的依据。
22
③ 模块化与软件成本的关系
Байду номын сангаас
40
特征耦合举例
说明: “住户情况”是一个数据结构,图中模块都与此 数据结构有关。 “计算水费”和“计算电费”本无关,由于引用 了此数据结构产生依赖关系,它们之间也是标记偶 合。
41
将特征耦合修改为数据耦合举例
42
公共环境耦合
一组模块引用同一个公用数据区(也称全局 数据区、公共数据环境)。 公共数据区指: 全局数据结构。 共享通讯区。 内存公共覆盖区等
⑻ 书写文档 ⑼ 审查和复审
5.1 设计的过程
15
5.1 设计的过程
一.设想供选择的方案
从数据流图与数据字典出发,分析员自由分析比较 不同的物理实现方案,并且力求从中选取最佳方案。 常用方法:自动化边界分组。
二.选取合理的方案
选取低成本、中等成本和高成本三种方案;
结合问题定义、可行性研究的结果、用户意见;
函数 A – 过程 1 函数 A - 过程2 函数 A -过程3
58
模块间内聚的类型
59
总结:耦合、内聚与模块独立性关系
耦合与内聚都是模块独立性的定性标准, 都反映模块独立性的良好程度。 但耦合是直接的主导因素,内聚则辅助耦 合共同对模块独立性进行衡量。 设计要求:低耦合,高内聚
60
一个复杂的系统先用一些高级的抽象概念构造和理解, 这些高级概念又用较低级的概念构造和理解,如此进 行下去,直到具体元素。
26
5 . 2. 3 逐步求精
逐步求精:为了能集中精力解决主要问题而 尽量推迟对问题细节的考虑。 可把逐步求精看作是一项把一个时期内必须 解决的种种问题按优先级排序的技术。 逐步求精是一种自顶向下的设计策略,按这 种设计策略,程序的体系结构是通过逐步精 化处理过程的层次而设计出来的。
51
逻辑内聚
把几种相关功能(逻辑上相似的功能)组合 在一模块内,每次调用由传给模块的参数确 定执行哪种功能。
52
逻辑内聚模块
53
时间内聚(经典内聚)
模块完成的功能必须在同一时间内执行,这 些功能只因时间因素关联在一起。 例:初始化系统模块 系统结束模块、 紧急故障处理模块等
54
过程内聚(顺序性组合)
5 .3 启发规则
改进原则 :高内聚、低耦合 ① 改进软件结构,提高模块独立性 ② 模块规模适中 ③ 深度、宽度、扇出和扇入适中 ④ 将模块的影响限制在控制范围内 ⑤ 降低模块接口的复杂性 ⑥ 设计单入口单出口的模块 ⑦ 模块功能可预测
61
① 改进软件结构,提高模块独立性
通过模块分解或合并,降低耦合提高内聚
43
公共环境耦合举例
模块 A 、 B 、 C 间存在错综复杂的联系
44
公共耦合存在的问题
( 1 )软件可理解性降低 ( 2 )诊断错误困难 ( 3 )软件可维护性差 ( 4 )软件可靠性差
45
内容耦合
有下列情况之一的。是最不好的耦合形式!
46
模块间耦合强度
47
耦合强度依赖的因素:
一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度
模块内各处理成分相关,且必须以特定次序 执行。
55
通信内聚
模块内各部分使用相同的输入数据,或产生 相同的输出结果
56
顺序内聚
一个模块内的成分和同一个功能密切相关,
而且这些处理必须顺序执行。
函数 A 函数 B 函数 C
57
功能内聚
模块仅包括为完成某个功能所必须的所有成 分。 模块所有成分共同完成一个功能,缺一不可 内聚性最强
5
软件设计的两个阶段
第一阶段:概要设计(总体设计) 根据软件需求,设计软件系统结构和数据结 构,确定程序的组成模块及模块之间的相互 关系。 回答“概括地说,系统应该如何实现?”。 其重要性是:站在全局高度,从较抽象的层 次上分析对比多种可能的系统实现方案和软 件结构,从中选出最佳方案和最合理的软件 结构,从而用较低成本开发出较高质量的软 件系统。
第五章 总体设计
《软件工程》
第五章总体设计
5 . 1 设计过程 5 . 2 设计原理 5 . 3 启发规则 5 . 4 描绘软件结构的图形工具 5 . 5 面向数据流的设计方法 5 . 6 小结 习题
2
学习要求
掌握: 1 、软件设计过程中应遵循的基本原理和相 关概念; 2 、描绘软件结构的图形工具的运用; 3 、面向数据流设计方法概念;变换分析、 事务分析法过程和应用。 理解: 1 、典型的总体设计过程包括的步骤; 2 、设计中的启发式规则;
为每一种方案都准备四份材料:系统流程图、组 成系统的物理元素清单、成本/效益分析、实现这个 系统的进度计划。
三.推荐最佳方案
推荐一个最佳的方案,并为其指定详细的实现计划。
由用户、技术专家和部门负责人进行严格审查;
四.功能分解
结合算法对数据流图中的处理进一步分解和细化。 分解的原则是: 分解后的功能比较简单(实现); 对大多数程序员来说都是易懂的;
独立的模块比较容易理解和开发; 独立的模块比较容易测试和维护;
模块独立与否是评价一个设计好坏的重要尺
度。
31
3 、衡量模块独立性的两个准则
① 耦合性( coupling ) ② 内聚性( cohesion )
32
① 耦合性( coupling )
1、耦合
耦合是对一个软件结构内不同模块之间互连程度(相互 依赖程度)的度量 。在软件设计时应该追求松散耦合的 系统。 耦合的强度依赖于以下因素:
九.审查和复查
技术专家对总体设计结果严格审查; 使用部门负责人对总体设计结果严格复查。
5.2 软件设计的原理 主 要 内 容
模块化 抽象 逐步求精 信息隐蔽和局部化 模块独立
前一页
5 . 2 . 1 模块化(Modularity )
① 什么是模块和模块化思想?
采取自顶向下的方式,逐层把软件系统划分 成若干可单独命名和可编址的部分- -
模块间引用(调用); 模块间传递的数据量; 模块间施加的控制数量; 模块间接口复杂度。
① 耦合性( coupling )
设计目标:低耦合
34
a 无直接耦合
两个模块没有直接关系,模块独立性最强。
35
b 数据耦合
属松散耦合。一模块访问另一模块时,通过 数据参数交换输入、输出信息。
36
c 控制藕合
27
自顶向下,逐步求精的基本思想
将功能、信息的说明分为多个层次,最高 层也最抽象 ― 仅仅只是概念性地描述功能或 信息,不提供功能的内部工作情况或信息的 内部结构; 设计者从最高层开始,仔细推敲,进行功 能和信息的细化,给出下层实现的细节; 随着每个后续细化逐步的完成,提供越来 越多的细节,最终得出用程序设计语言表达 的程序。
48
降低耦合度的设计原则
1、根据问题特点,选择合适的 耦合类型。 尽量使用数据耦合,少用控制耦合和外部耦 合,限制公共耦合的范围,完全不用内容耦 合 2 、降低模块接口的复杂性。 减少每个模块的参数个数;尽量使用标准过 程调用方式,少用直接引用的方式;传送的 信息以标准、直接的方式提供。 3 、把模块的通信信息放在缓冲区中。
① 制定规范 ② 设计软件系统结构(简称软件结构) ③ 处理方式设计 ④数据结构及数据库设计 ⑤ 可靠性设计 ⑥ 编写概要设计文档 ⑦ 概要设计评审
10
① 制定规范
为软件开发小组制定在进行软件设计,应该 共同遵守的标准,以便协调组内各员的工作。
11
② 软件结构设计
包括: 将系统按功能划分成模块 确定每个模块的功能 确定模块之间的调用关系 确定模块之间的接口,即模块之间传递的信息 评价模块结构的质量
五.设计软件结构
把分解得到的软件模块按照调用关系组织成良好的层 次结构,最上层模块完成完整功能,最下层模块完成 最具体功能。 可以直接从数据流图映射出软件的结构。
六.数据库设计(如果需要) 七.制定测试计划
在设计时提高软件的可测试性;
八.书写文档
记录总体设计的结果: 系统说明:系统组成、最佳解决方案和模块的描述; 用户手册:修改需求分析阶段产生的初步用户手册; 测试计划:测试策略,测试方案,预期的测试结果, 测试进度等; 详细的实现计划 数据库设计结果:数据库的逻辑、物理模型。
28
结合了模块化和逐步细化思想建立的软件结构图
29
5.2.4 信息隐藏和局部化
• 信息隐藏原理:模块中内包含的信息(过程
和数据)不允许其它不需要这些信息的模块访 问。
• 信息局部化:把一些关系密切的软件元素物
理地放得彼此靠近。
• 信息局部化有利于信息隐藏。
30
5. 2 . 5 模块独立
1 、什么是模块独立性( module independence) 模块只完成系统要求的相对独立的功能 符合信息隐蔽原则 模块间关联和依赖程度尽量小 2 、模块独立的优点
相关主题