总体设计
软件设计的任务
以软件需求规格说明书为依据,着手实现软件的需求,并将设计的结果反应在“设计规格说明书”的文档中
总体设计(概要设计)
根据软件需求,设计软件系统结构和数据结构确定程序的组成模块之间的关系,从抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选取最佳方案和最合理的软件结构,从而用较低成本开发出高质量的软件系统
详细设计(过程设计)
确定模块内部的算法和数据结构,选定某种过程的表达形式来描述算法,生成详细文档
设计过程
- 提供选择方案
- 从需求阶段的数据流图出发
- 选取合理方案
- 系统流程图
- 组成系统的物理元素清单
- 成本效益分析
- 实现系统的进度计划
- 推荐最佳方案
- 功能分解
- 设计软件结构
- 设计数据库
- 制定测试计划
- 书写文档
- 系统说明
- 用户手册
- 测试计划
- 详细的实现计划
- 数据库设计结果
- 审查和复审
设计原理
模块化
什么是模块?
模块是数据说明和可执行语句等程序对象的集合,每个模块单独命名并且可以通过名字对模块进行访问
模块化思想
采用自顶向下的方式,逐层把软件系统划分成若干个可单独命名和可编址的模块,每个模块完成一个特定的子功能,所有模块按照某种方法组成一个整体,完成整个系统所要求的的功能。
模块化的优点
- 降低软件复杂性
- 减少开发工作量
- 降低成本
- 提高软件生产率
模块化与软件成本的关系
并非模块越多越好!
抽象
什么是抽象?
认识复杂事物和现象时,抽出事物本质的共同特性而暂不考虑他们的细节
逐步求精
为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。可以看做把一个时期内必须解决的问题按照优先级排序的技术,是一种自顶向下的设计策略
miller原则
一个人在任何时候都只能把注意力集中在5-9个知识块上
信息隐藏和局部化
在设计和确定模块时,使得一个模块内包含的信息(过程或数据),不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必项交换的信息。
局部化:将一些关系密切的软件元素物理地彼此靠近:如局部变量
模块独立(低耦合,高内聚)
模块只完成系统要求的相对独立的功能,符合信息隐蔽原则,模块间关联和依赖程度尽量小
优点
容易开发测试和维护
两个原则
低耦合、高内聚
详见另一篇博客:耦合与内聚
启发规则
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出、扇入应适当
- 模块的作用域应在控制域之内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测