传统的设计方法
9
5.2 结构化设计方法(SD方法)
SD方法的中心任务
把用DFD图表示的系统分析模型方便地转换 为软件结构的设计模型。
软件结构的描述工具
H图(层次图) SC图(软件结构图)
10
层次图
通常使用层次图描绘软件的层次结构。在层 次图中一个矩形框代表一个模块,框间的连线表 示调用关系。
11
HIPO图
29
w,u
w,u ME
3、完成“第二级分解/分支分解”,分解SC图的各 个分支。对初始SC图的框架继续进行由顶向下的分 解,直至画出每个分支所需要的全部模块。 传入路径的处理:由变换中心外移,把传入路径中 每个处理映射成软件结构中输入处理的低一层模块 传出路径的处理:由变换中心外移,通路中各处理 直接映射成输出处理的低一层模块
e g f
F
h
J
k
b1
B
b2 b3
K
j
l
41
面 向 数 据 流 方 法 的 设 计 过 程
42
5.2.5 结构化设计的优化规则
软件工程师们在开发计算机软件的长期实践 中积累了丰富的经验,总结这些经验得出了一些 启发规则。这些启发规则在许多场合能给软件工 程师有益的启示,往往能帮助他们找到改进软件 设计提高软件质量的途径,因此有助于实现有效 的模块化。 下面介绍几条常用的启发规则。
(3)高扇入结构的画法:调用线太多,交叉,乱。考虑用 编号代替功能方框,直接画在调用模块下。
48
四、模块的作用域应该在控制域之内 1、两个范围的含义 控制范围:包括模块本身及其下属模块,不论这些模块 系由该模块直接调用,还是间接调用。 作用范围:是一个与条件判定相联系的概念,指模块内 的某条件判定涉及的直接调用和间接调用模块。 一般情况,一个判定作用范围内的模块可能会有3 种情况: 整个模块是否执行,依赖于判定的结果; 上述模块的下属模块; 模块内有部分功能的执行依赖于这一判定。
第五章 传统的设计方法
本章介绍了传统的设计模型,以及从分析模
型导出设计模型的一般方法。重点讲述了面
向数据流设计的结构化设计方法(包括结构
设计和过程设计)和面向数据结构设计的
Jackson设计方法。
重点掌握: 结构化设计模型,结构化设计 方法。
1
结构化设计模型
结构化设计方法
过程设计
Jackson方法
事务控制
事务控制 事务
接收
发送
分析发送
…
…
38
3、分解和细化接受和发送 分支,完成初始的SC图 接受分支一般具有变换特性, 可对其进行变换分析; 动作分支典型的可映射为4 层:P-处理层、T-事务层、 A-操作层、D-细节层。A、D 常可被P、T共享。
P
T1 A1 T2 A2 D2 A3 Ti Aj Dk
A
X,Y Z Z
A C B C
选择调用
A D B
循环调用
16
B
C
简单调用
在结构图中通常还用带注释的箭头表示模块调用过程 中来回传递的信息。如果希望进一步标明传递的信息 是数据还是控制信息,则可以利用注释箭头尾部的形 状来区分:尾部是空心圆表示传递的是数据,实心圆 表示传递的是控制信息
17
注意: 层次图和结构图并不严格表示模块的调用次序。 层次图和结构图并不指明什么时候调用下层模 块。 通常用层次图作为描绘软件结构的文档。结 构图作为文档并不合适。但是,利用IPO图和数 据字典中的信息得到模块调用时传递的信息,从 而由层次图导出结构图的过程,却可以作为检察 设计正确性和评价模块独立性的好方法。
26
27
2、完成“第一级分解”,建立初始SC图的框架。 包括顶层控制模块和第一层模块。 两种画法: a.顶层控制模块+传入、传出和中心变换3个一层 模块 b.顶层控制模块+按照传入、传出实际数据流数 和中心变换模块数确定数量的模块
28
Mc
c,e MA c,e MT Mc c MA1 MA2 e e Q p c,p r r P w,u R w u ME1 ME2
43
一、改进软件结构提高模块独立性 通过模块分解或合并,力求降低耦合提高内聚。 二、模块规模应该适中 一页纸内(≤60行)。 过大,可考虑继续分解模块功能;过小,可考虑合 并到上层模块。
44
三、深度、宽度、扇出和扇入都应适当 1、概念 深度:软件结构中控制的层数,往往粗略的标志一个系 统的大小和复杂程度。越大,意味着模块功能可能过分 简单,软件的程序控制复杂。 宽度:软件结构内同一个层次上的模块总数的最大值。 宽度越大系统越复杂。(主要受扇出影响) 扇出:模块直接调用的下级模块数目,也称模块的控制 宽度。 扇入:直接调用它的上级模块数。
GetC b b c GetB a a ReadA BtoC b AtoB
WriteW
u
PutU
v UtoV v WriteV
34
5.2.4 事务映射
虽然在任何情况下都可以使用变换分析方法 设计软件结构,但是在数据流具有明显的事务特 点时,也就是有一个明显的“发射中心”(事务 中心)时,还是以采用事务分析方法为宜。 事务:引发、触发或启动某一动作或一串动 作的任何数据、控制、信号、事件或状态变化
D1
39
在大型系统的DFD中,变换型和事务型两类 结构往往同时存在。对于一个大系统,常常把变 换分析和事务分析应用到同一个数据流图的不同 部分,由此得到的子结构形成“构件”,可以利 用它们构造完整的软件结构。
40
混合结构一例
总体为变换型结构 传入路径为事务型结构
C1
c1
D
G
c2
C2
d c3
C3 E
30
为了显式的表示在传入/传出路径上的数据变换, 在分支分解中可考虑增加变换模块,功能为 Read/Get 和 Write/Put。 传 入 路 c 径 处 C 理 b
B c,e MA e E d D c GetC b b c GetB a a ReadA BtoC b c,e MA e GetE d d e ReadD DtoE
35
事务分析步骤: 1、在DFD图上确定事务中心、接受部分(包 括接受路径)和发送部分(包含全部动作路径) 事务中心通常位于DFD图中多条动作路径的起点; 向事务中心提供信息的路径,是系统的接受路径; 动作路径通常不止一条,切每条均具有自己的结 构特性(变换或事务型)。
36
37
2、画出SC图框架,把DFD图的三个部分分别映射 为事务控制模块、接受模块和动作发送模块
HIPO图是美国IBM公司发明的“层次图+输入/处 理/输出图”的英文缩写。为了使HIPO图具有可追踪 性,在H图(即层次图)里除了顶层的方框之外,每个 方框都加编号。
12
基本的IPO图
13
表格式的IPO图(IPO表)
14
5.2.1 SC图 (Structure Chart)
用于表达软件的组成模块及其调用关系。
取得工 资数据
计时工人 实发工资
计薪工人 实发工资
编外人员 实发工资
计时制 工资额
税收 扣款
常规 扣款
薪金制 工资额
编外人 员工资
编外人 员税款
编外人 员扣款
47
3、高扇入结构 (1)一个模块的扇入越高,则共享这一模块的上级模块数 目越多,消除重复代码的效果就越明显。 (2)底层高扇入结构:可共享的底层功能多,形成“瓮形” 或“清真寺”结构。
入信息。
分析模型的每个元素都提供了创建设计模型时
所需要的信息。
7
图5.1 将分析模型转换为软件的设计模型
8
数据设计把分析阶段创建的信息域模型转变成实现 软件所需要的数据结构。 体系结构设计确定了程序的主要结构元素(即程序构 件)之间的关系。 接口设计的结果描述了软件内部、软件与协作系统 之间以及软件与使用者之间的通信方式。 过程设计把程序体系结构中的结构元素,变换成对 软件构件的过程性描述。 在软件设计期间我们所做出的决策,将最终决定软 件开发能否成功,更重要的是,这些设计决策将决定软 件维护的难易程度。
鉴别DFD图的结构特征:事务?变换?
按照规则,把DFD图为初始的SC图
改进初始的SC图,获得最终SC图。
22
两种映射方法
变换映射 事务映射
变换映射
变换型DFD图 事务型DFD图
初始SC图 初始SC图
事务映射
23
5.2.3 变换映射
适用于将变换型结构的DFD图转换为初始软 件结构图。步骤如下: 1、区分传入、传出和变换中心三个部分,在DFD 图上标明它们的分界线 (1)变换中心的任务:通过计算或处理,把系统 的逻辑输入变换(或加工)为系统的逻辑输出。 (2)逻辑输入(传入数据项):离物理输入端(输入 始端)最远,但仍可以被看作系统输入的那些数 据流。
4
5.1.1 面向数据流设计和面向数据设计
面向数据流设计
将信息流映射成软件结构
数据流是考虑一切问题的出发点 最终目的
给出设计软件结构的一个系统化的途径 变换流 事务流
数据流的类型决定映射方法
该方法适用于概要设计阶段
常称为结构化设计(SD)方法
5
面向数据设计
该方法不明显的使用软件结构的概念,模块是设 计过程的副产品。对于模块独立性也没有给予应 有的重视。
SC图的组成符号 矩形框来表示模块 带箭头的连线表示模块间的调用关系 在调用线的两旁标出传入和传出模块的数据流 SC图中的模块符号 传入 传出 P88实物投影解释 变换 源 漏 控制