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