总体设计的基本目的是回答“概括地说,系统应该如何实现”这个问题,因此总体设计又称为概要设计或初步设计。

本阶段的工作讲划分出组成系统的物理元素:程序、文件、数据库、人工过程和文档等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里面的具体内容将在后面的详细设计完成。

两个阶段:

系统设计:确定系统具体实现方案

结构设计:确定软件结构

九个步骤:

  1. 设想供选择的方案
  2. 选取合理的方案
  3. 推荐最佳方案——>进入下一个阶段结构设计
  4. 功能分解:先进行结构设计确定软件结构,然后进行过程设计
  5. 设计软件结构
  6. 设计数据库
  7. 制定测试计划
  8. 书写文档:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果
  9. 审查和复审

设计原理

  1. 模块化:把程序划分程独立命名且可独立访问的模块,每个模块完成一个子功能,再把这些模块集成起来构成一个整体,可以完成指定的功能以满足用户需求。(分治)
  2. 抽象
  3. 逐步求精
  4. 信息隐藏和局部化
  5. 模块独立:耦合、内聚

启发规则:经验之谈!

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

描绘软件结构的图形工具

  1. 层次图和HIPO图
  2. 结构图

面向数据流的设计方法

在软件工程的需求分析阶段,信息流是一个关键考虑,通常用数据流图描绘信息在系统中加工和流动的情况。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。因为任何软件系统都可以使用数据流图表示,所以面向数据流的设计方法在理论上可以设计任何软件结构。通常所说的结构化设计方法(SD方法)就是基于数据流的设计方法。

信息流—>软件结构,信息流的类型决定了映射的方法,信息流有两种:变换流和事务流。

变换分析:一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。

事务分析:一个接受分支和一个发射分支

设计优化:先有再优,先能够运行再优化效率

小结

总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。因此﹐总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,分析员应该仔细分析比较这些方案,并且和用户共同选定一个最佳方案。然后进行软件结构设计,确定软件由哪些模块组成以及这些模块之间的动态调用关系。层次图和结构图是描绘软件结构的常用工具。

在进行软件结构设计时应该遵循的最主要的原理是模块独立原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成,这些模块彼此之间的接口关系应该尽量简单。

抽象和求精是一对互补的概念﹐也是人类解决复杂问题时最常用﹑最有效的方法。在进行软件结构设计时一种有效的方法就是,由抽象到具体地构造出软件的层次结构。

软件工程师在开发软件的长期实践中积累了丰富的经验,总结这些经验得出一些很有参考价值的启发式规则,它们往往能对如何改进软件设计给出宝贵的提示。在软件开发过程中既要充分重视和利用这些启发式规则,又要从实际情况出发避免生搬硬套。

自顶向下逐步求精是进行软件结构设计的常用途径;但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图映射出软件结构。应该记住﹐这样映射出来的只是软件的初步结构,还必须根据设计原理并且参考启发式规则,认真分析和改进软件的初步结构,以得到质量更高的模块和更合理的软件结构。

在进行详细的过程设计和编写程序之前,首先进行结构设计,其好处正在于可以在软件开发的早期站在全局高度对软件结构进行优化。在这个时期进行优化付出的代价不高,却可以使软件质量得到重大改进。