第05章 总体设计.ppt_第1页
第05章 总体设计.ppt_第2页
第05章 总体设计.ppt_第3页
第05章 总体设计.ppt_第4页
第05章 总体设计.ppt_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章总体设计 需求分析 做什么 设计 怎么做 总体设计 概括的说 系统应该如何实现 第5章总体设计 5 1设计过程5 2设计原理5 3启发规则5 4描述软件结构的图形工具5 5面向数据流的设计方法 5 1设计过程 2个主要阶段 具体分为9个步骤 系统设计阶段 确定系统的具体实现方案结构设计阶段 确定软件结构 5 1设计过程 1 设想供选择的方案 从数据流图出发2 选取合理的方案 低 中 高成本3 推荐最佳方案4 功能分解 细化数据流图5 设计软件结构 模块组织成层次结构6 设计数据库 从E R图出发7 制定测试计划8 书写文档 系统说明 用户手册 测试计划 实现计划 数据库设计结果9 审查和复审 技术审查 客户管理审查 5 2设计原理 模块化抽象逐步求精信息隐藏和局部化模块独立 5 2设计原理 1 模块化 Modularity 模块化是好的软件设计的一个基本准则高层模块 从整体上把握问题 隐蔽细节复杂问题较小问题分解可减小解题所需的总的工作 分解 1 模块化 Modularity 模块是构成程序的基本构件 模块化就是把程序划分成独立命名且可独立访问的模块 每个模块完成一个子功能 把这些模块集成起来构成一个整体 可以完成指定的功能 满足用户的需求 例 将问题 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 P1 E P2 各个击破 理论 模块数量 软件总成本 M 最小成本区域 接口成本 成本或工作量 模块化和软件成本 成本 模块 2 抽象 抽象 抽出事务的本质特性而暂不考虑它们的细节 人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象 人们在实践中认识到 在现实世界中一定事物 状态或过程之间总存在着某些相似的方面 共性 把这些相似的方面集中和概括起来 暂时忽略它们之间的差异 这就是抽象 软件过程的每一步都是对软件解法的抽象层次的一次精化 3 逐步求精 人类解决复杂问题时采用的基本技术 定义 为了能集中精力解决主要问题而尽量推迟对问题细节的考虑 Miller法则 一个人在任何时候都只能把注意力集中在7 2个知识块上 自顶向下的设计策略 细化的过程 抽象与求精是一对互补的概念 4 信息隐藏和局部化 模块所包含的信息 不允许其它不需要这些信息的模块访问 独立的模块间仅仅交换为完成系统功能而必须交换的信息 信息隐藏原理 应该这样设计和确定模块 使得一个模块内包含的信息 过程和数据 对于不需要这些信息的模块来说 是不能访问的 局部化原理 一些关系密切的软件元素物理的放的彼此靠近 信息隐藏和局部化的目的 提高模块的独立性 减少修改或维护时的影响面 5 模块独立 1 模块独立性的概念模块独立的概念是模块化 抽象 信息隐藏和局部化概念的直接结果 模块独立的含义 模块完成独立的功能符合信息隐蔽和信息局部化原则模块间关连和依赖程度尽量小 模块的独立性是软件质量的关键 1 模块化程度较高的软件容易开发 2 模块化程度较高的软件也比较容易测试和维护 2 模块独立性的度量模块独立性取决于模块的内部和外部特征 SD方法提出的定性的度量标准 模块之间的耦合性模块自身的内聚性 模块独立性的度量之一 耦合性模块间相对独立性 相互依赖程度 的度量 耦合性越高 模块独立性越弱 松散耦合 有少量依赖关系 紧密耦合 有很多依赖关系 无耦合 没有依赖关系 耦合强度依赖的因素 一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度 模块间耦合的类型 低耦数据耦合合特征耦合性控制耦合公共耦合内容耦合高 模块独立性 弱 低耦合 强 中耦合 较强耦合 强耦合 1 数据耦合 一模块调用另一模块时 被调用模块的输入 输出都是简单的数据 若干参数 属松散耦合 数据耦合举例 开发票 计算水费 单价数量 金额 2 特征耦合 标记耦合 如两个模块通过传递数据结构 不是简单数据 而是记录 数组等 加以联系 或都与一个数据结构有关系 则称这两个模块间存在特征耦合 特征耦合举例 计算水电费 计算水费 计算电费 住户情况 水费 电费 住户情况 住户情况 是一个数据结构 住户的用水用电情况 图中模块都与此数据结构有关 计算水费 和 计算电费 本无关 由于引用了此数据结构产生依赖关系 它们之间也是标记偶合 将特征耦合修改为数据耦合举例 计算水电费 计算水费 计算电费 本月用水量 本月用电量 水费 电费 3 控制耦合 一模块向下属模块传递的信息 开关量 标志等控制被调用模块决策的变量 控制了被调用模块的内部逻辑 控制耦合举例 A 计算平均分或最高分 B 平均 最高 控制信号 成绩 读入分数 输出结果 计算平均分 计算最高分 平均 最高 B 控制耦合增加了理解和编程的复杂性 调用模块必须知道被调模块的内部逻辑 增加了相互依赖 去除模块间控制耦合的方法 1 将被调用模块内的判定上移到调用模块中进行 2 被调用模块分解成若干单一功能模块 改控制耦合为数据耦合举例 A 计算平均分 B1 平均成绩 最高成绩 计算最高分 B2 4 公共耦合 公共环境耦合 一组模块引用同一个公用环境 也称全局数据区 公共数据环境 公共环境指 全局数据结构共享通讯区内存公共覆盖区等 公共耦合举例 公共数据区 C B 模块A B C间存在错综复杂的联系 1 软件可理解性降低 2 诊断错误困难 3 软件可维护性差 4 软件可靠性差 公共数据区及全程变量无保护措施 慎用公共数据区和全程变量 公共耦合存在的问题 5 内容耦合 一模块直接访问另一模块的内部信息 程序代码或数据 最不好的耦合形式 A B A B 模块代码重叠 Entry1 Entry1 多入口模块 模块化设计的原则和目标 耦合是影响软件复杂程度和设计质量的重要因素 目标 建立模块间耦合度尽可能松散的系统 如何降低模块间耦合度 1 尽量使用数据耦合 少用控制耦合和特征耦合 限制公共环境耦合的范围 完全不用内容耦合 2 降低接口的复杂性 模块独立性的度量之二 内聚性 一个模块内各元素彼此结合的紧密程度 设计目标 高内聚 模块在软件过程中完成单一的任务 高内聚往往意味着低耦合 模块的内聚性类型 低偶然内聚0分逻辑内聚1分内时间内聚3分聚过程内聚5分性通信内聚7分顺序内聚9分高功能内聚10分 模块独立性 弱 功能分散 强 功能单一 1 偶然内聚 巧合内聚 模块内各部分间无联系 A B C M MOVEOTORREADFILEFMOVESTOT 模块M中的三个语句没有任何联系缺点 可理解性差 可修改性差 例 偶然内聚为了节省存储 把它们抽出来组成一个新的模块 这个模块就属于偶然内聚 这样的模块不易理解也不易修改 这是最差的内聚情况 2 逻辑内聚 把几种相关功能 逻辑上相似的功能 组合在一模块内 每次调用由传给模块的参数确定执行哪种功能 逻辑内聚模块 A B C E F G A B C EFG A1 B1 C1 EFG模块内部逻辑 E F G逻辑功能相似 组成新模块EFG 缺点 增强了耦合程度 控制耦合 不易修改 效率低 公用代码段 公用代码段 3 时间内聚 经典内聚 模块完成的功能必须在同一时间内执行 这些功能只因时间因素关联在一起 例如 初始化系统模块 系统结束模块 紧急故障处理模块等均是时间性聚合模块 时间内聚比逻辑内聚程度高一些 因为时间内聚模块中的各部分都要在同一时间内完成 但是由于这样的模块往往与其他模块联系的比较紧密 如初始化模块对许多模块的运行有影响 因此和其他模块耦合的程度较高 4 过程内聚 顺序性组合 模块内各处理成分相关 且必须以特定次序执行 使用流程图为工具设计软件时 往往得到过程内聚的模块 过程内聚模块 读入成绩单 审查成绩单 统计成绩 打印成绩 读入并审查成绩单 统计并打印成绩单 5 通信内聚 指模块内所有处理元素都在同一个数据结构上操作 有时称之为信息内聚 或者指各处理使用相同的输入数据或者产生相同的输出数据 如一个模块完成 建表 查表 两部分功能 都使用同一数据结构 名字表 又如一个模块完成生产日报表 周报表和月报表 都使用同一数据 日产量 通信内聚模块例 产生工资报表 计算平均工资 职工工资记录 职工工资报表 平均工资 产生职工工资报表并计算平均工资模块 通信内聚模块 符号表 查找 登录 删除 修改 几个加工同时引用一个共同的数据 6 顺序内聚 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行 前一功能元素的输出就是下一功能元素的输入 例如 某一模块完成求工业产值的功能 前面部分功能元素求总产值 随后部分的功能元素求平均产值 显然 该模块内两部分紧密相关 7 功能内聚 模块仅包括为完成某个功能所必须的所有成分 模块所有成分共同完成一个功能 缺一不可 内聚性最强 内聚与耦合密切相关 同其它模块高耦合的模块意味着低内聚 高内聚模块意味着与其它模块间松散耦合 设计目标 力争高内聚 低耦合 耦合 内聚与模块独立性关系 耦合与内聚都是模块独立性的定性标准 都反映模块独立性的良好程度 但耦合是直接的主导因素 内聚则辅助耦合共同对模块独立性进行衡量 软件工程师们在开发计算机软件的长期实践中积累了丰富的经验 总结这些经验得出了一些启发规则 这些启发规则虽然不像前两节讲述的基本原理那样普遍适用 但是在许多场合仍然能给软件工程师有益的启示 往往能帮助他们找到改进软件设计提高软件质量的途径 因此有助于实现有效的模块化 下面介绍几条常用的启发规则 5 3启发规则 1 改进软件结构提高模块独立性2 选择合适的模块规模3 模块的深度 宽度 扇出和扇入应适当4 模块的作用范围应该在控制范围之内5 降低模块接口的复杂程度6 设计单入口单出口的模块7 模块功能应该可以预测 5 3启发规则 1 改进软件结构提高模块独立性 划分模块时 尽量做到高内聚 低耦合 保持模块相对独立性 并以此原则优化初始的软件结构 1 如果若干模块之间耦合强度过高 每个模块内功能不复杂 可将它们合并 以减少信息的传递 公共数据的引用并降低接口复杂度 2 多个模块公有的一个子功能可以独立成一个模块 供这些模块调用 2 模块规模应该适中在考虑模块的独立性同时 为了增加可理解性 模块的大小最好在30 50条语句左右 可以用1 2页打印纸打印 便于人们阅读与研究 过大的模块往往是由于分解不够充分 过小的模块开销大于有效操作 而且模块数目过多将使系统接口复杂 无论是分解还是合并 都必须符合 高内聚 低耦合 原则 3 深度 宽度 扇入 扇出适中深度是软件结构设计完成后观察到的情况 能粗略地反映系统的规模和复杂程度 宽度也能反映系统的复杂情况 宽度与模块的扇出有关 一个模块的扇出太多 说明本模块过分复杂 缺少中间层 单一功能模块的扇入数大比较好 说明本模块为上层几个模块共享的公用模块 重用率高 但是不能把彼此无关的功能凑在一起形成一个通用的超级模块 虽然它扇入高 但低内聚 因此非单一功能的模块扇入高时应重新分解 以消除控制耦合的情况 软件结构从形态上看 应是顶层扇出数较高一些 中间层扇出数较低一些 底层扇入数较高一些 深度 软件结构中控制的层数 能粗略标志系统的大小和复杂程度 宽度 软件结构内同一层次上的模块总数的最大值 扇出 一个模块直接控制 调用 的模块数 扇入 直接调用该模块的上级模块数目 软件结构度量术语 深度 宽度 扇出 扇入 模块的层数 同一层最大模块数 一个模块直接调用的模块数 调用一个给定模块的模块个数 4 模块作用域应在控制域内一个模块的作用域指受该模块内一个判定影响的所有模块的集合 一个模块的控制域指模块本身以及其所有下属模块 直接或间接从属于它的模块 的集合 一个模块的作用范围应在其控制范围之内 且条件判定所在的模块应与受其影响的模块在层次上尽量靠近 在软件结构中 由于存在着不同事务处理的需要 某一层上的模块会存在着判断处理 这样可能影响其他层的模块处理 为了保证含有判定功能模块的软件设计的质量 引入了模块的作用域 或称影响范围 与控制范围的概念 a 差的结构图 b 不理想的结构图 c 理想的结构图 如上图 a 符号 表示模块内有判定功能 阴影表示模块的作用范围 所示 模块D的作用域是C D E和F 模块D的控制域是D E F 作用域超过了控制域 这种结构最差 因为D的判定作用到了C 必然有控制信息通过上层模块B传递到C 这样增加了数据的传递量和模块间的耦合 若修改D模块 则会影响到不受它控制的C模块 这样不易理解与维护 再看图 b 模块TOP的作用范围在控制域之内 但是判定所在模块与受判定影响的模块位置太远 也存在着额外的数据传递 模块B D并不需要这些数据 增加了接口的复杂性和耦合强度 这种结构虽符合设计原则 但不理想 最理想的结构图是图 c 消除了额外的数据传递 如果在设计过程中 发现模块作用范围不在其控制范围之内 可以用以下方法加以改进 1 上移判断点 如图 a 所示 将模块D中的判断点上移到它的上层模块B中 或者将模块D整个合并到模块B中 使该判断的层次升高 以扩大它的控制范围 2 下移受判断影响的模块 将受判断影响的模块下移到判断所在模块的控制范围内 如图 a 所示 将模块C下移到模块D的下层 5 力争降低模块接口的复杂程度模块的接口要简单 清晰及含义明确 不仅仅是参数数量 含义必须清楚 便于理解 易于实现 测试与维护 6 设计单入口单出口模块不要使模块间出现内容耦合 7 模块功能应能预测一个模块可以当作一个黑盒子 只要输入的数据相同就应该产生同样的输出 这个模块的功能就是可以预测的 5 4描绘软件结构的图形工具 5 4 1 层次图和HIPO图 通常使用层次图描绘软件的层次结构 在层次图中一个矩形框代表一个模块 框间的连线表示调用关系 位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块 正文加工系统的层次图 HIPO图是美国IBM公司发明的 层次图 输入 处理 输出图 的英文缩写 为了使HIPO图具有可追踪性 在H图 即层次图 里除了顶层的方框之外 每个方框都加了编号 编号方法与本书介绍的数据流图的编号方法相同 正文加工系统的H图 和H图的每个方框相对应 有一张IPO图 或表 描绘这个方框代表的模块的处理过程 基本形式是 在左边的框中列出有关的输入数据 在中间的框内列出主要的处理 在右边的框内列出产生的输出数据 Yourdon提出的结构图是进行软件结构设计的另一个有力工具 结构图中一个方框代表一个模块 框内注明模块的名字或主要功能 方框之间的箭头 或直线 表示模块的调用关系 在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息 如果希望进一步标明传递的信息是数据还是控制信息 则可以利用注释箭头尾部的形状来区分 尾部是空心圆表示传递的是数据 实心圆表示传递的是控制信息 2 结构图 SCStructureChart SC中的主要表达工具约定 编辑学生记录 读学生记录 学生数据 无此学生 学号 数据信息 控制信息 结构图的主要内容有 模块 用方框表示 并用名字标识该模块 名字应体现该模块的功能 模块的控制关系 两个模块间用单向箭头或直线连接起来表示它们的控制关系 按照惯例 总是图中位于上方的模块调用下方的模块 所以不用箭头也不会产生二义性 模块间的信息传递 模块间还经常用带注释的短箭头表示模块调用过程中来回传递的信息 有时箭头尾部带空心圆的表示传递的是数据 带实心圆的表示传递的是控制信息 两个附加符号 表示模块有选择调用或循环调用 选择调用和循环调用的表示 a 选择调用 b 循环调用 5 画结构图应注意的事项如下 同一名字的模块在结构图中仅出现一次 调用关系只能从上到下 不严格表示模块的调用次序 习惯上从左到右 有时为了减少连线的交叉 适当地调整同一层模块左右位置 以保持结构图的清晰性 结构图的例子 产生最佳解 5 5面向数据流的设计方法 目标是给出设计软件结构的一个系统化的途径 数据流图描绘信息在系统中加工和流动的情况 面向数据流的设计方法定义了一些不同的 映射 利用这些映射可以把数据流图变换成软件结构 任何软件系统都可以用数据流图表示 面向数据流的设计方法理论上可以设计任何软件的结构 通常所说的结构化设计方法 也就是基于数据流的设计方法 5 5 1面向数据流设计方法的基本概念 映射 DFD 问题结构 软件系统的结构 程序结构 以数据流图为基础 定义了把DFD变换成软件结构的不同映射方法 系统结构特征可归纳为两种典型形式 数据流图可分为两种类型 变换型数据流事务型数据流 变换型结构事务型结构 变换中心 输入 输出 变换型结构 事务中心 事务 活动通路 基本模型特征 事务型结构 由输入 变换中心和输出三部分组成 具有在多种事务中选择执行某类事物的能力 变换型数据流结构 事务型数据流结构 传入 变换 传出 变换中心 传入部分 传出部分 事务分析 事务中心 动作1 动作2 动作3 接受 输入部分 1 变换型数据流举例 输入信息 物理输入 格式检查 处理 显示 正确信息 结果 物理输出 数据 变换中心 逻辑输入 逻辑输出 传入部分 传出部分 特点 具有明确的传入 变换 或称主加工 和传出界面的DFD 变换流示意图 信息 时间 信息流 输入流 输出流 变换流 外部表示 内部表示 2 事务型数据流图举例 I M L N O A B C D F E G H 大型系统DFD中 变换型和事务型结构往往共存 T 事务中心 传入 变换 传出 3 面向数据流设计方法的设计步骤 1 精化DFD 2 确定DFD类型 3 把DFD映射到系统模块结构设计出模块结构的上层 4 基于DFD逐步分解高层模块设计出下层模块 5 根据模块独立性原理 精化模块结构 6 模块接口描述 面向数据流方法的设计过程 精化数据流图 区分事务中心和数据接收路径 映射成变换结构 流类型 区分输入和输出分支 映射成事务结构 用启发式设计规则精化软件结构 导出接口描述和全程数据结构 复查 详细设计 事务 变换 事务分析 变换分析 当DFD具有变换特征时 则按照下列步骤设计 1 确定DFD中的变换中心 逻辑输入和逻辑输出 如果设计人员经验丰富 则容易确定系统的变换中心 即主加工 如几股数据流的汇合处往往是系统的主加工 若一下不能确定 则要从物理输入端开始 沿着数据流方向向系统中心寻找 直到有这样的数据流 它不能再被看作是系统的输入则它的前一个数据流就是系统的逻辑输入 同理 从物理输出端开始 逆数据流方向向中间移动 可以确定系统的逻辑输出 介于逻辑输入和逻辑输出之间的加工就是变换中心 用虚线划分出流界 DFD的三部分就确定了 5 5 2变换分析 2 设计软件结构的顶层和第一层 变换结构 变换中心确定以后 就相当于决定了主模块的位置 这就是软件结构的顶层 如下图所示 其功能是主要完成所有模块的控制 它的名称是系统名称 以体现完成整个系统的功能 主模块确定之后 设计软件结构的第一层 第一层至少要有输入 输出和变换三种功能的模块 即为每个逻辑输入设计一个输入模块 其功能为向顶层模块提供相应的数据 如下图中的f3 为每个逻辑输出设计一个输出模块 其功能为输出顶层模块的信息 如下图中的f7 f8 同时 为变换中心设计一个变换模块 它的功能是将逻辑输入进行变换加工 然后逻辑输出 如下图中 将f3变换成f7和f8 这些模块之间的数据传送应该与DFD相对应 变换分析设计举例 3 设计中 下层模块 对第一层的输入 变换及输出模块自顶向下 逐层分解 1 输入模块的下属模块的设计 输入模块的功能是向它的调用模块提供数据 所以必须要有数据来源 这样输入模块应由接收数据和转换成调用模块所需的信息两部分组成 因此 每个输入模块可以设计成两个下属模块 一个接收 一个转换 用类似的方法一直分解下去 直到物理输入端 如上图中模块 getf3 和 getf2 的分解 模块 getf1 为物理输入模块 2 输出模块的下属模块的设计 输出模块的功能是将它的调用模块产生的结果送出 它由将数据转换成下属模块所需的形式和发送数据两部分组成 这样每个输出模块可以设计成两个下属模块 一个转换 一个发送 一直到物理输出端 如上图中 模块 putf7 putf8 和 putf10 的分解 模块 putf9 和 putf11 为物理输出模块 3 变换模块的下属模块的设计 根据DFD中变换中心的组成情况 按照模块独立性的原则来组织其结构 一般对DFD中每个基本加工建立一个功能模块 如上图中模块 C D 和 E 4 设计的优化 以上步骤设计出的软件结构仅仅是初始结构 还必须根据设计准则对初始结构精细和改进 以下为提供的求精办法 1 输入部分的求精 对每个物理输入设置专门模块 以体现系统的外部接口 其他输入模块并非真正输入 当它与转换数据的模块都很简单时 可将它们合并成一个模块 2 输出部分的求精 为每个物理输出设置专门模块 同时注意把相同或类似的物理输出模块合并在一起 以减低耦合度 3 变换部分的求精 根据设计准则 对模块进行合并或调整 举例 汽车数字仪表板设计 1 通过模 数转换实现传感器和微处

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论