结构化设计(SD,Structured Design)方法是由美国IBM公司的Constantine等人研究出来的,这是用于总体设计的一套方法,与SA方法联合使用。SD方法的出发点是建立一个结构良好的软件系统,基本思想来源于模块化、自顶向下逐步求精的功能划分,评价软件结构的准则是模块独立性,即模块内聚性高、模块之间的耦合性低。[4]SD方法提供了从数据流图导出软件结构的方法和规则,它采用软件结构图来描述软件结构。
SD方法应用较为广泛,它的基础是数据流图,几乎所有软件都能表示为数据流图,所以在理论上可适用于任何软件的开发工作。用SD方法进行总体设计的过程大致如下:
(1)精细化数据流图,确定数据流图的类型;
(2)指出各种信息流的流界;
(3)将数据流图映射为软件结构;
(4)精细化软件结构图;
(5)开发接口描述和全程数据描述。
▶3.3.2.1 数据流图的类型
数据流图可分为两大类型:变换型和事务型。大多数数据流图可看成对输入数据流进行变换而得到输出数据流,因此有输入流、输出流、变换流三部分。在输入流中,信息由外部数据转换为内部形式进入系统;在变换流中,对内部形式的信息进行一系列加工处理,得到内部形式的结果;在输出流中,信息由内部形式的结果转换为外部形式数据流出系统。这就是变换型数据流图的特点。
事务型数据流图的特点是一个数据流经过某个加工后,有若干平行数据流流出,那个输入数据流称为事务流,那个加工称为事务中心,若干平行数据流称为事务路径。当事务流中的事务送到事务中心后,事务中心分析每一事务,确定其类型,根据事务类型选择一个事务路径继续进行处理。
在一个大的数据流图中,可能变换型和事务型均存在,总的来说以变换为主,某个局部可能是事务型的。
▶3.3.2.2 软件结构图
软件结构用一种结构图来描述,它是设计说明书的一部分。用方框表示模块,方框中用文字标记该模块的名字,方框之间的连线表示关系(见图3-1)。A是B、C的直接上层模块,B、C是A的直接下层模块,表示控制关系的连线不加箭头,模块之间的小箭头表示接口信息,小箭头旁边标记的文字表示接口信息的名字,小箭头的方向表示接口信息传送的方向。模块之间的菱形符号表示上层模块有条件地调用下层模块,弧形箭头表示上层模块重复地调用下层模块。
图3-1 软件结构图
▶3.3.2.3 变换分析
使用变换分析技术可从典型的变换型数据流图推导出相应的软件结构图,变换分析是一组设计步骤,可把数据流图映射为一种标准结构。有了标准结构再根据软件结构的度量准则、模块化准则、模块独立性准则来修改完善软件结构图,从而得到良好的软件结构。
交换分析步骤为:确定数据流图的类型;确定输入流、中心加工和输出流的流界;第一级分解,设计上层模块;第二级分解,设计中下层模块;进一步精细化。
▶1.确定数据流图的类型
一般从整体上看,一个系统总可分为输入、处理、输出三大部分,因此,总可以表示为变换型。但在某个局部的数据流图中,可能遇到多分支,则是典型的事务型,故应根据数据流图的主要性质来决定整个软件系统的数据流图特征。
▶2.确定流界
这一步主要是找出输入流、中心加工和输出流三者之间的分界线。首先找出输入流的终点,输入流是把物理输入转换为逻辑输入;然后找出输出流的起点,输出流是把逻辑输出转换为物理输出;位于逻辑输入和逻辑输出之间的加工就是中心加工。
▶3.第一级分解,设计上层模块
在中心加工位置上画一个控制模块CM,功能是控制整个软件结构,这是顶层模块。为每个输入流设计一个输入控制模块CA,功能是协调输入数据的处理工作,提供逻辑输入信息。为每个输出流设计一个输出控制模块CD和CE,功能是协调输出数据的处理。为中心加工设计一个变换控制模块CT,功能是将逻辑输入变换为逻辑输出。上层模块设计结果(见图3-2)。
图3-2 顶层结构图
▶4.第二级分解,设计中下层模块(www.xing528.com)
自顶向下,逐步求精,为每个输入流加工设计一个输入模块,向上层模块提供输入信息,而这个模块又需要两个下层模块,一方面本身需要信息来源,另一方面又需将接收到的信息转换为上层模块所需的信息,即为“取信息模块”和“转换信息模块”。如图3-9中的数据流图,C是逻辑输入数据流,已经设计CA模块向模块CM提供输入信息C,而CA模块又需要两个下层模块,首先要得到输入信息B,然后将B转换为C,即设计“取B”模块和“转换B”模块。也可以说沿输入流逆向分析,对每个加工设计两个模块,如图3-3中的2号加工,设计“取B”和“转换B”两个模块,对1号加工也设计两个模块。“取A”和“转换A”模块,“转换A”的输出信息是B,传送到上层模块“取B”,模块“转换B”的输出信息是C,传送到上层模块CA,如图3-3(a)所示。按此方法一直分解下去,直到遇到物理输入为止。数据流A是物理输入,所以分解到此为止。
为每个逻辑输出流设计一个输出模块,图3-2中有两个逻辑输出流D和E,已经设计了CD模块和CE模块,下面以CD模块为例进行说明。CD模块的功能是要输出CM模块送来的数据流D,为此要设计两个下层模块,一个要把送来的信息进行转换,另一个要把转换后的信息送走。也就是说对每个逻辑输出流,沿流向分析,对每个加工设计两个模块,一个是“转换信息”模块,另一个是“送信息”模块。如图3-2中的3号加工,设计“转换D”和“送F”模块;4号加工和5号加工,分别设计“转换E”“送G”“转换G”“送H”模块,如此分析下去,一直到遇到物理输出为止。因为数据流F和H是物理输出数据流,所以分解到此为止。设计的中下层结构如图3-3(b)和(c)所示。为中心加工设计变换模块,变换模块的设计无规律性,一般可根据中心加工的子加工来建立模块,现给图3-2的数据流图的逻辑输入C和逻辑输出D、E设计出相应的变换模块,如图3-3(d)所示。
图3-3 中下层结构图
上述设计中下层模块的映射方法是将一个加工映射为两个模块,另一种设计中下层模块的映射方法是将一个加工映射为一个模块。
▶5.进一步精细
由上述步骤得到的软件结构图是按映射规则得到的标准结构图,这只是一个初步的设计,可能有不符合软件设计准则的地方,就要用前面介绍的软件设计准则来检查软件结构图,进一步修改和完善这个结构图。例如有些模块仅仅是传送一些信息,没有什么处理工作,这种模块就可以取消;有些模块功能很多,很复杂,需进一步分解;有的模块的作用域可能不在该模块的控制域内,则要做适当调整才行。
▶3.3.2.4 事务分析
当数据流图呈现出事务型特征时,就要用事务分析技术,将相应的数据流图映射为对应的标准结构图,其步骤与变换分析相同。
▶1.决定数据流图类型
事务型数据流图的显著特点是有一事务流,经过事务中心后,发散为若干事务路径,某一事务只按其中一条事务路径处理下去。
▶2.确定流界
首先识别事务流、事务中心和事务路径。事务中心前是接受事务,事务中心后是事务路径。而事务中心本身有着显著特点,即一股数据流流入,有若干数据流流出。因此,事务型的流界比变换型的流界容易确定。
▶3.第一级分解,设计上层模块
事务分析把数据流图映射成具有接受分支和发送分支的软件结构,对应事务中心,设计“事务控制”模块;对应事务流,设计“接受事务”模块;对应事务路径,设计一个“发送事务”控制模块。
▶4.第二级分解,设计中下层模块
对于接受分支,可类似于变换型数据流图中对输入数据流的映射那样设计中下层模块。对于发送分支,在发送事务控制模块下为每条事务路径设计一个事务处理模块,这一层模块称为事务层。在事务层模块下,沿各事务路径进行分析,进一步设计操作层模块,然后再为操作模块设计细节模块。某些操作模块和细节模块可以被几个上一层模块共用。
▶3.3.2.5 设计后处理
进行变换分析和事务分析之后,将数据流图映射为标准结构图,然后再加以修改完善,最后还要对每个模块的功能、接口信息、局部数据加以定义。要用自然语言来描述每个模块的主要任务、主要功能、输入信息、输出信息等,这种定义起高一级的过程描述作用,以后在详细设计期间还要进一步精细。
设计后处理可用两种方法来描述,详细描述可用IPO图,一张IPO图描述一个模块;简单的描述可用一张表格。
软件设计,就是要确定软件由哪些模块组成及这些模块之间的动态调用关系,软件结构图是描述软件结构的常用工具。在进行软件结构设计时,应该遵循的最主要的准则是模块独立性准则,也就是说软件应该由一组具有相对独立功能的模块组成,这些模块彼此间的接口关系应该尽量简单,软件结构准则及模块化准则也能给如何改进软件结构设计提供宝贵的提示。在进行详细的过程设计和编写程序之前,首先进行软件结构设计,其好处在于可以在软件开发的早期从全局的角度对软件结构进行优化,在这个时期进行优化付出的代价不高,但却可以使软件质量得到很大提高。
【注释】
[1]叶小艳.需求分析实训教程[M].广州:华南理工大学出版社,2017.
[2]杨长春.实战需求分析[M].北京:清华大学出版社,2016.
[3]赵仲民,苗斌,付伟,张丽霞,刘毅.电力系统与分析研究[M].成都:电子科技大学出版社,2017.
[4]卫红春,朱欣娟,蒋志新,焦允.信息系统分析与设计[M].西安:西安电子科技大学出版社,2005.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。