总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。因此,总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,分析员应该仔细分析比较这些方案,并且和用户共同选定一个最佳方案。然后进行软件结构设计,确定软件由哪些模块组成以及这些模块之间的动态调用关系。层次图和结构图是描绘软件结构的常用工具。
在进行软件结构设计时应该遵循的最主要的原理是模块独立原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成,这些模块彼此之间的接口关系应该尽量简单。
抽象和求精是一对互补的概念,也是人类解决复杂问题时最常用、最有效的方法。在进行软件结构设计时一种有效的方法就是,由抽象到具体地构造出软件的层次结构。
软件工程师在开发软件的长期实践中积累了丰富的经验,总结这些经验得出一些很有参考价值的启发式规则,它们往往能对任何改进软件设计给出宝贵的提示。在软件开发过程中既要充分重视和利用这些启发式规则,又要从实际情况出发避免生搬硬套。
自顶向下逐步求精是软件结构设计的常用途径;但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图映射出软件结构。应该记住,这样映射出来的只是软件的初步结构,还必须根据设计原理并且参与启发式规则,认真分析和改进软件的初步结构,以得到质量更高的模块和更合理的软件结构。
在进行详细的过程设计和编写程序之前,首先进行结构设计,其好处正在于可以在软件开发的早期站在全局高度对软件结构进行优化。在这个时期进行优化付出的代价不高,却可以使软件质量得到更大改进。