第九章 面向数据流的设计方法课件.ppt
第九章 面向数据流的设计方法,9.1 基本概念和设计过程,9.2 变换分析,9.3 事务分析,9.4 启发式设计策略,9.5 设计优化原则,.,面向数据流的设计方法,即结构化方法(简称SD方法),是根据需求阶段对数据流的分析设计软件结构。数据流主要描绘信息在系统内部加工和流动的情况,面向数据流的设计方法根据数据流的特性定义两种“映射”,这两种映射能机械将数据流转换为程序结构。该方法的目标是为软件结构设计提供一个系统化的途径,使设计人员对软件有一个整体的认识。 本章所描述技术用于概要设计描述,包括模块、界面和数据结构的定义。理论上讲,任何软件系统都可以用数据流图表示,面向数据流的设计方法可用于任一软件系统的开发。该方法对那些顺序处理信息且不含层次数据结构的系统最为有效。,.,面向数据流的设计方法(SD)以数据流图为基础,它定义了把DFD变换成软件结构的不同映射方法.,映射方法涉及信息(数据)流的类型.,9.1 基本概念和设计过程,1、基本概念,(1)变换型数据流图,变换型数据流(变换流):在基本系统模型中信息通常以“外部”所具有的形式进入系统,经过处理后又以这种形式离开系统,如图9.1。输入信息流沿传入路径进入系统,同时由外部形式变换为内部形式,经系统变换中心加工、处理,作为输出信息流又沿传出路径离开系统,并还原为外部形式.如果数据流图所描述的信息流具有上述特征,则称作变换流.,图 9.1,(2)事务型数据流图,事务型数据流(事务流):由于基本系统呈现变换流,所以任意系统中的信息均可以用变换流刻画。但是如果数据流如图9.2所示,则称为事务流。此时,单个数据项(事务)沿传入路径(接受通道)进入系统,由外部形式变换为内部形式后到达事务中心,事务中心根据数据项计算结果从若干动作路径中选定一条继续执行.,图 9.2,.,基本模型,变换型数据流 结构,事务型数据流 结构,传入,变换,传出,变换中心,传入部分,传出部分,事务分析,事务中心,动作 1,动作 2,动作 3,接受,接受部分,.,变换型数据流举例,.,事务型数据流图举例,.,值得注意的是在大系统的数据流中,变换流和事务流往往交织在一起。如,在基于事务流的系统中,当信息沿动作路径流动时,可能呈现变换流的特征,因此,在具体进行面向数据流的软件设计时,两种方法交叉使用。,.,变换中心,输入,输出,变换型结构,事务中心,接受路径,动作路径,事务型 结构,由输入、变换中心和输出三部分组成,具有在多种事务中选择执行某类事物的能力,根据信息流类型,系统结构特征可归纳为两种典型形式:变换型结构和事务型结构.其基本模型特征如下:,.,SD方法是基于模块化、自顶而下逐步求精、结构化程序设计等技术发展起来,能够方便地将数据流图转换为软件结构,其过程分为六步: (1)分析DFD,精化DFD.(2)确定DFD类型,划定边界.(3)映射为软件结构.把DFD映射到系统模块结构,设计出模块结构的上层;基于DFD逐步分解高层模块,设计出下层模块.(4)提取层次控制结构.(5)通过设计复审和使用启发式策略进一步精化模块结构.(6)模块接口描述,2. 设计过程,.,面向数据流方法的设计过程,提取控制结构,.,SD方法的两种映射过渡方法,.,初始的SC,.,1.变换分析设计方法变换分析由一系列设计步骤组成,经过这些步骤就能够把具有变换流特点的数据流图按照事先确定的模式映射成软件结构。步骤如下: 1)复审基本系统模型基本系统模型是指顶级数据流图和所有由外部提供的信息。该步骤是对系统规格说明书进行评估。这两个文档是描述软件界面上信息的流程和结构。2)复审和精化软件数据流图主要是对软件规格说明书中的分析模型进行精化,直至获得足够详细的数据流图。逐步求精,逐层细化,底层的加工和数据流都应该进行分解。,9.2 变换分析,.,变换分析设计方法,3)确定DFD的特性,判定它为事务流还是变换流一般来讲,系统内部的信息流总可以用变换流表示,如果为明显的事务流特性,还应该采用针对事务流的映射方法。因此,分析人员首先要判定DFD中占主导地位的信息流,并且确定其特性,然后孤立具有变换特性或者事务特性的支流,这些支流将用于精化由主导数据流推出的程序结构。4)划定输入流和输出流的边界、孤立变换中心即区分传入、变换中心、传出部分,在 DFD 上标明分界线,输入和输出流的边界的划分可能因人而异,不同的人员可能把边界沿着数据通道向前推进或后退一个处理框,不过这对最后的软件结构影响不大。,.,.,变换分析设计方法,5)执行“一级分解”一级分解的目标是导出具有三个层次的程序结构,顶层为主控模块;底层为模块执行输入、计算和输出功能;中间层次为控制和协调底层的工作。即区分逻辑输入、输出和中心变换部分。在结构图中,方框表示模块,方框内注明模块名称或主要功能。方框之间的有向边表示模块间的调用关系。对于变换流可以得到一级的分解结构图的上两层如下:,.,.,第一级分解后的SC,输入流控制模块,接收所有输入数据;变换流控制模块,对内部形式数据进行加工、处理;输出流控制模块,产生输出数据。,.,变换分析设计方法,6)执行“二级分解” (分解SC各分支)自顶向下分解,设计出每个分支的中、下层模块.二级分解的任务是把数据流图中每个处理框映射成程序结构中一个适当的模块,二级分解过程是从变换中心的边界开始沿输入,输出通道向外移动,把遇到的每个处理模块映射为程序结构中的一个模块。程序结构的模块名称已隐含了模块的功能,但仍然有必要为每个模块写一个简要的处理说明,应该包括:(1)进出模块的信息(接口描述);(2)模块的局部信息;(3)处理过程陈述,包括主要的判断点和任务;(4)对有关性质和一些特性的简要说明。,.,传入分支的分解(1),.,传入分支的分解(2),.,传出分支的分解,.,中心加工分支的分解,.,变换分析设计方法,7)采用启发式设计策略,精化所得程序结构雏形,改良软件质量对于程序结构的雏形,以“模块独立”为指导思想,对模块合并或分解,旨在追求高内聚、低耦合,易于实现、易于测试和维护的软件结构。上述七个步骤的目标是给出软件的一个整体的描述。一旦有了这样的描述,设计人员就可以从整体角度评价和精化软件的总体结构,此时修改所需耗费不多,却能够大大低提高软件质量。,.,2. 举例(P209),例1:“家庭保安系统”的传感器检测子系统(1) 复查基本系统模型(2) 复查并精化数据流图(3) 确定DFD的特性,判定它为变换流还是事务流(4) 划定输入流和输出流的边界,孤立变换中心(5) 执行“一级分解”(6) 执行“二级分解”7)采用启发式设计策略,精化所得得程序结构雏形,改良软件质量,.,1. 事务分析设计方法,任何情况下都可使用变换分析方法设计软件结构,但如数据流具有明显的事务特点时 (有一个明显的事务和事务中心 ),以采用事务分析方法为宜。事务分析法的步骤和变换分析法基本类似,主要区别在于从数据流到程序结构的映射。事务分析法的步骤可以概括如下:,9.3 事务分析,.,事务分析设计方法,1)复审基本系统模型;2)复审并精化软件数据模型;3)确定数据流图的特性;显然,前三步和变换分析法相同。4)指出事务中心,在DFD上确定事务中心、接收部分和发送部分。确定有事务中心发出的每一动作路径的数据流特性。数条动作路径的公共源头就是事务中心,事务中心确定为“启动命令处理”框。事务中心一旦确定,即可以划定接受路径与所有动作路径的界限,随后判定每一个动作路径上数据流的特性。,.,事务分析设计方法,5)把数据流图映射为事务处理型的程序结构。画出SC框架,把DFD上的三部分分别映射为事务控制模块、接收模块和动作发送模块。事务处理型的程序结构由“输入”和“散转”两部分组成,输入部分的构成方法如变换分析法,即从事务处理中心开始,沿输入通路向外推进,每个处理框映射为一个模块。“散转”部分的顶层为一“散转”模块,它总控所有对应于每一动作路径的控制模块,每条动作路径都根据它的信息流特征映射为一个程序子结构。6)分解并精化事务结构以及每条动作路径所对应的结构。这些子结构是根据流经每一动作路径的数据流特征,采用上述的设计步骤一一导出的。7)使用启发式设计策略,精化所得的程序结构雏形,改良软件质量。这个步骤和变换分析法相同。,.,事务分析的映射方法,.,事务流设计模型举例,.,事务流设计模型举例,取 A,总控,A,L,M,N,G,D,B,C,F,E,(主模块),事务加工模块,.,动作分支的典型结构,.,事务流设计举例,.,事务型数据流图模型举例,I,M,L,N,O,A,B,C,D,F,E,G,H,.,事务流设计举例 (另一种画法),.,2. 混合流设计举例,.,混合流设计举例,.,混合流设计举例,.,混合流设计举例,.,3. 举例,“家庭保安系统”用户命令交互子系统 (P216)(1) 复查基本系统模型(2) 复查并精化数据流图(3) 确定DFD的特性,判定它为变换流还是事务流(4) 指出事务中心,确定由事务中心发出的每一动作路径的数据流特性(如下图),.,用户命令交互子系统DFD (P217),读用户命令,密码命令,密码,显示信息,系统参数数据,用户命令,读系统数据,配置信息,显示信息和状态,命令分析处理,读密码,命令类型,开/关命令,建立配置文件,原配置数据,启动/停止系统,与文件中密码比较,格式化配置数据,配置命令,检验信息过程,重试信息,四位数字,检验信息,检验信息,A/D信息,格式化配置数据,格式化配置数据,.,用户命令交互子系统初始的SC,()把数据流映射为事务处理型的程序结构,.,用户命令交互子系统,读用户命令,密码命令,密码,显示信息,系统参数数据,用户命令,读系统数据,配置信息,显示信息和状态,命令分析处理,读密码,命令类型,开/关命令,建立配置文件,原配置数据,启动/停止系统,与文件中密码比较,格式化配置数据,配置命令,检验信息过程,重试信息,四位数字,检验信息,检验信息,A/D信息,格式化配置数据,格式化配置数据,.,用户执行模块,读用户命令,命令处理,()分解并精化事务结构以及每条动作路径所对应的结构下图为用户命令交互子系统的SC,.,用户命令交互子系统,读用户命令,密码命令,密码,显示信息,系统参数数据,用户命令,读系统数据,配置信息,显示信息和状态,命令分析处理,读密码,命令类型,开/关命令,建立配置文件,原配置数据,启动/停止系统,与文件中密码比较,格式化配置数据,配置命令,检验信息过程,重试信息,四位数字,检验信息,检验信息,A/D信息,格式化配置数据,格式化配置数据,.,用户命令交互子系统的SC(雏形),()使用启发式设计策略,精化程序结构雏形,补充内容:变换分析举例2,我们通过一个汽车数字仪表板的设计来介绍变换分析的过程。假设仪表板的功能如下:(1)通过模数(AD)转换实现传感器和微处理机接口;(2)在发光二极管(LCD)面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里小时,则发出超速警告铃声。在软件需求分析阶段,应该对上述每项性能和其它要求进行全面的分析,并建立起相应的文档资料,得出数据流图。具体的设计步骤如下:,1、复查基本系统模型,2、复查并精化数据流图,3、确定数据流图的类型,这一步的任务是确定数据流图是变换型数据流图还是事务型数据流图。从上图中可以看出,数据沿着两条输入通路(旋转信号和燃料流量传感器信号)进入系统,然后沿着五条通路(4个显示,一个警告铃声)离开,没有明显的事务中心(虽然变换“计算mph与超速值”可以看作是一个事务中心)。因此,可以认为这个数据流图的类型是变换型数据流图。,4、确定输入流和输出流的边界,从而孤立出变换中心,5、进行“第一级分解”,第一级分解的方法,第一级分解的结果,6、进行“第二级分解”,第二级分解的方法,第二级分解的结果:,未经精化的输入结构 未经精化的变换结构,未经精化的输出结构,7、使用设计度量和设计准则对第一次分割得到的软件结构进一步精化,对于从前面的设计步骤得到的软件结构,还可以进行许多修改:(1)输入结构中的模块“转换成rpm”和“收集sps”可以合并;(2)模块“确定加速减速”可以放在模块“计算mph”下面,以减少耦合;(3)模块“加速减速显示”可以相应地放在模块“显示mph”的下面。,精化的数字仪表板系统的软件结构,.,9.4 启发式设计策略(改进软件结构设计的指导原则),(1)模块功能的完善化(2)改造程序结构,提高模块独立性,消除重复功能(3)将模块的影响限制在模块的控制范围内(4)深度、宽度、扇出和扇入适中(5)模块大小适中(6)降低模块接口的复杂性(7)模块功能可预测(8)根据设计约束和可移植性要对软件打包,.,(1) 模块功能的完善化,完整的模块应包括三部分:(1)执行规定功能部分(2)出错处理部分(3)需返回给调用者数据时, 返回是否正确结束标志。,.,(2)消除重复功能,.,(3)将模块的影响限制在模块的控制范围内,系统结构的影响范围: 系统中某一层上模块中的判定或者条件语句(例如If语句)在系统中会产生多种后果,根据该判定的结果去执行或不执行其他层的某个处理或数据。 该处理就是“条件依赖”于某个判定. 判定的“影响范围”是指包含“条件依赖”于改判定的处理的全部模块,.,模块控制范围:,一个模块的“控制范围”是指模块本身和它的全体子模块 影响范围应该是这个判定所在模块的控制范围的一个子集. 但是实际上,在系统中控制范围和影响范围的关系常常并非如此。,.,影响范围和控制范围,Top,A,Y,B,B1,X,影响范围,Top,A,B,B1,B2,X,Top,Y,A,B,X,A,Y,B,B1,B2,X,判定,图1.影响范围在控制范围之外图2.影响范围在控制范围之内,但判定位置太高图3.影响范围在控制范围之内,正确实现 图4.理想的影响范围和控制范围,.,C,H,D,E,G,X,F,A,I,L,J,K,B,模块C的控制范围: C、D、E、F、G、H,如果模块C 作出的决策影响了模块L,L超出了C 的控制范围.,.,(4) 减少高扇出在增加程序深度的前提下争取高扇入,.,增加中间层降低扇出,.,(5) 模块大小适中,模块过大:可理解程度下降模块过小:开销大于有效操作 系统接口复杂,(6)降低模块接口的复杂性,接口传递信息应简单且和模块功能一致。,.,(7) 模块功能可预测,避免对模块施加过多限制,模块看成黑盒子,相同输入产生相同输出,其功能为可预测的。模块带有内部状态其功能可能是不可预测的。难理解、难测试、难维护。 功能单一的模块具有高内聚。但如任意限制局部数据结构的大小,过分限制控制流中可做的选择或外部接口的模式,模块功能就过分局限,使用范围过分狭窄,缺乏灵活性和可扩充性。,.,(8)根据设计约束和可移植性需求对软件打包,打包指用来为特定环境组装软件的技术.,设计的后处理,在确定系统的软件结构以后,还必须做好下述工作:(1) 陈述每个模块的处理过程,为每个模块开发一份功能说明;(2) 描述每个模块的界面,为每个模块提供一份接口说明;(3) 根据数据字典定义局部的和全程的数据结构;(4) 给出所有的设计限制或约束;(5) 进行总体设计评审;(6) 如果需要和可能的话,进行设计“优化”。,.,9.5 设计优化原则,将初始SC根据模块独立性原则进行精化,对模块进行合并、分解、修改、调整,得到高内聚、低耦合模块,从而得到易于实现、易于测试和易于维护的软件结构,产生设计文档的最终SC。简洁的程序结构容易调试,容易维护,因此优化设计时,注意以下原则:1)满足软件的功能和性能要求。我们努力追求的设计是既满足功能和性能的要求,又符合一般软件设计原则和上述种种启发式设计策略。2)修改软件结构,尽早优化人们把软件的总体结构和详细设计过程分离开正是为了提供尽可能早的优化软件结构。有时,甚至可以并行地开发若干个软件结构,通过评比,以求得“最佳”结果。3)只要不违反模块化原则,应该使用尽可能少的模块。,.,原则,4)只要满足信息需求,应该使用尽可能简单的数据结构。数据结构设计从某种意义上讲是设计活动中最重要的一个,因为数据结构对程序结构和过程的复杂性有直接的影响,从而在很大程度上决定了软件的质量。无论采用那一种软件设计方法,没有良好的数据结构都不可能得到良好的程序结构。所以我们应该有一个尽可能简单的数据结构。5)对时间复杂性的要求对时间有特殊要求的应用,其优化过程一直延续到详细设计和编码阶段。采取的策略可以有:(1)在先不考虑时间复杂性的情况下设计并精化软件结构;(2)借用CASE工具模拟分析运行时的性能,定位出低效的部分;(3)详细设计时对最耗时的模块仔细分析、设计,以减少时间开销;(4)对大量占用CPU的模块,用汇编语言编写。作业:9.1,9.2,.,