,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,软件设计,福州大学 软件学院,张舒,软件设计 福州大学 软件学院,1,结构化设计,结构化设计,(SD),的概念源于70年代,它认为程序或系统是由一组功能操作(模块)构成的。,软件设计者首先应该将需要实现的系统看作是逻辑功能(功能模块)的抽象集合,只分析模块之间关系,“无视”模块内部的情况。,模块本身可以供其他程序使用,也可以是其他程序已编好的模块,模块按一定的层次结构组织起来。,结构化设计结构化设计(SD)的概念源于70年代,它认为程序或,2,结构化设计方法,总体设计,从DFD导出初始模块结构,按SD设计原则改进初始的模块结构图,详细设计,选用多种工具对模块图中每个模块的过程进行描述。,结构化设计方法总体设计,3,体系结构图中的模块,传入模块,从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。,传出模块,从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。,体系结构图中的模块传入模块,4,变换模块,它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。,协调模块,对所有下属模块进行协调和管理的模块。,变换模块,5,数据流图分类,数据流图决定问题的类型。,数据处理问题典型的类型有两种:,变换型,事务型,针对两种不同的类型分别进行分析处理。,数据流图分类数据流图决定问题的类型。,6,变换型数据流图,具有较明显的,输入,、,处理,(或主加工)和,输出,的数据流图称为变换型数据流图。,在变换型数据流图中,主加工是系统的中心。,变换型数据流图具有较明显的输入、处理(或主加工)和输出的数据,7,变换型体系结构图,通过变换分析技术,将变换型DFD转换为变换型体系结构图.,例如:,对于下图,,可以转换系统结构图为,变换型体系结构图通过变换分析技术,将变换型DFD转换为变换型,8,软件的设计结构化的设计ppt课件,9,变换分析,变换分析方法由以下四步组成:,分析变换型数据流图,区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分标出界限。,变换分析变换分析方法由以下四步组成:,10,A,F,D,E,C,B,a,k,h,f,e,d,c,b,j,物理,输入,物理,输出,逻辑,输出,逻辑,输入,信息处理中心,变换型数据流图,(加工或变换),AFDECBakhfedcbj物理物理逻辑逻辑信息处理中心变,11,进行一级分解,设计上层模块,顶层是主模块设计,第一层是输入、输出及处理设计。,System,Get b,b in to j,Out j,b,b,j,j,进行一级分解,设计上层模块SystemGet bb,12,System,Get b,b in to j,Out j,In a,a in to b,B,C,D,E,j in to k,Out k,b,b,j,j,b,a,a,k,b,h,f,e,f,c,c,d,h,d,e,k,j,j,进行二级分解,设计输入、输出和中心变换部分的中、下层模块。,SystemGet bb in to j Out jI,13,进一步细化,对中下层模块继续细化,一直分解到物理的输入和输出为止。,进一步细化,14,软件的设计结构化的设计ppt课件,15,注意:,在选择模块设计的,次序,时,必须对一个模块的,全部直接下属模块,都设计完成之后,才能转向另一个模块的下层模块的设计。,在设计下层模块时,应考虑模块的,耦合,和,内聚,问题,以提高初始结构图的质量。,注意:,16,使用“黑箱”技术:,在设计当前模块时,,先把这个模块的所有下层模块定义成,“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。,在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。,软件的设计结构化的设计ppt课件,17,在模块划分时,一个模块的直接下属模块一般在,5,个左右。如果直接下属模块超过10个,可设立中间层次。,如果出现了以下情况,就停止模块的功能分解:,当模块不能再细分为明显的子任务时;,当分解成用户提供的模块或程序库的子程序时;,当模块的界面是输入输出设备传送的信息时;,当模块不宜再分解得过小时。,在模块划分时,一个模块的直接下属模块一般在5个左右。如果,18,事务型数据流图,在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做,事务,。,某个加工将它的输入分离成一串发散的数据流,形成许多活动路径,并根据输入的值选择其中一条路径,,具有这样特征的数据流图是,事务型数据流图。,事务型数据流图在很多软件应用中,存在某种作业数据流,它可以引,19,20,事务型体系结构图,对事务处理型的DFD采用事务分析技术能转换为事务型体系结构图。,事务型体系结构图对事务处理型的DFD采用事务分析技术能转换为,21,软件的设计结构化的设计ppt课件,22,事务分析,与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。,事务分析,23,确定流界,首先从数据流图中找出事物流、事务处理中心和事物路径。事务中心前是接受事物,事务中心后是事物路径。,进行一级分解,设计顶层模块,。,I,P1,P2,P3,事物流,事务中心,事务处理,事务控制,原 始 的 数 据 流 图,对 应 模 块 图,事务分析过程,确定流界IP1P2P3事物流事务中心事务处理事务控制原,24,I,P1,P2,P3,事物流,事务中心,事务处理,事务控制,接受事务,发送事务,进行二级分解,设计上层模块,事务分析的任务是从数据流图中导出具有,接受分支,和,发送分支,的软件结构。对事务中心应设计“事务控制”模块;对事务流应设计“接受事务”模块;对事务路径,应设计“发送事务”模块。,原 始 的 数 据 流 图,对 应 模 块 图,事务分析技术,(续一),IP1P2P3事物流事务中心事务处理事务控制接受事务发送事务,25,I,P1,P2,P3,事物流,事务中心,事务处理,事务控制,接受事务,发送事务,P1,P2,P3,原 始 的 数 据 流 图,对 应 模 块 图,进行三级分解,设计中下层模块,对于接受分支,可用类似于变换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,,在发送事务模块下为每条事务路径设计一个事务处理模块,,这一层称为事务层。在事务层模块下,沿各事务路径进行进一步细化。,事务分析技术,(续二),IP1P2P3事物流事务中心事务处理事务控制接受事务发送事务,26,Tips,变换分析是软件体系结构设计的主要方法。,一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以,变换分析为主,事务分析为辅,的方式进行软件结构设计。,Tips变换分析是软件体系结构设计的主要方法。,27,修改记录,写记录,卡片,编辑卡片,检查顺序,检查次序,比较帐号,错误,顺序卡片,修改信息,旧记录,顺序记录,要修改的记录,不修改的记录,已修改的记录,新记录,新记录,报告,报告,顺序记录,修改信息,实例:银行贷款文件管理 (MFUP),修改分类,抽出修改,顺序卡片,修改信息,2,3,4,5,6,7,9,需求分析结果 DFD 图,编辑卡片加工分解,主加工是?,修改记录写记录卡片编辑卡片检查顺序检查次序比较帐号错误顺序卡,28,将DFD,图转换为模块结构图,贷款文件,管理系统,取顺序,记录,修改,记录,打印,报告,打印,记录,比较,帐号,取修改,信息,读旧,记录,检查,顺序,取,卡片,编辑,卡片,读卡片,检查顺序,卡片,卡片,顺序,卡片,旧记录,旧记录,顺序记录,顺序记录,顺序卡片,顺序卡片,已修改,“编辑卡片”应继续向下分解,是典型的“事务处理”,型的DFD图。,写,记录,修改记录,写记录,卡片,编辑卡片,检查顺序,检查次序,比较帐号,错误,顺序卡片,修改信息,旧记录,顺序记录,要修改的记录,不,修改的记录,已修改的记录,新记录,报告,将DFD图转换为模块结构图贷款文件取顺序修改打印打印比较取修,29,结构化设计方法的设计过程,精化数据流,流类,区分事务中心和数据接受选路,区分输入和输出分支,映射成事务结构,映射成变换结构,用启发式设计规则精化软件,导出接口描述和全局数据结,复查,详细设计,事务分析,变换分析,结构化设计方法的设计过程 精化数据流流类区分事务中心和数,30,软件模块结构的改进,模块功能的完善化,一个完整的模块应当有以下几部分:,执行规定的功能的部分;,出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。,如果需要返回数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个状态码。,软件模块结构的改进模块功能的完善化,31,消除重复功能,改善软件结构,完全相似,:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。,局部相似,:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。,消除重复功能,改善软件结构,32,软件的设计结构化的设计ppt课件,33,模块的作用范围应在控制范围之内,模块的,控制范围,包括它本身及其所有的从属模块。,模块的,作用范围,是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。,如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的.,模块的作用范围应在控制范围之内,34,软件的设计结构化的设计ppt课件,35,尽可能减少高扇出结构,随着深度增大扇入,。如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。,尽可能减少高扇出结构,随着深度增大扇入。如果一个模块的扇出,36,避免或减少使用病态联接,应限制使用如下三种病态联接:,直接病态联接,即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。,避免或减少使用病态联接应限制使用如下三种病态联接:,37,公共数据域病态联接,模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。,这种方式将使得模块间的耦合程度剧增。它不仅影响模块和模块,而且影响与公共数据域有关联的所有模块。,公共数据域病态联接,38,通信模块联接,即模块A和模块B通过通信模块TABLEIT传送数据。,从表面看,这不是病态联接,因为模块和模块B都未涉及通信模块TABLEIT 的内部。,然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。,通信模块联接,39,模块的大小要适中,模块的大小,可以用模块中所含语句的数量的多少来衡量。,把模块的大小限制在一定的范围之内。,例如:规定其语句行数在50100左右,保持在一页纸之内,最多不超过500行。,模块的大小要适中,40,设计功能可预测的模块,但要避免过分受限制的模块,一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。,但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。,对于这种模块,如果调用者不小心使用,其结果将不可预测。,设计功能可预测的模块,但要避免过分受限制的模块,41,如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。,为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。,如果一个模块的局部数据结构的大小、控制流的选择或者与外界(,42,软件包应满足设计约束和可移植性,为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求