软件系统设计基本原则

冷暖自知 提交于 2019-11-30 19:26:44

一、抽象

抽象是一种设计技术,说明一个实体的本质,而忽略不重要的方面。抽象将复杂的现象简化到可以分析、理解的程度。软件工程中从软件定义到软件开发要经历多个阶段,每前进一个阶段都可以看作是对软件解法的抽象层次的一次细化。抽象的最底层就是实现该软件的源程序代码。在进行模块化设计时也可以有多个抽象层次,最高抽象层次的模块用概括的方式叙述问题的解法,较低抽象层次的模块是对较高抽象层次模块对问题解法描述的细化。

 

二、模块化

模块在程序总是数据说明、可执行语句等程序对象的集合,或是单独命名和编址的元素。模块化是指将一个待开发的软件分解成若干个小的简单部分--模块,每个模块可独立开发、测试,最后组装成完整的程序。只是一种分而治之的原则。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

 

三、封装

封装是开发程序结构时使用的法则,每个程序的成分封装在一个单一的模块中,在定义每个模块时尽可能少的显露内部的处理。

封装对提高软件的可修改性、可测试性和可移植性有重要的作用。

 

四、模块独立

模块独立是指每个模块完成一个相对独立的特定子系统,并且与其他模块之间的联系简单。模块独立有两个标准:耦合性和内聚性。

1、耦合是模块之间的相对独立性(相互之间的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口信息类型等。

耦合按从弱到强的顺序分为以下几种:

非直接耦合:两个模块之间没有直接关系,它们分别属于不同模块的控制与调用,它们之间不传递任何信息。因此,耦合性最弱,模块独立性最高。

数据耦合:两个模块之间有调用关系,传递的最简单的数据值,在程序中相当于值传递。

标记耦合:两个模块之间传递的是数据结构。

控制耦合:一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。

外部耦合:模块间通过软件之外的环境联结。

公共耦合:通过一个公共数据环境相互作用那些模块间的耦合。

内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部。


2、内聚是一个模块内部各个元素彼此结合的紧密程度的度量。

内聚从低到高分为以下几种:

偶然内聚(巧合内聚):一个模块内的各个元素直接没有任何联系。

逻辑内聚:模块内执行若干个逻辑相似的功能,通过参数确定该模块完成哪一个功能。

时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

过程内聚:一个模块完成多个任务,必须按照指定的过程执行。

通信内聚:模块内的所有处理元素都在同一个数据结构上操作,或者各处使用相同的输入数据或产生相同的输出数据。

顺序内聚:一个模块中的各个处理元素都密切相关同一个功能且顺序执行,前一个功能元素的输出是下一个元素功能的输入。

功能内聚:模块内所有元素完成同一个功能,缺一不可,是最强的内聚。

将软件划分系统模块是,应尽量做到高内聚、低耦合,提高模块独立性。


五、系统深度

表示软件结构中控制的层 数,它往往能粗略地标志一个系统的大小和复杂程度。如果层数过多则应该考虑是否有许多管理模块过分简单, 能否适当合并。


六、系统宽度

是软件结构内同一个层次上的模块总数的最大值。宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出 。


七、模块扇出

模块的扇出是指一个模块直接控制(调用 )的下层模块数目 。扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;扇出过小也不好。设计得好的系统平均扇出是3或4。


八、模块扇入

是指有多少个上级模块调用它,扇入越大则共享该模块的上级模块数目越多 。


在模块分解时需要注意:
保持模块的大小适中
尽可能减少调用的深度
直接调用该模块的次数应该尽最多,但调用其他模块的次数则不宜过多(扇入大,扇出小)。好的软件设计结构顶层高扇出,中间扇出较少,底层高扇入。
保证模块是单入口、 单出口的,模块的作用域应该在模块之内
功能应该是可预测的


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!