第 7 讲 软件设计方法

41
第 7 第 第第第第第第

description

第 7 讲 软件设计方法. 体系结构设计. 软件体系结构是软件系统中 最本质 的东西。 良好的体系结构必须是 普适、高效和稳定的 。 [BAS98] :软件的体系结构是系统的一个或多个结构,包含 软件构件 、构件对外可见的 性质 以及它们之间的 关系 。 体系结构是 一种表示 。 体系结构设计关注构件结构、构件的性质和交互的关系。. 体系结构风格 style. 体系结构风格包含: 一组构件 (components) (如,数据库、计算模块)完成系统所需的某种功能; 一组连接子 (connectors) ,能使构件间通信协调和合作; - PowerPoint PPT Presentation

Transcript of 第 7 讲 软件设计方法

Page 1: 第  7  讲 软件设计方法

第 7 讲 软件设计方法

Page 2: 第  7  讲 软件设计方法

体系结构设计• 软件体系结构是软件系统中最本质的东西。• 良好的体系结构必须是普适、高效和稳定的。• [BAS98] :软件的体系结构是系统的一个或

多个结构,包含软件构件、构件对外可见的性质以及它们之间的关系。

• 体系结构是一种表示。• 体系结构设计关注构件结构、构件的性质和

交互的关系。

Page 3: 第  7  讲 软件设计方法

体系结构风格 style

• 体系结构风格包含:– 一组构件 (components) (如,数据库、计算

模块)完成系统所需的某种功能;– 一组连接子 (connectors) ,能使构件间通信协

调和合作;– 约束 (constraints) ,定义构件如何被集成,形

成系统;– 语义模型 (semantic model) ,使得设计者通

过分析构件的已知性质而理解系统的整体性质。

Page 4: 第  7  讲 软件设计方法

体系结构风格分类• 数据为中心的体系结构

– 目标:实现数据的可集成性– 共享数据可以是数据仓库或是黑板。

客户端

客户端

客户端 客户端

客户端 客户端

共享数据

Page 5: 第  7  讲 软件设计方法

体系结构风格分类• 调用-返回体系结构

– 目标:系统的可更改性和可扩展性– 主程序-子程序体系结构

• 将一个程序分层子部分• 每个子节点都只由父节点控制• 如远程过程调用系统

– 面向对象或抽象数据类型系统

• 强调对数据的绑定和对数据操纵及访问方式的掌握• 实现可更改性

– 层次式

• 可更改• 可移植

System SoftwareSystem Software

MiddlewareMiddleware

Business-specific ComponentsBusiness-specific Components

Application SystemsApplication Systems

Page 6: 第  7  讲 软件设计方法

Web sites of Interest

• CMU Composable Systems Group– www.cs.cmu.edu/~Compose/

• CMU Architecture Based Languages and Environments Research Group– www.cs.cmu.edu/~able/

• The Acme ADL– www.cs.cmu.edu/~acme/

• Worldwide Institute of Software Architects– www.wwisa.org

Page 7: 第  7  讲 软件设计方法

Web Sites of Interest

• The WRIGHT Language– www.cs.cmu.edu/~able/wright/

• Meta-H For Real-Time Software Analysis– www.htc.honeywell.com/projects/dssa/

dssa_tools/dssa_tools_mh.html

• Rapide ADL– pavg.stanford.edu/rapide/

• C2 Project at UC Irvine– www.ics.uci.edu/pub/arch/

Page 8: 第  7  讲 软件设计方法

面向数据流的设计• 结构化开发方法结构化开发方法(( Structured Developing MethoStructured Developing Metho

dd)) 是现有的软件开发方法中最成熟,应用最广是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速、自然和方便。泛的方法,主要特点是快速、自然和方便。

• 结构化开发方法由结构化分析方法(结构化开发方法由结构化分析方法( SASA法)、法)、结构化设计方法(结构化设计方法( SDSD法)及结构化程序设计方法)及结构化程序设计方法(法( SPSP法)构成的。法)构成的。

• 结构化设计方法(结构化设计方法( SD SD 法 法 Structured DesignStructured Design ))是结构化开发方法的核心,与是结构化开发方法的核心,与 SASA 法,法, SDSD 法密切法密切联系,联系,主要完成软件系统的总体结构设计。主要完成软件系统的总体结构设计。

• 面向数据流的设计方法又称结构化设计。面向数据流的设计方法又称结构化设计。  

Page 9: 第  7  讲 软件设计方法

面向数据流的设计• 基本思想:将系统设计成由相对独立、单一功能

的模块组成的结构。 • 采用方法: DFD System Hierarchy

