总体设计

软件设计的任务

以软件需求规格说明书为依据,着手实现软件的需求,并将设计的结果反应在“设计规格说明书”的文档中

总体设计(概要设计)

根据软件需求,设计软件系统结构和数据结构确定程序的组成模块之间的关系,从抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选取最佳方案和最合理的软件结构,从而用较低成本开发出高质量的软件系统

详细设计(过程设计)

确定模块内部的算法和数据结构,选定某种过程的表达形式来描述算法,生成详细文档

设计过程

  1. 提供选择方案
    1. 从需求阶段的数据流图出发
  2. 选取合理方案
    1. 系统流程图
    2. 组成系统的物理元素清单
    3. 成本效益分析
    4. 实现系统的进度计划
  3. 推荐最佳方案
  4. 功能分解
  5. 设计软件结构
  6. 设计数据库
  7. 制定测试计划
  8. 书写文档
    1. 系统说明
    2. 用户手册
    3. 测试计划
    4. 详细的实现计划
    5. 数据库设计结果
  9. 审查和复审

设计原理

模块化

什么是模块?

模块是数据说明和可执行语句等程序对象的集合,每个模块单独命名并且可以通过名字对模块进行访问

模块化思想

采用自顶向下的方式,逐层把软件系统划分成若干个可单独命名和可编址的模块,每个模块完成一个特定的子功能,所有模块按照某种方法组成一个整体,完成整个系统所要求的的功能。

模块化的优点
  1. 降低软件复杂性
  2. 减少开发工作量
  3. 降低成本
  4. 提高软件生产率
模块化与软件成本的关系

并非模块越多越好!

抽象

什么是抽象?

认识复杂事物和现象时,抽出事物本质的共同特性而暂不考虑他们的细节

逐步求精

为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。可以看做把一个时期内必须解决的问题按照优先级排序的技术,是一种自顶向下的设计策略

miller原则

一个人在任何时候都只能把注意力集中在5-9个知识块上

信息隐藏和局部化

在设计和确定模块时,使得一个模块内包含的信息(过程或数据),不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必项交换的信息。

局部化:将一些关系密切的软件元素物理地彼此靠近:如局部变量

模块独立(低耦合,高内聚)

模块只完成系统要求的相对独立的功能,符合信息隐蔽原则,模块间关联和依赖程度尽量小

优点

容易开发测试和维护

两个原则

低耦合、高内聚

详见另一篇博客:耦合与内聚

启发规则

  1. 改进软件结构提高模块独立性
  2. 模块规模应该适中
  3. 深度、宽度、扇出、扇入应适当
  4. 模块的作用域应在控制域之内
  5. 力争降低模块接口的复杂程度
  6. 设计单入口单出口的模块
  7. 模块功能应该可以预测