【概述】
结构化软件设计的任务是从软件需求规格说明书出发,设计软件系统的整体结构(总体设计)、确定每个模块的实现算法以及编写具体的代码(详细设计),形成软件的具体设计方案,解决 “怎么做” 的问题
要进行结构化的设计,必须依据结构化分析的结果,结构化设计与结构化分析的关系如图所示。图的左边是用结构化分析方法所建立的模型,图的右边是用结构化设计方法所建立的设计模型
【软件结构图形工具】
层次图与 HIPO 图
通常使用层次图来描绘软件的层次结构,在层次图中一个矩形框代表一个模块,框间的连线表示调用关系
每个方框可以带编号,带编号的层次图称为 HIPO 图
结构图
结构图是描绘软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能,方框之间的箭头或直线表示模块的调用关系
利用菱形和带箭头的弧线,还可以表示选择调用和循环调用
依据结构图中使用循环调用的的不同,可以分为扇入和扇出,加之深度与宽度,这四者称为结构图的形态特征
在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息,如果希望进一步标明传递的信息是数据还是控制信息,则可以利用注释箭头尾部的形状来区分,尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息
层次图与结构图的异同
层次图和结构图都可用来表示软件的结构层次,描述模块间的调用关系
但结构图不仅能表示模块间接口传递的数据信息、控制信息,还能表示选择调用和循环调用
【结构化设计方法】
概述
结构化设计方法分为总体设计和详细设计
总体设计是面向数据流的设计方法,依据对数据处理的不同,分为变换型数据流和事务型数据流
详细设计是面向数据结构的设计方法,最流行的是 Jackson 方法
总体设计
概述
面向数据流的设计方法是常用的结构化设计方法,多在概要设计阶段使用,依据一定的映射规则,将需求分析阶段得到的数据描述从系统的输入端到输出端所经历的一系列变换或处理的数据流图转换为目标系统的结构描述
在数据流图中,数据流分为变换型数据流和事务型数据流两种
变换,是指把输入的数据处理后转变成另外的输出数据,信息沿输入路径流入系统,在系统中经过加工处理后又离开系统,当信息流具备这种特征时就是变换流
事务,是指非数据变换的处理,它将输入的数据流分散成许多数据流,形成若干个加工,然后选择其中一个路径来执行
变换型数据流
对于变换型数据流图的设计可以分为以下几步:
- 复审、精化数据流图
- 确定输入数据、变换中心、输出数据,并在数据流图上用虚线标明分界线
- 得到系统的初始化结构图
- 对系统结构图进行优化
事务型数据流
对事务型数据流图设计可以分为以下几步:
- 复审、精化数据流图
- 确定事务中心、接收数据、处理路径
- 得到系统的初始化结构图
- 分解和细化接收分支和处理分支
详细设计
概述
详细设计是面向数据结构的设计方法,最流行的是 Jackson 方法
其是将数据结构转换为程序结构的一种设计方法
Jackson 方法
Jackson 方法绘出的 Jackson 图便于表示层次结构,而且是对结构进行自顶向下分解的有力工具,其形象直观可读性好,既能表示数据结构也能表示程序结构
Jackson 方法将数据结构分为 3 种基本类型:顺序型结构、选择 型结构和循环型结构
在顺序型结构中,数据由一个或多个元素组成,每个元素按照确定的次序出现一次。如下图图示,数据 A 由 B、C、D 这 3 个元素顺序组成。
在选择型结构中,数据包含两个或多个元素,每次使用该数据时,按照一定的条件从罗列的多个数据元素中选择一个。如下图图示,数据 A 根据条件从 B 或 C 或 D 中选择一个,元素右上方的符号 °
表示从中选择一个
在循环型结构中,数据根据使用时的条件由一个数据元素出现零次或多次构成。如下图图示,数据 A 根据条件由元素 B 出现零次或多次组成,元素后加符号 *
表示重复
Jackson 结构程序设计方法的步骤如下:
- 分析并确定输入数据和输出数据的逻辑结构,并用 Jackson 图描绘这些数据结构
- 找出输入数据结构和输出数据结构中有对应关系的数据单元
- 按照一定规则从描绘数据结构的 Jackson 图导出描绘程序 结构的 Jackson 图
- 列出所有操作和条件,并且把它们分配到程序结构图的适当位置
- 用伪代码表示程序
【接口设计】
软件系统结合业务、功能、部署等等因素将软件系统逐步分解到模块,那么模块与模块之间就必须根据各模块的功能定义对应的接口
总体设计中的接口设计主要用于子系统/模块之间或内部系统与外部系统进行各种交互
接口设计的内容应包括功能描述、接口 的输入输出定义、错误处理等
软件系统接口的种类以及规范很多,可以有 API、服务接口、文件、数据库等等,所以设计的方法也有很大的差异。但总体来说,接口设计的内容应包括通讯方法、协议、接口调用方法、功能内容、输入输出参数、错误/例外机制等
从成果上来看,接口一览表以及详细设计资料是必须的资料。
接口设计一般包括 3 个方面:
- 用户接口:用来说明将向用户提供的命令和它们的语法结构以及软 件回答信息
- 外部接口:用来说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系
- 内部接口:用来说明本系统之内的各个系统元素之间的接口的安排
【过程设计】
概述
任何程序总可以用三种结构化构成元素来设计和实现:
- 顺序结构:任何算法规约中的核心处理步骤
- 条件结构:允许根据逻辑情况选择处理的方式
- 循环结构:提供了循环过程
过程设计工具可以分为以下三类:
- 图形设计符号:流程图、N-S 图、PAD 图等
- 表格设计符号:判定表等
- 程序设计语言:PDL 等
流程图
流程图是对过程、算法、流程的一种图形表示,它对某个问题的定义、分析或解法进行描述,用定义完善的符号来表示操作、数据、流向等概念
流程图分为数据流程图、程序流程图、系统流程图、程序网络图和 系统资源图
程序流程图也称为程序框图,是一种比较直观、形象地描述过程的控制流程的图形工具,其符号简单规范,画法简单,结构清晰,逻辑性强,便于描述,容易理解,但不利于逐步求精的设计,不易于表示系统中所含的数据结构,同时,由于图中可用箭头随意地对控制进行转移,这与结构化程序设计精神相悖
程序流程图包含 5 种基本的控制结构:顺序型、选择型、先判定型循环、后判定型循环和多分支选择型
程序流程图的基本符号如下图:
N-S 图
N-S 图又被称为盒图,是一种符合结构化程序设计原则的图形工具
N-S 图用类似盒子的矩形以及矩形之间的嵌套来表示语句或语句序列,图内没有箭头,因此,它所表示的控制流程不能随便进行转移,这有利于严格的结构化程序设计,同时可以很方便地确定一个特定控制结构的作用域,以及局部数据和全局数据的作用域,嵌套关系以及模块之间的层次关系也十分容易表示
N-S 图的基本符号如下:
PAD 图
PAD 图,也叫问题分析图,用二维树形结构的图来表示程序的控 制流及逻辑结构
在PAD图中,一条竖线代表一个层次,最左边的竖线是第一层控制结构,随着层次的加深,图形不断地向右展开
PAD 图为常用的高级程序设计语言的各种控制语句提供了对应的图形符号,其所表示的程序结构的执行顺序是自最左边的竖线的上端开始,自上而下,自左向右,这使得所表示的程序片断结构清晰、层次分明,故而其不仅可以表示程序逻辑,还能表示数据结构,但其只能用于结构化的设计
PAD图的基本符号如下:
结构化语言
结构化语言 PDL,又称程序设计语言、伪代码,其是用正文形式表示数据和处理过程的设计工具,是一种笼统的名称,现在有许多种不同的程序设计语言在使用
PDL 具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法又是灵活自由的,可以使用自然语言的词汇,但其不如图形工具形象直观,当描述复杂的条件组合与动作间的对应关系时,也不如判定表清晰简单
PDL 可以作为注释直接插在源程序中间,这样做能促使维护人员在修改程序代码的同时也相应地修改 PDL 注释,有助于保持文档和程序的 一致性,提高了文档的质量。同时,PDL 可以使用普通的正文编辑程序或文字处理系统,能够很方便地完成 PDL 的书写和编辑工作
当已经有自动处理程序存在时,而且可以自动由 PDL 生成程序代码
下图使用 PDL 语言描述了在数组 A[1] 到 A[10] 中寻找最大的数