• 步骤:– 确定数据流类型;– 指明数据流的边界;– 将 DFD 映射为程序结构;– 根据元素的分解,定义控制的层次;– 使用设计测量和启发信息,对结构进行细化和求精;– 精化体系结构的描述。

Page 10: 第  7  讲 软件设计方法

结构图 (Structure chart)

AA

BB

a. 基本形式

AA

CCBB DD

b. 顺序

AA

BB CC

c. 选择

AA

BB

d. 重复

Page 11: 第  7  讲 软件设计方法

1 、 Data Flow 的分类⑴ 变换流 (Transform Flow) :

Internal representation

Information Transform flow

Outgoingflow

IncomingflowExternal representation

Time

事实上所有信息流都可归结为变换流

面向数据流的设计面向数据流的设计

Page 12: 第  7  讲 软件设计方法

变换流

输入 变换 输出

Page 13: 第  7  讲 软件设计方法

⑵ 事务流 (Transaction Flow)

… …

T

Transactionrequest …

Action paths

T = Call one of the several subroutines depending on the type of the incoming transaction request.当信息流具有明显的“发射中心”时,可归结为事务流。

面向数据流的设计面向数据流的设计

事务中心

Page 14: 第  7  讲 软件设计方法

变换流设计• 变换流设计是从变换流的 DFD 到程序结构图的转化。• 设计步骤:

– 找出变换中心及逻辑输入 / 出;• 变换中心-描述了系统的主要功能、特征,其特点是:输入 /

出数据流较多,变换中心可以不至一个。• 逻辑输入 / 出 - 是指输入 / 出变换中心的数据流。• 输入流 -是将物理输入转换为逻辑输入的数据流。• 输出流 - 是将逻辑输出转换为物理输出的数据流。

– 设计软件结构的顶层;• 为每个输入设计一个输入模块,为每个输出设计一个输出模块,

同时为变换中心设计一个处理模块。– 自顶向下,逐步细化,设计中下层模块。

• 即上层各个模块的从属模块,顺序一般是从设计输入模块的下层开始。

Page 15: 第  7  讲 软件设计方法

变换流设计3

2

1

4

5

6输入 变换中心 输出AA

BB

CCDD

EE

FF

GGHH

System 3

Get C

Get B

Get AMake A into

B

Make B into

C

Make C into D and E

Put E Put D

Make E into G

Put GMake D into

FPut F

Make G into

H

Put H

CC D

EE

D

B BC

A AB

E

G

G

GH

H

D

F

F须检查; 每个传递的数据是否必须? 完成模块功能所必须的数据是否都传递了? 传输的数据是否只与单一的功能有关?是否目的明确?

Page 16: 第  7  讲 软件设计方法

变换流设计

1

2.1X

3

2.2Z

2.3Y

AA

BB CC

DD

MM

NN PP

System 2

Make B into C

Get B Put C

XX YY ZZ

BB C

C

B

N

N P MP

C

M

Page 17: 第  7  讲 软件设计方法

变换流分析例:汽车数字仪表板的设计

功能:① 通过模 - 数转换实现传感器和微处理机接口;

② 在发光二极管面板上显示数据;

③ 指示每小时英里数 (mph) ,行驶的里程,每加仑油行驶的英里数 (mpg) 等等;

④ 指示加速或减速;

⑤ 如果车速超过 55mph , 则发出警告铃声。

面向数据流的设计面向数据流的设计

Page 18: 第  7  讲 软件设计方法

第一步: DFD 的分界,先分出 I 、 P 、 O 三块

燃料流 传感器信号

SPS

旋转信号

读旋转信号

收集和求平均

确定加 /减速

转换成转 /分 计算

里程

计算 mph, 超速值

产生加 /减速显示

计算燃料消耗

计算gph

读和校核

产生mpg显示

产生mph显示

发出铃声

产生里程显示

SPSSPS

箭头指示

燃烧流

上箭头

水平线

下箭头

rpm

rpm

gphmph

mpg

mph

超速值

英里

显示

铃声

mph 显示

mpg 显示

面向数据流的设计面向数据流的设计

Page 19: 第  7  讲 软件设计方法

一般问题的一级分解方法:

数字仪表板控制

数据转换控制

驱动仪表板接收传感器信号

M

PI O

面向数据流的设计面向数据流的设计

Page 20: 第  7  讲 软件设计方法

第二步:映射第二步:映射A

DC

B

M

I

C B

D

A

:每个处理直接对应一个下层模块。

P

:由边界向回溯,将每个遇到的处理器映成相应的层模块。

I

:由边界向外推,方法与 类似

O

I

面向数据流的设计面向数据流的设计

