第 6 讲 面向数据流的软件设计方法

42
6 6 第第第第第第第第第第第第 第第第第第第第第第第第第 毛毛毛 毛毛 [email protected] 毛毛毛毛毛毛毛毛毛 602 毛毛毛 0731-(45)73649 毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛 毛毛毛毛毛毛毛毛毛毛毛毛

Upload: fulton-carr

Post on 01-Jan-2016

179 views

Category:

Documents


0 download

DESCRIPTION

软件工程导论 之. 第 6 讲 面向数据流的软件设计方法. 毛新军 教授 [email protected] 计算机科学与技术系 602 教研室 0731-(45)73649. 用工程化的方法来开发软件. 前言. 软件设计基础知识 软件的需求分析及其 需求规格说明书( SRS) 软件的 SRS -> 软件设计信息 面向数据流的设计方法:提供了方法和策略. 本讲内容. 基本概念和软件设计过程 变换分析方法 事务分析方法 启发式设计策略 设计优化原则. 面向数据流设计基本概念和过程. 前提 经过评审后的需求模型 -- 数据流图. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 6 讲  面向数据流的软件设计方法

第第 66 讲 讲 面向数据流的软件设计方面向数据流的软件设计方法法

毛新军 教授[email protected]

计算机科学与技术系 602 教研室 0731-(45)73649

软件工程导论 之

用工程化的方法来开发软件用工程化的方法来开发软件

Page 2: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

2

前言前言 软件设计基础知识 软件的需求分析及其需求规格说明书 (SRS) 软件的 SRS -> 软件设计信息 面向数据流的设计方法:提供了方法和策略

Page 3: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

3

本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 4: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

4

输入流

输出流

变换流

时间

外部表示

内部表示

信息

订票员

订票员

预定机票

准备机票

记帐

订票单

航班目录

航班号

航班

费用

帐单

机票

记帐数据库

帐目

面向数据流设计基本概念和过程面向数据流设计基本概念和过程 前提

– 经过评审后的需求模型 -- 数据流图

Page 5: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

5

数据流的类型数据流的类型 变换流

– 信息通常以“外部世界”所具有的形式进入系统,经过处理后,又以这种形式离开系统

输入流

输出流

变换流

时间

外部表示

内部表示

信息

订票员

订票员

预定机票

准备机票

记帐

订票单

航班目录

航班号

航班

费用

帐单

机票

记帐数据库

帐目

Page 6: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

6

事务处理中心

动作路径

事务

事务型的数据流图事务型的数据流图 数据沿输入通道到达一个转换,该转换根据输入流类型和特征在若干动作序列中选择一条来执行– 输入数据(事务)– 具有一个转换 ( 事务中心 )– 一组动作执行路径

Page 7: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

7

数据流图类型的特点数据流图类型的特点 实际上所有的数据流图都是变换流,事务流是变换流的一种特殊形式

为什么要将事务型的数据流图独立出来考虑? 大多数系统的数据流途中,事务流和变换流往往交织在一起

Page 8: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

8

a

b

c

d e q

r s

p

事务处理中心

混合型数据流图混合型数据流图

Page 9: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

9

面向数据流的软件设计过程面向数据流的软件设计过程 面向数据流的设计方法的主要过程

– 确定数据流的类型:变换流还是事务流– 划定流界– 将数据流图转换为软件结构– 通过设计复审和启发式策略精化所得到软件结构

Page 10: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

10

流类型

确定事务中心和动作路径

映射为事务结构

确定输入和输出流界

映射为变换结构

利用启发式策略精化设计

描述接口和数据设计

复审

详细设计

精化数据流图

事务流 变换流

变换分析法

事务分析法

有问题

Page 11: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

11

本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 12: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

12

面向数据流的软件设计方法

变换型数据流图

软件总体结构

变换分析方法变换分析方法 基本思想

– 通过一系列的设计步骤,将变换型的数据流图映射为软件结构

– 输入: SRS( 数据流图、数据字典、小说明 )– 输出:软件总体结构

Page 13: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

13

步骤步骤 1. 1. 复审基本系统模型复审基本系统模型 什么是基本系统模型

– 基本系统模型即 SRS 中的顶级数据流图 为什么需要对基本系统模型进行复审

– 对系统规格说明书和 SRS 进行评估,以确保系统的输入和输出数据符合实际

Page 14: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

14

步骤步骤 2. 2. 复审和精化数据流图复审和精化数据流图 为什么需要复审和精化数据流图

– 确保 DFD 给出目标系统正确的逻辑模型– 以获得足够详细的 DFD– 确保 DFD 中每个转换代表一个规模适中、相对独立的子功能

Page 15: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

15

步骤步骤 3. 3. 确定数据流图的类型确定数据流图的类型 信息流都可用变换流表示,但是如果有明显的事务流特征,则还应采用事务流的映射方法

设计人员负责判定在数据流图中占主导地位的信息流是变换流还是事务流

Page 16: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

16

划分因人而异,在一般情况下有点出入对整个目标软件系统的影响不是很大

步骤步骤 4. 4. 划分输入流、输出流边界划分输入流、输出流边界 输入流处理部分

变换中心 输出流处理部分

输入流

输出流

变换流

时间

外部表示

内部表示

信息

Page 17: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

17

I

D

A

C

E

F

G

H

B

J

输出流 输入流 变换流

划分流界例子划分流界例子

Page 18: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

18

步骤步骤 5. 5. 执行一级分解执行一级分解 任务 : 导出三个层次结构的软件结构

– 底层模块:用于输入、输出和计算等基本功能– 中间层模块:协调、控制底层模块的工作– 高层模块:用于协调和控制所有的从属模块

