结构化设计
- 定义:结构化设计是一种软件开发活动,旨在通过系统化的方法将需求规格转化为清晰的软件结构。
- 目标:降低系统复杂性,建立高内聚、低耦合的模块结构,便于理解、实现和维护。
设计层次
- 总体设计:从系统全局角度出发,确定模块划分和层次关系,形成初始设计并逐步精化。
- 详细设计:进一步描述每个模块的逻辑、接口和实现细节,确保可以直接进入编码。
整体框架
- 体系结构设计:定义系统的总体框架与模块分布。
- 接口设计:定义模块与模块、系统与系统、系统与用户之间的交互方式。
- 数据设计:定义数据存储结构、数据库模式以及数据流转。
总体设计
初始模块结构图设计
数据流图分类
- 变换型 DFD:强调数据从输入到输出的连续变换过程。
- 事务型 DFD:强调根据事务选择不同处理路径。
变换型设计步骤
- 复审并精化模型
- 确定系统边界
- 进行第一级分解,绘制顶层和第一层模块结构图
事务型设计步骤:通过事务处理逻辑确定模块分支和路径。
初始模块结构图精化的原则
- 模块:实现特定功能的一组过程与数据。
- 模块化:将系统划分为模块的过程,能显著降低复杂性。
耦合
- 内容耦合:一个模块直接修改另一模块内部数据
- 公共耦合:一组模块均访问同一全局数据区
- 外部耦合:一组模块均与外部环境有关
- 控制耦合:模块之间传输控制信息
- 标记耦合:模块间有数据结构依赖关系
- 数据耦合:模块之间有数据值传递
- 非直接耦合:模块之间没有任何关系
低耦合原则:通过接口隐藏细节、避免全局变量、强化封装
内聚
- 偶然内聚:模块组成部分没有关联
- 逻辑内聚:组件逻辑功能类似
- 时间内聚:模块各部分在同一时间内被执行
- 过程内聚:模块各部分受同一控制流支配
- 通信内聚:模块使用相同输入或输出的数据
- 顺序内聚:前一模块的输出,是后以模块的输入
- 功能内聚:模块各组成部分执行同一功能
高内聚原则:模块功能单一,暴露最小接口。
启发式规则:在精化过程中可借助经验和模式优化设计,提升内聚并降低耦合
- 改进软件结构,提高模块独立性
- 模块规模适中
- 深度、宽度、扇入和扇出适中
- 模块的作用域力争在控制域之内
- 降低模块接口的复杂性
- 模块功能应该可以预测
接口设计
- 模块接口:明确函数/过程调用方式与数据传递。
- 系统接口:规定系统与外部软件、硬件的交互方式。
- 人机交互界面:
- 特性:可使用性、灵活性、可靠性。
- 用户类型:外行、初学者、熟练者、专家。
- 设计原则:一致性、操作简洁、避免无反馈、支持撤销、减少记忆负担、提高学习效率。
数据设计
- 文件存储:系统需要的文件结构及存储方式。
- 数据库设计:定义数据模型、关系模式及访问方式,现代设计常结合 ORM 实现。
详细设计
工具
- 伪代码:用接近自然语言的方式描述逻辑。
- 程序流程图:可视化控制流。
- PAD 图、N-S 图:结构化图形化工具。
- 判定表与判定树:用于处理复杂条件和决策逻辑。
软件设计规约
- 概要设计规约:系统环境、模块设计、文件与全局数据描述。
- 详细设计规约:每个模块的详细逻辑和接口。
- 规约格式:形成统一、标准化的文档输出。
软件设计评审
- 非正式评审:小范围交流、走查代码与文档。
- 正式评审:严格的会议评审流程,确保设计符合规范与需求。