面向过程的软件设计方法
● 软件设计的目标和任务
根据信息域表示的软件需求,以及功能和性能需求,进行数据设计、系统结构设计和过程设计
● 软件设计任务
- 概要设计(总体设计):软件的需求转化为数据结构和软件的系统结构
- 详细设计(过程设计):通过对结构表示进行细化,得到软件的详细的相信结构和算法
● 软件设计过程
- 制定规范
- 软件系统结构的总体设计
- 处理方式设计
- 数据结构设计
- 可靠性设计
- 编写概要设计阶段的文档
- 概要设计评审
● 软件设计基础
- 自顶向下,逐步细化
- 软件结构
- 程序结构:程序的模块结构和数据的结构
- 结构图:反应程序中模块之间的层次调用关系和联系
- 模块化:能够把一个大而复杂的软件系统划分成易于理解的比较淡出的模块结构
- 抽象化:软件系统进行模块设计师,可以有不同的抽象层次
- 信息隐蔽
● 程序结构
- 模块
- 模块的调用关系和接口
- 模块间的传递信息
- 表示模块A有条件地调用另一个模块B
● 概要设计的过程
- 设计系统方案
- 选取一组合理的方案
- 推荐最佳实施方案
- 功能分解
- 软件结构设计
- 数据库设计、文件结构的设计
- 制定测试计划
- 编写概要设计文档
- 审查与复查概要设计文档
● 耦合
- 非直接耦合
两个模块之间没有直接关系 - 数据耦合
一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息 - 控制耦合
一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能 - 公共环境耦合
- 一组模块都访问同一个公共数据环境
- 内容耦合
- 标记耦合
一组模块通过参数表传递记录信息 - 外部耦合
- 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息
小结:耦合是影响复杂程度的一个重要因素,采取的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合
● 内聚
- 功能内聚
一个模块中各个部分都是完成某一具体功能必不可少的组成部分,是不可分割的 - 信息内聚
这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点 - 通信内聚
一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据 - 过程内聚
使用流程图作为工具设计程序时,把流程图中的某一部分划出组成模块 - 时间内聚
时间内聚模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行 - 逻辑内聚
这种模块把集中相关的功能组合在一起 - 巧合内聚
模块内各部分之间没有联系,或者即使有联系,这种联系也很松散
● 结构设计原则
- 显著改进软件结构提高模块独立性
- 模块规模应该适中
- 适当选择深度、宽度、扇出和扇入
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测