Page 21: 第  7  讲 软件设计方法

例:

数字仪表板控制

数据转换控制

驱动仪表板接收传感器信号

计算 gph

读燃料流

转换成 rpm

收集 sps

读旋转信号

确定加 /减速

计算mph

计算mpg

计算里程

加 /减速显示

显示mpg

显示mph

显示里程

发出铃声

发光二极管显示

面向数据流的设计面向数据流的设计

Page 22: 第  7  讲 软件设计方法

第三步:修改 —— 本着高内聚、低耦合的原则。第三步:修改 —— 本着高内聚、低耦合的原则。例:精化后的数字仪表板系统的软件结构。

注:每个模块应附一简要说明描述 ① 进出该模块的信息(接口描述); ② 模块内部的信息; ③ 过程陈述,包括主要判定点及任务等; ④ 对约束和特殊特点的简短讨论。

面向数据流的设计面向数据流的设计

Page 23: 第  7  讲 软件设计方法

事务流设计• 事务流设计是从事务流的 DFD 到程序结构的转换。• 设计步骤:

– 确定流界:• 先从 DFD 中找出事务流、事务处理中心和事务路径。事务

中心前是接收事务、事务中心后是事务路径。进行一级分析,设计顶层模块。

– 进行一级分析,设计上层模块:• 从 DFD 中导出具有接收和发送分支的软件结构。对事务中

心设计为“事务控制”、对事务流为“接收事务”、对事务路径为“发送事务”。

– 细化该事务结构和每条动作路径的结构。• 对于接收分支,采用变换流设计方法设计中下层;对于发送

分支,在发送模块下设计每条事务路径的结构。

Page 24: 第  7  讲 软件设计方法

M

II

I

S

A B C

… … …

I

II

S

BA C

… … …

事务流设计事务流设计

事务流

事务中心

事务处理

Page 25: 第  7  讲 软件设计方法

混合流设计• 一般采用以变换流为主,事务流为辅的方

法。• 基本步骤:

–利用变换设计,将 DFD划分为输入、变换和输出三大部分;

– 设计软件结构的上层模块,即主模块,及其下层输入模块、变换模块和输出模块;

– 根据输入、变换和输出 DFD 的不同特征设计它们的下层模块。

Page 26: 第  7  讲 软件设计方法

混合流设计

AAAA

BBBB

DDDD EEEE

FFFF

GGGG

JJJJ

KKKK

LLLL

TT11

TT22

TT33

AA

BB

BB11 BB22

BB33

CC11

CC22

CC33

DD

EE

FF

GG

HH

JJ

KK

LL

MM

System

Make D into K

Get D Put K

DD K

K

Page 27: 第  7  讲 软件设计方法

System

Make D into K

Get D Put K

DD K

K

KKKK Put L L

LLLL Put M M

DDDDGet C C EEEE FFFF GGGG JJJJ

Get B B Edit BB BB

Get A A AAAA TT11 TT22 TT33

OperateOperate 1 1 OperateOperate n n

DetailDetail 1 1DetailDetail mm

Page 28: 第  7  讲 软件设计方法

“变换”

“事物”

精化数据流图

流类型

区分事务中心和数据接收通路

区分输入和输出分支

映射成事务结构 映射成变换结构

用启发式设计规则精化软件结构导出接口描述和全程数据结构

复 查

详细设计

变换分析事务分析

优化的前题是:“ Get it to work, then make it fast.”

面向数据流的设计过程面向数据流的设计过程

Page 29: 第  7  讲 软件设计方法

精化体系结构设计• 为每个模块开发处理说明;• 为每个模块提供接口描述;• 定义局部和全局数据结构;• 给出所有的设计限制或约束;• 进行设计评审;• 如需要,进行结构设计优化。

Page 30: 第  7  讲 软件设计方法

SD 方法的优点• SD 方法是从以下 5 个方面来获得质量较好的软件结

构: – 根据描述用户需求的数据流图导出了实现用户需求的结构

图。– 为了控制大型软件系统复杂性,运用了下面两个手段:

• 将系统分解成许多个黑盒。• 将黑盒组织成适合于用计算机实现的一个层次结构。

– 用内聚和耦合作为评价软件结构质量的标准。– 给出一组设计技巧,如扇入和扇出、模块大小的掌握,作

用范围和控制范围等。– 用结构图直观地描述软件结构,因此易于理解,并直接可

以用于评价、分析和复查等。

Page 31: 第  7  讲 软件设计方法

SD 方法的缺点• SD 方法的不足:

