软件工程软件总体设计内容摘要:

18 7.模块功能应可预测 模块的功能应能预测,如果一个模块可以当做一个黑盒子,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。 带有内部存储器的模块的功能可能是不可预测的,因为它的输出可能取决于内部存储器(例如某个标记) 的状态。 由于内部存储器对于上级模块而言是不可见的,所以这样的模块不易理解、难于测试和维护。 如果一个模块只完成一个单独的子功能,则表现高内聚;但是,如果一个模块任意限制局部数据结构的大小,过分限制在控制流中可以做出的选择或者外部接口的模式,那么这种模块的功能就过分局限,使用范围也就过于狭窄。 在使用过程中将不可避免地需要修改功能过分局限的模块,以提高模块的灵活性,扩大它的使用范围;但是,在使用现场修改软件的代价是很高的。 面向数据流的设计方法 在这一节,将介绍一种应用最广、技术上也较完善的系统设 计方法,面向数据流的设计方法。 面向数据流的设计方法的目标是给出设计软件结构的一个系统化途径。 结构化设计方法属于面向数据流的设计方法。 在需求分析阶段,首先要考虑的一个关键问题就是信息流。 信息流是软件开发人员考虑问题的出发点和基础。 信息流从系统的输入端向输出端流动,要经历一系列的变换或处理。 用来表现这个过程的数据流图( DFD)就是软件系统的逻辑模型。 面向数据流的设计要解决的任务,就是在上述需求分析的基础上,将 DFD 图映射为软件系统的结构。 换句话说,这类设计方法允许把用 DFD 图表示的系统逻辑模型方便地转换成 对于软件结构的初始设计描述。 在结构化设计方法中,软件的结构将用系统结构图来描述。 为了有效地实现从 DFD 图到系统结构图的映射,结构化设计( SD)方法的步骤如下: S1:复审 DFD 图,必要时可再次进行修改或细化; S2:鉴别 DFD 图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型; S3:按照 SD 方法规定的一组规则,把 DFD 图映射为初始的系统结构图; S4:按照设计改进原则细化和改进初始的系统结构图,获得最终系统结构图。 基本概念 以面向数据流的设计方法把信 息流映射成软件结构,信息流的类型决定了映射的方法,信息流有下述两种类型。 ( 1)变换流 19 根据基本系统模型,信息通常以外部世界的形式进入软件系统,经过处理以后再以外部世界的形式离开系统。 如图 416 所示,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。 当信息流具有这些特征时,称为变换流。 图 416 变换流 ( 2)事务流 原则上所有信息流都可以归结为变换流类。 但是,当信息流具有和图 417类似的形状时,称信息流是以事务为中心,也就是说,数据沿输入通路到达一个处理 T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。 这类系统的特征能具有在多种事务中选择执行某类事务的能力。 事务型结构至少有一条接受路径 ,一个事务中心 ,与若干条动作路径组成。 这类信息流应该划为一类特殊的信息流,称为事务流。 图 417 中的处理 T 称为事务中心,它完成下述任务: 1)接收输入事务(事务又称为输入数据); 2)分析每个事务以确定它的类型; 3)根据事务类型选取一条活动通路。 图 417 事务流 20 基于面向数据流方法的设计过程如图 418 所示。 图 418 面向数据流方法设计过程 系统结构图的组成 系统结构图是 SD 方法在总体设计中使用的主要表达工具,用来显示软件的组成模块及其调用关系。 SD 方法约定,用矩形框来表示模块,用带箭头的连线表示模块间的调用关系。 在调用线的两旁,应标出传入和传出模块的数据流。 ( l)系统结构模块的表示符号 图 419 系统结构图的六种模块 21 不能再分解的底层模块称为原子模块。 如果一个系统的全部实际加工由原子模块来完成,而其它非原子模块只是执行控制和协调工作,那么这种系统就称为完全因子分解的系统。 图 419 显示了系统结构图允许使用的 6 种模块。 其中传入、传出和变换模块用来组成变换结构中的各个相应郎 分。 源模块是不调用其它模块的传入模块,只用于传入部分的始端。 漏模块是不调用其它模块的传出模块,仅用于传出部分的末端。 控制模块是只调用其它模块、而不被其它模块调用的模块,例如变换型结构的顶层模块,事务型结构的事务中心等,均属于控制模块这一类。 ( 2)简单调用 图 420 模块的简单调用 在系统结构图中,调用线的箭头指向被调用模块。 见图 420,在图 420( a)中,允许模块 A 调用模块 B 和模块 C,而不是相反。 调用 B 时, A 向它传送数据流 X 与 Y, B 向 A 返回数据流动调用 C 时, A 仅向 C 传送数据流动。 显而易见, B 属于变换模块, C 属于漏模块。 图 420( b)是图( a)的一种替代画法。 用附表列出在模块间传送的数据流,以代替直接在调用线的两侧作标注。 当系统结构图包含的数据流太多时,将造成画面拥挤,采用这种画法可使画面简洁并能减少错误。 ( 3)选择调用 图 421 模块的选择调用 选择调用的画法如图 421 所示。 图中用菱形符号来表示选择。 左方菱形的含义是:模块 A 根据它内部的判断,来决定要不要调用模块 B。 右方的菱形则表示 A 按照另一判定的结果,选择调用模块 C 或者模块 D。 22 图 422 模块的循环调用 ( 4)循环调用 用叠加在调用线始端的环形箭头表示循环。 图 422 的含义是:模块 A 将根据其内在的循环重复调用 B、 C 等模块,直至在 A 模块内部出现满足循环终止的条件为止。 以上简述了系统结构图的符号和画法。 利用这些画法,可以将目标系统的 DFD 图转换为目标系统的初始系统结构图。 SD 方法提出了两种分析与过渡方法:即变换分析与事务分析方法。 利用它们能方便地把 DFD 图转换为 初始系统结构图。 前者适用于 DFD 图中的变换型结构,后者适用于 DFD 图中的事务型结构。 图 423 简明的说明了变换分析与事务分析各自的功能。 图 423 变换分析与事务分析的功能 变换分析 经过变换分析步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构图。 1.对 DFD 图的分析和划分 首先区分传入、传出和变换中心三个部分,在 DFD 图上标明它们的分界线。 前已说明,变换结构由传入、传出和变换中心三部分组成。 变换中心的任务,就是通过计算或者处理,把系统的逻辑输人变换(或加工)为系统的逻辑输出。 所谓逻辑输入,是指离物 理输入端(输入始端)最远,但仍可以被看作系统输入的那些数据流。 而逻辑输出则是指离物理输出端(输出末端)最远,但仍可视为系统输出的所有数据流。 需要指出,当数据在系统中流动时,不仅在通过变换中心时要被变换,在传入和传出的路径上,其内容和形式也可能发生变化。 所以有时把变换中心称为中心加工,以区别干数据在传入传出过程中常见的其它加工。 23 图 424 变换型分析 图 424 是在 DFD 上区分三个组成部分的一个例子。 图中 c、 e 是逻辑输入数据流, u、 w 是逻辑输出数据流,介于它们之间的 P, Q, R 属于中心加工。 用虚线表示的两条分界线,标出了这三个部分的边界。 对 DFD 图的分析和划分是变换分析的第一步。 对于较复杂的 DFD 图,可以有多种的不同划分结果。 以下列出几种可能遇到的情况及其处理方法。 有些系统没有加工中心,系统的逻辑输入和逻辑输出是相同的数据流。 此时应如实地把 DFD 图划分为传入和传出两个部分, 不要强求分成三个部分。 除传入部分外,在变换中心甚至传出部分也可能从系统外接受某些输入数据流,称为二次输入数据。 分析时,应把二次输人数据看成变换中心或输出部分的一个成份,不应当作输入部分的一部分。 有些 DFD 图可能太粗,缺少应有的细节。 遇到这种情况,设计人员可对作为分析的 DFD 图进行补充,必要时甚至重画。 过多的细节有益后面的设计。 2.完成第一级分解 这一步要画出初始的系统结构图,主要是画出它最上面的两层模块,即顶层模块和第一层模块。 任何系统的顶层都只有一个用于控制的主模块。 它的下一层(第一层 )一般包括输入、输出和中心变换三个模块,分别代表系统的三个相应分支。 但也可能只有输入和输出两个模块,可据 DFD 图的实际划分情况而定。 图 425 显示了图 424 的 DFD 图在第一级分解后导出的系统结构图,沿调用线标注了在模块间输送的数据流的名称。 24 图 425 第一层 DFD 图 另一种 画法,在第一层不是每一分支只画一个模块,而是按照实际情况确定模块的数量。 仍以图 424 为例,输入和输出分支各有两个数据流,而中心加工会有三个加工,故可画出 (2+ 2+3)共 7 个模块,如图 426 所示。 由于初始系统结构图还要细化和优化,这两种画法的差异,对最终的系统结构图无关紧要。 图 426 模块间的调用 3. 完成第二级分解 对上步的结果继续进行由顶向下的分解,直至画出每个分支所需要的全部模块,称为第二级分解。 这一步得到的结果便是系统的初始系统结构图。 同第一级分解一样,这一步的分解实质上仍然是映射,即把 DFD 图中的加工按照一定规则转换为系统结构图中的模块。 这就使整个工作变得有章可循,这也是 SD 方法的一大优点。 仍以图 424 为例,首先考察输入分支的模块分解。 在图 427 中输入模块 M A 可直接调用模块 C 与 E 以取得它所需的数据流 c 与 e 继续下推,模块 C、 E将分别调用各自的 下属模块 B、 D,以取得 b 与 d。 模块 B 又通过调用下属模块 A 取得数据 a。 可见图 427 中的 5 个下属模块就是 DFD 图中从 A 至 E 这 5个加工的映射,但模块的调用顺序正好与加工顺序相反。 25 图 427 第二级分解 数据流在输入的过程中,也可能经历数据的变换。 以图 427 中的两个输入流为例,其中一 路将从 a 变换为 b,再变换为 c;另一路则从 d 变换为 e。 为了表示出这种变换,可以在图中增添 3 个变换模块(即 “ 变 A 为 B”。 “ 变 B为 C” 、 “ 变 D 为 E” ),并在模块 A 至 E 的名称中加上 Read、 Get 等字样,如图 428 所示。 这一改变除了处于输入端的源模块以外,让每一输入模块都调用两个下属模块,包括一个下属的输入模块和一个变换模块。 图 428 所显示的结构较图 427 更加清楚明了。 按图 428 寻踪,考察一下输入分支的操作过程。 为了取得数据 c、 e, M。 将分别调用模块 C 和 E。 为了得到 c(或 e),首先要得到 b(或 d 为了得到 b又要先读入 a。 图 429 显示了有关模块的调用与执行过程。 虽然模块的调用顺序( CBA ,ED)恰与加工的出现顺序相反,但取得数据的顺序 (abc,de) ,与 DFD 的要求是一致的。 仿照与输入分支相似的分解方法,可得到本例中输出分支的两种模块分解图,如图 430 所示。 与输入、输出分支相比,中心加工分支的情况繁简各异,其分解也较复杂。 但建立初始的系统结构图时,仍可以采取“一对一映射”的简单转换方法。 图 431 显示了本例中心加工分支第二级分解的结果。 将图 428 和 图 430 (右边) 与 图 431 合并在一起,就可以得到本例的初始系统结构图,如图 432 所示。 图 428 输入分支的第二种分解 26 图 429 模块的调用和执行过程 图 430 输出分支的两种分解 图 431 中心加工分支第二级分解 图 432 初始系统结构图 4. 变换分析的主要步骤 27 S1 复查基本系统模型。 在软件需求分析阶段应对上述每条要求以及系统的其他特点进行全面的分析评价,建立起必要的文档资料,特别是数据流图。 S2 复 查并精化数据流图。 复查的目的是确保系统的输入数据和输出数据符合实际。 应该对需求分析阶段得出的数据流图复查,并且进行精化。 不仅要确保数据流图给出了目标系统的逻辑模型,而且应该使数据流图中每个处理都代表一个规模适中相对独立的子功能。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。