|
结构化设计(Structured Design,SD)方法是一种面向数据流的设计方法,它可以与SA方法衔接。结构化设计方法的基本思想是将系统设计成由相对独立、功能单一的模块组成的结构。
|
|
|
结构化设计方法中用结构图(Structure Chart)来描述软件系统的体系结构,指出一个软件系统由哪些模块组成,以及模块之间的调用关系。
|
|
|
|
结构化设计大致可以分为两步进行,第一步是建立一个满足软件需求规约的初始结构图,第二步是对结构图进行改进。
|
|
|
|
结构化方法本质上是一种功能分解方法。在结构化设计时,可以将整个软件看作一个大的功能模块(结构图中的模块),通过功能分解将其分解成若干个较小的功能模块,每个较小的功能模块还可以进一步分解,直到得到一组不必再分解的模块(结构图中的底层模块)。当一个功能模块分解成若干个子功能模块时,该功能模块实际上就是根据业务流程调用相应的子功能模块,并根据其功能要求对子功能的结果进行处理,最终实现其功能要求。
|
|
|
功能模块的分解应满足自顶向下、逐步求精、信息隐蔽、高内聚低耦合等设计准则,模块的大小应适中。通常,一个模块的大小以so~ioo行程序代码为宜,即一个模块的程序代码可以写在1-2页纸上。
|
|
|
|
初始结构图往往存在一些不合理的设计(包括不合理的模块分解),因此,可根据设计准则对其进行改进。
|
|
|
|
在概要设计完成之后应书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等,必要时可建立模块开发卷宗。
|
|
|
|
|
|
结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)。根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的映射分别称为变换分析和事务分析。
|
|
|
|
在需求分析阶段,用SA方法产生了数据流图。面向数据流的设计能方便地将DFD转换成程序结构图。DFD中从系统的输入数据流到系统的输出数据流的一连串连续变换形成了一条信息流。DFD的信息流大体上可以分为两种类型:变换流和事务流。
|
|
|
(1)变换流。信息沿着输入通路进入系统,同时将信息的外部形式转换成内部表示,然后通过变换中心(也称主加工)处理,再沿着输出通路转换成外部形式离开系统。具有这种特性的信息流称为变换流。变换流型的DFD可以明显地分成输入、变换(主加工)和输出三大部分。
|
|
|
(2)事务流。信息沿着输入通路到达一个事务中心,事务中心根据输入信息(即事务)的类型在若干个动作序列(称为活动流)中选择一个来执行,这种信息流称为事务流。事务流有明显的事务中心,各活动流以事务中心为起点呈辐射状流出。
|
|
|
|
|
|
把DFD中系统输入端的数据流称为物理输入,系统输出端的数据流称为物理输出。物理输入通常要经过编辑、格式转换、合法性检查、预处理等辅助性的加工才能为主加工的真正输入(称为逻辑输入)。从物理输入端开始,一步步向系统的中间移动,可找到离物理输入端最远,但仍可被看作系统输入的那个数据流,这个数据流就是逻辑输入。同样,由主加工产生的输出(称为逻辑输出)通常也要经过编辑、格式转换、组成物理块、缓冲处理等辅助加工才能变成物理输出。从物理输出端开始,一步步向系统的中间移动,可找到离物理输出端最远,但仍可被看作系统输出的那个数据流,这个数据流就是逻辑输出。
|
|
|
DFD中从物理输入到逻辑输入的部分构成系统的输入流,从逻辑输出到物理输出的部分构成系统的输出流,位于输入流和输出流之间的部分就是变换中心。
|
|
|
|
第一级分解主要是设计模块结构的顶层和第一层。一个变换流型的DFD可以映射成如下图所示的程序结构图。图中顶层模块的功能就是整个系统的功能。输入控制模块用来接收所有的输入数据,变换控制模块用来实现输入到输出的变换,输出控制模块用来产生所有的输出数据。
|
|
|
|
|
|
|
(1)输入控制模块的分解。从变换中心的边界开始,沿着每条输入通路,把输入通路上的每个加工映射成输入控制模块的一个低层模块。
|
|
|
(2)输出控制模块的分解。从变换中心的边界开始,沿着每条输出通路,把输出通路上的每个加工映射成输出控制模块的一个低层模块。
|
|
|
(3)变换控制模块的分解。变换控制模块通常没有通用的分解方法,应根据DFD中变换部分的实际情况进行设计。
|
|
|
|
|
(1)确定事务中心和每条活动流的流特性。下图给出了事务流型DFD的一般形式。其中,事务中心(图中的T)位于数条活动流的起点,这些活动流从该点呈辐射状流出。每条活动流也是一条信息流,它可以是变换流,也可以是另一条事务流。一个事务流型的DFD由输入流、事务中心和若干条活动流组成。
|
|
|
|
|
(2)将事务流型DFD映射成高层的程序结构。事务流型DFD的高层结构如下图所示。顶层模块的功能就是整个系统的功能。接收模块用来接收输入数据,它对应于输入流。发送模块是一个调度模块,控制下层的所有活动模块。每个活动流模块对应于一条活动流,它也是该活动流映射成的程序结构图中的顶层模块。
|
|
|
|
|
(3)进一步分解。接收模块的分解类同于变换分析中输入控制模块的分解。每个活动流模块根据其流特性(变换流或事务流)进一步采用变换分析或事务分析进行分解。
|
|
|
|
|
|
|
|