– 软件系统的概要设计应该包括两个方面:数据结构的设计和程序结构的设计,两者是密切相关的,但遗憾的是 SD 方法只考虑后者而不考虑前者,因此在使用 SD 方法时,一般还需参考一些有关数据库、文件结构的设计方法。

–“高内聚、低耦合”的原则虽已被广为接受,但这两个概念尚无严格的定义,更无健全的理论基础,只能用些例子来解释其含义,因而对实际系统的软件结构还难以作客观的质量评价,这是 SD 方法的一个缺陷。

Page 32: 第  7  讲 软件设计方法

面向数据结构的设计• 结构化开发方法是一种面向数据流、数据封闭性的开发方法,来源于程序的模块化和功能分解。面向数据结构的设计是将问题的数据结构转换为程序结构,着重于问题的数据结构,不强调模块定义。

• Jackson 系统开发方法是 JSP 的扩展,是一种面向数据结构的设计方法,其基本思想是先建立输入输出的数据结构,再将其转换为软件结构。这种方法适用于数据处理类问题,特别是企业管理类的软件系统。

Page 33: 第  7  讲 软件设计方法

面向数据结构的设计• 程序逻辑构造( logical construction of pro

grams, LCP )由 Warnier 开发,是建立在数据结构和过程结构之间关系上的方法,将 I/O 数据结构映射为软件详细过程表达。

• Wariner-Orr 方法是 LCP 的扩展,除了设计能力之外,还增加了分析能力。

Page 34: 第  7  讲 软件设计方法

Jackson System Development (JSD)

• 与 SD 的由 DFD导出结构设计不同, JSD是以数据结构 (data structure) 为基础设计每个模块的处理过程。

• 分析的重点是构造于系统相关的现实世界,并建立现实世界的信息域模型,目标是生成软件的过程性描述。

• JSD 的特点:获得简单清晰的设计方案,因为这样的方案易于理解、易于修改。

• JSD 的设计原则:使程序结构同数据结构相对应。

Page 35: 第  7  讲 软件设计方法

A

B C

B

C

A =

A

Bo Co

S

A = S

CB A = B

A

B*

I

11 、、 Jackson Diagram:Jackson Diagram:

注意:

层次方框图 H 中的方框表示模块,而 JD 中的方框代表几个语句构成的简单操作;

H 表现调用关系,而 JD 表现组成关系。

Jackson System Development(JSD)Jackson System Development(JSD)

Page 36: 第  7  讲 软件设计方法

例:一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是:每扫描一行输入字符串之后,换行打印出这个字符串中的空格数,最后打印出文件中空格的总个数。

22 、、 JacksonJackson 方法:方法:

Jackson System Development(JSD)Jackson System Development(JSD)

Page 37: 第  7  讲 软件设计方法

第 1步:用 Jackson 图描述 I\O 的数据结构,包括顺序、选择和重复

正文文件

I

字符串 *

字符 *

空格 O 非空格 O

I

S

输入

输出表格

表格体

串信息 *

字符串 空格数

I

输出

空格总数

第 2步:在两个图中指出有直接因果关系 (causality) 、可以同时处理的单元(重复的次序,次数均相同)

Jackson System Jackson System Development(JSD)Development(JSD)

Page 38: 第  7  讲 软件设计方法

JSD

正文文件

I

字符串 *

字符 *

空格 O 非空格 O

I

S

输入

输出表格

表格体

串信息 *

字符串 空格数

I

输出

空格总数

?

? 经过程序处理由正文文件得到输出表格。

每处理输入中一个字符串后就得到输出中一个串信息,二者重复次序和次数均相同。

字符不与多字符组成的字符串对应。

单个空格不能决定空格数。

Page 39: 第  7  讲 软件设计方法

• 用下述三条规则从描述数据结构的 Jackson 图导出描述程序结构的 Jackson 图:

• 第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框(注意,若这对数据单元在输入数据结构和输出数据结构中所处的层次不同,则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应);

• 第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框;

• 第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框。

第 3 步: Data structure Program structure

Page 40: 第  7  讲 软件设计方法

正文文件

I

字符串 *

字符 *

空格 O 非空格 O

I

S

输入输出表格

表格体

串信息 *

字符串 空格数

I

输出

空格总数

统计空格

处理字符串 *

I

程序体 印总数

印字符串 印空格数分析字符 *

分析字符 *

I

分析字符串

处理空格 o 处理非空格o

S注:顺序执行的处理中不允许混有重复执行或选择执行的处理。

第 3 步: Data structure Program structure把有对应关系的单元合为一个处理框,画在相应的层次中

(不同层以低层为准)

Page 41: 第  7  讲 软件设计方法

• 第 4步:列出所有操作条件,并分配到上幅程序结构图中