软件结构设计.ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2) 保持适中的模块规模。 程序中模块的规模过大,会降低程序的可读性;而模块规模过小,势必会导致程序中的模块数目过多,增加接口的复杂性。对于模块的适当规模并没有严格的规定,但普遍的观点是模块中的语句数最好保持在10~100之间。为了使模块的规模适中,在保证模块独立性的前提下,可对程序中规模过小的模块进行合并或对规模过大的模块进行分解。 (3) 模块应具有高扇入和适当的扇出 在模块调用中,某个模块的上级模块数被称为该模块的扇入(如图4.3(a)所示,模块M的扇入数为n);而某个模块可以调用的下级模块数被称为该模块的扇出(如图4.3(b)所示,模块M的扇出数为k)。显然,一个模块的扇入表明了共有多少个模块需要调用该模块,而其扇出表明了该模块可以控制的下级模块的数目。 图4.3 模块的扇入和扇出 (a) 扇入;(b) 扇出 模块的扇入越大,则说明共享该模块的上级模块数越多,或者说该模块在程序中的重用性越高,这正是程序设计所追求的目标之一。当多个模块具有一部分相同功能时,应将这部分相同的功能分离出来,编写成独立的模块供需要的模块调用。通过消除不同模块中的重复内容,提高代码的可重用性,可以减少程序的总代码量,便于程序的测试和维护。 模块的扇出若过大,如在一个模块中要调用八个下级模块,则会使该模块的调用控制过于复杂。这种现象发生的原因通常都是由于设计阶段,模块细化的过程中,分解速度过快造成的。最常见的解决办法是通过在此模块和下级模块间增加一个中间层来控制模块分解的速度。模块的扇出过小,如扇出为1(下级模块层中只有一个模块),在系统设计中通常是不可取的。常见的解决方法是考虑将其合并到上级模块中。但若合并会影响模块的独立性,则将其保留下来也未尝不可。根据实践经验,设计良好的典型系统中,模块的平均扇出通常为3或4。 可以看出:在一个好的软件结构中,模块应具有较高的扇入和适当的扇出。但绝不能为了单纯追求高扇入或合适的扇出而破坏了模块的独立性。此外,经过对大量软件系统的研究后发现,在设计良好的软件结构中,通常顶层的扇出数较大,中间层的扇出数较小,底层的扇入数较大,如图4.4所示。 图4.4 软件结构图示例 (4) 软件结构中的深度和宽度不宜过大。 所谓深度,是指软件体系结构中控制的层数,它能够粗略地反映出软件系统的规模和复杂程度;所谓宽度,是指软件体系结构内同一层次上模块个数的最大值,通常宽度越大的系统越复杂。如图4.6所示的软件结构图中,深度为5,宽度为8。深度在程序中表现为模块的嵌套调用,嵌套的层数越多,程序就越复杂。模块可以调用的下级模块数越多,软件结构的宽度就越大。深度过大可通过将结构中过于简单的模块分层与上一级模块合并来解决;而宽度过大则可通过增加中间层来解决。显然,软件结构中的深度和宽度是相互对立的两个方面,降低深度会引起宽度的增加,而降低宽度又会带来深度的增加。 (5) 模块的作用域应处于其控制域范围之内。 模块的作用域是指受该模块内一个判定条件影响的所有模块范围。模块的控制域是指该模块本身以及所有该模块的下属模块(包括该模块可以直接调用的下级模块和可以间接调用的更下层的模块)。例如,在图4.5中,模块C的控制域为模块C、E和F;若在模块C中存在一个对模块D、E和F均有影响的判定条件,即模块C的作用域为模块C、D、E和F(图中带阴影的模块),则显然模块C的作用域超出了其作用域。由于模块D在模块C的作用域中,因此模块C对模块D的控制信息必然要通过上级模块B进行传递,这样不但会增加模块间的耦合性,而且会给模块的维护和修改带来麻烦(若要修改模块C,可能会对不在它控制域中的模块D造成影响)。因此,软件设计时应使各个模块的作用域处于其控制域范围之内。若发现不符合此设计原则的模块,可通过下面的方法进行改进: ① 将判定位置上移。如将图4.7中的模块C中的判定条件上移到上级模块B中或将模块C整个合并到模块B中。 ② 将超出作用域的模块下移。如将图4.5中的模块D移至模块C的下一层上,使模块D处于模块C的控制域中。 图4.5 模块的作用域和控制域 (6) 尽量降低模块的接口复杂度。 由于复杂的模块接口是导致软件出现错误的主要原因之一,因此在软件设计中应尽量使模块接口简单清晰,如减少接口传送的信息个数以及确保实参和形参的一致性和对应性等。降低模块的接口复杂度,可以提高软件的可读性,减少出现错误的可能性,并有利于软件的测试和维护。 (7)设计单入口单出口模块 (8)模块功能应该可以预测 4.5.1 描述软件结构用的图形工具 1. HIPO图 HIPO(Hierarchy Plus Inpu

文档评论(0)

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

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

1亿VIP精品文档

相关文档