一、改进软件结构提高模块独立性
通过模块分解或合并,降低耦合提高内聚。
两个方面:
1、模块功能完善化。一个完整的模块包含:
■执行规定的功能的部分
■出错处理的部分
■返回一个“结束标志”
2、消除重复功能,改善软件结构。
■完全相似
■局部相似
![2$JKP9]{NB)TVME]1F`Q@%Q.png](https://p.ananas.chaoxing.com/star3/origin/f2ae47fdc6381214366878e3451951a6.png)

二、模块规模应该适中
经验表明,一个模块的规模不应过大,最好能写在一页纸内。通常规定50~100行语句,最多不超过500行。数字只能作为参考,根本问题是要保证模块的独立性。
过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。
过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。
三、深度、宽度、扇出和扇入都应适当
深度:软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
宽度:软件结构内同一个层次上的模块总数的最大值。
扇出:一个模块直接控制(调用)的模块数目。
扇入:有多少个上级模块直接调用它。


四、模块的作用域应该在控制域之内
模块的作用域:定义为受该模块内一个判定影响的所有模块的集合。
模块的控制域:是这个模块本身以及所有直接或间接从属于它的模块的集合。
在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。

解决方案:
■把模块A中的判定移到模块M中;
■把模块G移到模块A下面,作为他的下级模块。

五、力争降低模块接口的复杂程度
模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。
例:解一元二次方程的函数
QUAD_ROOT(TBL,X) --不合理
■其中数组TBL传送方程的系数
■数组X送回求得的根
QUAD_ROOT(A,B,C,ROOT1,ROOT2) --合理
六、设计单入口单出口的模块
警告软件工程师不要使模块间出现内容耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。
七、模块功能应该可以预测
模块的功能应该能够预测,但也要防止模块功能过分局限。
功能可预测:如果一个模块可以当做一个黑盒子,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。