原则– 在确保完成系统功能并保持低耦合度、高内聚度的情况下尽可能的减少模块数目

一级分解的结果可以用层次图、结构图等来表示

Page 19: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

19

主控模块

输入流控制模块 变换流控制模块 输出流控制模块

高层

中间层

底层

一级分解例子 一级分解例子

Page 20: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

20

步骤步骤 6. 6. 执行二级分解执行二级分解 任务

– 把 DFD 中每个转换映射为软件结构中的模块 方法

– 从变换中心边界开始沿输入、输出通道向外移动,把输入、输出通道中的每个转换映射为软件结构中的 一个模块

– 沿着输入流到输出流的方向移动,将每个转换映射为 相应的模块

有必要为每一模块写简要的处理说明,包括:进出模块的信息,模块处理功能的陈述,有关的限制和约束

Page 21: 第 6 讲  面向数据流的软件设计方法

I

D

A

C

E

F

G

H

B

J

主控模块

输入流控制模块 变换流控制模块 输出流控制模块

输出流 输入流 变换流

B D

A C

E

F G

H

I

J

Page 22: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

22

步骤步骤 7. 7. 精化软件结构改良软件质量精化软件结构改良软件质量 以“模块化”的思想,对软件结构中的模块进行拆并,以追求高内聚、低耦合、易实现、易测试、易维护的软件结构

Page 23: 第 6 讲  面向数据流的软件设计方法

I

D

A

C

E

F

G

H

B

J

主控模块

输入流控制模块 变换流控制模块 输出流控制模块

输出流 输入流 变换流

B D

A C

E

F G

H

I

J

Page 24: 第 6 讲  面向数据流的软件设计方法

I

D

A

C

E

F

G

H

B

J

主控模块

输入流控制模块 变换流控制模块

输出流 输入流 变换流

B D

A C

E

F G

H

I

J

Page 25: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

25

本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 26: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

26

事务分析方法事务分析方法当数据流具有明显的事务特征时,应该采用事务流的分析方法

基本步骤– 步骤 1. 复审基本系统模型– 步骤 2. 复审和精化数据流图– 步骤 3. 确定数据流图的类型:变换流还是事务流

Page 27: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

27

步骤步骤 4.4. 识别事务流各个组成部分识别事务流各个组成部分 把整个事务型 DFD 划分为以下三个部分

– 接受路径部分:接受事务的输入– 事务处理中心– 动作路径部分

判定在每一条动作路径上数据流的特征:变换流或者事务流

Page 28: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

28

A

B

C

D E Q R S

P

事务处理中心

接受路径部分

动作路径部分

事务型事务型 DFDDFD 划分例子划分例子

Page 29: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

29

A

B

C

D E Q

R

P

总控模块

输入控制模块 C

C1 Cn

一条动作路径

事务处理中心

散转

步骤步骤 5.5. 把事务型把事务型 DFDDFD 映射为软件结映射为软件结构构

Page 30: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

30

A

B

C

D E Q

R

P

总控模块

B

Q

C

C1

P A

R

一条动作路径

事务处理中心

输入控制

步骤步骤 6.6. 分解精化事务结构以及每个分解精化事务结构以及每个动作路径动作路径

Page 31: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

31

步骤步骤 7. 7. 精化初步软件结构精化初步软件结构

A

B

C

D E Q

R

P

总控模块

B

Q

C

C1

P A

R

一条动作路径

事务处理中心

输入控制

Page 32: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

32

A

B

C

D E Q

R

P

总控模块

B

Q

C

C1

P A

R

一条动作路径

事务处理中心

Page 33: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

33

本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 34: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

34

启发式设计策略启发式设计策略改造软件结构,降低耦合度,提高内聚度

– 如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性

– 合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度

Page 35: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

35

……

应避免的结构 期望结构

减少扇出,追求高扇入减少扇出,追求高扇入 一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去

Page 36: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

36

A

A

B C D

E F

A

A

C D

F E

B

受 E中判定影响

使任一模块的作用域在其控制域内使任一模块的作用域在其控制域内 作用域是指受模块内部判定影响的所有模块 控制域是指其所有的下属模块

Page 37: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

37

其他启发式设计策略其他启发式设计策略降低模块接口复杂度和冗余度,提高协调性

– 模块接口应尽可能简单并与模块功能相一致如:– Sort(Data; Number) ----Sort(Data)

模块功能可预测,避免对模块施加过多限制– 模块的功能可预测是指输入恒定,则输出恒定

追求单入口、单出口的模块 为满足设计和可移植性要求,把某些软件用包 封装起来

Page 38: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

38

本讲内容本讲内容1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 39: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

39

设计优化原则设计优化原则 在先不考虑时间复杂度的情况下设计并精化软件结构

借用 CASE 工具模拟分析运行性能,定位低效率的部分

详细设计时对耗时的模块进行仔细的推敲,以减少模块的运行开销

用高级语言编写 对大量占用 CPU资源的模块必要时用低级语言重新进行编码,以提高效率

Page 40: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

40

本讲小结本讲小结1. 基本概念和软件设计过程2. 变换分析方法3. 事务分析方法4. 启发式设计策略5. 设计优化原则

Page 41: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

41

思考题思考题你觉得在进行软件设计时,除了上述启发式设计策略和优化原则之外,还应考虑那些问题?

Page 42: 第 6 讲  面向数据流的软件设计方法

©Copyright Xinjun Mao

面向数据流的软件设计方法

42

Q & AQ & AQ & AQ & A

An Introduction to Software EngineeringAn Introduction to Software Engineering

Practice, Practice, and Practice