结构化设计方法

        结构化设计(Structured Design,SD)是一种面向数据流的设计方法,它以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。SD方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构,分为概要设计和详细设计两个阶段,其中概要设计的主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是为每个模块设计实现的细节。    

2.模块结构

模块是组成系统的基本单位,它的特点是可以自由组合、分解和变换,系统中任何一个处理功能都可以看成一个模块。

2.1信息隐藏与抽象

信息隐藏原则要求采用封装技术,将程序模块的实现细节(过程或数据)隐藏起来,对于不需要这些信息的其他模块来说是不能访问的,使模块接口尽量简单。按照信息隐藏的原则,系统中的模块应设计成“黑盒”,模块外部只能使用模块接口说明中给出的信息,例如,操作和数据类型等。模块之间相对独立,既易于实现,也易于理解和维护。

抽象原则要求抽取事物最基本的特性和行为,忽略非本质的细节,采用分层次抽象的方式可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。通常,抽象层次包括过程抽象、数据抽象和控制抽象。 

2.2模块化

模块是实现功能的基本单位,它一般具有功能、逻辑和状态3个基本属性,其中功能是指模块“做什么”,逻辑是描述模块内部“怎么做”,状态是该模块使用时的环境和条件。

        在描述一个模块时,必须按模块的外部特性和内部特性分别描述。模块的外部特性是指模块的模块名、参数表和给程序乃至整个系统造成的影响,而模块的内部特性则是指完成其功能的程序代码和仅供该模块内部使用的数据。

        对于模块的外部环境(例如,需要调用这个模块的上级模块)来说,只需要了解这个模块的外部特性就足够了,不必了解它的内部特性。而软件设计阶段,通常是先确定模块的外部特性,然后再确定它的内部特性。

2.3耦合

         耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非直接耦合则表示模块之间无任何直接联系。模块的耦合类型通常分为7种,根据耦合度从低到高排序如表1所示。

表1 模块的耦合类型

耦合类型

描述

非直接耦合        

两个模块之间没有直接关系,它们之间的联系完全是通过上级模块的控制和调用来实现的

数据耦合

一组模块借助参数表传递简单数据

标记耦合

一组模块通过参数表传递记录等复杂信息(数据结构)

控制耦合

模块之间传递的信息中包含用于控制模块内部逻辑的信息

通信耦合

一组模块共用了一组输入信息,或者它们的输出需要整合以形成完整数据,即共享了输入或输出。

公共耦合

多个模块都访问同一个公共数据环境,公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等

内容耦合

一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口等

2.4内聚 

        内聚表示模块内部各代码成分之间联系的紧密程度,是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做目标单一的一件事情。模块的内聚类型通常也可以分为7种,根据内聚度从高到低的排序如表2所示。

        表2 模块的内聚类型 

内聚类型

描述

功能内聚

完成一个单一功能,各个部分协同工作,缺一不可

顺序内聚

处理元素相关,而且必须顺序执行

通信内聚

所有处理元素集中在一个数据结构的区域上

过程内聚

处理元素相关,而且必须按特定的次序执行

时间内聚

所包含的任务必须在同一时间间隔内执行

逻辑内聚

完成逻辑上相关的一组任务

偶然内聚

完成一组没有关系或松散关系的任务

3.设计工具

3.1概要设计工具

系统结构图(Structure Chart,SC)又称模块结构图,它是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结构。 

3.2详细设计工具         

详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。详细设计必须遵循概要设计来进行。详细设计,应该完成详细设计文档,主要是模块的详细设计方案说明。

图形工具、表格工具和语言工具。

        (1)图形工具

业务流图、程序流程图、PAD(Problem Analysis Diagram)图、NS流程图(由Nassi和Shneiderman开发,简称NS)等。

        (2)表格工具

         可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件。

        (3)语言工具 

         用某种高级语言来描述过程的细节,例如伪码和PDL(Program Design Language)等。