当前位置:
文档之家› 软件工程中面向数据流的设计方法
软件工程中面向数据流的设计方法
9.4.1 Βιβλιοθήκη 发式设计策略5.模块功能应该可预言,避免对模块施加 过多限制。 模块功能可预言指,只要模块的输入数 据相同,其运行产生的输出必然相同, 也就是可以依据其输入数据预测模块的 输出结果。此外,如果设计时对模块中 局部数据的体积,控制流程的选择及外 部接口方式等诸因素限制过多,则以后 为去掉这些限制要增加维护开销。
描述接口和全局 数据结构
复审 通过 详细设计
图9-1-4 面向数据流 的设计
9.2 变换分析
步骤一、复审基本系统模型 基本系统模型指顶级DFD和所有由外部提 供的信息。这一设计步骤是对系统规格说明 书和软件需求规格说明书进行评估。这两个 文档描述软件界面上信息的流程和结构。
9.2 变换分析
步骤二、复审和精化软件数据流图 这一步主要是对软件需求规格说明书中的分析 模型进行精化,直至获得足够详细的DFD。
辅助文档
获得程序结构后,必须开发一系列辅助 文档,作为软件总体设计的组成部分。 主要工作包括: 1)陈述每个模块的处理过程; 2)描述每个模块的界面; 3)根据数据字典定义数据结构; 4)综述设计中所有限制和约束; 5)对概要设计进行复审; 6)对设计进行优化。
9.4.2 设计优化原则
我们努力追求的设计应该是既满足功能和性能 的要求,又符合一般软件设计原理和上述种种 启发式设计原则。 对软件结构的修改越早越好。必要时,可以并 行地开发若干个软件结构,通过评比,求得 “最佳”结果。 简洁的程序结构容易测试、容易维护,应该使 用尽可能少的模块;只要满足信息要求,应该 使用尽可能简单的数据结构。 结构优化是一个精益求精的过程。优化过程可 以在设计的早期,甚至要延续到详细设计乃至 编码阶段。
软件工程
第9章 面向数据流的设计方法
面向数据流的设计方法,即通常所说的结构设 计法(Structure Design,简称SD方法), 由Yourdon和Constantine等人于1974年提出 的,与结构化分析(SA)相衔接,根据对数 据流的分析设计软件结构。 SD方法对那些顺序处理信息且不含层次数据 结构的系统最为有效,例如过程控制、复杂的 数值分析过程、以及科学与工程方面的应用。
发送部分
SUBSYS1
SUBSYS3
图9-3-2 映射系统上层结构模块
…
…
…
9.3 事务分析
步骤六、分解并精化事务结构以及每条动 作路径所对应的结构。这些子结构是根据 流经每一动作路径的数据流特征,采用本 节或上节所述设计步骤逐一导出的。
3 1 2 4 5 SUBSYS2 输入控制 7 变换控制 10
a a a
b
c
b
c
b
a) 顺序调用
b) 选择调用
c) 循环调用
9.2 变换分析
输入流 变换流 输出流
A C
B E D F G H
主控模块 输入流 控制模块
变换流 控制模块
输出流 控制模块
图9-2-5 一级分解
9.2 变换分析
步骤六、执行“二级分解”。
二级分解的任务是把数据流图中每个处理 框映射为结构图中的一个模块。其过程是 从变换中心的边界开始沿输入、输出通道 向外移动;从变换中心的输入(出)边界向外 移动,把遇到的每个处理框映射为结构图 中相应控制模块下的一个模块。
9.3 事务分析
事务分析法可概括为七个步骤: 步骤一、复审基本系统模型; 步骤二、复审并精化软件数据流图; 步骤三、确定数据流图的特征; 步骤四、指出事务中心,确定接收部分和发 送部分的流界; 步骤五、映射出系统上层模块结构;
3 1 2 4 5
6 7 10 11
接收部分 事务中心
8
9
SYSTEM 输入 1 散转 2 SUBSYS2
6 7 10 11
接收部分 事务中心
8
9 发送部分 输出控制 11
4 图9-3-3 设计系统下层模块结构
9.3 事务分析
SYSTEM 输入 1 SUBSYS1 3 输入控制 散转 2 SUBSYS2 变换控制 输出控制 11 8 SUBSYS3
5
9
6
7
4
10
图9-3-4 将模块结构组合,得到程序结构雏形
9.2 变换分析
步骤三、确定DFD的特性,判定它为变换 流还是事务流。
步骤四、划定输入流和输出流的边界,孤 立变换中心。
9.2 变换分析
步骤五、执行“一级分解”(first level factoring) 一级分解的目标是导出具有三个层次的程 序结构,顶层为主控模块;底层模块执行 输入、计算和输出功能;中层模块控制、 协调底层的工作。
1)变换流
变换流 — 在基本系统模型(即顶级数据 流图)中信息通常以“外部世界”所具 有的形式进入系统,经过处理后又以这 种形式离开系统。
信 息 外 部 表 示 内 部 表 示 输出流 输入流 变换流
时间
图9-1-1 信息流
1)变换流
C A B D 图9-1-2 典型的变换流 变换流的特点是:经过变换B的数据流一部分先 经过变换C到达变换E,然后另一部分经过变换D 到达E;即C和D是顺序结构。
9.4.2 设计优化原则
对时间有特殊要求的软件,应根据普遍存在的“百 分之二十规则”(即20%的代码占用80%的处理时 间,80%的错误出自20%的代码)采用下述对策: 1.在不考虑时、空耗费的情况下,设计并精化软 件结构; 2.借用CASE工具模拟分析运行时的性能,定位出 低效的部分,加以改进; 3.详细设计时对最耗时的模块,认真地设计它们的处 理过程(算法),以便减少时间的开销; 4.尽量用高级语言编程以利于软件的优化; 5.对大量占用计算机系统资源的模块必要时用低级语 言重新编码,以提高效率。 设计优化的格言—“先让它干起来,再让它快起来”。
9.4.1 启发式设计策略
2.调整软件结构的深度、宽度、扇出和扇入 数目,改善软件结构性能。 经验表明,设计良好的软件结构通常顶层 扇出较高,中层扇出较低,底层又高扇入 到公共的实用模块中去。
9.4.1 启发式设计策略
应避免的结构
应追求的结构
图9-4-1 应追求与避免的程序结构
9.4.1 启发式设计策略
H
输入流控制模块 B A D C
E F
G H
图9-2-8 结构的优化
9.2 变换分析
上述七个设计步骤的目标是给出软件 的一个整体描述。 一旦有了这样一个描述,设计人员即 可从整体角度评价和精化软件的总体 结构,此时修改所需耗费不多,却能 大大提高软件质量。
9.3 事务分析
当数据流具有明显的事务特征时,即能 找到一个事务(亦称触发数据项)和一 个事务中心,采用事务分析法更为适宜。
输入流
变换流
输出流
A C
B
E
D
F
G
H
主控模块 输入流控制 模块 B A D C 变换流控制 模块 E F 输出流控制 模块 G H
图9-2-7 二级分解
9.2 变换分析
DFD的处理框与程序结构模块一一对应, 但按照软件设计原则进行设计时,可能需 要把几个处理框聚合为一个模块,或者把 一个处理框裂变为几个模块。总之,应根 据“良好”设计的标准,进行二级分解。 二级分解后得到的仅仅是程序结构的“雏 形”( first-cut ),后续的复审和精化会 反复修改。
9.3 事务分析
步骤七、使用启发式设计策略,精化所 得程序结构雏形,改良软件质量。这一 步骤与变换分析法相同。
SYSTEM 输入 1 3 6 7 散转 2 SUBSYS2 10 11 8 5 9
4
9.4 设计优化及原则
9.4.1 启发式设计策略
1.调整模块的功能和规模,降低耦合度,提高内 聚度。 若在几个模块中发现了共有的子功能,一般应将 此子功能独立出来作为一个模块,以提高单个模 块的内聚度。合并模块通常是为了减少控制信息 的传递以及对全程数据的引用,同时降低接口的 复杂性。 模块的规模没有固定的要求。以保持模块的独立 性为原则。一般而言,模块规模以一页左右为宜 (高级语言在75个语句左右)。
9.2 变换分析
程序结构的模块名已隐含了模块功能,但仍 有必要为每个模块写一个简要的处理说明, 它应当包括: 1.进出模块的信息(接口描述); 2.模块的局部信息; 3.处理过程陈述,包括任务和主要的判 断点的位置、条件; 4.对有关限制和一些专门特性的简要说 明(例如,文件I/O,独立于硬件的 特性,特殊的实时要求等)。 这些描述构成第一版设计规格说明书。
3.改造程序结构,使任一模块的作用域 在其控制域之内。
A B 受F中判定 E 的影响 G 违背第三条原则 C D C 判定 H B G A D
F
F
H
E
满足第三条原则
图9-4-2 作用域与控制域
9.4.1 启发式设计策略
4.分析模块之间的接口信息,降低界面的复 杂性和冗余程度,提高协调性。 界面复杂是引起软件错误的一个基本因素, 界面上传递的数据应尽可能简单并与模块 的功能相协调,界面不协调(即在同一个 参数表内或以其他某种方式传递不甚相关 的一堆数据)本身就是模块低内聚的表征。
9.2 变换分析
程序结构可用 Yourdon 结构图表示。结构图中,方 框代表模块,框内名称表示模块的功能;方框之间的 有向边(无二义时也可用无向边)表示模块间的调用 关系。调用模块上无标志表示顺序调用:从左至右; 菱形表示选择调用;弧形箭头表示循环调用。但除了 顺序调用外,并不是必须遵循这些规定。
9.4.1 启发式设计策略
6. 改造程序结构,追求单入口单出口的模块。 7. 为满足设计或可移植性的要求,把某些软 件用包(package)的形式封装起来。 软件设计常常附带一些特殊限制,例如,要求 程序采用覆盖技术。此时,根据模块重要的程 度、被访问的频率及两次引用的间隔等因素对 模块分组。 此外,程序中那些供选择的或“单调” (one-shot)的模块应单独存在,以便高效地 加载。