




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程 德州学院 4 1结构化分析与设计概述4 2软件设计的基本原理4 3面向数据流的设计方法4 4总体设计评审4 5软件的详细设计4 6详细设计评审4 7本章小结 第四章结构化分析与设计 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 1抽象与逐步求精 逐步求精 就是软件设计要自顶向下 从高到低的设计过程 N Wirth 将软件的体系结构按自顶向下的方式 对各个层次的过程细节和数据细节逐层细化 直到用程序设计语言的语句能够实现为止 从而最后确立整个的体系结构 逐步求精是一种先总体 后局部的思维原则 也是一种逐层分解 分而治之的方法 在面对一个复杂的大问题时 它采用自顶向下 逐步细化的方法 将一个大问题逐层分解成许多小问题 4 2 1抽象与逐步求精 抽象就是将事物相似的方面集中和概括起来暂时忽略它们之间的差异 抽象就是抽出事务本质特性而暂时不考虑它们细节 软件项目实施中的每一步都可以看作是对软件抽象层次的一次细化 例如 软件结构每一层中的模块 表示了对抽象层次的一次精化 抽象与逐步求精是一对互补的概念 抽象使得设计者能够说明过程和数据 同时却忽略低层细节 求精有助于设计人员在数据处理过程中揭示低层的细节 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 2模块和模块化 模块模块是数据说明 可执行语句等系统对象的集合 它是单独命名且可通过名字来访问的 如过程 函数 子程序等 基本属性 1 功能 描述该模块实现的功能 2 逻辑 描述模块内部怎么做 3 状态 该模块使用时的环境和条件 4 2 2模块和模块化 描述一个模块 按模块的外部特性与内部特性分别描述 模块的外部特性是指模块名和参数表 模块的内部特性是指完成其功能的程序代码和仅供模块内部使用的数据 功能 状态与接口反映模块的外部特性 逻辑反映它的内部特性 模块的外部特性 是软件结构设计来解决的 模块的内部特性 是软件详细设计来解决的 4 2 2模块和模块化 模块化模块化就是把系统划分成独立命名且可独立访问的模块的过程 模块化是软件结构设计的一个基本原则 模块化给设计人员提供了处理复杂软件的一种方法 这种 分而治之 的思想为模块化提供了根据 把复杂的问题分解成许多容易解决的小问题 4 2 2模块和模块化 每个软件都相应地有一个最适当的模块数目 使得系统的开发成本最小 因为随着模块数目的增加 每个模块的规格确实在减小 开发单个模块需要的成本也减少 然而 设计模块间接口所需要的成本将随着模块数目的增多而变大 采用模块化原理可以便软件结构清晰 容易设计 阅读和理解 模块化使软件容易测试和调试 有助于提高软件的可靠性 模块化能够提高软件的可修改性 模块化有助于软件开发的组织管理 便于分工实现和维护 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 3信息隐藏和局部化 信息隐藏是指在设计和确定模块时 使一个模块内包含的信息 过程和数据 对于不需要这些信息的其它模块来说 是不可访问的 独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息 而将自身的实现细节与数据 隐藏 起来 如果模块内部数据结构的改变或处理算法的改变 只要该模块所提供的功能不变 不会影响到其它模块 4 2 3信息隐藏和局部化 局部化使一些关系密切的软件元素彼此靠近些 在模块中使用局部变量就是局部化的一个例子 局部化有助于实现信息隐藏 将信息隐蔽用做模块化系统的设计标准 绝大多数数据和过程对于软件的其他部分而言是隐蔽的 在修改期间由于疏忽而引入的错误就很少能被传播到其它部分 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 4模块独立性 模块独立性指软件系统中每个模块只涉及软件要求的具体子功能 与其它的模块接口是简单的 模块的独立性是模块化 抽象 信息隐蔽和局部化的直接结果 也是评价模块化设计的重要指标 模块的独立程度由模块间的耦合和模块内的内聚两个定性标准进行度量 模块的内聚度高 模块间耦合度低 模块的独立性就好 软件设计的质量也就好 4 2 4模块独立性 耦合耦合衡量不同模块彼此间互相依赖的紧密程度 两个模块之间存在着很强的依赖关系称为紧密耦合 两个模块之间存在较少依赖关系称为松散耦合 模块之间没有任何依赖关系称为无耦合 耦合越松散 模块之间的联系就越小 模块的独立性就越强 耦合的强度依赖于以下因素 1 一个模块对另一个模块的引用如模块A调用模块B 那么模块A的功能依赖于模块B的功能 4 2 4模块独立性 2 一个模块向另一个模块传递的数据量如模块A为了完成其功能需要模块B向其传递一组数据 那么模块A依赖于模块B 3 一个模块施加到另一个模块的控制的数量如模块A传递给模块B一个控制信号 模块B执行的操作依赖于控制信号的值 4 2 4模块独立性 4 模块之间接口的复杂程度如如果模块A给模块B传递一个简单的数值 但模块C和模块D之间传递的是数组 甚至是控制信号 则模块A和B之间接口的复杂度小于模块C和D之间的接口复杂度 常见的耦合类型 1 非直接耦合两个模块都能独立地工作而不需要另一个的存在 这表明模块间无任何连接 耦合程度最低 4 2 4模块独立性 2 数据耦合如果两个模块彼此间通过参数交换信息 而且交换的信息仅仅是数据 那么这种耦合称为数据耦合 数据耦合是最简单的耦合形式 模块间耦合程度较低 如下所示 sum inta intb intc c a b return c main intx y scanf d d x y printf x y d sum x y 主函数与sum函数之间即为数据耦合关系 4 2 4模块独立性 3 标记耦合两个模块间传递的参数是数据结构变量 如高级语言中的数组名 记录名和文件名等 模块间的这种联系称为标记耦合 在设计时应尽量避免或采用其它方法消除这种耦合 但有时因为其它功能的缘故 标记耦合是不可避免的 4 2 4模块独立性 4 控制耦合两个模块间传递的是控制信息 如开关量 标志和名字等 则这两个模块之间的耦合称为控制耦合 图4 1是模块A和模块B通过控制变量flag通信的控制耦合 图4 1控制耦合 4 2 4模块独立性 5 公共耦合一组模块都访问同一个公共数据环境 则这组模块之间的耦合就称为公共耦合 公共数据环境可以是全局数据结构 共享的通信区 内存的公共覆盖区 任何存储介质上的文件等 如果一个模块只向公共数据环境传送数据 而另一个模块只从公共数据环境中提取数据 则这种公共耦合称为松散公共耦合 如图4 2 a 所示 4 2 4模块独立性 如果两个模块对既往公共数据环境输送数据又从里面提取数据 则这种耦合称为紧密公共耦合 如图4 2 b 所示 如使用公共耦合 应尽量采用松散公共耦合 图4 2公共耦合 4 2 4模块独立性 6 内容耦合内容耦合是最高程度的耦合 如果发生下列情形 两模块之间就发生了内容耦合 一个模块直接访问另一个模块的内部数据 一个模块不通过正常入口转到另一模块内部 两个模块有一部分程序代码重叠 图4 3内容耦合 4 2 4模块独立性 表4 1列出各种不同类型的耦合特点比较 表4 1各种耦合的比较 尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 完全不采用内容耦合 4 2 4模块独立性 内聚内聚是衡量一个模块内部各个元素彼此结合的紧密程度 一个模块内聚程度越高 说明该模块内部各元素之间的关联也就越强 1 偶然内聚模块内部各元素在功能上不相关或关系松散 则称偶然内聚 例如 在编写程序时 发现一组相同的语句分别在多个子模块中出现 于是将这组语句单独组成一个模块 这样就出现了偶然内聚的模块 偶然内聚被认为是最差的一种内聚 其缺点是 模块不易理解 不易维护 不易重用 4 2 4模块独立性 2 逻辑内聚一个模块完成的任务在逻辑上属于相同或相似的一类则称为逻辑内聚 图4 4中被调用模块就是一个逻辑内聚模块 它根据输入的控制信息判定执行相应的功能 图4 4逻辑内聚 4 2 4模块独立性 逻辑内聚模块比偶然内聚模块的内聚程度要高 逻辑内聚模块不易修改 在调用时需要进行控制参数传递 这就增加了模块间的耦合程度 将未用的部分也调入内存会降低系统的效率 4 2 4模块独立性 3 时间内聚一个模块包含了需要在同一时间段中执行的多个任务 则称该模块的内聚为时间内聚 例如 将多个变量的初始化放在同一个模块中实现 优点 不需要选择参数 所有任务可以任意次序执行 逻辑简单 缺点 这种模块结合了许多无关的任务 模块一旦失效 难以直接确定是哪一个任务失效 4 2 4模块独立性 4 过程内聚一个模块内的处理元素是相关的 而且必须以特定次序执行 则称为过程内聚 例如 在利用流程图划分模块时 如果将流程图中完成同一个处理的循环部分 判定部分 计算部分分成3个模块 则这3个模块就是过程内聚模块 过程内聚的内聚程度比较低 4 2 4模块独立性 5 通信内聚模块中各功能部分都使用同一个输入数据和 或 产生同一个输出数据 则称为通信内聚 图4 5所示的是一个通信内聚模块的示意图 通信内聚模块各部分都紧密相关于同一数据或数据结构 所以内聚性要高于前面几种 图4 5通信内聚 4 2 4模块独立性 6 顺序内聚一个模块内的处理元素和同一个功能密切相关 而且这些处理必须顺序执行 则称为顺序内聚 图4 6是一个顺序内聚的例子 顺序内聚模块中的各个部分在功能和执行顺序上都密切相关 构成个不可分割的整体 因此内聚程度高且易于理解 图4 6顺序内聚 4 2 4模块独立性 7 功能内聚一个模块内所有处理元素仅为完成一个具体的功能而协同工作 紧密联系 不可分割 则称为功能内聚 功能内聚是最高程度的内聚 在设计时应尽可能使模块到达功能内聚这一级 4 2 4模块独立性 注意 在软件设计中 没有必要精确地确定内聚级别 设计时力争做到高内聚 并且能够辨认出低内聚的模块 模块之间越紧密 耦合性就越高 而其独立性就越弱 一个模块内部各个元素之间越紧密 它的内聚性就越高 模块独立性比较强的模块应是高内聚低耦合的模块 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 5复用性设计 软件复用的概念软件复用的问题软件复用的粒度 4 2 5复用性设计 软件复用的概念软件复用是在两次或多次软件开发过程中重复使用相同或相近软件元素的过程 软件元素主要包括程序代码 测试用例 用户界面 数据 设计文档 需求分析文档 项目计划 体系结构等 可复用的软件元素越大 则复用的粒度越大 在结构化程序设计中 主要是源代码和目标代码的复用 在面向对象程序设计中 主要是类库和软件组件复用 4 2 5复用性设计 软件复用分为黑盒复用和白盒复用 黑盒复用是指对已有的组件不需任何修改 直接进行复用 白盒复用是指已有的组件不能完全符合用户需求 需要根据用户的需求精心修改后方可用于复用的领域 可复用的软件应具有下述特性 1 软件应是模块化结构 2 软件运行不依赖具体环境 具有良好的移植性 3 数据模式统一 减少模块间的数据交换和依赖性 4 2 5复用性设计 软件复用的问题在软件复用中 应优先解决的问题 1 尽快建立软件复用的基础设施 主要包括可复用的组件库 用于创建可复用组件的工具等 2 建立相应的培训计划 帮助软件工程师和管理者理解和应用软件复用 形成一个使用软件复用技术的环境 3 采用先进的 可以促进软件复用的面向对象的软件开发方法 4 采用相应的激励措施 4 2 5复用性设计 软件复用的粒度 1 源代码复用源代码复用指高级语言编写的源代码组件的复用 源代码复用是粒度最小的复用 2 软件体系结构复用对已有的软件体系结构的复用是通过对存储体系结构库的有效检索和定义的接口的集成来完成复用 软件体系结构复用是较大粒度的软件复用 4 2 5复用性设计 3 应用程序生成器应用程序生成器用于对整个软件系统设计的复用 主要包括整个软件体系结构 子系统和特定的数据结构与算法 4 2软件设计的基本原理 4 2 1抽象与逐步求精4 2 2模块和模块化4 2 3信息隐藏和局部化4 2 4模块独立性4 2 5复用性设计4 2 6软件结构设计的优化原则 4 2 6软件结构设计的优化原则 提高模块独立性模块规模应该适中深度 宽度 扇出和扇入要适当模块的作用域应该在控制域之内尽量降低模块的接口复杂度定义单入口 单出口模块模块功能可预测 4 2 6软件结构设计的优化原则 提高模块独立性尽量建立高内聚 低耦合的模块结构 保持模块相对独立性 并以此为原则优化初始的软件结构 多个模块之间耦合度过高 可将这些模块进行合并 多个模块共用一个子功能 把重复的功能分割成一个独立的模块 再由这些模块调用 通过分解或合并模块减少控制信息的传递及对全局数据的引用 并降低接口的复杂程度 4 2 6软件结构设计的优化原则 模块规模应该适中 1 一个模块的规模不应过大 最好能写在一页纸内 通常模块内的语句行数不超过60行 2 过大的模块需要进一步分解时必须符合问题结构 一般来说 分解后不应该降低模块独立性 3 过小的模块开销大于有效操作 而且模块数目过多将使系统接口复杂 如果只有一个模块调用某模块时 通常可以把它合并到上级模块中去 在保证模块独立性的前提下 可对软件中规模过小的模块进行合并或对规模过大的模块进行分解 4 2 6软件结构设计的优化原则 深度 宽度 扇出和扇入要适当 1 深度深度是指软件体系结构中控制的层数 它反映出软件系统的规模和复杂程度 如图4 7所示的软件结构图中 深度为5 图4 7软件结构图 4 2 6软件结构设计的优化原则 2 宽度宽度是指在软件结构内同一个层次上的模块总数的最大值 图4 7中软件结构的宽度为7 宽度越大系统越复杂 深度过大可通过将结构中过于简单的模块分层与上一级模块合并来解决 宽度过大则可通过增加中间层来解决 降低深度会引起宽度的增加 而降低宽度又会带来深度的增加 4 2 6软件结构设计的优化原则 3 扇出扇出是指一个模块直接调用下属模块的个数 图4 7中模块A的扇出为2 扇出数衡量一个模块直接控制其它模块的数量 扇出数过大意味着模块过于复杂 需要控制和协调过多的下级模块 扇出数太小可以把下级模块进一步分解成若干个子功能模块或者合并到它的上级模块中去 一个设计得好的典型系统的平均扇出通常是3或4 4 2 6软件结构设计的优化原则 4 扇入扇入是指一个模块有多少个上级模块直接调用它 图4 7中模块L的扇入2 扇入越大则共享该模块的上级模块数目越多 这是有好处的 但不能违背模块独立性原则 注意 一个好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 难点详解自考专业(小学教育)试题及完整答案(名师系列)
- 量子生物学突破背景下的2025生命教育课程重构
- 考点解析自考专业(行政管理)真题完整参考答案
- 虚拟现实可用性评估-洞察及研究
- 妇产科护理专科知识培训课件
- 聚焦2025:互联网+教育平台建设资金申请与市场策略报告
- 市场监管局网课课件
- 印章管理培训合同范本
- 2025年医疗美容行业美容护肤市场应用与市场前景报告
- 2025年银发消费市场养老服务产业链上下游协同发展报告
- 2025年山西航空产业集团有限公司招聘考试笔试试题(含答案)
- 电梯安全培训课件内容
- 2025年事业单位招聘职业能力倾向测验考试题库附参考答案满分必刷
- 应聘副研究员汇报
- 2025年中考历史(河南卷)真题评析
- 手术室时间管理课件
- 2025版线上直播场推广服务合同模板
- 高一上学期数学学法指导课件2024.9.14
- GB/T 45845.1-2025智慧城市基础设施整合运营框架第1部分:全生命周期业务协同管理指南
- 呼吸科考试试题及答案
- 肿瘤内科胆囊癌护理查房
评论
0/150
提交评论