如图的系统中:深度为4;宽度为5;模块A的扇出 为5,扇入为0。模块K的扇出为0;扇入为2。 A B D E F H K
A B C D F G H I J K E 如图的系统中:深度为4;宽度为5;模块A的扇出 为5,扇入为0。模块K的扇出为0;扇入为2
4)模块的作用域应在控制域之内 控制域:控制范围,是包括模块本身以及 所有下属模块(直接调用模块和间接调用 模块)的集合 作用域:作用范围,它是一个与条件判定 相联系的概念。是受该模块内一个判定影 响的所有模块的集合 对作用域不在控制域的两种改进方法:判 定上移和在作用域但不在控制域的模块下 移
4) 模块的作用域应在控制域之内 • 控制域:控制范围,是包括模块本身以及 所有下属模块(直接调用模块和间接调用 模块)的集合。 • 作用域:作用范围,它是一个与条件判定 相联系的概念。是受该模块内一个判定影 响的所有模块的集合。 • 对作用域不在控制域的两种改进方法:判 定上移和在作用域但不在控制域的模块下 移
A 模块D的控制域为 D, G,H,I, J K D E 如果D中有一个条件判 H定仅影响到模块G和H, 其作用域为G,H,L,J,K 作用域在控制域内 K 如果D中判定影响到E,通常需在D为判定结果设置 标记,并把该标记通过上级模块A传递给E,导 致控制耦合。其作用域为D.G,H,I,JK和,作用 域在控制域内
A C D G H I J K E 如果D中判定影响到E,通常需在D为判定结果设置 一标记,并把该标记通过上级模块A传递给E,导 致控制耦合。其作用域为D,G, H, I, J, K和E ,作用 域在控制域内。 模块D的控制域为 D,G,H,I,J, K。 如果D中有一个条件判 定仅影响到模块G和H, 其作用域为G, H, I, J, K , 作用域在控制域内
5)降低接口复杂性 尽量少用goto,避免病态连接和内容耦合 注意全局变量的使用,控制外部耦合和公共 耦合的使用。 将数据结构的传递改成数据传递,例如:在 求一元二次方程根的模块 quad root(able,X) 中,利用系数数组 Table和根数组X进行参数 传递。如果将其改为直接的系数和根传递, 即 quad root(a,b,c,x1x2),则特征耦合→数据 耦
5) 降低接口复杂性 • 尽量少用go to,避免病态连接和内容耦合。 • 注意全局变量的使用,控制外部耦合和公共 耦合的使用。 • 将数据结构的传递改成数据传递,例如:在 求一元二次方程根的模块quad_root(Table, X) 中,利用系数数组Table和根数组X进行参数 传递。如果将其改为直接的系数和根传递, 即quad_root(a, b, c, x1 ,x2 ),则特征耦合→数据 耦合
6)设计单入口和单出口的模块 符合结构化程序设计的思想 应避免病态连接和内容耦合。 “一个功能一个模块”→提高软件的可读 性和可理解性 有效阻断“涟漪效应( ripple effect→提高 软件的可靠性和可维护性
6) 设计单入口和单出口的模块 • 符合结构化程序设计的思想 • 应避免病态连接和内容耦合。 • “一个功能一个模块”→提高软件的可读 性和可理解性。 • 有效阻断“涟漪效应(ripple effect)” →提高 软件的可靠性和可维护性