第 4章 总体设计总体设计又称为概要设计或初步设计,它的基本目的就是回答,概括地说,系统应该如何实现?” 这个问题 。 在总体设计阶段,应划分出组成系统的物理元素 —— 程序,文件,
数据库,人工过程和文档等,并确定系统中每个程序由哪些模块组成以及这些模块相互间的关系 。
4.1 总体设计的过程总体设计通常由系统设计和结构设计两个阶段组成。系统设计阶段确定系统的具体实现方案,结构设计阶段确定软件的结构。
第 4章 总体设计实施总体设计的过程如下,
1.设想供选择的方案
2.选取合理的方案
3.推荐最佳方案
4.功能分解
5.设计软件结构
6.数据库设计
7.制定测试计划
8.书写文档
9.审查和复审第 4章 总体设计
4.2 总体设计的图形工具一、层次图层次图 ( 也称 H图 ) 是在总体设计阶段最常使用的图形工具之一,它常用于描绘软件的层次结构 。 层次图中的每个方框代表一个模块,方框间的连线表示模块间的调用关系 。
层次图举例第 4章 总体设计二,HIPO图
HIPO图实际上由 H图和 IPO图两部分组成。 H
图即层次图,为了能使 HIPO图具有可跟踪性,在
H图里除了最顶层的方框之外,每个方框都加了编号; 和 H图中的每个方框相对应,有一张 IPO图描述这个方框代表的模块的处理过程。 IPO图能够方便地描述数据输入、数据处理和数据输出之间的关系。
它的基本形式是:在左边的框中列出有关的输入数据,在中间的框中列出主要的处理 —— 处理框中列出的处理次序暗示了执行的次序,在右边的框中列出产生的输出数据。另外,还用类似向量符号的粗大箭头清楚地指出数据通信的情况。 HIPO图 举 例第 4章 总体设计三、结构图结构图中的每个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头 ( 或直线 )
表示模块间的调用关系 。
在结构图中通常还用带注释的箭头表示模块调用过程中模块之间传递的信息 。 可以利用注释箭头尾部的不同形状来区分:尾部是空心圆表示传递的是数据,尾部是实心圆则表示传递的是控制信息 。
结构图举例第 4章 总体设计
4.3 软件设计的概念和原理一、模块化设计把大型软件按照规定的原则划分为一个个较小的、
相对独立但又相关的模块的设计方法,叫做 模块化设计 ( modular design)。 模块 ( module) 是数据说明和可执行语句等程序对象的集合,每个模块单独命名并且可以通过名字对模块进行访问。
实现模块化设计的重要指导思想是分解、信息隐藏和模块独立性。
第 4章 总体设计一、分解设函数 C(x)定义问题 x的复杂程度,函数 E(x)确定解决问题 x所需要的工作量(时间)。对于两个问题 Pl和 P2,如果 C(P1)> C(P2),
显然 E(P1)> E(P2)
根据人类解决一般问题的经验,如果一个问题由 Pl和 P2两个问题组合而成,那么它的复杂程序大于分别考虑每个问题时的复杂程度之和,即
C(Pl+ P2)> C(P1)+ C(P2)
综上所述,可得到下面的不等式
E(Pl+ P2)> E(Pl)+ E(P2)
第 4章 总体设计二,信息隐藏模块内部的数据与过程,应该对不需要了解这些数据与过程的模块隐藏起来 。 只有那些为了完成软件的总体功能而必需在模块间交换的信息,才允许在模块间进行传递 。
“隐蔽”意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。这一指导思想的目的是为了提高模块的独立性,即当修改或维护模块时减少把一个模块的错误扩散到其他模块中去的机会。
第 4章 总体设计三,模块独立性模块独立性( module independence) 概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。一般地,坚持模块的独立性是获得良好设计的关键。
模块的独立性可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚用于衡量一个模块内部各个元素间彼此结合的紧密程度。
第 4章 总体设计
1,耦合耦合 是对一个软件结构内不同模块之间互联程度的度量 。 耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点以及通过接口的数据 。
在软件设计中应该追求模块间尽可能松散耦合的系统 。 在这样的系统中可以研究,测试或维护任何一个模块,而不需要对系统中的其他模块有很多的了解 。 此外,由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小 。
第 4章 总体设计耦合的七种类型应该采取下述设计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合 。
第 4章 总体设计
2,内聚内聚标志着一个模块内部各个元素间彼此结合的紧密程度 。 简单地说,理想内聚的模块只做一件事情 。 设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多 。 但是,坚决不要使用低内聚 。
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的低耦合 。 内聚和耦合都是进行模块化设计的有力工具 。 实践表明,内聚更重要,应该把更多注意力集中到提高模块的内聚程度上 。
第 4章 总体设计内聚的七种类型设计时应力争做到高内聚,并且能够辨认出低内聚的模块,并采取措施进行修改,以提高模块的内聚程度,降低模块间的耦合程度,从而获得较高的模块独立性 。
第 4章 总体设计二,自顶向下逐步细化
1、自顶向下设计与由底向上自顶向下设计的特点:
a,易于修改和扩展
b,整体测试较易通过
c,需要进行详细的可行性论证由底向上设计的特点:
a,可能导致较大的重新设计
b,整体测试中可能在模块接口间发现不一致等问题
c,如果在可行性上出现问题,可以较早发现
2.逐步细化第 4章 总体设计三,启发式规则
( 1)改进软件结构提高模块独立性
( 2)改进软件结构提高模块独立性
( 3)深度、宽度、扇出和扇入应适中
( 4)模块的作用域应该在控制域之内
( 5)力争降低模块接口的复杂程度
( 6)设计单入口、单出口的模块
( 7)模块功能应该可以预测注:在软件开发过程中既要充分重视和利用这些启发式规则,又要从实际情况出发避免生搬硬套。
第 4章 总体设计
4.4 面向数据流的设计方法一、基本概念
1,变换流根据基本系统模型,信息通常以,外部世界,的形式进入软件系统,经过处理以后再以,外部世界,
的形式离开系统 。 信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统 。 当数据流图具有这些特征时,
这种信息流就叫做 变换流 。
第 4章 总体设计
2.事务流当数据流图,以事务为中心,,也就是说,数据沿输入通路到达一个处理 T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类系统的特征,是具有在多种事务中选择执行某种事务的能力。事务型结构由至少一条接受路径、一个事务中心和若干条动作路径组成。这类数据流应该划为一类特殊的数据流,称为 事务流 。
3,面向数据流方法的设计过程第 4章 总体设计二,SD方法概述
SD方法方法实施的要点是:
( 1)首先研究、分析和审查数据流图,从软件的需求规格说明中弄清数据流加工的过程。
( 2)然后根据数据流图决定问题的类型,即确定是变换型还是事务型。针对两种不同的类型分别进行分析处理。
( 3)由数据流图推导出系统的初始结构图。
( 4)利用一些试探性原则来改进系统的初始结构图,
直到得到符合要求的结构图为止。
( 5)修改和补充数据词典。
( 6)制定测试计划。
第 4章 总体设计三,SD方法的步骤简单地说,SD方法的步骤有两步,第一步是建立符合需求规格说明书要求的初始结构图(一般由数据流图导出初始结构图);第二步再用块间联系和块内联系等概念对初始结构图做进一步改进。
第 4章 总体设计四、设计优化
( 1) 在不考虑时间因素的前提下开发并精化软件结构;
( 2) 在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程 ( 算法 ),以求提高效率;
( 3) 使用高级程序设计语言编写程序;
( 4) 在软件中孤立出那些大量占用处理机资源的模块;
( 5) 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率 。