




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程 第5章设计工程 2 62 内容摘要 软件设计工程概述软件设计过程软件体系结构设计部件级设计技术 自学 设计规约与设计评审 自学 3 62 内容摘要 软件设计工程概述软件设计原则软件体系结构设计部件级设计技术设计规约与设计评审 4 62 软件设计工程概述 软件需求分析解决 做什么 的问题 软件设计过程则解决 怎么做 的问题软件设计是把软件需求变换成软件表示的过程 它主要包含两个阶段 软件体系结构设计阶段和部件级设计 5 62 软件设计的任务 使用一种设计方法 软件分析模型中通过数据 功能和行为模型所展示的软件需求的信息被传送给设计阶段 产生数据 类设计 体系结构设计 接口设计 部件级设计 6 62 接口设计 接口设计主要包括三个方面 设计软件模块间的接口设计模块和其他非人的信息生产者和消费者 比如外部实体 之间的接口设计人 用户 和计算机间的接口 7 62 部件级设计 部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述 从类为基础的模型 流模型 行为模型中得到的信息是部件设计的基础 8 62 衡量设计的技术标准 1 设计出来的结构应是分层结构 从而建立软件成份之间的控制 2 设计应当模块化 从逻辑上将软件划分为完成特定功能或子功能的部件 3 设计应当既包含数据抽象 也包含过程抽象 4 设计应当建立具有独立功能特征的模块 5 设计应当建立能够降低模块与外部环境之间复杂连接的接口 6 设计应能根据软件需求分析获取的信息 建立可驱动 可重复的方法 9 62 总体设计 总体设计的基本目的就是回答 概括地说 系统应该如何实现 因此 总体设计又称为概要设计或初步设计 通过这个阶段的工作将划分出组成系统的物理元素 程序 文件 数据库 人工过程和文档等等 但是每个物理元素仍然处于黑盒子级 总体设计阶段的另一项重要任务是设计软件的结构 也就是要确定系统中每个程序是由哪些模块组成的 以及这些模块相互间的关系 10 62 总体设计的必要性 可以站在全局高度上 花较少成本 从较抽象的层次上分析对比多种可能的系统实现方案和软件结构 从中选出最佳方案和最合理的软件结构 从而用较低成本开发出较高质量的软件系统 11 62 总体设计过程 共9个步骤 总体设计过程通常由两个主要阶段组成 A 系统设计阶段 确定系统的具体实现方案 B 结构设计阶段 确定软件结构 模块组成的层次系统 12 62 总体设计过程 共9个步骤 典型的总体设计过程包括下述9个步骤 1 设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方案 并且力求从中选出最佳方案 在总体设计阶段开始时只有系统的逻辑模型 分析员有充分的自由分析比较不同的物理实现方案 一种常用的方法 设想把数据流图中的处理分组的各种可能的方法 抛弃在技术上行不通的方法 13 62 总体设计过程 共9个步骤 2 选取合理的方案通常至少选取低成本 中等成本和高成本的三种方案 在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标 有时可能还需要进一步征求用户的意见 对每个合理的方案分析员都应该准备下列4份资料 1 系统流程图 2 组成系统的物理元素清单 3 成本 效益分析 4 实现这个系统的进度计划 14 62 总体设计过程 共9个步骤 3 推荐最佳方案分析员应该综合分析对比各种合理方案的利弊 推荐一个最佳的方案 并且为推荐的方案制定详细的实现计划 1 用户和有关的技术专家应该认真审查分析员所推荐的最佳系统 如果该系统确实符合用户的需要 并且是在现有条件下完全能够实现的 则2 应该提请使用部门负责人进一步审批 在使用部门的负责人也接受了分析员所推荐的方案之后 将进入总体设计过程的下一个重要阶段 结构设计 15 62 总体设计过程 共9个步骤 4 功能分解为了最终实现目标系统 必须设计出组成这个系统的所有程序和文件 或数据库 对程序 特别是复杂的大型程序 的设计 通常分为两个阶段完成 首先进行结构设计 然后进行过程设计 1 结构设计确定程序由哪些模块组成 以及这些模块之间的关系 属于总体设计阶段的任务 2 过程设计确定每个模块的处理过程 结构设计是总体设计阶段的任务 过程设计是详细设计阶段的任务 16 62 总体设计过程 共9个步骤 5 设计软件结构通常程序中的一个模块完成一个适当的子功能 应该把模块组织成良好的层次系统 顶层模块调用它的下层模块以实现程序的完整功能 每个下层模块再调用更下层的模块 从而完成程序的一个子功能 最下层的模块完成最具体的功能 软件结构 即由模块组成的层次系统 可以用层次图或结构图来描绘 17 62 总体设计过程 共9个步骤 6 设计数据库对于需要使用数据库的那些应用系统 软件工程师应该在需求分析阶段所确定的系统数据需求的基础上 进一步设计数据库 7 制定测试计划在软件开发的早期阶段考虑测试问题 能促使软件设计人员在设计时注意提高软件的可测试性 18 62 总体设计过程 共9个步骤 8 书写文档应该用正式的文档记录总体设计的结果 在这个阶段应该完成的文档通常有下述几种 1 系统说明 主要内容包括用系统流程图描绘的系统构成方案 组成系统的物理元素清单 成本 效益分析 对最佳方案的概括描述 精化的数据流图 用层次图或结构图描绘的软件结构 用IPO图或其他工具 例如 PDL语言 简要描述的各个模块的算法 模块间的接口关系等等 2 用户手册 根据总体设计阶段的结果 修改更正在需求分析阶段产生的初步的用户手册 3 测试计划 包括测试策略 测试方案 预期的测试结果 测试进度计划等等 4 详细的实现计划 5 数据库设计结果 19 62 总体设计过程 共9个步骤 9 审查和复审最后应该对总体设计的结果进行严格的技术审查 在技术审查通过之后再由使用部门的负责人从管理角度进行复审 20 62 内容摘要 软件设计工程概述软件设计原理软件体系结构设计部件级设计技术设计规约与设计评审 21 62 抽象化与逐步求精 抽象 是在软件设计的规模逐渐增大的情况下 控制复杂性的基本策略 抽象的过程是从特殊到一般的过程 上层概念是下层概念的抽象 下层概念是上层概念的精化和细化 软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述 22 62 逐步求精 逐步求精 把问题的求解过程分解成若干步骤或阶段 每步都比上步更精化 更接近问题的解法 为了能集中解决主要问题而尽量推迟对问题细节的考虑 抽象使得设计者能够描述过程和数据而忽略低层的细节 而求精有助于设计者在设计过程中揭示低层的细节 二者的目的不同 23 62 模块化 模块化 即把软件按照规定原则 划分为一个个较小的 相互独立的但又相互关联的部件 实际上是系统分解和抽象的过程 模块是数据说明 可执行语句等程序对象的集合 它是单独命名的 并且可以通过名字来访问 例如 过程 函数 子程序 宏等面向对象方法学中的对象 对象内的方法 服务 也是模块 模块是构成程序的基本构件 24 62 设C x 是描述问题x复杂性的函数 E x 是解决问题x所需工作量 按时间计算 的函数 对于两个问题p1和p2 如果 C p1 C p2 5 1a 那么E p1 E p2 5 1b 即 问题越复杂 解决问题所需要的花费更多 25 62 通过对人解决问题的实验 又存在另一个有趣的规律 C p1 p2 C p1 C p2 5 2 方程式 5 2 意味着p1和p2组合后的复杂性比单独考虑每个问题时的复杂性要大 考虑方程式 5 2 和方程式 5 1 隐含的条件 我们可以得出 E p1 p2 E p1 E p2 5 3 不等式 5 3 表达出了一个对于模块化和软件具有十分重要意义的结论 即 模块化的论据 将复杂问题分解成可以管理的片断会更使解决问题更加容易 26 62 问题 如果我们无限制地划分软件 开发它所需的工作量会变得小到可以忽略 事实上 影响软件开发的工作量的因素还有很多 例如模块接口费用等等 上述不等式只能说明 当模块的总数增加时 单独开发各个子模块的工作量之和会有所减少 27 62 如果模块是相互独立的 当模块变得越小 每个模块花费的工作量越低 但当模块数增加时 模块间的联系也随之增加 把这些模块联接起来的工作量也随之增加 设计模块间接口所需工作量增加 28 62 信息隐藏 信息隐藏 每个模块的实现细节对于其它模块来说应该是隐蔽的 块中所包含的信息 包括数据和过程 不允许其它不需要这些信息的模块使用 通过信息隐蔽 则可定义和实施对模块的过程细节和局部数据结构的存取限制 29 62 模块独立 模块独立 模块完成独立的功能并且与其他模块的接口简单 符合信息隐蔽和信息局部化原则 模块间关联和依赖程度尽可能小 模块独立的重要性功能被划分 并且接口被简化 所以具有有效模块化的软件更易于开发 由于因设计和编码修改引起的副作用受到局限 错误传播被减小 并且模块复用成为可能 所以独立的模块更易于维护和测试 30 62 模块独立 模块的独立性可以由两项指标来衡量 内聚度与耦合度 内聚 cohesion 是一个模块内部各个元素彼此结合的紧密程度的度量 耦合 coupling 是模块之间的相对独立性 互相连接的紧密程度 的度量 31 62 内聚 一般模块的内聚性分为七种类型 32 62 内聚 1 巧合内聚 偶然内聚 如果一个模块完成一组任务 这些任务彼此间即使有关系 关系也是很松散的 将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块称为巧合内聚模块 2 逻辑内聚 指完成一组逻辑相关任务的模块 调用该模块时 由传送给模块的控制型参数来确定该模块应执行哪一种功能 3 时间内聚 指一个模块中的所有任务必须在同一时间段内执行 例如初始化模块和终止模块 33 62 内聚 4 过程内聚 指一个模块完成多个任务 这些任务必须按指定的过程 procedural 执行 5 通信内聚 指一个模块内所有处理元素都集中在某个数据结构的一块区域中 6 顺序内聚 指一个模块完成多个功能 这些功能又必须顺序执行 7 功能内聚 指一个模块中各个部分都是为完成一项具体功能而协同工作 紧密联系 不可分割的 34 62 耦合和内聚的概念是Constantine Yourdon Myers和Stevens等人提出来的 按照他们的观点 如果给上述几种内聚的优劣评分 将得到如下结果 功能内聚10分时间内聚3分顺序内聚9分逻辑内聚1分通信内聚7分偶然内聚0分过程内聚5分事实上 没有必要精确确定内聚的级别 重要的是设计时力争做到高内聚 并且能够辨认出低内聚的模块 有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度 从而获得较高的模块独立性 35 62 耦合 一般模块之间可能的耦合方式有七种类型 36 62 耦合 1 内容耦合 如果一个模块直接访问另一个模块的内部数据 或者一个模块不通过正常入口转到另一模块内部 或者两个模块有一部分程序代码重迭 或者一个模块有多个入口 则两个模块之间就发生了内容耦合 2 公共耦合 若一组模块都访问同一个公共数据环境 则它们之间的耦合就称为公共耦合 公共的数据环境可以是全局数据结构 共享的通信区 内存的公共覆盖区等 3 外部耦合 指模块间通过软件之外的环境联结 如I O将模块耦合到特定的设备 格式 通信协议上 时 称为外部耦合 37 62 耦合 4 控制耦合 如果一个模块传送给另一个模块的参数中包含了控制信息 该控制信息用于控制接收模块中的执行逻辑 则称为控制耦合 5 标记耦合 两个模块之间通过参数表传递一个数据结构的一部分 如某一数据结构的子结构 就是标记耦合 6 数据耦合 两个模块之间仅通过参数表传递简单数据 则称为数据耦合 7 非直接耦合 如果两个模块之间没有直接关系 即它们中的任何一个都不依赖于另一个而能独立工作 这种耦合称为非直接耦合 38 62 模块之间的连接越紧密 联系越多 耦合性就越高 而其模块独立性就越弱 一个模块内部各个元素之间的联系越紧密 则它的内聚性就越高 模块独立性比较强的模块应是高内聚低耦合的模块 39 62 5 3启发规则 人们在开发计算机软件的长期实践中积累了丰富的经验 总结这些经验得出了一些启发式规则 这些启发式规则在许多场合仍然能给软件工程师以有益的启示 往往能帮助他们找到改进软件设计提高软件质量的途径 40 62 5 3启发规则 1 改进软件结构提高模块独立性设计出软件的初步结构以后 应该审查分析这个结构 通过模块分解或合并 力求降低耦合提高内聚 例如 多个模块公有的一个子功能可以独立成一个模块 由这些模块调用 有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用 并且降低接口的复杂程度 41 62 5 3启发规则 2 模块规模应该适中经验表明 一个模块的规模不应过大 有人从心理学角度研究得知 当一个模块包含的语句数超过30以后 模块的可理解程度迅速下降 过大的模块往往是由于分解不充分 但是进一步分解必须符合问题结构 一般说来 分解后不应该降低模块独立性 过小的模块开销大于有效操作 而且模块数目过多将使系统接口复杂 42 62 5 3启发规则 3 深度 宽度 扇出和扇入都应适当 1 2 深度表示软件结构中控制的层数 它往往能粗略地标志一个系统的大小和复杂程度 如果层数过多则应该考虑是否有许多管理模块过分简单了 能否适当合并 宽度是软件结构内同一个层次上的模块总数的最大值 一般说来 宽度越大系统越复杂 对宽度影响最大的因素是模块的扇出 43 62 5 3启发规则 3 深度 宽度 扇出和扇入都应适当 2 2 扇出是一个模块直接控制 调用 的模块数目 扇出过大意味着模块过分复杂 需要控制和协调过多的下级模块 扇出过小 例如总是1 也不好 经验表明 一个设计得好的典型系统的平均扇出通常是3或4 扇出的上限通常是5 9 扇出太大一般是因为缺乏中间层次 应该适当增加中间层次的控制模块 扇出太小时可以把下级模块进一步分解成若干个子功能模块 或者合并到它的上级模块中去 当然分解模块或合并模块必须符合问题结构 不能违背模块独立原理 一个模块的扇入表明有多少个上级模块直接调用它 扇入越大则共享该模块的上级模块数目越多 这是有好处的 但是 不能违背模块独立原理单纯追求高扇入 观察大量软件系统后发现 设计得很好的软件结构通常顶层扇出比较高 中层扇出较少 底层扇入到公共的实用模块中去 底层模块有高扇入 44 62 5 3启发规则 4 模块的作用域应该在控制域之内模块的作用域定义为受该模块内一个判定影响的所有模块的集合 模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合 在一个设计得很好的系统中 所有受判定影响的模块应该都从属于做出判定的那个模块 最好局限于做出判定的那个模块本身及它的直属下级模块 45 62 5 3启发规则 5 力争降低模块接口的复杂程度模块接口复杂是软件发生错误的一个主要原因 应该仔细设计模块接口 使得信息传递简单并且和模块的功能一致 6 设计单入口单出口的模块这条启发式规则警告软件工程师不要使模块间出现内容耦合 当从顶部进入模块并且从底部退出来时 软件是比较容易理解的 因此也是比较容易维护的 46 62 5 3启发规则 7 模块功能应该可以预测模块的功能应该能够预测 但也要防止模块功能过分局限 如果一个模块可以当做一个黑盒子 也就是说 只要输入的数据相同就产生同样的输出 这个模块的功能就是可以预测的 47 62 内容摘要 软件设计工程概述软件设计原则软件体系结构设计部件级设计技术设计规约与设计评审 48 62 体系结构发展过程 常见的软件体系结构单主机结构C S Client Server 结构B S Browser Server 结构 49 62 面向对象风格的体系结构 系统部件封装数据和操作数据的方法 部件之间的交互和协调通过消息来传递 50 62 层次式风格的体系结构 在这种结构中 定义不同的层次 每层都完成了相对外层更靠近机器指令的操作 51 62 评估可选的体系结构 对于同一个软件需求 由于各种设计方法的原理不同 会导出不同的软件结构 同一问题的不同软件结构 52 62 在进行软件体系结构设计时 可以参考如下规则 1 改进软件结构提高模块独立性 2 模块适当的深度 宽度 扇出和扇入 3 模块判断作用范围应在其控制作用范围内 4 力争降低模块接口的复杂度 5 设计单入口单出口的模块 6 模块功能应该是可以预测的模块大小适中 7 一般一个模块包含的语句在30 50条左右较好 8 一个设计好的软件结构 通常顶层扇出比较高 中层扇出比较少 底层有高扇入 53 62 内容摘要 软件设计工程概述软件设计原则软件体系结构设计部件级设计技术设计规约与设计评审 54 62 部件级设计技术 在结构化分析和设计方法时部件往往被称为模块在面向对象分析和设计时部件被称为类 在基于构件的开发方法中 部件被称为构件 55 62 部件级设计技术 在部件级设计阶段 主要完成如下工作 为每个部件确定采用的算法 选择某种适当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公务员考试公共基础知识试题库带答案详解
- 2025年食品安全知识考试试题库及解析答案
- 2025年辽宁省鞍山市事业单位工勤技能考试题库及答案
- 2025年国家宪法日知识竞赛试题库(含答案)
- 2025年《基本医疗卫生与健康促进法》测考试练习题(附答案)
- 2025年基本公共卫生知识考试题及参考答案
- 2025年贵州省六盘水市社会工作者职业资格社会工作法规与政策真题含答案
- 2025年安全生产考试题库(消防安全设施维护)应急演练试题
- 易拉罐包装制作创新创业项目商业计划书
- 坚果废弃物利用创新创业项目商业计划书
- GB/T 45345-2025金属及其他无机覆盖层工程用直流磁控溅射银镀层镀层附着力的测量
- 无人机教员聘用协议书
- 药物非临床研究质量管理规范
- 脑科生理病理图谱解读
- 全国青少年科技辅导员专业水平认证笔试考题
- (行业)常用表面处理工艺详解(行业讲座教学培训课件)
- 《STEMI再灌注治疗策略》课件
- 配电网安健环设施标准
- 2025年物产中大集团股份有限公司招聘笔试参考题库含答案解析
- 家校合作下的学生心理问题预防与干预
- 2024年学校安全教育讲稿范文(2篇)
评论
0/150
提交评论