您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 面向数据流的设计方法.ppt
2020/10/111第九章传统的软件工程方法学采用结构化设计(StructuredDesign,SD)技术,完成软件设计工作,通常把软件设计工作划分为概要设计和详细设计这样两个阶段。概要设计的主要任务是,通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。2020/10/112将分析模型转换为设计数据词典数据流图实体关系图状态转换图加工规格说明控制规格说明数据对象描述过程设计接口设计体系结构设计数据设计2020/10/113本章所述技术用于软件的概要设计描述,包括模块、界面和数据结构的定义,这是后续开发的基础。每种软件设计方法都有长处和不足,选用哪种方法应考虑适用的范围。任何软件系统都可以用数据流图表示,面向数据流的设计方法可用于任一种软件系统的开发。该方法对那些顺序处理信息且不含层次数据结构的系统最为有效,如,过程控制、复杂的数值分析过程、以及科学与工程方面的应用等等。当SD方法用于完全的数据处理时,即使系统中使用层次数据同样行之有效。第九章面向数据流的设计方法2020/10/1149.1用SD方法将数据流图转换为软件结构(((((第三步所用映射方法涉及信息流的类型。信息流分为变换流和事务流第九章面向数据流的设计方法2020/10/115基本概念和设计过程在基本系统模型(即顶级数据流图)中信息通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。输入信息流沿传入路径进入系统,同时由外部形式变换为内部形式,经系统变换中心加工、处理,作为输出信息流又沿传出路径离开系统,并还原为外部形式。若数据流图所描述的信息流具有上述特征则称作变换流。9.1基本概念和设计过程2020/10/116基本概念和设计过程事务流由于基本系统模型呈变换流,故任意系统中的信息均可用变换流刻画。若数据流具有如图9.2所示形状,称“事务流”。单个数据项称为事务(transaction)沿传入路径(接受通道)进入系统,由外部形式变换为内部形式后到达事务中心,事务中心根据数据项计值结果从若干动作路径中选9.1基本概念和设计过程2020/10/117在大系统的DFD中,变换流与事务流往往交织在一起。在基于事务流的系统中,当信息沿动作路径流动时可能呈现变换流的特征,变换分析法与事物分析法需任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。9.1基本概念和设计过程2020/10/118面向数据流的设计9.1基本概念和设计过程2020/10/1199.2变换分析变换分析由一系列设计步骤组成,经过这些步骤就能把具有变换流特点的数据流图,按预先确定的模式映射成软件结构。基本系统模型指顶级DFD和所有由外部提供的信息。这一设计步骤是对系统规格说明书和软件需求规格说明书进行评估。这两个文档描述软件界面上信息的流程和结构。图9.4和图9.5分别为“家庭保安系统”的顶层和第一层数据流图。第九章面向数据流的设计方法2020/10/1110“家庭保安系统”的顶级数据流图家庭保安系统-传感器监测子系统的9.2变换分析2020/10/1111变换分析复审和精化软件数据流图精化软件需求规格说明书中的分析模型,直至获得足够详细的DFD。如,由“传感器监测子系统”的第一级(图9.5的局部)和第二级(图9.6)DFD进一步推导出第三级数据流图(图9.7)。每个变换对应一个独立的功能,可望用一个具有较高内聚度的模块实现,至此已有足够的信息用于设计“传感器监测子9.2变换分析2020/10/1112“传感器监测子系统”的第二级DFD9.2变换分析2020/10/1113“传感器监测子系统”的第三级DF9.2变换分析2020/10/1114变换分析确定DFD为变换流还是事务流。系统内部的信息流总可以用变换流表示,倘若具有明显的事务特性,还应该采用针对事务流的映射方法。设计人员首先要判定DFD中占主导地位的信息流,并确定其特性,然后孤立出具有变换特性或事务特性的支流,这些支流将用于精化由主以图9.7所示DFD为例,数据沿一个传入路径进来,沿三个传出路径离开,无明显的事务中心,该信息流应属变换流。9.2变换分析2020/10/1115变换分析划定输入流和输出流边界孤立变换中心。输入、输出流边界的划分可能因人而异,不同的设计人员可能把边界沿着数据通道向前推进或后退一个处理框,这对最后的软件结构影响不大。“传感器监测子系统”的流界在图9.7中用虚线表示。9.2变换分析2020/10/1116“传感器监测子系统”9.2变换分析2020/10/1117变换分析步骤五执行“一级分解”导出具有三个层次的程序结构。顶层为总控模块;底层模块执行输入、计算和输出功能;如图9.8输出流控制模块,产生输出数据9.2变换分析2020/10/1118一级分解9.2变换分析2020/10/1119变换分析一级分解图9.8展示的是一个简单三叉结构,实际处理大型系统的复杂数据流时,可能需要两个甚至多个模块对应上述一个模块的功能。“一级分解”的原则在完成控制功能并保持低耦合度、高内聚度的前9.2变换分析2020/10/1120传感器监测子系统一级分解结果控制模块的名字概括了所有下属模块的功能。9.2变换分析2020/10/1121二级分解执行“二级分解”把数据流图中每个处理框映射成程序结构中一个适当的模块,二级分解过程是从变换中心的边界开始沿输入、输出通道向外移动,把遇到的每个处理框映射为程序结构中的一个模块。9.2变换分析2020/10/1122变换分析二级分解DFD的处理框与程序结构模块一一对应按照软件设计原则,可能需要几个处理框聚合为一个模块,或者把一个处理框细分为几个模块。应根据“良好”设计的标准,进行二级分解。由图9.7输出流部分导出的程序结构如图9.11所示。9.2变换分析2020/10/1123传感器监测子系统输出流部分的程序结构9.2变换分析2020/10/1124变换分析“传感器监测子系统”二级分解的结果见图9.12,它仅仅是程序结构的“雏形”,后续的复审和精化会反复修改。程序结构的模块名隐含模块功能,必须为每个模块写一个简要④对有关限制和一些专门特性的简要说明(例如,文件I/O,9.2变换分析2020/10/1125传感器监测子系统的程序结构“雏形”9.2变换分析2020/10/1126变换分析采用启发式设计策略,精化所得程序结构雏形,改对于程序结构的雏形,以“模块独立”为指导思想,对模块或合或拆,旨在追求高内聚、低耦合,易实现、9.2变换分析2020/10/1127变换分析修改“传感器监测子系统”的程序结构雏形(1)因只存在唯一一条传入路径,故输入控制模块可删除;(2)由变换中心产生的整个子结构可归并为“建立警报条件”一个模块(选择电话号码的功能纳入其中),变换控制模块不再需要;(3)“格式化显示”和“生成显示”两个模块归并为“产生显示”9.2变换分析2020/10/1128“传感器监测子系统”的程序结构9.2变换分析2020/10/1129变换分析上述七个设计步骤的目标是给出软件的一个整体描述。一旦有了这样一个描述,设计人员即可从整体角度评价和精化软件的总体结构,此时修改所需耗费不多,却能大大提高软件质量。比较上述设计过程与一般直接编码过程可知,如果源代码是软件唯一的表现形式,设计人员很难从整体的观点评价和精化软件。9.2变换分析2020/10/11309.3事务分析当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个事务中心,采用事务分析法更为适宜。下面以“家庭保安系统”中“用户交互子系统”为例,说明事该子系统的第一级数据流图如图9.5所示,精化后得到如图9.14所示第二级数据流图。图中“用户命令数据”流入系统后,沿三条动作路径之一离开系统,若将数据项“命令类型”看作事务,该子系统的信息流具有明显的事务特征。事务分析法的步骤与变换分析方法基本类似,主要差别在于从数据流图到程序结构的映射。第九章面向数据流的设计方法2020/10/1131用户交互子系统的二级数据流图9.3事务分析2020/10/1132事务分析由事务中心发出的每一动作路径的数据流特性。图9.14的事物中心是“启动命令处理”框。图9.15划定接受路径与所有动作路径的界限,判定每一动作路径上数据流的特征。9.3事务分析2020/10/1133确定流界9.3事务分析2020/10/1134事务分析步骤五事务处理型的程序结构由“输入”和“散转”两部分组成,输入部分的构成方法如变换分析法,即从事务处理中心开始,沿输入通路向外推进,每个处理框映射为一个模块。“散转”部分顶层为一“散转”模块,它总控所有对应于每一动作路径的控制模块,每条动作路径都根据它的信息流特征映射为一个程序子结构。9.3事务分析2020/10/1135事务流映射9.3事务分析2020/10/1136事务分析用户交互子系统的一级分解9.3事务分析2020/10/1137事务分析分解并精化事务结构以及每条动作路径所对应的结构。这些子结构是根据流经每一动作路径的数据流特征,采用本节或上节所述设计步骤导出的。图9.18给出了各条动作路径映射后的程序结构。使用启发式设计策略,精化所得程序结构雏形,改良软件质量。这一步骤与变换分析法相同。9.3事务分析2020/10/1138用户交互子系统的程序结构雏形9.3事务分析2020/10/11399.4变换分析和事务分析的最后一个步骤都是运用启发式策略对程序结构雏形进行优化,以提高软件设计的整体质量。启发式设计策略是人们从长期的大量软件开发过程中积累总结的经验。第九章面向数据流的设计方法2020/10/1140(1)改造程序结构,减小耦合度,提高内聚度。应从增强模块独立性的角度,对程序结构雏形的模块进行分解或合并,力求降低耦合度,提高内聚度。(2)改造程序结构,减少高扇出,在增加程序深度9.4启发式设计策略2020/10/1141典型的程序结构设计良好的软件结构通常顶层扇出比较高,中层扇出较少,9.4启发式设计策略2020/10/1142启发式设计策略(3)改造程序结构,使任一模块的作用域在其控制域之内。模块作用域指,受该模块内部判定影响的所有模块;模块控制域为其所有下层模块。图9.209.4启发式设计策略2020/10/1143启发式设计策略(4)改造程序结构,减少界面的复杂性和冗余程度,提高协界面复杂是引起软件错误的一个基本因素。界面传递的数据应尽可能简单并与模块的功能相协调。(模块功能可预言指,若视模块为“黑匣子”,输入恒定,输出则恒定。如果对模块局部数据的体积,控制流程的选择及外部接口方式等诸因素限制过多,则以后为去掉这些限制要增加维护开销。9.4启发式设计策略2020/10/1144启发式设计策略((7)为满足设计或可移植性的要求,把某些软件用包(Package)根据模块重要的程度、被访问的频率及两次引用的间隔等因素对模块分组。程序中那些供选择的或“单调”(one—shot)的模块应单独存在,以便高效地加载。9.4启发式设计策略2020/10/1145启发式设计策略无论是采用变换分析法还是事务分析法,获得程序结构后,必须开发一系列辅助文档,作为软件总体设计的组成部分。④综述设计中所有限制(Limitations)和限定(Restrictions⑤⑥对设计进行优化。9.4启发式设计策略2020/10/1146小结基于数据流图进行软件设计的过程:①确定信息流的类型;②划定流界;③将DFD映射为程序结构;④提取层次控制结构;⑤通过设计复审和使用启发式策略进一步精化所得到的结构。结合“家庭保安系统”实例,给出了将变换流和事务流映射为程序结构的方法。第九章面向数据流的设计方法
本文标题:面向数据流的设计方法.ppt
链接地址:https://www.777doc.com/doc-7111938 .html