软件工程-9.面向数据流设计.ppt
软件工程,Software Engineering,(An Introduction),软件工程,第9章面向数据流的设计方法,面向数据流的设计方法,即通常所说的结构设计法(Structure Design,简称SD方法),由Yourdon和Constantine等人于1974年提出的,与结构化分析(SA)相衔接,根据对数据流的分析设计软件结构。本章所述技术用于软件的概要设计描述,包括模块、界面和数据结构的定义,这是所有后续开发的基础。SD方法对那些顺序处理信息且不含层次数据结构的系统最为有效,例如过程控制、复杂的数值分析过程、以及科学与工程方面的应用。当SD方法用于完全的数据处理时,即使系统中使用层次数据也同样行之有效。,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,相关概念回顾,常用的设计方法面向数据流的结构化方法(SA)面向数据结构的Jackson方法(JSD)面向数据结构的结构化数据系统开发方法(DSSD)面向对象方法(OOA)形式化方法面向构件的基于知识/AI原型法(RP)其它,相关概念回顾,常用的分析/建模方法面向数据流的结构化分析方法(SA)面向数据结构的Jackson方法(JSD)面向数据结构的结构化数据系统开发方法(DSSD)面向对象的分析方法(OOA)建立动态模型的状态迁移图或Petri网等形式化方法面向构件的其它E-R方法,相关概念回顾,软件设计的目标和任务Aim/Goal:以SRS为依据,设计出能满足SRS中定下的各项需求的软件实现方案,并力求使方案达到最佳。该设计方案是后继阶段(编码实现)的依据。(设计方案也将为问题的软件解solution或软件表示representation),软件设计的任务 软件需求:解决“做什么”软件设计:解决“怎么做”问题结构(软件需求)软件结构:从软件需求规格说明书出发,形成软件的具体设计方案。,映射,相关概念回顾,Elements of the analysis model,相关概念回顾,软件设计的任务,数据词典,状态转换图,过程设计,接口设计,体系结构设计,数据设计,相关概念回顾,从管理和技术两个不同角度对设计的认识,软件设计的任务,相关概念回顾,软件设计任务,工程管理观点 概要设计,将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。,相关概念回顾,软件设计的任务,技术观点软件设计是把一个软件需求转换为软件表示的过程,即解决“怎么做”的问题。根据用信息域表示的软件需求,以及功能和性能需求,进行 数据设计 系统结构设计 过程设计 界面设计,相关概念回顾,相关概念回顾,软件设计的基本原则抽象与逐步求精问题分解与模块化信息隐藏模块独立性高内聚低耦合原则软件设计的启发规则,相关概念回顾,软件结构设计过程 软件设计中最重要的是软件结构设计。软件结构设计过程一般采用以下步骤:设计供选择的方案;选取合理的方案;推荐最佳方案;功能分解和设计软件结构;数据库设计;制定软件设计测试计划;编制设计文档;审查和复审。,9.0 面向数据流的设计,一、Whats DFO Design?正如在DFO的分析一章中指出的。几乎所有系统都可以看成对数据流的处理(加工)。因此,理论上,DFO设计方法可用于任何一种软件系统的开发。但是DFO设计方法对那些不需要复杂的(或不存在)数据结构和完全的数据处理系统特别有效,例如:过程控制、微处理器控制、工序控制、复杂的数值分析、工程性和科技性的软件应用、CAD或操作系统,等。53P209;11R112。,9.0 面向数据流的设计,一、Whats DFO Design?在软件工程的需求分析阶段,信息流是一个关键考虑,通常用数据流图描绘信息在系统中加工和流动的情况。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。,9.0 面向数据流的设计,二、(Relevant)Methods1SD(Structured Design)2SARA is well suited to the design of concurrent RTS.3MASCOT can be applied in a wide range of application areas.It is however aimed particularly at RTS embedded application where the softs is complex and highly interactive.,Structured Design(SD),SD由E.Yourdon和L.L.Constantine等人于1974年提出55。它又叫Yourdon方法,是目前使用最广泛的软件设计方法之一。SD的一些方法和原理已经如同软件设计中的“自然法制”一般,在广泛传播,SD的概念和思想在实际中能够应用在几乎所有的其它软件设计方法中,还能广泛地应用于系统设计(不仅仅是软件设计)。结构化设计方法是基于模块化、自顶而下细化、结构化程序设计等程序设计技术基础上发展起来的。,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,一、SD与软件设计,数据词典,状态转换图,过程设计,接口设计,体系结构设计,数据设计,9.1 SD方法的基本概念和设计过程,软件设计,结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础发展起来的。它所提供的方法和原则,主要是用来指导软件的概要设计。它还提供了一种“结构图”的描述工具,是专门用来描述软件的总体结构的。,9.1 SD方法的基本概念和设计过程,一、SD与软件设计,9.1 SD方法的基本概念和设计过程,二、SD的基本思想结构化设计(Structured Design,简称SD)是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法用结构图 SC(Structure Chart)来描述软件系统的体系结构SA、SD和SP构成完整的结构化方法体系发展:SP(structured Programming)SDSA。55P107;2P96;57中册P253255。,9.1 SD方法的基本概念和设计过程,二、SD的基本思想结构图SC描述一个软件系统由哪些模块组成,以及模块之间的调用关系。结构图SC的基本成分有:模块、调用和数据。,9.1 SD方法的基本概念和设计过程,二、SD的基本思想SD以数据流图为基础,它定义了把DFD变换成软件结构的不同映射方法,9.1 SD方法的基本概念和设计过程,将数据流图分为变换型数据流图和事务型数据流图,对应的映射分别称为变换分析和事务分析SD方法的两种映射过渡方法,9.1 SD方法的基本概念和设计过程,二、SD的基本思想,9.1 SD方法的基本概念和设计过程,三、SD的基本记号 模块:模块用矩形框表示,并用模块的名字标记它。,9.1 SD方法的基本概念和设计过程,三、SD的基本记号 模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。,9.1 SD方法的基本概念和设计过程,三、SD的基本记号 模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块,A,1、模块-在SC图中用矩形框表示,并用名字来标记它,-模块调用关系,2、模块的调用关系和接口,B,被调用模块,调用模块,A(查询学生),B(查找学生记录),数据信号,控制信号,学号,查找成功信号,-模块间接口的表示,9.1 SD方法的基本概念和设计过程,9.1 SD方法的基本概念和设计过程,为了方便,有时也用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块。数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示,9.1 SD方法的基本概念和设计过程,在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。,9.1 SD方法的基本概念和设计过程,四、在系统结构图中的模块传入模块 从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块 从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。,从下属模块取得数据,进行某些处理,再将其结果传给上级模块。在此,将它传送的数据流称为逻辑输入数据流。,逻辑输入数据流,9.1 SD方法的基本概念和设计过程,从上级模块获得数据,进行某些处理,再将其结果传给下属模块。在此,将它传送的数据流称为逻辑输出数据流。,逻辑输出数据流,9.1 SD方法的基本概念和设计过程,9.1 SD方法的基本概念和设计过程,四、在系统结构图中的模块变换模块 它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块 对所有下属模块进行协调和管理的模块。,9.1 SD方法的基本概念和设计过程,模块 模块的调用关系和接口 模块间的信息传递,SC 图的一般形式,9.1 SD方法的基本概念和设计过程,9.1 SD方法的基本概念和设计过程,说明:(1)模块名应唯一,且能较好地反映该模块的功能;(2)数据名应是系统说明书中有定义的(控制码例外);(3)结构图最好画在一张纸上。,9.1 SD方法的基本概念和设计过程,结构图只表示层次结构不表示执行过程。因而有1、父结点是先于子结点(模块)。2、兄弟模块的执行顺序不在结构图中反映出来,如下面的两张图应看成是等价的。,(注:兄弟模块的执行顺序在详细设计时确定,习惯上也可假定其顺序是“从左到右”的),9.1 SD方法的基本概念和设计过程,SD方法能方便地将数据流图转换为软件结构,其过程分为五步:1 确定信息流的类型;2 划定流界;3 将数据流图映射为程序结构;4 提取层次控制结构;5 通过设计复审和使用启发式策略进 一步精化所得到的结构。,1)变换流,变换流 在基本系统模型(即顶级数据流图)中信息通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。,输入流,外部表示,内部表示,信息,时间,图911 信息流,输出流,变换流,1)变换流,图9-1-2 典型的变换流变换流的特点是:经过变换B的数据流一部分先经过变换C到达变换E,然后另一部分经过变换D到达E;即C和D是顺序结构。,2)事务流,事务流单个数据项称为事务(transaction)沿传入路径(也称接受通道)进入系统,由外部形式变换为内部形式后到达事务中心,事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。可见它是一个选择结构。,事务中心,T,B,事务,C,A,图913 事务流,9.1 SD方法的基本概念和设计过程,在大系统的中,变换流与事务流往往交织在一起。在基于事务流的系统中,当信息沿动作路径流动时可能呈现变换流的特征,变换分析法与事物分析法需要交叉使用。任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。,9.1 SD方法的基本概念和设计过程,9.1 SD方法的基本概念和设计过程,一、SD设计的基本步骤1.对SA中得出的DFD作进一步的评审,若有必要再做进一步完善和细化。2 P969853P211,P21255P114,9.1 SD方法的基本概念和设计过程,对DFD作进一步的评审,若有必要再做进一步完善和细化开发工程的目标往往不是完全复制现有的系统,而是创造一个能够完成相同的或类似的功能的新系统。能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现。,9.1 SD方法的基本概念和设计过程,一、SD设计的基本步骤2.确定 DFD 的类型Transform or Transaction。并标出表示该DFD类型特征的数据流的边界。3.从DFD导出初始的程序结构图SC。导出初始SC的两种方法是:(1)变换分析法;(2)事务分析法。4.对获得的SC进行反复的评价与改进,直至获得最佳方案。评价和改进的标准与方法可参见模块划分准则、启发式规则和Morphology 的讨论。,9.1 SD方法的基本概念和设计过程,一、SD设计的基本步骤4.对获得的SC进行反复的评价与改进,直至获得最佳方案。评价和改进的标准与方法可参见模块划分准则、启发式规则和 Morphology 的讨论。5.书写设计文档书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等6.设计评审,9.1 SD方法的基本概念和设计过程,二、DFD的类型数据流图可分为两种类型:变换型数据流事务型数据流在大系统的DFD中,变换流和事务流往往交织在一起。设计人员首先要判定占主导地位的信息流,并确定其特征,然后孤立支流。从而在导出程序结构时,就可以先根据主导信息流采用相应的方法导出程序的主结构,再根据支流精化由主导数据流推出的程序结构。,9.1 SD方法的基本概念和设计过程,变换型DFD的特征:数据流图可明显地分成输入、变换(或称主加工)、输出三部分信息沿着输入路径进入系统,并将输入信息的外部形式经过编辑、格式转换、合法性检查、预处理等辅助性加工后变成内部形式内部形式的信息由变换中心进行处理然后沿着输出路径经过格式转换、组成物理块、缓冲处理等辅助性加工后变成输出信息送到系统外,9.1 SD方法的基本概念和设计过程,变换型数据流图示例,逻辑输入,逻辑输出,主加工,9.1 SD方法的基本概念和设计过程,变换型数据流图示例,9.1 SD方法的基本概念和设计过程,变换型数据流图示例,9.1 SD方法的基本概念和设计过程,事务型数据流图示例,9.1 SD方法的基本概念和设计过程,事务型数据流图示例,9.1 SD方法的基本概念和设计过程,事务型数据流图示例,9.1 SD方法的基本概念和设计过程,事务型数据流图的特征若某个加工将它的输入流分离成许多发散的数据流,形成许多平行的加工路径,并根据输入的值选择其中一个路径来执行,这种特征的数据流图称为事务型的数据流图。这个加工称为事务中心。,9.1 SD方法的基本概念和设计过程,事务在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。例如:银行业务中有存款、取款、查询余额、开户、转帐等多种事务,这种软件通常是接收一个事务,然后根据事务的类型执行一个事务处理的功能,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,9.2 变换分析/变换型设计,预备工作步骤一、复审基本系统模型步骤二、复审和精化软件数据流图步骤三、确定DFD的特性,确定它是变换流/事务型DFD。,9.2 变换分析/变换型设计,步骤四、划定输入流和输出流的边界,找出变换中心。即把DFD划分成逻辑输入、主加工和逻辑输出三个部分。步骤五、执行“一级分解”(first level factoring)一级分解的目标是导出具有三个层次的程序结构,顶层为主控模块;底层模块执行输入、计算和输出功能;中层模块控制、协调底层的工作。步骤六、执行“二级分解”。二级分解的任务是把数据流图中每个处理框映射为结构图中的一个或多个模块。其过程是把变换中心中的每个加工映射为变换中心模块(变换流控制模块)下的一个模块;从变换中心的输入(出)边界向外移动,把遇到的每个处理框映射为结构图中相应控制模块下的模块结构。,9.2 变换分析/变换型设计,后续工作优化、改进步骤七、采用启发式设计策略,精化所得程序结构雏形,改良软件质量。,9.2 变换分析/变换型设计,下面以“家庭保安系统”的传感器监测子系统为例说明变换分析的各个步骤。步骤一、复审基本系统模型 基本系统模型指顶级DFD和所有由外部提供的信息。这一设计步骤是对系统规格说明书和软件需求规格说明书进行评估。这两个文档描述软件界面上信息的流程和结构。,“家庭保安系统”的顶级数据流图,“家庭保安系统”的一级数据流图,图921“家庭保安系统”的顶级数据流图,警报类别,家庭保安系统软件,控制面板,显示器,警报器,电话线,传感器,用户命令,显示信息,传感数据,电话拨号音频,图922“家庭保安系统”的第一级DFD,电话拨号音频,配置数据,配置 数据,配置数据,用户命令处理,显示信息和状态,传感器监测,系统配置,控制面板,显示器,警报器,电话线,传感器,配置信息,配置 命令,启动/停止命令,原口令,有效口令,传感器信息,报警类别,传感数据,显示 信息,用户命令,口令,启动/停止系统和状态,启动或停止消息,口令核对,用户交互子系统,9.2 变换分析/变换型设计,步骤二、复审和精化软件数据流图 这一步主要是对软件需求规格说明书中的分析模型进行精化,直至获得足够详细的DFD。例如,由“传感器监测子系统”的第一级(图922的局部)和第二级(图923)DFD进一步推导出第三级数据流图(图924),此时,每个变换对应一个独立的功能,可以用一个具有较高内聚度的模块实现,至此已有足够的信息可用于设计“传感器监测子系统”的程序结构,精化过程亦可结束。,“传感器监测子系统”的第二级DFD,“传感器监测子系统”的第三级DFD,9.2 变换分析/变换型设计,步骤三、确定DFD的特性,判定它为变换流还是事务流。以图924所示DFD为例,数据沿一个传入路径进来,沿三个传出路径离开,没有明显的事务中心,因此,该信息流应属变换流。步骤四、划定输入流和输出流的边界,找出变换中心。即把DFD划分成逻辑输入、主加工和逻辑输出三个部分。,9.2 变换分析/变换型设计,步骤四、划定输入流和输出流的边界,找出变换中心。即把DFD划分成逻辑输入、主加工和逻辑输出三个部分。(1)凭经验(2)先找出逻辑 I/0 数据流,夹在其间的就是主加工物理输入(输出):系统的初始的输入(最终的输出)。,9.2 变换分析/变换型设计,步骤四、划定输入流和输出流的边界,找出变换中心。即把DFD划分成逻辑输入、主加工和逻辑输出三个部分。所谓逻辑输入,是指离物理输入端最远,但仍可以被看作系统的输入的那些数据流。而逻辑输出则是离系统的物理输出端最远,但仍可视为系统的输出的数据流。以逻辑输入数据流和逻辑输出数据流为分界线,在逻辑输入数据流边界线前端的就是逻辑输入部分,在逻辑输出数据流边界线后端的就是逻辑输出部分,介于它们之间的就是中心加工。,9.2 变换分析/变换型设计,步骤四、划定输入流和输出流的边界,找出变换中心。即把DFD划分成逻辑输入、主加工和逻辑输出三个部分。输入、输出流边界的划分可能因人而异,不同的设计人员可能把边界沿着数据通道向前推进或后退一个处理框,这对最后的软件结构影响不大。主加工可能有多个,也可能没有主加工。“传感器监测子系统”的流界在图9.中用虚线表示。,“传感器监测子系统”,示例:划分输入流、输出流的边界和变换中心,中心变换型(transform center)/变换型/主加工型,9.2 变换分析/变换型设计,步骤五、执行“一级分解”(first level factoring)一级分解的目标是导出具有三个层次的程序结构,顶层为主控模块;底层模块执行输入、计算和输出功能;中层模块控制、协调底层的工作。此时得出的具体结构实际只有两层。设计顶层和第一层(主模块和第一层),9.2 变换分析/变换型设计,说明:本课程授课过程中,以及课本中所使用的例子,为简单计,所使用的“名字”(数据名、加工名、模块名、文件名等)是十分随意的。在实际应用中,切不可忘记有关“好名字”的约定。,9.2 变换分析/变换型设计,图925所示的结构图对应于一级分解的上两层模块,即主控模块和下面几个中层控制模块:输入流控制模块,接收所有输入数据;变换流控制模块,对内部形式数据进行加工、处理;输出流控制模块,产生输出数据。,9.2 变换分析/变换型设计,图925 一级分解,输入流,变换流,变换流控制模块,输入流控制模块,输出流,主控模块,输出流控制模块,A,B,C,D,E,F,G,H,最基本的思想和原则,Structured Design(SD),一级分解,9.2 变换分析/变换型设计,图925展示的是一个简单三叉结构,实际处理大型系统的复杂数据流时,可能需要多个模块对应图9-2-5中一个模块的功能。“一级分解”总的原则是,在完成控制功能并保持低耦合度、高内聚度的前提下尽可能地减少模块的数量。“传感器监测子系统”一级分解如图926所示,其中控制模块的名字概括了所有下属模块的功能。,传感器监测子系统一级分解结果,控制模块的名字概括了所有下属模块的功能。,9.2 变换分析/变换型设计,步骤六、执行“二级分解”/设计中下层模块二级分解的任务是把数据流图中每个处理框映射为结构图中的一个或多个模块。其过程是把变换中心中的每个加工映射为变换中心模块(变换流控制模块)下的一个模块;从变换中心的输入(出)边界向外移动,把遇到的每个处理框映射为结构图中相应控制模块下的模块结构。,图9-2-7 二级分解,输入流,变换流,输入流控制模块,输出流,主控模块,A,B,C,D,E,F,G,H,B,D,A,C,变换流控制模块,输出流控制模块,E,F,G,H,9.2 变换分析/变换型设计,DFD的处理框与程序结构模块一一对应,但按照软件设计原则进行设计时,可能需要把几个处理框聚合为一个模块,或者把一个处理框裂变为几个模块。总之,应根据“良好”设计的标准,进行二级分解。二级分解后得到的仅仅是程序结构的“雏形”(firstcut),后续的复审和精化会反复修改。,9.2 变换分析/变换型设计,程序结构的模块名已隐含了模块功能,但仍有必要为每个模块写一个简要的处理说明,它应当包括:1进出模块的信息(接口描述);2模块的局部信息;3处理过程陈述,包括任务和主要的判 断点的位置、条件;4对有关限制和一些专门特性的简要说 明(例如,文件I/O,独立于硬件的 特性,特殊的实时要求等)。这些描述构成第一版设计规格说明书。,传感器监测子系统输出流部分的程序结构,传感器监测子系统的程序结构“雏形”,9.2 变换分析/变换型设计,步骤七、采用启发式设计策略,精化所得程序结构雏形,改良软件质量 对于程序结构的雏形,以“模块独立”为指导思想,对模块进行整合或分解,旨在追求高内聚、低耦合,以及易实现、易测试、易维护的软件结构。,图9-2-8 结构的优化,输入流控制模块,主控模块,B,D,A,C,变换流控制模块,输出流控制模块,E,F,G,H,输入流控制模块,主控模块,B,D,A,C,E,F,G,H,9.2 变换分析/变换型设计,修改“传感器监测子系统”的程序结构雏形()因只存在唯一一条传入路径,故输入控制模块可删除;()由变换中心产生的整个子结构可归并为“建立警报条件”一个模块(选择电话号码的功能纳入其中),变换控制模块不再需要;()“格式化显示”和“生成显示”两个模块归并为“产生显示”一个模块。,“传感器监测子系统”的程序结构,9.2 变换分析/变换型设计,上述七个设计步骤的目标是给出软件的一个整体描述。一旦有了这样一个描述,设计人员即可从整体角度评价和精化软件的总体结构,此时修改所需耗费不多,却能大大提高软件质量。,最基本的思想和原则,Structured Design(SD),任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。,描述变换型问题的数据流图,相应的软件结构图,SD:变换型设计,9.2 变换分析/变换型设计,步骤六、执行“二级分解”/设计中下层模块二级分解的任务是把数据流图中每个处理框映射为结构图中的一个或多个模块。其过程是把变换中心中的每个加工映射为变换中心模块(变换流控制模块)下的一个模块;从变换中心的输入(出)边界向外移动,把遇到的每个处理框映射为结构图中相应控制模块下的模块结构。,SC 图的一般形式,SD:变换型设计,G1,SD:变换型设计,步骤六、执行“二级分解”/设计中下层模块(1)输入模块:对应于DFD中的输入部分的每个加工P 对应每个输入数据流设计一个输入模块;设计一个变换模块 P(2)输出模块:(类似于输入模块)。(3)主变换模块:对应于主加工部分中的每个加工设计一个变换模块。,(1)在 DFD 图上标出逻辑输入、逻辑输出和变换中心的分界,变换中心,c,e 逻辑输入,w,u 逻辑输出,-具有变换型数据流图,a1,d1,w0,v0,SD:变换型设计,例:,(2)完成第第一级分解,Mc,MA,MT,ME,C,e,C,e,U,w,U,w,变换中心,顶层,第一层,第一级分解后的 SC 图,a1,d1,w0,v0,SD:变换型设计,第一级分解后的 SC 图(另一种结构),a1,d1,w0,v0,(3)对逻辑输入的分解,a1,d1,w0,v0,对逻辑输入的分解,或,a1,d1,w0,v0,ME,变换中心,对输出的分解,W,U,V,MT,Q,P,R,e,C,p,r,U,w,对变换中心加工的分解,p,r,w,u,v0,w0,d1,a1,(4)获得完整的 SC 图,SD:变换型设计,进一步细化(注:以上三个步骤以第0层的DFD为依据,本步骤以下层的DFD图为依据)以下一层的DFD图为依据:(1)为每个子加工设计一个变换模块;或(2)依照变换分析、事务分析或综合分析方法进行设计;直至每个模块均足够小(最多不超过100个语句)。例,参看下例中图(b),SD:变换型设计,进一步细化,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,9.3 事务分析/事务型设计,当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个事务中心,采用事务分析法更为适宜。下面以“家庭保安系统”中“用户交互子系统”为例,说明事务分析法。该子系统的第一级数据流图精化后得到如图931所示第二级数据流图。图中“用户命令数据”流入系统后,沿三条动作路径之一离开系统,若将数据项“命令类型”看作事务,该子系统的信息流具有明显的事务特征。,图931 用户交互子系统的二级数据流图,无效口令,启动/停止命令,口令,启动/停止消息,配置数据,配置数据,配置命令,显示信息,“再试”信息,读取用户命令,启动命令处理,启动/停止系统,产生无效的信息,读取系统数据,读取配置文件,读取口令,显示信息和状态,比较口令与文件,配 置 信 息,用户命令数据,系统参数和数据,原始配置项,格式化的配置数据,命令类型,确认口令,四位数,有效口令,9.3 事务分析/事务型设计,事务分析法可概括为七个步骤:步骤一、复审基本系统模型;步骤二、复审并精化软件数据流图;步骤三、确定数据流图的特征;步骤四、指出事务中心,确定接收部分 和发送部分的流界;步骤五、映射出系统上层模块结构;步骤六、分解并精化事务结构以及每条动作路径所对应的结构。步骤七、使用启发式设计策略,精化所得程序结构雏形,改良软件质量。,图9-3-2 映射系统上层结构模块,9,8,6,1,2,5,4,3,7,10,11,事务中心,接收部分,发送部分,SYSTEM,输入 1,散转 2,SUBSYS1,SUBSYS2,SUBSYS3,确定流界,9.3 事务分析/事务型设计,用户交互子系统的一级分解,9.3 事务分析/事务型设计,步骤六、分解并精化事务结构以及每条动作路径所对应的结构。这些子结构是根据流经每一动作路径的数据流特征,采用本节或上节所述设计步骤逐一导出的。,图9-3-3 设计系统下层模块结构,9,8,6,1,2,5,4,3,7,10,11,事务中心,接收部分,发送部分,SUBSYS2,7,10,4,11,输入控制,变换控制,输出控制,9.3 事务分析/事务型设计,图9-3-4 将模块结构组合,得到程序结构雏形,SYSTEM,输入 1,散转 2,SUBSYS1,SUBSYS2,SUBSYS3,7,10,4,11,输入控制,变换控制,输出控制,3,6,5,8,9,9.3 事务分析/事务型设计,步骤七、使用启发式设计策略,精化所得程序结构雏形,改良软件质量。这一步骤与变换分析法相同。,用户交互子系统的程序结构雏形,最基本的思想和原则,Structured Design(SD),任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。,事务型基本结构一,基本结构二,SD:事务型设计,候选结构一,SD:事务型设计,候选结构二,SD:事务型设计,候选结构三,例:事务分析,事务中心,事务源,SD:事务型设计,主模块,给出H,取得A,L,M,N,A,G,H,B,E,C,F,D,基本结构一,基本结构二,基本结构三,另一种结构,SD:事务型设计,事务处理型(transaction)/事务型,SD:事务型设计,练习:设计下面的DFD的软件结构,最基本的思想和原则,Structured Design(SD),任何设计过程都不应该也不可能完全机械化,人的判断力和创造性往往起决定作用。,SD:混合型设计,一般来说,如果数据流不具有显著的事务特点,使用变换分析;反之,若具有明显的事务中心,则应该采用事务分析技术。实事上,一个大型复杂的系统数据流图并不能明显地划分成变换型数据流图或事务型数据流图,可能既有变换型的特征,又有事务型的特征,即可能是两种类型数据流图的混合体。,SD:混合型设计,在大系统的DFD中,变换流和事务流往往交织在一起。设计人员首先要判定占主导地位的信息流,并确定其特征,然后孤立支流。从而在导出程序结构时,就可以先根据主导信息流采用相应的方法导出程序的主结构,再根据支流精化由主导数据流推出的程序结构。,SD:混合型设计,SD:混合型设计,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,9.4 设计优化及原则 9.4.1 启发式设计策略,1调整模块的功能和规模,降低耦合度,提高内聚度。若在几个模块中发现了共有的子功能,一般应将此子功能独立出来作为一个模块,以提高单个模块的内聚度。合并模块通常是为了减少控制信息的传递以及对全程数据的引用,同时降低接口的复杂性。模块的规模没有固定的要求。以保持模块的独立性为原则。一般而言,模块规模以一页左右为宜(高级语言在75个语句左右)。,9.4.1 启发式设计策略,2调整软件结构的深度、宽度、扇出和扇入数目,改善软件结构性能。经验表明,设计良好的软件结构通常顶层扇出较高,中层扇出较低,底层又高扇入到公共的实用模块中去。,图941 应追求与避免的程序结构,9.4.1 启发式设计策略,典型的程序结构,设计良好的软件结构通常顶层扇出比较高,中层扇出较少,底层又高扇入到公共的实用模块中去。,9.4.1 启发式设计策略,3改造程序结构,使任一模块的作用域 在其控制域之内。,判定,受F中判定的影响,A,C,F,E,G,H,D,B,违背第三条原则,满足第三条原则,A,D,C,E,F,H,G,B,图942 作用域与控制域,9.4.1 启发式设计策略,4分析模块之间的接口信息,降低界面 的复杂性和冗余程度,提高协调性。界面复杂是引起软件错误的一个基本因素,界面上传递的数据应尽可能简单并与模块的功能相协调,界面不协调(即在同一个参数表内或以其他某种方式传递不甚相关的一堆数据)本身就是模块低内聚的表征。,9.4.1 启发式设计策略,5模块功能应该可预言,避免对模块施加过多限制。模块功能可预言指,只要模块的输入数据相同,其运行产生的输出必然相同,也就是可以依据其输入数据预测模块的输出结果。此外,如果设计时对模块中局部数据的体积,控制流程的选择及外部接口方式等诸因素限制过多,则以后为去掉这些限制要增加维护开销。,9.4.1 启发式设计策略,6.改造程序结构,追求单入口单出口的模块。7.为满足设计或可移植性的要求,把某些软 件用包(package)的形式封装起来。软件设计常常附带一些特殊限制,例如,要求程序采用覆盖技术。此时,根据模块重要的程度、被访问的频率及两次引用的间隔等因素对模块分组。此外,程序中那些供选择的或“单调”(oneshot)的模块应单独存在,以便高效地加载。,辅助文档,获得程序结构后,必须开发一系列辅助文档,作为软件总体设计的组成部分。主要工作包括:1)陈述每个模块的处理过程;2)描述每个模块的界面;3)根据数据字典定义数据结构;4)综述设计中所有限制和约束;5)对概要设计进行复审;6)对设计进行优化。,9.4.2 设计优化原则,我们努力追求的设计应该是既满足功能和性能的要求,又符合一般软件设计原理和上述种种启发式设计原则。对软件结构的修改越早越好。必要时,可以并行地开发若干个软件结构,通过评比,求得“最佳”结果。简洁的程序结构容易测试、容易维护,应该使用尽可能少的模块;只要满足信息要求,应该使用尽可能简单的数据结构。结构优化是一个精益求精的过程。优化过程可以在设计的早期,甚至要延续到详细设计乃至编码阶段。,9.4.2 设计优化原则,对时间有特殊要求的软件,应根据普遍存在的“百分之二十规则”(即20%的代码占用80%的处理时间,80%的错误出自20%的代码)采用下述对策:1在不考虑时、空耗费的情况下,设计并精化软 件结构;2借用CASE工具模拟分析运行时的性能,定位出 低效的部分,加以改进;3详细设计时对最耗时的模块,认真地设计它们的处 理过程(算法),以便减少时间的开销;4尽量用高级语言编程以利于软件的优化;5对大量占用计算机系统资源的模块必要时用低级语 言重新编码,以提高效率。设计优化的格言“先让它干起来,再让它快起来”。,第9章面向数据流的设计方法,相关概念回顾9.0 面向数据流的设计9.1 SD方法的基本概念和设计过程9.2 变换分析9.3 事务分析9.4 设计优化及原则SD:案例,随语,设计不是机械性的;方法、原则最重要;人的决策和创造力是决定性的。,Thank You!,习题9.7,针对图921所示的DFD,采用事务分析法导出程序结构,因其主体数据流为事务流(c为事务中心)。显然,区域为变换流;区域为事务流,但其各个子流为变换流;区域为变换流。在你所设计的程序结构中,除了每个变换对应一个模块外,可能还需增加若干控制模块。,图9-21,e,d,b,a,c,f,g,h,i,k,j,l,m,n,o,p,q,r,s,t,u,Z,A,D,x,y,v,w,E,F,I,J,区域,区域,区域,B,H,G,习题9.7,解:(仅供参考)(1)复审基本系统模型(2)复审并精化软件数据流图(3)确定数据流的特征:由图9-21可见,c为事务中心,所以具有事务流的特征。(4)划分流界,孤立事务中心,如图。(5)执行一级分解,如图1所示,习题9.7,图1 一级分解,SYSTEM,b,散转 c,a,d,e,SUB,SUB,SUB,习题9.7,(6)将每条动作路径映射为对应的结构:区域的程序结构:,出控1,g,f,h,SUB,l,j,i,k,区域的程序结构:,散转m,n,q,SUB,路2,r,o,p,出3,路3,s,t,B,D,路4,入4,A,Z,x,y,u,v,w,散转m,w,控制,u,v,区域的程序结构:,SUB,出控3,G,F,E,H,J,I,(7)组合得程序结构的雏形,精化雏形,如下图:,SYSTEM,b,散转 c,a,d,e,出控1,g,f,h,SUB,j,i,l,k,散转m,n,q,路2,o,p,B,D,