第 6 讲 面向数据流的软件设计方法
DESCRIPTION
软件工程导论 之. 第 6 讲 面向数据流的软件设计方法. 毛新军 教授 [email protected] 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 前言. 软件设计基础知识 软件的需求分析及其 需求规格说明书( SRS) 软件的 SRS -> 软件设计信息 面向数据流的设计方法:提供了方法和策略. 本讲内容. 基本概念和软件设计过程 变换分析方法 事务分析方法 启发式设计策略 设计优化原则. 面向数据流设计基本概念和过程. 前提 经过评审后的需求模型 -- 数据流图. - PowerPoint PPT PresentationTRANSCRIPT
第第 66 讲 讲 面向数据流的软件设计方面向数据流的软件设计方法法
毛新军 教授[email protected]
计算机科学与技术系 602 教研室 0731-(45)73649
软件工程导论 之
用工程化的方法来开发软件用工程化的方法来开发软件
©Copyright Xinjun Mao
面向数据流的软件设计方法
2
前言前言 软件设计基础知识 软件的需求分析及其需求规格说明书 (SRS) 软件的 SRS -> 软件设计信息 面向数据流的设计方法:提供了方法和策略
©Copyright Xinjun Mao
面向数据流的软件设计方法
3
本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
4
输入流
输出流
变换流
时间
外部表示
内部表示
信息
订票员
订票员
预定机票
准备机票
记帐
订票单
航班目录
航班号
航班
费用
帐单
机票
记帐数据库
帐目
面向数据流设计基本概念和过程面向数据流设计基本概念和过程 前提
– 经过评审后的需求模型 -- 数据流图
©Copyright Xinjun Mao
面向数据流的软件设计方法
5
数据流的类型数据流的类型 变换流
– 信息通常以“外部世界”所具有的形式进入系统,经过处理后,又以这种形式离开系统
输入流
输出流
变换流
时间
外部表示
内部表示
信息
订票员
订票员
预定机票
准备机票
记帐
订票单
航班目录
航班号
航班
费用
帐单
机票
记帐数据库
帐目
©Copyright Xinjun Mao
面向数据流的软件设计方法
6
事务处理中心
动作路径
事务
事务型的数据流图事务型的数据流图 数据沿输入通道到达一个转换,该转换根据输入流类型和特征在若干动作序列中选择一条来执行– 输入数据(事务)– 具有一个转换 ( 事务中心 )– 一组动作执行路径
©Copyright Xinjun Mao
面向数据流的软件设计方法
7
数据流图类型的特点数据流图类型的特点 实际上所有的数据流图都是变换流,事务流是变换流的一种特殊形式
为什么要将事务型的数据流图独立出来考虑? 大多数系统的数据流途中,事务流和变换流往往交织在一起
©Copyright Xinjun Mao
面向数据流的软件设计方法
8
a
b
c
d e q
r s
p
事务处理中心
混合型数据流图混合型数据流图
©Copyright Xinjun Mao
面向数据流的软件设计方法
9
面向数据流的软件设计过程面向数据流的软件设计过程 面向数据流的设计方法的主要过程
– 确定数据流的类型:变换流还是事务流– 划定流界– 将数据流图转换为软件结构– 通过设计复审和启发式策略精化所得到软件结构
©Copyright Xinjun Mao
面向数据流的软件设计方法
10
流类型
确定事务中心和动作路径
映射为事务结构
确定输入和输出流界
映射为变换结构
利用启发式策略精化设计
描述接口和数据设计
复审
详细设计
精化数据流图
事务流 变换流
变换分析法
事务分析法
有问题
©Copyright Xinjun Mao
面向数据流的软件设计方法
11
本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
12
面向数据流的软件设计方法
变换型数据流图
软件总体结构
变换分析方法变换分析方法 基本思想
– 通过一系列的设计步骤,将变换型的数据流图映射为软件结构
– 输入: SRS( 数据流图、数据字典、小说明 )– 输出:软件总体结构
©Copyright Xinjun Mao
面向数据流的软件设计方法
13
步骤步骤 1. 1. 复审基本系统模型复审基本系统模型 什么是基本系统模型
– 基本系统模型即 SRS 中的顶级数据流图 为什么需要对基本系统模型进行复审
– 对系统规格说明书和 SRS 进行评估,以确保系统的输入和输出数据符合实际
©Copyright Xinjun Mao
面向数据流的软件设计方法
14
步骤步骤 2. 2. 复审和精化数据流图复审和精化数据流图 为什么需要复审和精化数据流图
– 确保 DFD 给出目标系统正确的逻辑模型– 以获得足够详细的 DFD– 确保 DFD 中每个转换代表一个规模适中、相对独立的子功能
©Copyright Xinjun Mao
面向数据流的软件设计方法
15
步骤步骤 3. 3. 确定数据流图的类型确定数据流图的类型 信息流都可用变换流表示,但是如果有明显的事务流特征,则还应采用事务流的映射方法
设计人员负责判定在数据流图中占主导地位的信息流是变换流还是事务流
©Copyright Xinjun Mao
面向数据流的软件设计方法
16
划分因人而异,在一般情况下有点出入对整个目标软件系统的影响不是很大
步骤步骤 4. 4. 划分输入流、输出流边界划分输入流、输出流边界 输入流处理部分
变换中心 输出流处理部分
输入流
输出流
变换流
时间
外部表示
内部表示
信息
©Copyright Xinjun Mao
面向数据流的软件设计方法
17
I
D
A
C
E
F
G
H
B
J
输出流 输入流 变换流
划分流界例子划分流界例子
©Copyright Xinjun Mao
面向数据流的软件设计方法
18
步骤步骤 5. 5. 执行一级分解执行一级分解 任务 : 导出三个层次结构的软件结构
– 底层模块:用于输入、输出和计算等基本功能– 中间层模块:协调、控制底层模块的工作– 高层模块:用于协调和控制所有的从属模块
原则– 在确保完成系统功能并保持低耦合度、高内聚度的情况下尽可能的减少模块数目
一级分解的结果可以用层次图、结构图等来表示
©Copyright Xinjun Mao
面向数据流的软件设计方法
19
主控模块
输入流控制模块 变换流控制模块 输出流控制模块
高层
中间层
底层
一级分解例子 一级分解例子
©Copyright Xinjun Mao
面向数据流的软件设计方法
20
步骤步骤 6. 6. 执行二级分解执行二级分解 任务
– 把 DFD 中每个转换映射为软件结构中的模块 方法
– 从变换中心边界开始沿输入、输出通道向外移动,把输入、输出通道中的每个转换映射为软件结构中的 一个模块
– 沿着输入流到输出流的方向移动,将每个转换映射为 相应的模块
有必要为每一模块写简要的处理说明,包括:进出模块的信息,模块处理功能的陈述,有关的限制和约束
I
D
A
C
E
F
G
H
B
J
主控模块
输入流控制模块 变换流控制模块 输出流控制模块
输出流 输入流 变换流
B D
A C
E
F G
H
I
J
©Copyright Xinjun Mao
面向数据流的软件设计方法
22
步骤步骤 7. 7. 精化软件结构改良软件质量精化软件结构改良软件质量 以“模块化”的思想,对软件结构中的模块进行拆并,以追求高内聚、低耦合、易实现、易测试、易维护的软件结构
I
D
A
C
E
F
G
H
B
J
主控模块
输入流控制模块 变换流控制模块 输出流控制模块
输出流 输入流 变换流
B D
A C
E
F G
H
I
J
I
D
A
C
E
F
G
H
B
J
主控模块
输入流控制模块 变换流控制模块
输出流 输入流 变换流
B D
A C
E
F G
H
I
J
©Copyright Xinjun Mao
面向数据流的软件设计方法
25
本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
26
事务分析方法事务分析方法当数据流具有明显的事务特征时,应该采用事务流的分析方法
基本步骤– 步骤 1. 复审基本系统模型– 步骤 2. 复审和精化数据流图– 步骤 3. 确定数据流图的类型:变换流还是事务流
©Copyright Xinjun Mao
面向数据流的软件设计方法
27
步骤步骤 4.4. 识别事务流各个组成部分识别事务流各个组成部分 把整个事务型 DFD 划分为以下三个部分
– 接受路径部分:接受事务的输入– 事务处理中心– 动作路径部分
判定在每一条动作路径上数据流的特征:变换流或者事务流
©Copyright Xinjun Mao
面向数据流的软件设计方法
28
A
B
C
D E Q R S
P
事务处理中心
接受路径部分
动作路径部分
事务型事务型 DFDDFD 划分例子划分例子
©Copyright Xinjun Mao
面向数据流的软件设计方法
29
A
B
C
D E Q
R
P
总控模块
输入控制模块 C
C1 Cn
一条动作路径
事务处理中心
散转
步骤步骤 5.5. 把事务型把事务型 DFDDFD 映射为软件结映射为软件结构构
©Copyright Xinjun Mao
面向数据流的软件设计方法
30
A
B
C
D E Q
R
P
总控模块
B
Q
C
C1
P A
R
一条动作路径
事务处理中心
输入控制
步骤步骤 6.6. 分解精化事务结构以及每个分解精化事务结构以及每个动作路径动作路径
©Copyright Xinjun Mao
面向数据流的软件设计方法
31
步骤步骤 7. 7. 精化初步软件结构精化初步软件结构
A
B
C
D E Q
R
P
总控模块
B
Q
C
C1
P A
R
一条动作路径
事务处理中心
输入控制
©Copyright Xinjun Mao
面向数据流的软件设计方法
32
A
B
C
D E Q
R
P
总控模块
B
Q
C
C1
P A
R
一条动作路径
事务处理中心
©Copyright Xinjun Mao
面向数据流的软件设计方法
33
本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
34
启发式设计策略启发式设计策略改造软件结构,降低耦合度,提高内聚度
– 如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性
– 合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度
©Copyright Xinjun Mao
面向数据流的软件设计方法
35
……
应避免的结构 期望结构
减少扇出,追求高扇入减少扇出,追求高扇入 一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去
©Copyright Xinjun Mao
面向数据流的软件设计方法
36
A
A
B C D
E F
A
A
C D
F E
B
受 E中判定影响
使任一模块的作用域在其控制域内使任一模块的作用域在其控制域内 作用域是指受模块内部判定影响的所有模块 控制域是指其所有的下属模块
©Copyright Xinjun Mao
面向数据流的软件设计方法
37
其他启发式设计策略其他启发式设计策略降低模块接口复杂度和冗余度,提高协调性
– 模块接口应尽可能简单并与模块功能相一致如:– Sort(Data; Number) ----Sort(Data)
模块功能可预测,避免对模块施加过多限制– 模块的功能可预测是指输入恒定,则输出恒定
追求单入口、单出口的模块 为满足设计和可移植性要求,把某些软件用包 封装起来
©Copyright Xinjun Mao
面向数据流的软件设计方法
38
本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
39
设计优化原则设计优化原则 在先不考虑时间复杂度的情况下设计并精化软件结构
借用 CASE 工具模拟分析运行性能,定位低效率的部分
详细设计时对耗时的模块进行仔细的推敲,以减少模块的运行开销
用高级语言编写 对大量占用 CPU资源的模块必要时用低级语言重新进行编码,以提高效率
©Copyright Xinjun Mao
面向数据流的软件设计方法
40
本讲小结本讲小结1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则
©Copyright Xinjun Mao
面向数据流的软件设计方法
41
思考题思考题你觉得在进行软件设计时,除了上述启发式设计策略和优化原则之外,还应考虑那些问题?
©Copyright Xinjun Mao
面向数据流的软件设计方法
42
Q & AQ & AQ & AQ & A
An Introduction to Software EngineeringAn Introduction to Software Engineering
Practice, Practice, and Practice