【教学课件】第四章软件设计.ppt
第四章 软件设计主要内容:主要内容:软软件件设计设计的基本概念和原的基本概念和原则则软软件件设计设计模型模型软软件重用技件重用技术术软软件件设计设计模式模式4.14.1软软件件设计设计概述概述F设计指的是应用各种技术和原理对一个设备、一个过程或者一个系统做出足够详细的规定,使之能够在物理上得以实现。软件设计是一个把软件需求转化为软件表示的过程,也就是把它加工为在程序细节上非常接近于源程序的软件表示(描述)。软件需求:解决软件需求:解决“做什么做什么”软件设计:解决软件设计:解决“怎么做怎么做”问题结构问题结构(软件需求软件需求)软件结构软件结构 从软件需求规格说明书出发,形成软件从软件需求规格说明书出发,形成软件的具体设计方案。的具体设计方案。映射映射映射映射软件设计目标软件设计目标 F设计必须实现分析模型中所有的功能和性能的需求;F设计必须具有良好的可读性和可理解性,以便于代码的生成,以及软件测试和维护;F设计应该是完整的,包括数据、体系结构、功能、行为、接口等设计。F为了更好地评估一个系统的设计质量,应该建立一个良好的设计技术指标。F展示一种层次性结构,该结构(1)已经使用可识别的设计模式来建造;(2)由展示良好的设计特征的构件构成;(3)可以用演化的方式实现,从而,便于软件的实现和维护。F模块化,即软件被逻辑地划分为特定功能和子功能的构件。F包含数据、体系结构、接口和构件(模块)等的表示。F从可识别的数据模式导出数据结构,并且适合于将被实现的对象。F具有功能独立的构件。F降低模块和外部环境连接复杂性的接口。F通过使用软件分析过程中所获得的信息,导出可重用的方法。软件设计原则软件设计原则 F设计过程不应该受到“隧道视野”的限制。软件设计人员应该具有创造能力,根据问题的要求和可用的资源,以及设计的概念进行判断,采用适当的设计手段。F设计应该可以跟踪到分析模型。设计模型满足需求跟踪是必要的,设计模型的单独一个元素经常跟踪到多个需求。F设计不应该每次从头做起。很多模式在过去也许已经用过,系统应该使用一系列设计模式来构造。F软件设计的结构应该尽量模拟问题域结构。也就是“问题解”的结构应该尽量模拟“问题域”的结构。F设计应该具有一致性和集成性。整个系统具有统一的风格和格式;如果构件具有良好的接口,那么,系统就容易集成。F设计应该适应变更。设计人员应该运用设计概念和各种技术(例如,模块化、重用性、设计模式等等),使得设计具有适应变更能力。F设计应该具有容错性和异常处理的能力。一个良好的系统应该从不“彻底崩溃”,当它遇到异常的条件(例如异常的数据、事件、操作条件等)也能够平滑处理。F设计不是编码。即使是在构件设计时,所进行的详细过程性描述,设计模式的抽象级别也比源代码高。F在创建设计时就应该能够评估系统的质量。事实上,目前很多设计方法都支持对设计模型的评审。F应该评审设计以减少概念性的错误。设计人员应该确保检查设计上的主要概念,避免出现歧义性、不一致性。软件设计原理软件设计原理 模块化F把软件按照规定的原则,划分为一个个较小的相互独立,但又相关的部件,每一个部件称为模块,注意到模块可以独立命名和编址,系统模块化又称模块设计。当把所有的模块组装在一起,就可以获得问题的解。F模块可分解性。如果一种软件设计方法提供了将问题分解成子问题的系统化机制,那么,它就能降低整个系统的复杂性,从而可以实现一种有效的模块化解决方案。F模块可组装性。如果一种软件设计方法能把现存的(可重用的)设计构件组装成一个新系统,那么,它就能提供一种不是一切从头开始的模块化解决方案。F模块可理解性。如果一个模块不用参考其他模块可以作为一个独立的单位被理解,那么,它就易于构造和修改。F模块连续性。如果系统需要微小变更只导致单个模块的修改,那么,变更引起的副作用就会被最小化。F模块保护性。如果模块内出现异常情况,并且它的影响限制在该模块内部,那么,由错误引起副作用就会被最小化。F分解与抽象F由于大型软件往往非常复杂,控制软件复杂性的基本手段是“分解”。在系统分析中,无论系统有多么大,总可以有计划地把它分解足够小的子问题。也就是说,系统的增大,分析工作的复杂程度不会随之增大,只是工作量的增大罢了,复杂性不会随系统的增大而增大。这种思想方法依然可用于设计阶段,分解是处理复杂问题常用的方法。F抽象是人类认识复杂现象问题的思维工具之一,抽象就是提取客观世界中一群事物的某些本质共性(属性、特征),暂时忽略它们非本质的细节。由特殊到一般的思维(由底向上),上层是下层的一个抽象;反之,由顶向下可以解释为由抽象到具体,下层是对上层的精化、细化。抽象原则应用举例抽象原则应用举例抽象原则应用举例抽象原则应用举例Windows NTWindows NTWindows NTWindows NT一体化的一体化的一体化的一体化的I/OI/OI/OI/O系统设计系统设计系统设计系统设计文件管理文件管理网络管理网络管理设备管理设备管理高速缓冲存储器高速缓冲存储器对虚拟文件对虚拟文件的字节流的字节流,虚拟文件可虚拟文件可为任何设备为任何设备和实体和实体抽抽象象F逐步求精F逐步求精是人类解决复杂问题时采用的基本技术,也是软件工程技术的基础。所谓逐步求精是“为了能集中精力解决主要问题而尽量推迟问题细节的考虑”。F可以把逐步求精视为一种技术,即在一个时期内必须解决种种问题按优先级排序的技术。逐步求精是确保每一个问题在适当的时候得到解决。抽象与求精是互补的概念,求精实际上就是细化的过程。信息隐藏F信息隐藏来自于1972 D.L.Parnas的思想:F(1)模块内部的数据和过程,对于那些不需要这些信息的模块不可访问(隐藏);F(2)每一个模块只完成一个相对独立的特定功能;F(3)模块之间仅仅交换那些完成系统功能必须交换的信息(该交换的才交换)。F这就是说,模块应该是独立的,各模块的功能单一,与其他模块的数据共享降低到最低限度。模块独立性不仅使模块重用性好,而且易于测试、组装和维护等等。将分析模型转换为软件设计将分析模型转换为软件设计将分析模型转换为软件设计将分析模型转换为软件设计数据数据字典字典数据数据流图流图E-RE-R图图状态变迁图状态变迁图加加加加工工工工规规规规约约约约控制规约控制规约控制规约控制规约数数据据对对描描 述述象象数数 据据 设设 计计体系结构设计体系结构设计接口设计接口设计过程设计过程设计分析模型分析模型设计模型设计模型软件设计过程和模型软件设计过程和模型 F信息描述F功能描述 F行为描述 F其他需求 设计编码体系结构设计体系结构设计数据设计数据设计 接口设计接口设计 构件设计构件设计 模模块块/构件构件F数据设计是将系统分析创建的信息域模型变换成软件所需的数据结构。数据设计的基础是,分析模型中数据模型和数据字典。F体系结构设计定义了软件的主要结构元素。体系结构设计也就是建立基于计算机的系统的框架,它包括系统主要组件以及通信的识别,可以从系统规格、分析模型以及分析模型中定义的子系统的交互导出。F接口设计描述了软件内部、软件与协作系统、软件与使用者之间的通信方式。一个接口意味着信息流和特定的行为类型,数据流和控制流的信息是接口设计的基础。F过程设计也可以称为构件设计,它将软件体系结构的结构性元素变换为软件构件的过程性描述。过程设计的基础是处理规格说明、控制规格说明、状态转换图的信息。软件体系结构软件体系结构 F软件体系结构指软件的整体结构和这种结构提供系统在概念上的整体性的方式。体系结构设计表示要建造一个基于计算机系统所需要的数据和程序构件的结构,而重点关注的是软件构件结构,构件的性质以及它们的交互。F系统结构化。将系统分解成一系列基本子系统(每一个子系统都是一个独立的软件单元),并且识别出子系统之间的通信。F控制建模。建立系统各个部分之间控制关系的构成模型。构成模型关注的是系统如何分解成子系统,作为一个整体,子系统必须得到有效的控制。F模块分解。把子系统进一步分解成模块,这时,软件结构设计是要确定模块的类型以及模块之间的关联。F子系统和模块的区别主要体现在:F(1)子系统由模块组成,一个子系统独立构成系统,它不依赖其他子系统提供的服务,但是,要定义与其他子系统之间的接口。F(2)一个模块通常是一个能提供一个或者多个服务的系统组件(构件),它能利用其他模块提供的服务。一般不会把模块视为一个独立的系统,它可以由许多其他更简单的构件组成。体系结构的重要性体系结构的重要性 F软件体系结构的表示(模型)可以方便软件开发者与用户以及对系统感兴趣的所有各方的通信。F软件体系结构突出了软件设计的早期抉择,这些抉择将对随后的所有软件工程活动有着重要的影响,也对该系统的开发是否成功有着深远的影响。F软件体系结构实际上建立了一个相对小的、易于理解的模型,该模型描述了系统如何构成以及构件如何一起工作。例如,系统的组成有多少个子系统或者模块,以及各个组成成分之间的相互关系。系系统统的的块块状状结结构与构与层层次次结结构构 块块状状结结构构:F块状结构把系统垂直地分解成若干个相对独立的低耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务,所以称为块状组织形式。P69 图4-3F块状结构把系统垂直地分解成若干个相对独立的低耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务,所以称为块状组织形式。系系统统的的块块状状结结构与构与层层次次结结构构 层层次次结结构构:F层次结构把软件系统组织成一个层次结构的形式,上层在下层的基础上建立,下层为上层提供必要的服务。位于同一层的多个软件或者子系统,具有同等的通用度(通用性程度),低层的软件比高层的软件更具有通用性。每一层可以视为同等通用档次的一组子系统。P69 图4-4系系统统的的块块状状结结构与构与层层次次结结构构 层层次次结结构构:F第一层,最高层应该是应用系统层,可包括多个应用系统。每一个应用系统向用户提供一组服务,应用系统之间可通过接口实现互操作,也可以通过低层软件提供的服务或者对象间接地进行交互操作。F第二层,次高层是构件系统层,同理,也可以包括多个构件系统,应用系统建立在构件系统之上。构件系统向应用工程师提供可重用的构件,用于开发应用系统。F第三层,中间层,它为构件系统提供实用软件类,这些实用软件通常不依赖平台。例如,与数据库管理系统(DBMS)的接口,对象连接与嵌入(OLE)构件、对象请求代理(ORB)构件等。其中,对象请求代理是使得一个驻留在客户端的对象,可以发送消息到封装在驻留在服务器上的另一个中的方法,对象请求代理标准(CORBA)得到广泛地应用。这些构件提供给应用工程师和构件工程师使用,以便对系统的构筑。F第四层,它是系统软件层,例如,一般操作系统、网络操作系统,硬件接口等。F第五层,硬件系统层,也称为硬件平台。基于构件系统的分层体系及引用关系 分布式系统体系结构 F客户机/服务器体系结构。这类系统被看成是提供一组服务供客户机使用,客户机和服务器被区别对待,数据以及加工过程在多个处理机之间分配。P71 图4-7F主要组成元素:一组提供服务的单机服务器;一组向服务器请求服务的客户机;一个连接服务器与客户机的网络.F分布式对象体系结构。这类系统不再区别客户机和服务器,系统被看成是交互的一组对象,它们的位置是无关紧要的,服务提供者和服务消费者之间没有界限,提供服务者就是服务器,接受服务者就是客户机。P72 图4-8模块化分解 F在传统软件工程面向数据流的方法中,可以通过对数据流的分析和设计导出系统的结构图(变换分析与变换设计、事务分析与事务设计),也就是从数据流模型到软件体系结构的变换方法。在数据流模型中有两类典型的数据流,即变换型数据流和事务型数据流,相应的有两种结构设计,即变换设计和事务设计。模块划分的准则 1模块耦合度F模块耦合度是对软件结构中各个不同模块之间互相关联程度的度量。耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置、通过界面传送数据的多少等等。模块耦合度有7个等级:F(1)非直接耦合F(2)数据偶合F(3)特征偶合F(4)控制耦合F(5)外部耦合F(6)公共耦合F(7)内容耦合F模块设计的基本原则是要尽量使用数据耦合,减少控制耦合,限制外部耦合和公共耦合,不使用内容耦合。无耦合没有依赖关系无耦合没有依赖关系松散耦合有松散耦合有少量依赖关系少量依赖关系紧密耦合有紧密耦合有很多依赖关系很多依赖关系 耦合强度依赖的因素:耦合强度依赖的因素:一模块对另一模块的引用一模块对另一模块的引用一模块向另一模块传递的数据量一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间接口的复杂程度模块间耦合的类型模块间耦合的类型 低低 无直接耦合无直接耦合耦耦 数据耦合数据耦合合合 标记耦合标记耦合性性 控制耦合控制耦合 外部耦合外部耦合 公共耦合公共耦合 高高 内容耦合内容耦合模模块块独独立立性性弱弱(低耦合低耦合)强强(中耦合中耦合)(较强耦合较强耦合)(强耦合强耦合)(1)(1)非直接耦合非直接耦合 两个模块没有直接关系两个模块没有直接关系(模块模块1 1和和模块模块2)2),模块独立性最强。,模块独立性最强。模块模块1 1模块模块2 2模块模块3 3模块模块4 4(2)(2)数据耦合数据耦合 一模块调用另一模块一模块调用另一模块时,被调用模块的输入、时,被调用模块的输入、输出都是简单的数据输出都是简单的数据(若干若干参数参数)。属松散耦合。属松散耦合。数据耦合举例数据耦合举例开发票开发票计算水费计算水费单价单价数量数量金额金额(3)3)标记耦合标记耦合(特征耦合特征耦合)如两个模块通过传递如两个模块通过传递数据结构数据结构(不是简单数据,而是记录、数组不是简单数据,而是记录、数组等等)加以联系,或都与一个加以联系,或都与一个数据数据结构结构有关系有关系,则称这两个模块则称这两个模块间存在标记偶合。间存在标记偶合。标记耦合举例标记耦合举例计算水电费计算水电费计算水费计算水费计算电费计算电费住户情况住户情况水费水费电费电费住户情况住户情况“住户情况住户情况”是一个是一个数据结构数据结构,图中模块都图中模块都与此数据结构有关与此数据结构有关.“计算水费计算水费”和和“计算电费计算电费”本无关本无关,由于由于引用了此数据结构产生依赖关系引用了此数据结构产生依赖关系,它们之间它们之间也是标记偶合也是标记偶合.将标记耦合修改为数据耦合举例将标记耦合修改为数据耦合举例计算水电费计算水电费计算水费计算水费计算电费计算电费本月本月用水量用水量本月本月用电量用电量水费水费电费电费(4)(4)控制耦合控制耦合 一模块向下属模块传递的信一模块向下属模块传递的信息息(开关量、标志等控制被开关量、标志等控制被调用模块决策的变量调用模块决策的变量)控制控制了被调用模块的内部逻辑。了被调用模块的内部逻辑。控制耦合举例A A计算平均分计算平均分或最高分或最高分B B平均平均/最高最高(控制信号控制信号)成绩成绩读入分数读入分数输出结果输出结果计算平均分计算平均分计算最高分计算最高分平均平均/最高最高?B B控制耦合增加了理解和编程的复控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:去除模块间控制耦合的方法:(1)(1)将被调用模块内的判定上移到调将被调用模块内的判定上移到调 用模块中进行用模块中进行(2)(2)被调用模块分解成若干单一功被调用模块分解成若干单一功 能模块能模块改控制耦合为数据耦合举例改控制耦合为数据耦合举例A A计算平均分计算平均分B1B1平均成绩最高成绩计算最高分计算最高分B2B2(5)(5)外部耦合外部耦合 一组模块均与同一外部环境关一组模块均与同一外部环境关联联(例如例如,I/O,I/O模块与特定的设备、模块与特定的设备、格式和通信协议相关联格式和通信协议相关联),),它们之它们之间便存在外部耦合。间便存在外部耦合。外部偶合必不可少外部偶合必不可少,但这种模块但这种模块数目应尽量少。数目应尽量少。(6)(6)公共耦合公共耦合(公共数据区耦合公共数据区耦合)一组模块引用同一个公用数据一组模块引用同一个公用数据区区(也称全局数据区、公共数据环境也称全局数据区、公共数据环境)。公共数据区公共数据区指:指:F 全局数据结构全局数据结构F 共享通讯区共享通讯区F 内存公共覆盖区等内存公共覆盖区等公共耦合举例公共耦合举例公共数据区公共数据区C CB B模块模块模块模块A AA A、B BB B、C CC C间存在错综复杂的联系间存在错综复杂的联系间存在错综复杂的联系间存在错综复杂的联系(1)(1)软件可理解性降低软件可理解性降低(2)(2)诊断错误困难诊断错误困难(3)(3)软件可维护性差,软件可维护性差,(4)(4)软件可靠性差软件可靠性差(公共数据区及全程变量无保护措施公共数据区及全程变量无保护措施)慎用公共数据区和全程变量慎用公共数据区和全程变量!公共耦合存在的问题:公共耦合存在的问题:(7)(7)内容耦合内容耦合一模块直接访问一模块直接访问一模块直接访问一模块直接访问另一模块的内部另一模块的内部另一模块的内部另一模块的内部信息信息信息信息(程序代码程序代码程序代码程序代码或数据)或数据)或数据)或数据)最不好的耦合形式最不好的耦合形式最不好的耦合形式最不好的耦合形式 !AABBAABB模块代码重叠模块代码重叠模块代码重叠模块代码重叠Entry1Entry1 Entry1Entry1 多入口模块多入口模块多入口模块多入口模块模块化设计的原则和目标耦合是影响软件复杂程度和设计耦合是影响软件复杂程度和设计质量的重要因素质量的重要因素目标目标:建立模块间耦合度尽可能:建立模块间耦合度尽可能松散的系统松散的系统如何降低模块间耦合度如何降低模块间耦合度:(1)(1)尽量使用数据耦合尽量使用数据耦合少用控制耦合少用控制耦合限制公共耦合的范围限制公共耦合的范围坚决避免使用内容耦合坚决避免使用内容耦合(2)(2)降低接口的复杂性降低接口的复杂性2.2.模块独立性的度量之二:聚合度模块独立性的度量之二:聚合度 一个模块内部元素在功能上相互一个模块内部元素在功能上相互 关联的强度关联的强度 设计目标:高聚合设计目标:高聚合 (模块在软件过程中模块在软件过程中 完成单一的任务完成单一的任务)模块的聚合度类型模块的聚合度类型低低 偶然性聚合偶然性聚合 0 0分分 逻辑性聚合逻辑性聚合 1 1分分 内内 时间性聚合时间性聚合 3 3分分 聚聚 过程性聚合过程性聚合 5 5分分 性性 通信性聚合通信性聚合 7 7分分 信息性聚合信息性聚合 9 9分分 高高 功能性聚合功能性聚合 1010分分模模块块独独立立性性弱弱(功能分散功能分散)强强(功能单一功能单一)低聚合度模块低聚合度模块举例举例 为工程分析包执行错误处理的模块,当计算为工程分析包执行错误处理的模块,当计算的数据超出预定义的边界时调用该模块,它完成的数据超出预定义的边界时调用该模块,它完成下列任务:下列任务:(1 1)根据初始计算的数据计算补充数据;)根据初始计算的数据计算补充数据;(2 2)在用户的工作站上生成错误报告;)在用户的工作站上生成错误报告;(3 3)执行用户要求的跟踪计算;)执行用户要求的跟踪计算;(4 4)更新数据库;)更新数据库;(5 5)使选择后续处理的菜单有效。)使选择后续处理的菜单有效。虽然上述任务是松散相关的,但每一项虽然上述任务是松散相关的,但每一项都是独立的功能实体,最好作为独立的模都是独立的功能实体,最好作为独立的模块完成块完成。(1)(1)偶然性聚合偶然性聚合(巧合性聚合巧合性聚合)模块内各部分间无联系模块内各部分间无联系ABCMMOVE O TO RREAD FILE FMOVE S TO T模块模块M中的三个语句没有任何联系中的三个语句没有任何联系缺点:缺点:可理解性差,可理解性差,可修改性差可修改性差例例:(2)(2)逻辑性聚合逻辑性聚合 把几种相关功能(逻辑上相似把几种相关功能(逻辑上相似 的功能)组合在一模块内,每的功能)组合在一模块内,每次调用由传给模块的参数确定次调用由传给模块的参数确定执行哪种功能。执行哪种功能。逻辑性聚合模块ABCEFGABCEFGA1B1C1EFGEFG模块内部逻辑模块内部逻辑E E、F F、G G逻辑逻辑功能相似,组功能相似,组成新模块成新模块EFGEFG缺点缺点缺点缺点:增强了耦合程度增强了耦合程度增强了耦合程度增强了耦合程度(控制耦合控制耦合控制耦合控制耦合)不易修改,效率低不易修改,效率低不易修改,效率低不易修改,效率低公用代码段公用代码段公用代码段公用代码段(3)(3)时间性聚合时间性聚合(经典性聚合经典性聚合)模块完成的功能必须在同一时间模块完成的功能必须在同一时间内执行,这些功能只因时间因素内执行,这些功能只因时间因素关联在一起。关联在一起。例如例如:初始化系统模块、初始化系统模块、系统结束模块、系统结束模块、紧急故障处理模块等均是时间性聚合紧急故障处理模块等均是时间性聚合 模块模块.(4)过程性聚合(顺序性组合)模块内各处理成分相关,模块内各处理成分相关,且必须以特定次序执行且必须以特定次序执行过程性聚合模块读入读入成绩单成绩单审查审查成绩单成绩单统计统计成绩成绩打印打印成绩成绩读入并审查读入并审查读入并审查读入并审查成绩单成绩单成绩单成绩单统计并打印统计并打印统计并打印统计并打印成绩单成绩单成绩单成绩单(5)通信性聚合 模块内各部分使用相同的输模块内各部分使用相同的输入数据,或产生相同的输出入数据,或产生相同的输出结果结果通信性聚合模块例产生工产生工资报表资报表计算平计算平均工资均工资职工工职工工资记录资记录职工工职工工资报表资报表平均平均平均平均工资工资工资工资产生职工工资报表并计算平均工资模块产生职工工资报表并计算平均工资模块产生职工工资报表并计算平均工资模块产生职工工资报表并计算平均工资模块(6)(6)信息性聚合信息性聚合模块完成多个功能,各功能模块完成多个功能,各功能都在同一数据结构上操作,都在同一数据结构上操作,每一功能有唯一入口。每一功能有唯一入口。信息性聚合模块符符 号号 表表查找查找 登录登录 删除删除修改修改几个加工同时引用一个共同的数据几个加工同时引用一个共同的数据(7)(7)功能性聚合功能性聚合 模块仅包括为完成某个功能所必模块仅包括为完成某个功能所必须的所有成分。须的所有成分。(模块所有成分共同完成一个功模块所有成分共同完成一个功 能,缺一不可能,缺一不可)聚合性最强聚合性最强 聚合与耦合密切相关,同其聚合与耦合密切相关,同其它模块强耦合的模块意味着它模块强耦合的模块意味着弱聚合,强聚合模块意味着弱聚合,强聚合模块意味着与其它模块间松散耦合与其它模块间松散耦合.设计目标:设计目标:力争强聚合、弱耦合力争强聚合、弱耦合3.3.耦合、聚合与模块独立性关系耦合、聚合与模块独立性关系耦合与聚合都是模块独立性的耦合与聚合都是模块独立性的定性标准,都反映模块独立性定性标准,都反映模块独立性的良好程度。但耦合是直接的的良好程度。但耦合是直接的主导因素,聚合则辅助耦合共主导因素,聚合则辅助耦合共同对模块独立性进行衡量。同对模块独立性进行衡量。由数据流模型导出系统结构由数据流模型导出系统结构系统结构特征可归纳为两种典型形式:系统结构特征可归纳为两种典型形式:F变换型结构变换型结构F事务型结构事务型结构数据流图可分为两种类型数据流图可分为两种类型:F变换型数据流变换型数据流F事务型数据流事务型数据流变换变换中心中心输入输入输出输出变换型结构事务事务中心中心接受接受路径路径动动作作路路径径基本模型 特征特征事务型事务型 结构结构由输入、变由输入、变由输入、变由输入、变换中心和输换中心和输换中心和输换中心和输出三部分组出三部分组出三部分组出三部分组成成成成具有在多种具有在多种具有在多种具有在多种事务中选择事务中选择事务中选择事务中选择执行某类事执行某类事执行某类事执行某类事物的能力物的能力物的能力物的能力变换型数据流 结构事务型事务型数据流数据流 结构结构传入传入变换变换传出传出变换变换中心中心传入传入部分部分传出传出部分部分事务事务分析分析事务事务中心中心动作动作 1动作动作 2动作动作 3接受接受接受接受部分部分变换型数据流举例输入输入信息信息物理物理输入输入格式格式检查检查处理处理显示显示正确正确信息信息结果结果物理物理输出输出数据数据变换中心变换中心逻辑逻辑输入输入逻辑逻辑输出输出传入部分传入部分传出部分传出部分特点:具有明确的传入、变换特点:具有明确的传入、变换特点:具有明确的传入、变换特点:具有明确的传入、变换(或称主加或称主加或称主加或称主加 工工工工)和传出界面的和传出界面的和传出界面的和传出界面的DFDDFD变换流示意图信息信息时间时间信息流信息流输入流输入流输出流输出流交换流交换流外部外部表示表示内部内部表示表示事务型数据流图举例IMMLLNNOOAABBCCDDFFEEGGHH大型系统大型系统DFDDFD中中,变换型变换型和事务型和事务型结构往往共存结构往往共存:T T事务中心事务中心传入传入变换变换传出传出2.2.面向数据流设计方法的设计步骤面向数据流设计方法的设计步骤(1)(1)精化精化DFDDFD(2)(2)确定确定DFDDFD类型类型(3)(3)把把DFDDFD映射到系统模块结构设计映射到系统模块结构设计 出模块结构的上层出模块结构的上层(4)(4)基于基于DFDDFD逐步分解高层模块设计逐步分解高层模块设计 出下层模块出下层模块(5)(5)根据模块独立性原理,精化模根据模块独立性原理,精化模 块结构块结构(6)(6)模块接口描述模块接口描述面向数据面向数据流方法的流方法的设计过程设计过程精化数据流图精化数据流图区分事务中心区分事务中心区分事务中心区分事务中心和数据接收路径和数据接收路径和数据接收路径和数据接收路径映射成变换结构映射成变换结构流类型流类型流类型流类型区分输入和区分输入和区分输入和区分输入和输出分支输出分支输出分支输出分支映射成事务结构映射成事务结构用启发式设计规则精化软件结构用启发式设计规则精化软件结构用启发式设计规则精化软件结构用启发式设计规则精化软件结构导出接口描述和全程数据结构导出接口描述和全程数据结构导出接口描述和全程数据结构导出接口描述和全程数据结构复查复查复查复查详细设计详细设计“事务事务事务事务”“变换变换变换变换”事务分析事务分析事务分析事务分析变换分析变换分析变换分析变换分析SD方法的两种映射过渡方法变换型变换型DFD事务型事务型DFD初始初始SC初始初始SC变换分析变换分析事务分析事务分析初始的SC主模块输入模块主加工模块输入模块事务控制模块接受模块动作发送模块动作1模块动作2模块动作3模块由变换分由变换分由变换分由变换分析产生析产生析产生析产生由事务分由事务分由事务分由事务分析产生析产生析产生析产生(1)变换分析设计方法步骤:步骤:(1)(1)区分传入、变换中心、区分传入、变换中心、传出部分,在传出部分,在 DFD 上上 标明分界线标明分界线BCADEQPRWUVabcedrpuwv变换中心变换中心传入传入部分部分传出传出部分部分变换分析设计方法步骤(2)(2)第一级分解第一级分解(建立初始建立初始SC框架框架)设计顶层和第一层模块设计顶层和第一层模块第一级分解的方法第一级分解的方法MCMTMAME第一级分解后的SCMCMTMAME第一层第一层顶层顶层c,ec,e u,wu,w传入模块传入模块传出模块传出模块中心变中心变换模块换模块第一级分解后的第一级分解后的SC(另一种画法另一种画法)MCMA1ceu,wc,pQP PReprrw,uw传入分传入分支模块支模块中心加工中心加工分支模块分支模块传出分传出分支模块支模块MA2ME1ME2变换分析设计方法步骤(3)(3)第二级分解第二级分解(分解分解SCSC各分支各分支)自顶向下分解,设计出每个分自顶向下分解,设计出每个分支的中、下层模块支的中、下层模块传传入分支的分解(1)MACBAbacEDdec,e传入分支的分解(2)MAGet C CbacRead Ddec,eB to CbcdeabGet E EGet BD to EA to BRead D传出分支的分解MEWWrite Vuuw,uvvvPut UU to VMEUWrite Wwwuw,uV(1)(1)(2)(2)中心加工分支的分解中心加工分支的分解MTPQRec,pru,wpr 任何情况下都可使用变换分析任何情况下都可使用变换分析方法设计软件结构,但如数据方法设计软件结构,但如数据流具有明显的事务特点时流具有明显的事务特点时(有有一个明显的事务中心一个明显的事务中心),),以采用以采用事务分析方法为宜。事务分析方法为宜。(2)事务分析设计方法事务分析设计方法步骤:(1)(1)在在DFDDFD上确定事务中心、接收部上确定事务中心、接收部 分和发送部分。分和发送部分。(2)(2)画出画出SCSC框架,把框架,把DFDDFD上的三部分上的三部分 分别映射为事务控制模块、接收分别映射为事务控制模块、接收 模块和动作发送模块。模块和动作发送模块。(3)(3)分解细化接收分支和发送分支,分解细化接收分支和发送分支,完成初始完成初始SCSC。用户命令交互子系统用户命令交互子系统读用户读用户命令命令密码命令密码命令密码密码显示显示信息信息系统参系统参数数据数数据用户用户命令命令读系统读系统数据数据配置信息配置信息显示信息显示信息和状态和状态命令命令分析处理分析处理读读密码密码命令命令类型类型开开/关关命令命令建立配建立配置文件置文件原配置原配置数据数据激活激活/非活动非活动系统系统与文件中与文件中密码比较密码比较格式化格式化配置数据配置数据配置配置配置配置命令命令命令命令检验信检验信息过程息过程重试重试信息信息四位四位数字数字检验检验信息信息检验检验信息信息A/DA/D信息信息格式化格式化配置配置数据数据格式化格式化配置数据配置数据事务分析的映射方法事务分析的映射方法总控调度C路径B路径A路径A路径BB B路径路径路径C CC C C C路径路径路径路径路径路径接收接收接收接收路径路径路径路径用户命令交互子系统用户命令交互子系统初始的初始的SCSC用户执行模块读用户命令命令处理密码处理控制器现用/非现用系统系统设置控制器用户命令交互子系统用户命令交互子系统读用户读用户命令命令密码密码显示显示信息信息系统参系统参数数据数数据用户用户命令命令读系统读系统数据数据配置信息配置信息显示信息显示信息和状态和状态命令命令分析处理分析处理读读密码密码命令命令类型类型建立配建立配置文件置文件原配置原配置数据数据激活激活/非活动非活动系统系统与文件中与文件中密码比较密码比较格式化格式化配置数据配置数据检验信检验信息过程息过程重试重试信息信息四位四位数字数字检验检验信息信息检验检验信息信息A/DA/D信息信息格式化格式化配置配置数据数据格式化格式化配置数据配置数据密码命令密码命令开开/关关命令命令配置配置配置配置命令命令命令命令用户命令交互子系统用户命令交互子系统的SC用户执行模块读用户命令命令处理密码处理密码处理控制器控制器现用现用/非现用非现用系统系统系统设置系统设置控制器控制器读系统读系统数据数据建立配建立配置文件置文件显示信息显示信息与状态与状态用户命令交互子系统用户命令交互子系统读用户读用户命令命令密码密码显示显示信息信息系统参系统参数数据数数据用户用户命令命令读系统读系统数据数据配置信息配置信息显示信息显示信息和状态和状态命令命令分析处理分析处理读读密码密码命令命令类型类型建立配建立配置文件置文件原配置原配置数据数据激活激活/非活动非活动系统系统与文件中与文件中密码比较密码比较格式化格式化配置数据配置数据检验信检验信息过程息过程重试重试信息信息四位四位数字数字检验检验信息信息检验检验信息信息A/DA/D信息信息配置配置数据数据格式化格式化配置配置数据数据密码命令密码命令开开/关关命令命令配置配置配置配置命令命令命令命令用户命令交互子系统用户命令交互子系统的SC用户执行模块读用户命令命令处理密码处理密码处理控制器控制器现用现用/非现用非现用系统系统系统设置系统设置控制器控制器读系统读系统数据数据建立配建立配置文件置文件显示信息显示信息与状态与状态读读密码密码用文件用文件比较密码比较密码密码输出密码输出控制器控制器产生产生无效信息无效信息事务流设计举例IMMLLNNAABBCCDDFFEEGG事务中心事务中心事务流设计举例 取 A 总控总控ALMNGDBCFE(主模块)(主模块)(主模块)(主模块)事务加工模块事务加工模块事务加工模块事务加工模块动作分支的典型结构PT 2T 1T iA 2D 2A 1D 1A 3A jD k事务层事务层操作层操作层细节层细节层处理层处理层主模块主模块主模块主模块事务加事务加事务加事务加工模块工模块工模块工模块操作操作操作操作模块模块模块模块细节细节细节细节模块模块模块模块事务流设计举例 取 A 总控总控ALMNGDBCFE动作动作1 1动作动作n n.细节模块细节模块1 1细节模块细节模块2 2.(操作模块)(操作模块)(操作模块)(操作模块)(细节模块)(细节模块)(细节模块)(细节模块)事务流设计举例(另一种画法)输入 AXX系统系统变换控制变换控制ALMAGDBCFE 输出 E、F、GE、F、GE、F、G输出输出H HOE、F、GHHN要求类要求类型处型处理理有效图书有效图书管理要求管理要求当前当前日期日期2.12.1新书入库新书入库2.22.2借借入库单入库单罚款单罚款单一层数据流图一层数据流图(a)(a)借书借书2.32.3注销图书注销图书2.52.5借书借书2.42.4目目录录文文件件借书单借书单书书单单注销单注销单3412675810911变换中心变换中心传传入入传传出出事务型事务型(3)(3)混合流设计举例混合流设计举例混合流设计举例T事务事务中心中心传入传入变换变换传出传出接收接收部分部分发发送送部部分分ABT1变换中心变换中心传入传入传出传出T2T3abb1b2b3c1c2c3degfjm事务流子系统事务流子系统BCCDDEEHHKFJKLLMh混合流设计举例kk混合流设计举例输入输入DXX系统系统变换控制变换控制输出输出K输入输入Cdc输出输出L LCDDE FJEHHKKLcddkkkLL输出输出MLMmmL事务子系统事务子系统数据设计数据设计 F数据设计是把分析模型中的信息描述转换实体软件所需要的数据结构。F数据结构是单个数据元素之间逻辑关系的表示。信息结构必将影响到过程设计,从某种意义上说,数据结构与程序结构具有同等的重要性。F数据设计有以下3个层次值得我们思考:F在程序构件级,设计数据结构和操作它们所需要的相关算法,对创建高质量的应用至关重要;F在应用级,在需求工程导出的数据模型到数据库的转换,是达到系统业务目标的关键;F在业务级,存储在不同数据库并且重新组织为“数据仓库”的信息的集合,它启动了数据挖掘或知识发现,对业务本身的成功有重要影响。数据设计的原则数据设计的原则 F(1)用于软件的系统化方法也适用于数据。在导出、评审、定义软件的需求和软件系统结构时,必须定义和评审其中所用到的数据流、数据对象及数据结构的表示。F(2)要确定所有的数据结构以及在每种数据结构上施加的操作。设计有效的数据结构,必须考虑到要对该数据结构进行的各种操作。如果定义了一个由多个不同类型的数据元素组成的复杂数据结构,它会涉及到软件中若干个功能的实现处理。在考虑对这种数据结构进行的操作时,可以为它定义一个抽象数据类型,以便在今后的软件设计中使用它。F(3)应当建立一个数据词典并用它来定义数据和软件的设计。数据词典清楚地说明了各个数据之间的关系,以及对数据结构内各个数据元素的约束。F(4)低层数据设计的决策应推迟到设计过程的后期进行。可以将逐步细化的方法用于数据设计。首先分析