1、第8章 结构化方法 8.1 概述概述 8.2 结构化分析结构化分析 8.3 数据流图数据流图 8.4 数据字典数据字典 8.5 加工逻辑的描述加工逻辑的描述 8.6 结构化设计结构化设计结构化方法结构化方法返回主目录第8章 结构化方法8.1 概述概述 1.结构化方法结构化方法 结构化方法是指根据某种原理,使用一定的工具,按照特定步骤工作的软件开发方法。它遵循的原理是自顶向下、逐步求精,使用的工具有数据流图(DFD)、数据字典、判定表、判定树和结构化语言等。结构化方法是从分析、设计到实现都使用结构化思想的软件开发方法,实际上它由三部分组成:结构化分析(Structured Analysis,简称
2、SA),结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Pergramming,简称SP)。第8章 结构化方法 2.发展历程发展历程 在结构化方法的发展历程上,它是随着SP方法的提出、SD方法的出现直至SA方法提出才逐渐形成的。1)结构化程序设计 首先出现的是SP,它是60年代末首先由Dijkstra提出的,旨在控制程序编制中的复杂性问题。SP被称为软件发展中的第三个里程碑,Dijkstra提出“GOTO语句可以从高级语言中取消”,1969年Bohm和Jacopini首次证明了只要三种控制结构(顺序、选择、重复)就能表达用一个入口和一个出口的流
3、程图所能表达的任何程序逻辑。第8章 结构化方法 2)结构化设计 70年代中期L.L.Constantine和E.Yourdon提出和倡导了结构化设计。在SP取得重大成功的影响下,Yourdon等人把结构化和逐步求精的思想由编码阶段应用推广到设计阶段,后来又扩充到分析阶段,形成了包括SD和SA在内的基于数据流的系统设计方法。SD的目标在于控制系统体系结构一级的复杂性,实施原则是基于功能分解,验证技术是人工复审测试。3)结构化分析 70年代末期,由Demarco等人提出了SA方法。该方法旨在减少分析活动中的错误,产生系统的逻辑模型,其分析的对象是结构化的功能说明;它实施的原则是面向数据流,基于功能
4、分解,靠人工复审测试进行验证。第8章 结构化方法 3.基本思想基本思想 结构化方法总的指导思想是自顶向下,逐步求精,它的两个基本原则是抽象与分解。4.特点特点 结构化方法具有以下特点:(1)它是使用最早的开发方法,使用时间也最长。(2)它应用最广,特别适合于数据处理。(3)相应的支持工具多,发展较为成熟。第8章 结构化方法 5.优点优点 结构化方法一经问世,就显示出了它的以下几大优点:(1)简单、实用。(2)适合于瀑布模型,易为开发者掌握。(3)成功率较高,据美国1000家公司统计,该方法的成功率高达90.2,名列第二,仅次于面向对象的方法。(4)特别适合于数据处理领域中的应用,对其他领域的应
5、用也基本适用。6.存在问题存在问题 结构化方法存在以下一些问题:(1)对于规模大的项目,特别复杂的应用不太适应。第8章 结构化方法 2)难于解决软件重用的问题。(3)难于适应需求的变化。(4)难于彻底解决维护问题。第8章 结构化方法8.2 结结 构构 化化 分分 析析 8.2.1自项向下逐层分解的分析策略自项向下逐层分解的分析策略 面对一个复杂的问题,分析人员不可能一开始就考虑到问题的所有方面以及全部的细节,采取的策略往往是分解,把一个复杂的问题划分成若干小问题,然后再分别解决,将问题的复杂性降低到人可以掌握的程度。分解可分层进行,先考虑问题最本质的方面,忽略细节,形成问题的高层概念,然后再逐
6、层添加细节,即在分层过程中采用不同程度的“抽象”级别,最高层的问题最抽象,而低层的较为具体。图8.1是自项向下逐层分解的示意图。第8章 结构化方法 顶层的系统X很复杂,可以把它分解为0层的1,2,3三个子系统,若0层的子系统仍很复杂,再分解为下一层的子系统1.1,1.2,1.3和3.1,3.2,3.3 直到子系统都能被清楚的理解为止。图8.1的顶层抽象地描述了整个系统,底层具体地画出了系统的每一个细节,而中间层是从抽象到具体的逐步过渡,这种层次分解使分析人员分析问题时不至于一下子陷入细节,而是逐步地去了解更多的细节,如在顶层,只考虑系统外部的输入和输出,其他各层反映系统内部情况。第8章 结构化
7、方法图 8.1 对一个问题的逐层分解X123顶层0层3.13.23.32.12.21.11.21.31层第8章 结构化方法 8.2.2描述工具描述工具 SA方法利用图形等半形式化的描述方式表达需求,简明易懂,用它们形成需求说明书中的主要部分。这些描述工具有以下几种:(1)数据流图。数据流图描述系统的分解,即描述系统由哪几部分组成,各部分之间有什么联系等。(2)数据字典。数据字典定义了数据流图中的数据和加工。它是数据流条目、数据存储条目、数据项条目和基本加工条目的汇集。(3)描述加工逻辑的结构化语言、判定表及判定树。结构化语言、判定表或判定树则详细描述数据流图中不能被再分解的每一个基本加工的处理
8、逻辑。第8章 结构化方法 8.2.3SA分析步骤分析步骤 1.建立当前系统的物理模型建立当前系统的物理模型 当前系统(也称现行系统)指目前正在运行的系统,可能是需要改进的正在计算机上运行的软件系统,也可能是人工的处理系统。通过对当前系统的详细调查,了解当前系统的工作过程,同时收集资料、文件、数据及报表等,将看到的、听到的、收集到的信息和情况用图形描述出来。也就是用一个模型来反映自己对当前系统的理解,如画系统流程图(参见第2章2.1.3)。这一模型包含了许多具体因素,反映现实世界的实际情况。2.抽象出当前系统的逻辑模型抽象出当前系统的逻辑模型 物理模型反映了系统“怎么做”的具体实现,去掉物理模型
9、中非本质的因素(如物理因素),抽取出本质的因素。第8章 结构化方法 所谓本质的因素是指系统固有的、不依赖运行环境变化而变化的因素,任何实现均这样做。非本质因素不是固有的,随环境不同而不同,随实现不同而不同。对物理模型进行分析,区别本质因素和非本质因素,去掉非本质因素,就形成当前系统的逻辑模型,反映了当前系统“做什么”的功能。3.建立目标系统的逻辑模型建立目标系统的逻辑模型 目标系统指待开发的新系统。分析、比较目标系统与当前系统逻辑上的差别,即在当前系统的基础上决定变化的范围,把那些要改变的部分找出来,将变化的部分抽象为一个加工,这个加工的外部环境及输入输出就确定了。第8章 结构化方法 然后对“
10、变化的部分”重新分解,分析人员根据自己的经验,采用自顶向下逐步求精的分析策略,逐步确定变化部分的内部结构,从而建立目标系统的逻辑模型。4.作进一步补充和优化作进一步补充和优化 为了完整地描述目标系统,还要作一些补充:说明目标系统的人机界面,它所处的应用环境及它与外界环境的相互联系,决定人机界面;说明至今尚未详细考虑的细节,如出错处理、输入输出格式、存储容量和响应时间等性能要求与限制。第8章 结构化方法8.3 数据流图数据流图 数据流图(Data Flow Diagram,简称DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程。由于它只反映系统必
11、须完成的逻辑功能,所以它是一种功能模型。图8.2是一个飞机机票预订系统的数据流图,其功能为旅行社把预订机票的旅客信息(姓名、年龄、单位、身份证号码、旅行时间及目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(付有应交的账款)。旅客在飞机起飞的前一天凭取票通知等交款取票,系统检验无误,输出机票给旅客。第8章 结构化方法图 8.2 飞机机票预订系统分类并检查订票记帐机票准备旅客取票单旅行社订票单机票机票帐单有效取票单有效订票单旅行社取票通知单航班目录记帐文件机票文件第8章 结构化方法 8.3.1基本图形符号基本图形符号 数据流图有以下 4 种基本图形符号:箭头,表示数据流。:圆或椭
12、圆,表示加工。=:双杠,表示数据存储。:方框,表示数据的源点或终点。1.数据流数据流 数据流是数据在系统内传播的路径,由一组成分固定的数据项组成。如订票单由旅客姓名、年龄、单位、身份证号、日期及目的地等数据项组成。第8章 结构化方法 由于数据流是流动中的数据,所以必须有流向,即在加工之间、加工与源点终点之间、加工与数据存储之间流动。除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。2.加工加工 加工也称为数据处理,它对数据流进行某些操作或变换。每个加工也要有名字,通常是动词短语,简明地描述完成什么加工。在分层的数据流图中,加工还应编号。3.数据存储数据存储 数据存储指暂时保
13、存的数据,它可以是数据库文件或任何形式的数据组织。流向数据存储的数据流可理解为写入文件,或查询文件,从数据存储流出的数据可理解为从文件读数据或得到查询结果。第8章 结构化方法 4.数据源点和终点数据源点和终点 数据源点和终点是软件系统外部环境中的实体(包括人员、组织或其他软件系统),统称外部实体。它们是为了帮助理解系统界面而引入的,一般只出现在数据流图的顶层图中,表示了系统中数据的来源和去处。有时为了增加数据流图的清晰性,防止数据流的箭头线太长,在一张图上可重复画同名的源/终点(如某个外部实体既是源点也是终点的情况),在方框的右下角加斜线则表示是一个实体。有时数据存储也需重复标识。第8章 结构
14、化方法 8.3.2画数据流图画数据流图 为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的。要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。1.画系统的输入输出画系统的输入输出 画系统的输入输出即先画顶层数据流图。顶层流图只包含一个加工,用以标识被开发的系统,然后考虑该系统有哪些输入数据,这些输入数据从哪里来;有哪些输出数据,输出到哪里去。这样就定义了系统的输入、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系,顶层图只有一张。图8.3为飞机机票预订系统的顶层图。第8章 结构化方法图 8.3 飞机机票预订系统顶层图旅行社飞机机票预
15、订系统旅客订票单机票取票通知单取票单第8章 结构化方法 2.画系统内部画系统内部 画系统内部即画下层数据流图。一般将层号从0开始编号,采用自顶向下,由外向内的原则。画0层数据流图时,一般根据当前系统工作分组情况,并按新系统应有的外部功能,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。如机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机票文件的数据存储联系起来,0层数据流图如图8.4。画更下层数据流图时,则分解上层图中的加工,一般沿着输入流的方向,凡数据流的组成或值发生变化的地方则设置一个加工,这样一直进行到输出数据流(也可从输出流到
16、输入流方向画)。第8章 结构化方法图 8.4 飞机机票预订系统0层图旅行社飞机机票预订系统旅客订票单机票取票通知单取票单第8章 结构化方法 如果加工的内部还有数据流,则对此加工在下层图中继续分解,直到每一个加工足够简单,不能再分解为止。不再分解的加工称为基本加工。3.注意事项注意事项 画数据流图的注意事项有以下几点:(1)命名:不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。数据流的名字代表整个数据流的内容,而不仅仅是它的某些成分,不使用缺乏具体含义的名字,如“数据”、“信息”等。加工名也应反映整个处理的功能,不使用“处理”、“操作”这些笼统的词。第8章 结构化方法 (2)画数据
17、流而不是控制流:数据流图反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。(3)一般不画物质流:数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图上一般不要画物流,如机票预订系统中,人民币也在流动,但并未画出,因为交款是“人工”行为。(4)每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。(5)编号:如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图应编号,子图上的所有加工也应编号,子图的编号就是父图中相应加工的编号,加工的编号由子图号、小数点
18、及局部号组成,如图8.5所示。第8章 结构化方法图 8.5 父图与子图(1)2.12.22.3edcab2.1.3a2aa12.1.12.1.2bc图2图2.1第8章 结构化方法 (6)父图与子图的平衡:子图的输入、输出数据流同父图相应加工的输入、输出数据流必须一致,此即父图与子图的平衡。图8.5中子图2.1与父图2相应加工2.1的输入、输出数据流的数目、名称完全相同,即一个输入流a,两个输出流b和c。再看图8.6,好像父图与子图不平衡,因为父图加工4与子图输入输出数据流数目不相等,但是借助于数据字典(见8.)中数据流的描述可知,父图的数据流“订货单”由“客户”、“账号”及“数量”三部分数据组
19、成,即子图是父图中加工、数据流同时分解而来,因此这两张图也是平衡的。第8章 结构化方法4订货单提货单父图子图44.14.2提货单客户帐号4.3数量图8.6 父图与子图的平衡第8章 结构化方法 有时考虑平衡可忽略一些枝节性的数据流(如出错处理)。父图与子图的平衡,是分层数据流图中的重要性质,保证了数据流图的一致性,便于分析人员的阅读与理解。(7)局部数据存储:当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储,一个局部数据存储只有当它作为某些加工的数据接口或某个加工特定的输入或输出时,就把它画出来,这样有助于实现信息隐蔽。(
20、8)提高数据流图的易理解性:注意合理分解,要把一个加工分解成几个功能相对独立的子加工,这样可以减少加工之间输入、输出数据流的数目,增加数据流图的可理解性。第8章 结构化方法 分解时要注意子加工的独立性、均匀性,特别是画上层数据流时,要注意将一个问题划分成几个大小接近的组成部分,这样做便于理解。不要在一张数据流图中出现某些加工已是基本加工,某些加工还要分解好几层。为了使数据流图便于在计算机上输入与输出,以下给出了描述数据流图的另一套基本符号:表示数据流,只能水平或垂直画。编号:表示加工。编号:表示数据存储。第8章 结构化方法图8.7给出了采用这套符号画出的等价于图8.2的DFD。图 8.7 与图
21、8.2等价的DFD旅客取票单旅行社订票单有效订票单取票通知单分类并检验1订票2D1航班目录D2记帐文件记帐3机票准备4订票单有效旅行社机票帐单D3机票文件第8章 结构化方法 8.3.3 SA方法的应用方法的应用 现以第2.4.2节中的销售管理系统为例,采用SA方法来进行需求分析,建立功能模型。图8.8为采用SA方法画出的销售管理系统的分层DFD。首先分析功能说明,先找出哪些是属于系统之外的外部实体,然后画出顶层数据流图,顶层图如图8.(a)所示。随后分解系统,每个子系统有哪些流动着的数据,哪些需要暂时保存的数据,通过什么加工使数据发生变换。根据系统功能,在0层图上分解系统为5个加工,加工的名称
22、及加工之间的数据流在功能说明中有动词和名词与之对应。第8章 结构化方法 图8.8(b)为0层图,它说明系统分为5个子系统。在下层图(1 层,2 层)的分解过程中,应仔细考虑每个加工内部还应该进行哪些处理,还有什么数据流产生,这些可能在功能说明中没有,需要分析人员和用户参考现行系统的工作流程,进行“创造”,精细数据流图。图8.8(c)为 1 层图,其中图C1、图C2、图C5分别是0层图5个加工分解的结果。第8章 结构化方法图 8.8销售管理系统的分层数据流图(a)顶层图;(b)0层图;(c)1层图销售管理系统顾客采购部门仓库经理订单进货通知单缺货通知单统计表备货单(a)处理订单1处理供货2备货单
23、可供货订单订单处理缺货4处理进货3销售统计5统计表缺货通知单进货通知单缺货订单缺货记录库存记录订单记录原缺货现可供货订单(b)检验订单1.1合格订单订单可供货订单确定能否供货1.2库存记录缺货记录图 c1图 c2可供货订单登记过的订单开备货单2.2备货单根据供货单修改库存2.1库存记录订单记录图 c3根据进货单修改库存3.1进货通知单核对后进货单处理缺货订单3.2订单变更信息修改缺货记录3.3缺货记录可供货订单库存记录汇总各项缺货量4.1打印缺货通知单4.2缺货量缺货通知单缺货记录图 c4按顾客所在地区统计5.2图 c5按销售日期统计5.3按销售货物名统计5.4按顾客名统计5.5统计表统计选择
24、5.1订单记录顾客名货物日期顾客区域(c)第8章 结构化方法8.4 数数 据据 字字 典典 8.4.1数据字典的内容及格式数据字典的内容及格式 数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的,因此也像普通字典一样,要把所有条目按一定的次序排列起来,以便查阅。数据字典有以下 4 类条目:数据流、数据项、数据存储及基本加工。数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。1.数据流条目数据流条目 数据流条目给出了DFD中数据流的定义,通常列出该数据流的各组成数据项。在定义数据流或数据存储组成时,使用表8-1给出的符号。第8章 结构化方法 下面给出
25、了几个使用表8-1中符号,定义数据流组成及数据项的例子。例:机票=姓名+日期+航班号+起点+终点+费用 姓名=字母182 航班号=“Y7100”KG-*3“Y8100”终点=上海|北京|西安 数据流条目主要内容及举例如下:数据流名称:订单第8章 结构化方法第8章 结构化方法别名:无简述:顾客订货时填写的项目来源:顾客去向:加工1“检验订单”数据流量:1000份/每周组成:编号+订货日期+顾客编号+地址+电话+银行账号+货物名称+规格+数量 其中数据流量指单位时间内(每小时或每天或每周或每月)的传输次数。第8章 结构化方法 2.数据存储条目数据存储条目 数据存储条目是对数据存储的定义,主要内容及
26、举例如下:数据存储名称:库存记录 别名:无 简述:存放库存所有可供货物的信息 组成:货物名称+编号+生产厂家+单价+库存量 组织方式:索引文件,以货物编号为关键字 查询要求:要求能立即查询第8章 结构化方法数据项名称:货物编号别名:G-No,G-num,Goods-No简述:本公司的所有货物的编号类型:字符串长度:10取值范围及含义:第1位:进口/国产 第24位:类别 第57位:规格 第810位:品名编号 3.数据项条目数据项条目 数据项条目是不可再分解的数据单位,其定义格式及举例如下:第8章 结构化方法 4.加工条目加工条目 加工条目是用来说明DFD中基本加工的处理逻辑的,由于上层的加工是由
27、下层的基本加工分解而来,只要有了基本加工的说明,就可理解其他加工。加工条目的主要内容及举例如下:加工名:确定能否供货编号:1.2激发条件:接收到合格订单时优先级:普通输入:合格订单输出:可供货订单、缺货订单加工逻辑:根据库存记录第8章 结构化方法 IF 订单项目的数量 该项目库存量的临界值 THEN 可供货处理 ELSE 此订单缺货,登录,待进货后再处理 ENDIF 数据字典中的加工逻辑主要描述该加工“做什么”,即实现加工的策略,而不是实现加工的细节,它描述如何把输入数据流变换为输出数据流的加工规则。为了使加工逻辑直观易读,易被用户理解,有几种常用的描述方法,它们是结构化语言、判定表及判定树(
28、见8.5节)。第8章 结构化方法 8.4.2数据字典的实现数据字典的实现 1.手工建立手工建立 手工建立数据字典的内容用卡片形式存放,其步骤如下:(1)按 4 类条目规范的格式印制卡片。(2)在卡片上分别填写各类条目的内容。(3)先按图号顺序排列,同一图号的所有条目按数据流、数据项、数据存储和加工的顺序排列。(4)同一图号中的同一类条目(如数据流卡片)可按名字的字典顺序存放,加工一般按编号顺序存放。(5)同一成分在父图和子图都出现时,则只在父图上定义。(6)建立索引目录。第8章 结构化方法 2.利用计算机辅助建立并维护利用计算机辅助建立并维护 利用计算机辅助建立并维护数据字典的步骤如下:(1)
29、编制一个“字典生成与管理程序”,可以按规定的格式输入各类条目,能对字典条目增、删、改,能打印出各类查询报告和清单,能进行完整性、一致性检查等。美国密执安大学研究的PSL/PSA就是这样一个系统。(2)利用已有的数据库开发工具,针对数据字典建立一个数据库文件,可将数据流、数据项、数据存储和加工分别以矩阵表的形式来描述各个表项的内容,如数据流的矩阵表为:第8章 结构化方法编号名称来源去向流量组成 然后使用开发工具建成数据库文件,便于修改、查询,并可随时打印出来。另外,有的DBMS本身包含一个数据字典子系统,建库时能自动生成数据字典。计算机辅助开发数据字典比手工建立数据字典有更多的优点,能保证数据的
30、一致性和完整性,使用也方便,但增加了技术难度与机器开销。第8章 结构化方法8.5 加工逻辑的描述加工逻辑的描述 8.5.1结构化语言结构化语言 结构化语言是介于自然语言(英语或汉语)和形式语言之间的一种半形式语言。形式语言精确,但不易被理解,自然语言易理解,但它不精确,可能产生二义性。结构化语言取“长”补“短”,它是在自然语言基础上加了一些限定,使用有限的词汇和有限的语句来描述加工逻辑,它的结构可分成外层和内层两层。1.外层外层 外层用来描述控制结构,采用如下顺序、选择及重复三种基本结构:第8章 结构化方法 (1)顺序结构:是一组祈使语句、选择语句及重复语句的顺序排列。祈使语句指至少包含一个动
31、词及一个名词,指出要执行的动作及接受动作的对象。(2)选择结构:一般用IFTHENELSEENDIF,CASEOFENDCASE等关键词。(3)重复结构:一般用DOWHILEENDDO,REPEATUNTIL等关键词。2.内层内层 内层一般是采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰。还可使用一些简单的算术运算和逻辑运算符号。第8章 结构化方法 8.5.2判定表判定表 例如,某数据流图中有一个“确定保险类别”的加工,指的是申请汽车驾驶保险时,要根据申请者的情况确定不同的保险类别。加工逻辑为:如果申请者的年龄在21岁以下,要额外
32、收费;如果申请者是21岁以上并是26岁以下的女性,适用于A类保险;如果申请者是26岁以下的已婚男性,或者是26岁以上的男性,适用于B类保险;如果申请者是21岁以下的女性或是26岁以下的单身男性,适用于C类保险。除此之外的其他申请者都适用于A类保险。这段叙述使人不能较快地看懂该加工的动作,而用判定表表示出来就清楚了。判定表由 4 部分组成,用双线分割开 4 个区域,如图8.所示。第8章 结构化方法第8章 结构化方法 各部分的含义在图上标出。现就上例构造一张判定表,可采取以下步骤:(1)提取问题中的条件:条件是年龄、性别及婚姻。(2)标出条件的取值:为绘制判定表方便,用符号代替条件的取值,见表8-
33、2。(3)计算所有条件的组合数N:N=mi=322=12。(4)提取可能采取的动作或措施:适用于A类保险、B类保险、C类保险和额外收费。(5)制作判定表:如表8-3所示。第8章 结构化方法第8章 结构化方法第8章 结构化方法 (6)完善判定表:初始的判定表可能不完善,表现在两个方面。第一,缺少判定列中应采取的动作。例如“确定保险类别”的说明中若没有最后一句“除此之外”,那么第9、10两列就无选取的动作,这时就应与用户说明并将其补充完整第二,有冗余的判定列。两个或多个规则中,具有相同的动作,而与它所对应的各个条件组合中有取值无关的条件。如第1和第2、第5和第6、第9和第10、第11和第12都与第
34、三个条件“婚姻”取值无关,因此可将它们分别合并。合并后的规则还可进一步合并,如图8.10所示,图中“Y”表示逻辑条件取值为“真”,“N”表示逻辑条件取值为“假”,“”表示与取值无关。第8章 结构化方法图 8.10 动作相同的规则合并YNYYNNYN两条规则合并YNYNNYN进一步合并N第8章 结构化方法 8.5.3判定树判定树 判定树是判定表的变形,一般情况下它比判定表更直观,且易于理解和使用。图8.11是与表8-3功能等价的判定树。上述三种描述加工逻辑的工具各有优缺点,对于顺序执行和循环执行的动作,用结构化语言描述;对于存在多个条件复杂组合的判断问题,用判定表和判定树。判定树较判定表直观易读
35、,判定表进行逻辑验证较严格,能把所有的可能性全部都考虑到。可将两种工具结合起来,先用判定表作底稿,在此基础上产生判定树。经过需求分析,开发人员已经基本上理解了用户的要求,确定了目标系统的功能,定义了系统的数据,描述了处理这些数据的基本策略。将这些共同的理解进行整理,最后形成文档需求说明书。第8章 结构化方法图 8.11 判定树确定保险类别C类保险且额外收费B类保险且额外收费B类保险C类保险B类保险C类保险且额外收费A类保险未婚已婚已婚未婚年龄21岁21岁年龄26年龄26岁年龄21岁年龄21岁男性女性第8章 结构化方法 上述三种描述加工逻辑的工具各有优缺点,对于顺序执行和循环执行的动作,用结构化
36、语言描述;对于存在多个条件复杂组合的判断问题,用判定表和判定树。判定树较判定表直观易读,判定表进行逻辑验证较严格,能把所有的可能性全部都考虑到。可将两种工具结合起来,先用判定表作底稿,在此基础上产生判定树。经过需求分析,开发人员已经基本上理解了用户的要求,确定了目标系统的功能,定义了系统的数据,描述了处理这些数据的基本策略。将这些共同的理解进行整理,最后形成文档需求说明书。第8章 结构化方法8.6 结结 构构 化化 设设 计计 8.6.1数据流的类型数据流的类型 要把数据流图(DFD)转换成软件结构,必须研究DFD的类型。各种软件系统,不论DFD如何庞大与复杂,一般可分为变换型数据流图和事务型
37、数据流图两类。1.变换型数据流图变换型数据流图 变换型的DFD是由输入、变换(或称处理)和输出三部分组成,如图8.12所示,虚线为标出的流界。变换型数据处理的工作过程一般分为取得数据、变换数据和给出数据。这三步体现了变换型DFD的基本思想。第8章 结构化方法图 8.12 变换型DFD变换中心输出流输入流物理输入逻辑输入逻辑输出物理输出第8章 结构化方法 变换是系统的主加工,变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出。而直接从外部设备输入的数据称为物理输入,反之称为物理输出。外部的输入数据一般要经过输入正确性和合理性检查、编辑及格式转换等预处理,这部分工作都由逻辑输入部分完成,它将外部
38、形式的数据变成内部形式,送给主加工。同理,逻辑输出部分把主加工产生的数据的内部形式转换成外部形式然后物理输出。因此变换型的DFD是一个顺序结构。2.事务型的数据流图事务型的数据流图 若某个加工将它的输入流分离成许多发散的数据流,形成许多平行的加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD称为事务型的数据流图,这个加工称为事务处理中心,如图8.13所示。第8章 结构化方法图 8.13 事务型DFDT输入流事务处理中心加工路径第8章 结构化方法 8.6.2设计过程设计过程 结构化设计方法的过程如下:(1)精化DFD:把DFD转换成软件结构图前,设计人员要仔细地研究分析DFD并参照
39、数据字典,认真理解其中的有关元素,检查有无遗漏或不合理之处,进行必要的修改。(2)确定DFD类型:如果是变换型,确定变换中心和逻辑输入、逻辑输出的界线,映射为变换结构的顶层和第一层;如果是事务型,确定事务中心和加工路径,映射为事务结构的顶层和第一层。(3)分解上层模块,设计中下层模块结构。第8章 结构化方法 (3)分解上层模块,设计中下层模块结构。(4)根据优化准则对软件结构求精。(5)描述模块功能、接口及全局数据结构。(6)复查,如果有错,转(2)修改完善,否则进入详细设计。第8章 结构化方法 8.6.3变换分析设计变换分析设计 当DFD具有较明显的变换特征时,则按照下列步骤设计。1.确定确
40、定DFD中的变换中心、中的变换中心、逻辑输入和逻辑输出逻辑输入和逻辑输出 如果设计人员经验丰富,则容易确定系统的变换中心,即主加工。如几股数据流的汇合处往往是系统的主加工。若一下不能确定,则要从物理输入端开始,沿着数据流方向向系统中心寻找,直到有这样的数据流,它不能再被看作是系统的输入则它的前一个数据流就是系统的逻辑输入。同理,从物理输出端开始,逆数据流方向向中间移动,可以确定系统的逻辑输出。介于逻辑输入和逻辑输出之间的加工就是变换中心,用虚线划分出流界,DFD的三部分就确定了。第8章 结构化方法 2.设计软件结构的顶层和第一层设计软件结构的顶层和第一层变换结构变换结构 变换中心确定以后,就相
41、当于决定了主模块的位置,这就是软件结构的顶层,如图8.14 所示。其功能是主要完成所有模块的控制,它的名称是系统名称,以体现完成整个系统的功能。主模块确定之后,设计软件结构的第一层。第一层至少要有输入、输出和变换三种功能的模块,即为每个逻辑输入设计一个输入模块,其功能为向顶层模块提供相应的数据,如图8.14中的f3;为每个逻辑输出设计一个输出模块,其功能为输出顶层模块的信息,如图8.14中的f7,f8。同时,为变换中心设计一个变换模块,它的功能是将逻辑输入进行变换加工,然后逻辑输出,如图8.14中,将f3变换成f7和f8。这些模块之间的数据传送应该与DFD相对应。第8章 结构化方法图 8.14
42、 变换分析设计举例变换中心ABCEDFGHf1输出输入f2f3f4f5f6f7f8f9f10f11主模块将f3变换成f7和f8put f7put f8get f3Bget f2CDEFput f9Gput f10Hput f11Aget f1f8f3f3f2f2f3f4f5f4f6f7f8f6f5f7f9f9f10f8f10f11f11f10f1f1f2f3f7f8f7第8章 结构化方法 3.设计中、下层模块设计中、下层模块 对第一层的输入、变换及输出模块自顶向下、逐层分解。1)输入模块的下属模块的设计 输入模块的功能是向它的调用模块提供数据,所以必须要有数据来源。这样输入模块应由接收数据和转
43、换成调用模块所需的信息两部分组成。因此,每个输入模块可以设计成两个下属模块:一个接收,一个转换。用类似的方法一直分解下去,直到物理输入端。如图8.14中模块“get f3”和“get f2”的分解。模块“get f1”为物理输入模块。第8章 结构化方法 2)输出模块的下属模块的设计 输出模块的功能是将它的调用模块产生的结果送出,它由将数据转换成下属模块所需的形式和发送数据两部分组成。这样每个输出模块可以设计成两个下属模块:一个转换,一个发送,一直到物理输出端。如图8.14中,模块“put f7”,“put f8”和“put f10”的分解。模块“put f9”和“put f11”为物理输出模块
44、。3)变换模块的下属模块的设计 根据DFD中变换中心的组成情况,按照模块独立性的原则来组织其结构,一般对DFD中每个基本加工建立一个功能模块,如图8.14中模块“C”,“D”和“E”。第8章 结构化方法 4.设计的优化设计的优化 以上步骤设计出的软件结构仅仅是初始结构,还必须根据设计准则对初始结构精细和改进,以下为提供的求精办法。(1)输入部分的求精:对每个物理输入设置专门模块,以体现系统的外部接口;其他输入模块并非真正输入,当它与转换数据的模块都很简单时,可将它们合并成一个模块。(2)输出部分的求精:为每个物理输出设置专门模块,同时注意把相同或类似的物理输出模块合并在一起,以减低耦合度。(3
45、)变换部分的求精:根据设计准则,对模块进行合并或调整。第8章 结构化方法 总之,软件结构的求精,带有很大的经验性。往往形成DFD中的加工与SC中的模块之间是一对一的映射关系,然后再修改。但对于一个实际问题,可能把DFD中的两个甚至多个加工组成一个模块,也可能把DFD中的一个加工扩展为两个或更多个模块,根据具体情况要灵活掌握设计方法,以求设计出由高内聚和低耦合的模块所组成的、具有良好特性的软件结构。第8章 结构化方法 8.6.4事务分析设计事务分析设计 对于具有事务型特征的DFD,则采用事务分析的设计方法。结合图8.15,说明该方法的设计过程。1)确定DFD中的事务中心和加工路径 当DFD中的某
46、个加工具有明显地将一个输入数据流分解成多个发散的输出数据流时,该加工就是事务中心。从事务中心辐射出去的数据流为各个加工路径。2)设计软件结构的顶层和第一层事务结构 设计一个顶层模块,它是一个主模块,有两个功能,一是接收数据,二是根据事务类型调度相应的处理模块。事务型软件结构应包括接收分支和发送分支两个部分。第8章 结构化方法图 8.15 事务分析设计举例A输入流事务中心加工路径BCDF1主模块get f1f1调度f1CBD接收分支发送分支事务层动作层细节层第8章 结构化方法 (1)接收分支:负责接收数据,它的设计与变换型DFD的输入部分设计方法相同。(2)发送分支:通常包含一个调度模块,它控制
47、管理所有的下层的事务处理模块。当事务类型不多时,调度模块可与主模块合并。3)事务结构中、下层模块的设计、优化等工作同变换结构。第8章 结构化方法 8.6.5 综合型数据流图与分层数据流图映射成软综合型数据流图与分层数据流图映射成软件结构的设计件结构的设计 1.综合综合DFD的映射的映射 一个大型系统的DFD中,既有变换流,又有事务流,属于综合的数据流图,其软件结构设计方法如下:(1)确定DFD整体上的类型。事务型通常用于对高层数据流图的变换,其优点是把一个大而复杂的系统分解成若干较小的简单的子系统。变换型通常用于对较低层数据流图的转换。变换型具有顺序处理的特点,而事务型具有平行分别处理的特点,
48、所以两种类型的DFD导出的软件结构有所不同。只要从DFD整体的、主要功能处理分析其特点,就可区分出该DFD整体类型。第8章 结构化方法 (2)标出局部的DFD范围,确定其类型。(3)按整体和局部的DFD特征,设计出软件结构。2.分层分层DFD的映射的映射 对于一个复杂问题的数据流图,往往是分层的。分层的数据流图映射成软件结构图也应该是分层的,这样便于设计,也便于修改。由于数据流图的顶层图反映的是系统与外部环境的界面,所以系统的物理输入与物理输出都在SC的顶层或0层图,相应的软件结构图的物理输入与输出部分应放在主图中,便于同DFD的顶层图对照检查。分层DFD的映射方法是:(1)主图是变换型,子图
49、是事务型,见图8.16,图中表示“或者”。(2)主图是事务型,子图是变换型,见图8.17。第8章 结构化方法图 8.16 主图变换型,子图事务型Af1主图:f2f3DFD:Bf3Cf4子图A:f1A1A2A3A4f2g3g4g1g2主模块Bget f2put f3f2put f4CAget f1f1f2f1f4f3f4AA1A4A2A3g4g2g3g1f2g4f1g4g3g3SC:第8章 结构化方法图 8.17 主图事务型,子图变换型B1f2主图:g1f4B2g2B3f4子图B:BB2get g1put g2f2g1g2g2g1B3B1g1f2f4g2ABf1Cf2f3f4f5DFD:f1主模
50、块Aget f1f1f3CBf2put f4f4put f5f5(f2变换g1)(g2变换f4)SC:第8章 结构化方法 8.6.6 SD方法应用示例方法应用示例 将8.3.3中的销售管理系统的DFD转换为软件结构图。分析该系统的0层图,它有 4 个主要功能,即订货处理、进货处理、缺货处理和销售统计。其中,订货处理包括订单处理和供货处理两部分。这 4 个处理可平行工作,因此从整体上分析可按事务型数据流图来设计,根据功能键来选择 4 个处理中的一个。设计出的软件结构如图8.18所示。第8章 结构化方法图 8.18 销售管理系统软件结构图销售管理系统读键盘类别1 订货处理2 进货处理3 缺货处理4