提出的问题内容摘要:

有效的解决方法的创造性过程。 有许多 设计方法 没有一样是能很好地解决所有问题的 选择最好的方法可能因人而异 什么是软件设计。 下一页 上一页 停止放映 第 45/164 页 设计过程是设计师把实用知识映射到计算知识。 设计是一个影射 • 功能 • 用户操作 • 约束 • 例外 • 器件 • 组织 • 结构 • 算法 • 资源 • 数据 实用知识 计算知识 下一页 上一页 停止放映 “一个设计者能对着复杂的设计沉思几个月。 然后突然间冒出简单 、 雅致而又漂亮的解决办法。 当这发生在你身上时 , 感觉好像是上帝正在说话 !也许真的是这样。 ” Leo Frankowski in The CrossTime Engineer 关于设计的论述一 下一页 上一页 停止放映 “好的设计者应具备深厚的应用领域知识。 ” Curtis’ law 关于设计的论述二 下一页 上一页 停止放映 第 48/164 页 软件设计概述  目标和任务 – 任务 依据分析结果 , 明确系统 “ 如何做。 ” , 建立实现方案。 – 目标 提高软件系统的: •可维护性 可扩充 、 可修改 •可理解性 对软件人员要易读易理解;对用户要易使用 、 易维护 •可靠性 包括正确性和健壮性 下一页 上一页 停止放映 第 49/164 页 设计方法和步骤  概要设计 定义系统的逻辑结构 , 包括:系统的模块划分 、 建立模块的层次结构 、 逻辑关系 、 设计全局 DS及 DB;  详细设计 根据每个模块的功能描述 , 设计模块内部的实现算法 、 模块所需要的局部数据结构。 下一页 上一页 停止放映 第 50/164 页 设计方法:  概要设计方法 早期:模块化方法 、 功能分解法; 典型:面向数据流 、 面向数据结构设计方法 面向数据结构方法 Jackson(JSD) 近期:面向对象 ( OO) 的设计方法  详细设计方法 主要是结构化程序设计方法  详细设计的表示工具 图形工具 : 程序流程图 、 程序分析图和 NS图 语言工具 : 伪码和程序设计语言 ( PDL) 下一页 上一页 停止放映 第 51/164 页 文档资料  设计阶段要交付的文档是设计说明书。  内容包括: – 概述 描述设计工作总范围;系统目标 、 功能等; – 系统结构 包括:系统模块划分 、 每个模块的功能简介 、 各个模块之间的逻辑关系; – DS及 DB设计 用图表把设计结果描述出来; – 接口设计 包括:人机界面设计 、 软硬件之间的接口设计 、 系统与外界以及与支持软件之间的接口关系; – 模块设计 根据模块功能 , 用相应的工具描述每个模块的流程 , 以及每个模块用到的数据结构。 下一页 上一页 停止放映 第 52/164 页 软件设计原则 软件设计的重要性表现在软件的质量。 如何设计才能保证质量。 一般原则: 1) 分层次。 便于对各个构件进行控制。 2) 模块化。 应形成具有独立功能特征的模块。 3) 表达式。 应有性质不同 、 可区分的数据和过程描述。 4) 接口简单。 应使模块间和与外部环境间接口的复杂性尽量地减小。 5) 可重用性。 应利用软件需求分析中的信息和可重复的方法。 下一页 上一页 停止放映 “每一个模块的特征表现在:它隐藏于其它的设计知识中。 它的界面选择应该尽量少地暴露内部的工作。 ” D. L. Parnas 什么是好的设计 ? 下一页 上一页 停止放映 第 54/164 页 软件设计准则 如何度量软件设计的标准 ?…… 不分模块的程序是无法理解 、 管理和维护的。 一般程序设计者都自觉或不自觉地将程序划分为模块。 但有这样一个实际问题 , 一个系统到底划分为多少个模块好呢。 如何度量模块化的程度呢。 下一页 上一页 停止放映 第 55/164 页 经典设计准则 – 软件结构准则 – 模块化准则 – 模块独立性准则 – 模块的偶合性 – 模块的内聚性 下一页 上一页 停止放映 第 56/164 页 软件结构准则 好的软件结构应具有倒置水缸形,在顶部有较高的 扇出数 (一个模块直接下属的子模块数),在底部有较高的 扇入数(模块的直接上属模块的个数)。  扇出数适当 扇出数大意味着控制复杂,扇出数小,软件结构的层次深,浪费CPU时间。 经验表明,好的软件结构的扇出数是 3~ 4,上限是 5~ 9。  扇入数越大,则表示共享该模块的上级模块数越多,可重用性越好。 示意图 下一页 上一页 停止放映 第 57/164 页 结构形态准则示意图 深度 宽度 扇出 扇入 下一页 上一页 停止放映 第 58/164 页 软件结构准则 (续 ) 判断的影响范围应该是控制范围的一个子集。 – 影响范围 指在一个模块中有一个判别条件,所有受该判别条件影响的模块的集合称为影响范围; – 控制范围 指一个模块本身及所有下属模块构成的集合。 B模块的 控制范围 是 B、D、 E、 F、 G、 H; 假设 E中有一个判别条件,受其影响的模块有 F、G、 H,则 E的 影响范围 是 F、G、 H。 M E A B C D F G H 下一页 上一页 停止放映 第 59/164 页 模块化准则  设 C(X) 是关于问题 X的复杂性 , E(X) 是完成问题 X的工作量 , 有两个问题 P1和 P2: 若 C(P1) C(P2) , (即 P1比 P2复杂 ) E(P1) E(P2), (即 P1比 P2用的工作量多 ) 而 C(P1+P2) C(P1) + C(P2), (即 组合问题比单个问题复杂 ) 则 E(P1+P2) E(P1) + E(P2) (组合问题的工作量大于单个问题的工作量之和 )  这说明 : 软件分解为若个模块后 ,则总的工作量减少 , 但分解到一定程度后 , 模块之间的接口工作量就上升 , 从而使总的代价上升。 下一页 上一页 停止放映 第 60/164 页 模块化准则示意图 代价 模块数 模块代价 接口代价 总代价 M 下一页 上一页 停止放映 第 61/164 页 模块化准则讨论  软件系统模块化数目存在一个最佳值 M。  根据心理学研究表明 , 一个模块的语句数量以30~50句为易。  模块太大 , 难于阅读和理解;编程和测试的效率也不高。  模块太小 , 又会使系统过于零碎 , 接口的工作量增加。 下一页 上一页 停止放映 第 62/164 页 模块独立性准则  模块独立性是指开发具有功能专一、模块之间无过多相互作用的模块。 具有独立性的模块, 开发容易 、 能减少错误的传播 ,宜于模块重组、分解 , 容易调试和维护。  度量模块的独立性标准: – 内聚性 模块内部各部分之间联系紧密程度的度量; – 藕合性 模块之间联系紧密程度的度量。  显然,独立性强的模块,藕合性越小越好,内聚性越大越好。 下一页 上一页 停止放映 第 63/164 页 模块的藕合性及其分类 无直接藕合 模块之间无调用关系 数据藕合 通过参数调用在模块间传递简单数据。 传递参数可以是加工的数据或控制用数据 标记藕合 通过参数传递一种数据结构值。 控制藕合 通过参数传递逻辑变量,起控制作用 外部藕合 指模块受软件的外部环境的约束。 内容藕合 指一个模块使用另一个模块内的数据或控 制信息;或直接转移到另一个模块内部。 公用藕合 几个模块公用一个全程数据区;这种问题就比较复杂。 如果是动态并发程序 , 情况就更复杂了。 不光是模块间数据引用的冲突问题 , 还有时间差数据变更问题。 低 藕 合 中藕合 高 藕 合 下一页 上一页 停止放映 第 64/164 页 一个模块直接调用另一个的内部代码。 这样就变成了分支关系,而不是调用关系 例如 ,模块 A修改了模块 B的一个语句; 模块 B的任何变化会导致模块 A也发生变化; 很大的依赖性 — 最差。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。