1 / 62

第六章 软件设计

第六章 软件设计. 主要内容: ▲ 软件设计的目标和任务 ▲ 软件设计基础 ▲ 模块的独立性 ▲ 结构化设计方法 ▲ 数据设计及文件设计 ▲ 过程设计. 讨论要点. (1) 如何将分析模型转换为软件 设计?. (2) 作为软件工程师在软件设计 方面应使用 哪些基本原则和 概念?. §6.1 软件设计的目标和目的. 软件需求:解决 “ 做什么 ” 软件设计:解决 “ 怎么做 ” 6.1.1 软件设计的任务 问题结构 ( 软件需求 ) 软件结构 从软件需求规格说明书出发,形成软件的具体设计方案。.

vadin
Download Presentation

第六章 软件设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章 软件设计 主要内容: ▲ 软件设计的目标和任务 ▲ 软件设计基础 ▲ 模块的独立性 ▲ 结构化设计方法 ▲ 数据设计及文件设计 ▲ 过程设计

  2. 讨论要点 (1)如何将分析模型转换为软件 设计? (2)作为软件工程师在软件设计 方面应使用哪些基本原则和 概念?

  3. §6.1 软件设计的目标和目的 软件需求:解决“做什么” 软件设计:解决“怎么做” 6.1.1 软件设计的任务 问题结构(软件需求) 软件结构 从软件需求规格说明书出发,形成软件的具体设计方案。 映射

  4. 将分析模型转换为软件设计 加 数 工 据 过程设计 E-R图 数据 流图 规 对 数据 字典 约 象 接口设计 描 述 体系结构设计 状态变迁图 控制规约 数 据 设 计 分析模型 设计模型

  5. 1.软件的总体结构主要回答的问题 • 软件的组成部分 • 软件的层次关系 • 模块的内部处理逻辑 • 模块之间的界面

  6. 2. 软件设计的问题 • 工具 —如何描述软件的总体结构 • 方法 —用什么方法有问题结构导出 软件结构 • 评估准则 —什么样的软件结构是 “最优的”

  7. 3. 软件设计方法 • 结构化设计方法(SD) • 面向数据结构的设计方法(JSD方法) • 面向对象的设计方法(OOD)

  8. 4. 软件设计分为两个阶段: (1)概要设计(总体设计) 确定软件的结构以及各组成成分 (子系统或模块)之间的相互关系。 (2)详细设计 确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。

  9. §6.2 软件设计的概念和原理 1. 软件结构 2. 软件过程 3. 模块化 6. 抽象 5. 信息隐蔽 6. 信息局部化

  10. 6.2.1 软件体系结构 软件体系结构包括两部分: (1)过程构件(模块)的层次结构 (2)数据构件

  11. 控制结构(程序结构) 控制结构是软件模块间 关系的表示

  12. 控制结构图示:

  13. 1. 控制结构的层次规则 • 只有一个顶层(0层)模块 • 0层外任一模块都会在它 的邻层存在一模块与它有关 • 同层模块间不发生联系

  14. 2. 软件结构度量术语 (一个模块 直接调用 的模块数) 扇出 深 度 (模块的 层数) (调用一个给定模 块的模块个数) 扇入 宽度 (同一层最大模块数)

  15. 6.2.2 软件过程 软件过程用以描述各模 块的处理细节(算法的详 细描述),包括对下层模 块控制的操作细节。

  16. 6.2.3 模块化(Modularity) 模块化是好的软件设计的一个基本准则 高层模块 从整体上把握 问题,隐蔽细节 复杂问题 较小问题 分解 可减小解题所需的总的工作 分解

  17. 例:将问题(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) E(P1+P2) > E(P1)+E(P2) "各个击破"理论

  18. 6.2.6 抽象(Abstraction) 抽象原则应用举例 Windows NT一体化的I/O系统设计 抽象 对虚拟文件的字节流, 虚拟文件可为任何设备和实体 文件管理 网络管理 设备管理 高速缓冲存储器 O S

  19. 6.2.5 信息隐蔽(Information Hiding) 模块所包含的信息,不允许其它不需要这些信息的模块访问 独立的模块间仅仅交换为完成系统功能而必须交换的信息。

  20. 信息隐蔽的目的: 提高模块的独立性,减少修改或维护时的影响面。

  21. 6.2.6 信息局部化 把关系密切的软件元素物理地放得彼此靠近。 优点:可维护性好 可靠性好 可理解性好

  22. §6.3 模块的独立性 6.3.1 模块独立性的概念 模块独立的含义: • 模块完成独立的功能 • 符合信息隐蔽和信息局部化原则 • 模块间关连和依赖程度尽量小

  23. 6.3.2 模块独立性的度量 模块独立性取决于模块的 内部和外部特征。 SD方法提出的定性的度量标准: • 模块之间的耦合性 • 模块自身的内聚性

  24. 内聚是指度量一个给定的程序内的多行代码的单一功能性,以确定是否达到该程序所要实现的目的内聚是指度量一个给定的程序内的多行代码的单一功能性,以确定是否达到该程序所要实现的目的 耦合性用来度量程序之间联系的次数和强度

  25. 1.模块独立性的度量之一:耦合性 模块间相对独立性(相互依赖程度)的度量 耦合性越高,模块独立性越弱

  26. 紧密耦合-有 很多依赖关系 松散耦合-有 少量依赖关系 无耦合-没有依赖关系

  27. 耦合强度依赖的因素: • 一模块对另一模块的引用 • 一模块向另一模块传递的数据量 • 一模块施加到另一模块的控制的数量 • 模块间接口的复杂程度

  28. 模块间耦合的类型 强 低 无直接耦合 耦 数据耦合 合 标记耦合 性 控制耦合 外部耦合 公共耦合 高 内容耦合 (低耦合) 模 块 独 立 性 (中耦合) (较强耦合) 弱 (强耦合)

  29. (1) 无直接耦合 两个模块没有直接关系(模块1和模块2),模块独立性最强。 模块1 模块2 模块3 模块6

  30. (2) 数据耦合 一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。 属松散耦合。

  31. 数据耦合举例 开发票 单价 数量 金额 计算水费

  32. (3) 标记耦合(特征耦合) 如两个模块通过传递数据结构 (不是简单数据,而是记录、数组 等)加以联系,或都与一个数据 结构有关系, 则称这两个模块 间存在标记偶合。

  33. 标记耦合举例 计算水电费 住户情况 住户情况 水费 电费 计算水费 计算电费 “住户情况”是一个数据结构,图中模块都 与此数据结构有关. “计算水费”和“计算电费”本无关,由于 引用了此数据结构产生依赖关系,它们之间 也是标记偶合.

  34. 将标记耦合修改为数据耦合举例 计算水电费 本月 用电量 本月 用水量 水费 电费 计算水费 计算电费

  35. (4) 控制耦合 一模块向下属模块传递的信息 (开关量、标志等控制被调用模块决策的变量) 控制了被调用模块的内部逻辑。

  36. 控制耦合举例 B 读入分数 A 平均/最高? 平均/最高 (控制信号) 成绩 计算平均分 计算最高分 B 输出结果 计算平均分 或最高分

  37. 控制耦合增加了理解和编程的复 杂性,调用模块必须知道被调模 块的内部逻辑,增加了相互依赖 去除模块间控制耦合的方法: (1)将被调用模块内的判定上移到调 用模块中进行 (2)被调用模块分解成若干单一功 能模块

  38. 改控制耦合为数据耦合举例 A 平均成绩 最高成绩 B1 B2 计算平均分 计算最高分

  39. (5) 外部耦合 一组模块均与同一外部环境关联 (例如,I/O模块与特定的设备、 格式和通信协议相关联),它们之 间便存在外部耦合。 外部偶合必不可少,但这种模块 数目应尽量少。

  40. (6) 公共耦合(公共数据区耦合) 一组模块引用同一个公用数据区 (也称全局数据区、公共数据环境)。 公共数据区指: • 全局数据结构 • 共享通讯区 • 内存公共覆盖区等

  41. 公共耦合举例 B C A 公共数据区 模块A、B、C间存在错综复杂的联系

  42. 公共耦合存在的问题: (1)软件可理解性降低 (2)诊断错误困难 (3)软件可维护性差, (6)软件可靠性差 (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!

  43. (7) 内容耦合 Entry1 …… Entry1 …… A B A B 一模块直接访问 另一模块的内部 信息 (程序代码 或数据) 模块代码重叠 多入口模块 最不好的耦合形式!!!

  44. 模块化设计的原则和目标 耦合是影响软件复杂程度和设计 质量的重要因素 目标:建立模块间耦合度尽可能    松散的系统

  45. 如何降低模块间耦合度: (1) 尽量使用数据耦合   少用控制耦合   限制公共耦合的范围 坚决避免使用内容耦合 (2) 降低接口的复杂性

  46. 2. 模块独立性的度量之二:内聚性 一个模块内部元素在功能上相互 关联的强度 设计目标:高内聚 (模块在软件过程中 完成单一的任务)

  47. 模块的内聚性类型 弱(功能分散) 低 偶然内聚0分 逻辑内聚1分 内 时间内聚3分 聚 过程内聚5分   性  通信内聚7分 信息内聚 9分 高 功能内聚10分 模 块 独 立 性 强(功能单一)

  48. 低内聚模块举例 为工程分析包执行错误处理的模块,当计算的数据超出预定义的边界时调用该模块,它完成下列任务: (1)根据初始计算的数据计算补充数据; (2)在用户的工作站上生成错误报告; (3)执行用户要求的跟踪计算; (6)更新数据库; (5)使选择后续处理的菜单有效。

  49. 低内聚模块举例 虽然上述任务是松散相关的,但每一项都是独立的功能实体,最好作为独立的模块完成。

  50. (1)偶然内聚(巧合内聚) 模块内各部分间无联系 A B C 例: M MOVE O TO R READ FILE F MOVE S TO T 模块M中的三个语句没有任何联系 缺点:可理解性差, 可修改性差

More Related