单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,*,*,*,第九章 面向数据流的设计方法,传统的软件工程方法学采用结构化设计,(Structured Design,SD),技术,完成软件设计工作,通常把软件设计工作划分为概要设计和详细设计这样两个阶段。,概要设计,的主要任务是,通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。,详细设计,阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。,2024/11/18,1,第九章 面向数据流的设计方法 传统的软件工程方法学,将分析模型转换为设计,数据词典,数,据,流,图,实,体,关,系,图,状态转换图,加,工,规,格,说,明,控,制,规,格,说,明,数,据,对,象,描,述,过程设计,接口设计,体系结构设计,数据设计,2024/11/18,2,将分析模型转换为设计数据词典数据流图实体关系图状态转换图加工,面向数据流的设计方法,本章所述技术用于软件的概要设计描述,包括模块、界面和数据结构的定义,这是后续开发的基础。,每种软件设计方法都有长处和不足,选用哪种方法应考虑适用的范围。,任何软件系统都可以用数据流图表示,面向数据流的设计方法可用于任一种软件系统的开发。,该方法对那些顺序处理信息且不含层次数据结构的系统最为有效,如,过程控制、复杂的数值分析过程、以及科学与工程方面的应用等等。,当方法用于完全的数据处理时,即使系统中使用层次数 据同样行之有效。,第九章 面向数据流的设计方法,2024/11/18,3,面向数据流的设计方法 本章所述技术用于软件的概要设计描,9.1,基本概念和设计过程,用方法将数据流图转换为软件结构,()确定信息流的类型;,()划定流界;,()将数据流图映射为程序结构;,()提取层次控制结构;,()通过设计复审和启发式策略精化结构。,第三步所用映射方法涉及信息流的类型。,信息流分为,变换流,和,事务流,两种类型。,第九章 面向数据流的设计方法,2024/11/18,4,9.1基本概念和设计过程用方法将数据流图转换为软件结构,基本概念和设计过程,变换流,在基本系统模型(即顶级数据流图)中信息通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。,输入信息流沿传入路径进入系统,同时由外部形式变换为内部形式,经系统变换中心加工、处理,作为输出信息流又沿传出路径离开系统,并还原为外部形式。,若数据流图所描述的,信息流具有上述特征,则称作变换流。,9.1基本概念和设计过程,2024/11/18,5,基本概念和设计过程变换流若数据流图所描述的9.1基本概念和,基本概念和设计过程,事务流,由于基本系统模型呈变换流,故任意系统中的信息均可用变换流刻画。,若数据流具有如图9.所示形状,称“事务流”。,单个数据项称为事务(,transaction),沿传入路径(接受通道)进入系统,由外部形式变换为内部形式后到达事务中心,事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。,9.1基本概念和设计过程,2024/11/18,6,基本概念和设计过程事务流9.1基本概念和设计过程2023/1,基本概念和设计过程,在大系统的中,变换流与事务流往往交织在一起。,在基于事务流的系统中,当信息沿动作路径流动时可能呈现变换流的特征,变换分析法与事物分析法需要交叉使用。,任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。,9.1基本概念和设计过程,2024/11/18,7,基本概念和设计过程在大系统的中,变换流与事务流往往交,面向数据流的设计,9.1基本概念和设计过程,2024/11/18,8,面向数据流的设计9.1基本概念和设计过程2023/10/98,9.2,变换分析,变换分析由一系列设计步骤组成,经过这些步骤就能把具有变换流特点的数据流图,按预先确定的模式映射成软件结构。,步骤一,复审基本系统模型,基本系统模型指顶级和所有由外部提供的信息。这一设计步骤是对系统规格说明书和 软件需求规格说明书进行评估。这两个文档描述软件界面上信息的流程和结构。,图9.4和图 9.5分别为“家庭保安系统”的顶层和第一层数据流图。,第九章 面向数据流的设计方法,2024/11/18,9,9.2 变换分析变换分析由一系列设计步骤组成,经过这些步骤就,“家庭保安系统”的顶级数据流图,家庭保安系统传感器监测子系统的变换分析步骤。,9.2变换分析,2024/11/18,10,“家庭保安系统”的顶级数据流图 家庭保安系统传感器监测子系,变换分析,步骤二,复审和精化软件数据流图,精化软件需求规格说明书中的分析模型,直至获得足够详细的。,如,由“传感器监测子系统”的第一级(图9.的局部)和第二级(图9.)进 一步推导出第三级数据流图(图9.)。,每个变换对应一个独立的功能,可望用一 个具有较高内聚度的模块实现,至此已有足够的信息用于设计“传感器监测子系统”的程序结构,精化过程亦可结束。,9.2变换分析,2024/11/18,11,变换分析步骤二9.2变换分析2023/10/911,“传感器监测子系统”的第二级,DFD,9.2变换分析,2024/11/18,12,“传感器监测子系统”的第二级DFD9.2变换分析2023/1,“传感器监测子系统”的第三级,DF,9.2变换分析,2024/11/18,13,“传感器监测子系统”的第三级DF9.2变换分析2023/10,变换分析,步骤三,确定为变换流还是事务流。,系统内部的信息流总可以用变换流表示,倘若具有明显的事务特性,还应该采用针对事务流的映射方法。设计人员首先要判定中占主导地位的信息流,并确定其特性,然后孤立出具有变换特性或事务特性的支流,这些支流将用于精化由主导数据流推出的程序结构。,以图9.7所示为例,数据沿一个传入路径进来,沿三个传出路径离开,无明显的事务中心,该信息流应属变换流。,9.2变换分析,2024/11/18,14,变换分析步骤三9.2变换分析2023/10/914,变换分析,步骤四,划定输入流和输出流边界孤立变换中心。,输入、输出流边界的划分可能因人而异,不同的设计人员可能把边界沿着数据通道向前推进或后退一个处理框,这对最后的软件结构影响不大。,“传感器监测子系统”的流界在图9.中用虚线表示。,9.2变换分析,2024/11/18,15,变换分析步骤四9.2变换分析2023/10/915,“传感器监测子系统”,9.2变换分析,2024/11/18,16,“传感器监测子系统”9.2变换分析2023/10/916,变换分析,步骤五,执行“一级分解”导出具有三个层次的程序结构。,顶层为总控模块;,底层模块执行输入、计算和输出功能;,中层模块控制、协调底层的工作。,如图9.,8,所示,主控模块负责协调下面几个中层控制模块:,输入流控制模块,接收所有输入数据;,变换流控制模块,对内部形式数据进行加工、处理;,输出流控制模块,产生输出数据,9.2变换分析,2024/11/18,17,变换分析步骤五 9.2变换分析2023/10/917,一级分解,9.2变换分析,2024/11/18,18,一级分解9.2变换分析2023/10/918,变换分析,一级分解,图9.展示的是一个简单三叉结构,实际处理大型系统的复杂数据流时,可能需要两个甚至多个模块对应上述一个模块的功能。,“一级分解”的原则,在完成控制功能并保持低耦合度、高内聚度的前提下尽可能减少模块数。,9.2变换分析,2024/11/18,19,变换分析一级分解9.2变换分析2023/10/919,传感器监测子系统一级分解结果,控制模块的名字概括了所有下属模块的功能。,9.2变换分析,2024/11/18,20,传感器监测子系统一级分解结果 控制模块的名字概括了所有下,二级分解,步骤六,执行“二级分解”,把数据流图中每个处理框映射成程序结构中一个适当的模块,二级分解过程是从变换中心的边界开始沿输入、输出通道向外移动,把遇到的每个处理框映射为程序结构中的一个模块。,9.2变换分析,2024/11/18,21,二级分解步骤六9.2变换分析2023/10/921,变换分析,二级分解,的处理框与程序结构模块一一对应,按照软件设计原则,可能需要几个处理框聚合为一个模块,或者把一个处理框细分为几个模块。,应根据“良好”设计的标准,进行二级分解。,由图9.,7,输出流部分导出的程序结构如图9.,11,所示。,9.2变换分析,2024/11/18,22,变换分析二级分解9.2变换分析2023/10/922,传感器监测子系统输出流部分的程序结构,9.2变换分析,2024/11/18,23,传感器监测子系统输出流部分的程序结构9.2变换分析2023/,变换分析,“传感器监测子系统”二级分解的结果见图9.,12,,它仅仅是程序结构的“雏形”,,,后续的复审和精化会反复修改。,程序结构的模块名隐含模块功能,必须为每个模块写一个简要的处理说明,包括:,进出模块的信息(接口描述);,模块的局部信息;,处理过程陈述,包括主要的判断点和任务;,对有关限制和一些专门特性的简要说明(例如,文件,I/O,,与硬件相关的特性,特殊的实时要求等等)。,这些描述构成第一版设计规格说明书。,9.2变换分析,2024/11/18,24,变换分析“传感器监测子系统”二级分解的结果见图9.12,它仅,传感器监测子系统的程序结构“雏形”,9.2变换分析,2024/11/18,25,传感器监测子系统的程序结构“雏形”9.2变换分析2023/1,变换分析,步骤七,采用启发式设计策略,精化所得程序结构雏形,改良软件质量。,对于程序结构的雏形,以“模块独立”为指导思想,对模块或合或拆,旨在追求高内聚、低耦合,易实现、易测试、易维护的软件结构。,9.2变换分析,2024/11/18,26,变换分析步骤七9.2变换分析2023/10/926,变换分析,修改“传感器监测子系统”的程序结构雏形,()因只存在唯一一条传入路径,故输入控制模块可删除;,()由变换中心产生的整个子结构可归并为“建立警报条件”一个模块(选择电话号码的功能纳入其中),变换控制模块不再需要;,()“格式化显示”和“生成显示”两个模块归并为“产生显示”一个模块。,9.2变换分析,2024/11/18,27,变换分析修改“传感器监测子系统”的程序结构雏形9.2变换分析,“传感器监测子系统”的程序结构,9.2变换分析,2024/11/18,28,“传感器监测子系统”的程序结构9.2变换分析2023/10/,变换分析,上述七个设计步骤的目标是给出软件的一个整体描述。,一旦有了这样一个描述,设计人员即可从整体角度评价和精化软件的总体结构,此时修改所需耗费不多,却能大大提高软件质量。,比较上述设计过程与一般直接编码过程可知,如果源代码是软件唯一的表现形式,设计人员很难从整体的观点评价和精化软件。,9.2变换分析,2024/11/18,29,变换分析 上述七个设计步骤的目标是给出软件的一个整体描,9.3,事务分析,当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个 事务中心,采用事务分析法更为适宜。,下面以“家庭保安系统”中“用户交互子系统”为例,说明事务分析法。,该子系统的第一级数据流图如图9.所示,精化后得到如图9.所示第二级 数据流图。图中“用户命令数据”流入系统后,沿三条动作路径之一离 开系统,若将数据项“命令类型”看作事务,该子系统的信息流具有明显的事务 特征。,事务分析法的步骤与变换分析方法基本类似,主要差别在于从数据流图到程序 结构的映射。,第九章 面向数据流的设计方法,2024/11/18,30,9.3 事务分析当数据流具有明显的事务特征时,即能找到一个事,用户交互子系统的二级数据流图,9.3事务分析,2024/11/18,31,用户交互子系统的二级数据流图9.3事务分析2023/10/9,事务分析,事务分析法可分为七个步骤,步骤一复审基本系统模型;,步骤二复审并