网站大量收购独家精品文档,联系QQ:2885784924

第4章设计导论.ppt

  1. 1、本文档共134页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
此外,在实际的软件系统中出现更多的是混合型数据流图,该图混合了事务和变换两种类型的数据流。混合型数据流图如下例: 图4.29 混合型数据流图 因此,变换分析就是要运用变换分析的方法将变换型数据流图映射成软件结构。而事务分析则是采用事务分析的方法将事务型数据流图映射成软件结构。下图给出了面向数据流设计方法的基本流程。 在软件设计中除了有设计原理可以帮助软件设计人员设计出好的软件结构,还有大量在工程实践中由设计人员总结出来的设计方法和经验,这些方法和经验可能不具备通用性,但它们却是启发软件设计人员设计出好的软件结构的重要规则,并且随着时间的推移这些规则还会不断丰富和完善。故在软件工程中把这些规则称为“启发式规则”。 4.2.5 启发式规则 1. 消除重复功能 多个模块都包含了相同的程序代码段,则这些相同的程序代码段即为重复功能。好的软件设计中的重复功能应该尽可能少。故需要设法消除软件中的重复功能。重复功能描述如下图所示: 图4.16 包含了重复功能的软件结构图 2. 改进软件结构,提高模块独立性 对软件结构的改造不外乎两种方法,即模块分解和模块合并。模块分解是将完成多个功能的模块分解成多个独立完成一个功能的小模块,而模块合并是将多个小模块合并在一起,使合并后的大模块能完成一个特定的功能。通过分解和合并,软件设计人员可以降低软件模块间的耦合度,提高软件模块的内聚度。 3. 模块规模要适中 模块中的程序语句数要适当,模块规模不能太大,规模太大意味着该模块可能实现了多个功能,其内聚度可想而知,而它与其它模块之间的接口也会变得复杂,模块间的耦合度肯必会变大。此外,在一个大型软件系统中,模块的规模要比较均匀。在“软件详细设计”一章中将会对模块的复杂性进行定量评价,以控制模块的复杂性。 概要设计的重要任务之一就是设计出软件结构图,该图是一个树型结构,树中的每个结点都代表一个模块,而模块之间通过线段相连,表示相互的调用关系。因此,该图显式地表达了构成软件系统的各个模块以及它们之间的调用和被调用关系。 4. 软件结构图中的“深度”、“宽度”、“扇出”和“扇入”要合理 图4.19 某软件的软件结构图 软件结构的高度:软件结构树的层次数,即从最顶层父模块到最底层子模块之间的层次数。上图软件结构的高度是5; 软件结构的宽度:软件结构中每层均包含若干模块,而这些层次中若某层的模块数最多,则该数值即为软件结构的宽度,如上图软件结构的宽度是7; 模块的扇出:一个模块所包含的子模块的数量。上图M模块的扇出度是3; 模块的扇入:调用同一个模块的上层模块的数量。上图T模块的扇入度是4。 结合这些概念得到的启发式规则如下: “软件结构的高度”不宜太大,过大表示软件结构分解过细,模块间的耦合度会激增。但也不宜太小,过小表示软件分解不彻底,模块内聚度太小; “软件结构的宽度”不宜太大,过大表示系统过于复杂,但也不宜太小,过小则表示系统分解不彻底; “模块的扇出”要合理。经验表明:一个好的软件系统的平均扇出通常是3或4,扇出的上限通常是5~9。 “模块的扇入”要合理。低层扇入可以尽可能大,以提高模块的可复用性,但要注意没有违背模块独立性原则;尽量避免出现平铺的软件结构。 4. 模块的作用域应该在模块的控制域内 作用域:受该模块内一个判定影响的所有模块的集合。 控制域:这个模块本身及其所有直接或间接从属于它的模块的集合。 例如在下图中C模块的控制域是{C、D、E、F}。C模块的作用域可用伪代码表示: 图4.20 作用域和控制域举例 If(a==true) { Goto module D; } Else { If(b==true) Goto module E; Else Goto module F; } 可见,C模块的作用域是D模块、E模块和F模块,当前C模块的作用域在控制域之内。但是,若出现作用域超出了控制域,则需要将判定结点上移或把不在控制域内的模块移动到控制域内。 如果,C模块的作用域超出了它的控制域,则需要考虑改造软件结构,例如,若C模块作用域进入到B模块,则需要考虑将判定结点移动到A或者把B模块移入到C模块的控制域之内。 6. 力争降低模块接口的复杂性 据前述所讲内容,模块之间的接口复杂了,则它们间的耦合度必然增加了,这不利于设计好的软件结构,故在设计模块接口时要尽可能降低接口间的复杂性。 7. 设计单入口单出口的模块 在好的软件设计中,

文档评论(0)

bbnnmm885599 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档