-
概要设计【外部设计】∶功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图
-
详细设计【内部设计】∶为每个具体任务选择适当的技术手段和处理方法
-
结构化设计原则
- 模块独立性原则(高内聚、低耦合)
- 保持模块的大小适中
- 扇入/扇出系数合理(多扇入,少扇出)
- 扇入:有几个模块调用它,扇入就为几
- 扇出:当前模块,需要几个其他模块配合工作
- 扇出越高,复杂度越高,耦合增加
- 深度和宽度均不宜过高
-
内聚类型
- 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
- 顺序内聚:处理元素相关,而且必须顺序执行
- 通信内聚:所有处理元素集中在一个数据结构的区域上
- 过程内聚:处理元素相关,而且必须按特定的次序执行
- 瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行
- 逻辑内聚:完成逻辑上相关的一组任务
- 偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务
- 自下向上:低内聚 =》高内聚
-
耦合类型
- 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
- 数据耦合:一组模块借助参数表传递简单数据
- 标记耦合:一组模块通过参数表传递记录信息(数据结构)
- 控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息
- 外部耦合:一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息
- 公共耦合:多个模块都访问同一个公共数据环境
- 内部耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部,两个模块有部分程序代码重叠;一个模块有多个入口
- 自上向下:高耦合 =》低耦合
-
模块的四个要素
- 输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那儿取得输入,进行加工后再把输出返回调用者
- 处理功能:指模块把输入转换成输出所做的工作
- 内部数据:指仅供该模块本身引用的数据
- 程序代码:指用来实现模块功能的程序
例5
以下关于软件系统模块结构设计的叙述中,正确的是() 。
A:当模块扇出过大时,应把下级模块进一步分解为若干个子模块
B:当模块扇出过小时,应适当增加中间的控制模块
C:模块的扇入大,表示模块的复杂度较高
D:模块的扇入大,表示模块的复用程度高
解析:
- 扇出是指一个模块直接调用的下级模块的数目。如果一个模块的扇出过大,那么这个模块可能承担了过多的职责,这会导致模块的复杂度增加,维护困难。当模块扇出过大时,应把该模块进一步分解为若干个子模块,以降低模块的复杂度;A错误。
- 扇入是指一个模块被其他模块调用的次数。如果一个模块的扇入过大,那么这个模块可能被多个模块依赖,这会增加模块的复用程度。模块的扇入大,表示模块的复用程度高;D正确。
- 模块的扇入大并不表示模块的复杂度高,而是表示模块的复用程度高;C错误。
- 模块的扇出过小并不一定需要增加中间的控制模块,这取决于具体的系统设计和需求。B错误。
答案:D。
例6
内聚表示模块内部各部件之间的联系程度,()是系统内聚度从高到低的排序。
A:通信内聚、瞬时内聚、过程内聚、逻辑内聚
B:功能内聚、瞬时内聚、顺序内聚、逻辑内聚
C:功能内聚、顺序内聚、瞬时内聚、逻辑内聚
D:功能内聚、瞬时内聚、过程内聚、逻辑内聚
解析
系统内聚度从高到低的排序:功能内聚、顺序内聚、通信内聚、过程内聚、顺势内聚、逻辑内聚、偶然内聚。
答案:C。