47
陈陈陈 Software Engineering, 8th edition. Chapter 19 Slide 1 陈 19 陈 陈陈陈陈陈陈陈陈陈

第 19 章 基于组件的软件工程

  • Upload
    brigit

  • View
    252

  • Download
    0

Embed Size (px)

DESCRIPTION

第 19 章 基于组件的软件工程. 目标. 阐述基于组件的软件工程涉及开发基于组件模型的标准化组件以及将其组成应用系统; 描述什么是组件和组件模型; 介绍 CBSE 过程的主要活动; 讨论组件合成的方法以及出现的问题。. 内容. 组件和组件模型 CBSE 过程 组件合成. 基于组件的开发. 基于组件的软件工程 (CBSE) 是软件系统开发的基于复用的方法。 它的产生是由于设计者们在使用面向对象的开发过程中所受到的挫折,这种挫折来自于面向对象开发不能支持有效的复用。单个对象类太细节且太特殊。 组件比对象类更抽象,可以被认为是独立服务的提供者。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 1

第 19 章 基于组件的软件工程

Page 2: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 2

目标

阐述基于组件的软件工程涉及开发基于组件模型的标准化组件以及将其组成应用系统;

描述什么是组件和组件模型; 介绍 CBSE 过程的主要活动; 讨论组件合成的方法以及出现的问题。

Page 3: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 3

内容

组件和组件模型 CBSE 过程 组件合成

Page 4: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 4

基于组件的开发

基于组件的软件工程 (CBSE) 是软件系统开发的基于复用的方法。

它的产生是由于设计者们在使用面向对象的开发过程中所受到的挫折,这种挫折来自于面向对象开发不能支持有效的复用。单个对象类太细节且太特殊。

组件比对象类更抽象,可以被认为是独立服务的提供者。

Page 5: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 5

CBSE 要素

独立组件 由它们的接口完全定义。 组件标准 使组件集成变得更为容易。 中间件 为组件集成提供软件支持。 开发过程 适应于软件复用。

Page 6: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 6

CBSE 及设计原则

除了可以复用的好处外, CBSE 还基于了一套完整的软件工程设计原则:• 组件式独立的,因此它们不会影响彼此的操作; • 组件细节的实现是隐藏的;• 组件通过良好定义的接口进行交互;• 组件平台是共享的,减少了开发成本。

Page 7: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 7

CBSE 的问题

组件的可信度 ——用户在没有源代码的情况下,如何能知道组件知否可靠呢?

组件的证明—— 谁来证明这些组件的质量呢? 总体特性预测 ——怎样能预测组件合成的新

出现的属性呢? 需求权衡——在一个组件和另一个组件的特征

之间,我们该怎样进行权衡分析呢?

Page 8: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 8

组件

组件提供了一种服务,不必考虑组件正在哪儿执行和它的编程语言。• 组件是一个独立可执行的实体,它可以由一个或

多个可执行的对象组成;• 组件所提供的服务可以通过其接口得到,而且所

有的交互都是通过接口实现的。

Page 9: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 9

组件的定义

Councill 和 Heinmann 的定义 :• 组件是一种软件元素,与某个组件模型要求相一

致,按照组成标准无需修改即可独立进行部署和组合。

Szyperski 的定义 :• 组件具有合同定义的接口和显式的上下文依赖,

是可独立进行部署的并服从于第三方的组成的软件。

Page 10: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 10

组件作为服务的提供者

组件是独立可执行的实体。在与系统其他组件一起使用之前,无需编译组件。

组件所提供的服务可以通过其接口得到,而且所有的交互都是通过接口实现的。

Page 11: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 11

组件特性 1

标准化 组件标准化意味着使用在 CBSE过程中的组件必须符合某种标准化的组件模型。此模型会定义组件接口、组件元数据、文档管理、组成以及部署

独立性 组件应该是独立的——它应该可以在无其他特殊组件的情况下进行组合和部署。如果在某些情况下组件需要

“ ”外部提供的服务,应该在 需要 接口描述中显式地声明

可组合性 对于可组合是组件,所有外部交互必须通过公开定义的接口进行。另外,它还必须提供对自身信息的外部访问,例如它的方法和属性

Page 12: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 12

组件特性 2

可部署性 为使之可部署,组件需要是自包含的,且必须能在实现其组件模型的组件运行平台上作为一个独立实体运行。因而意味着组件总是二进制子那个是的且无需在部署前编译

文档化 组件必须是完全文档化的,这样所有用户能确定组件是否满足他们的需要。所有组件接口的语法甚至是语义都需要定义

Page 13: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 13

组件接口

提供接口• 定义了组件提供给其他组件的服务。

需要接口• 指定系统其他组件必须提供哪些服务。如果这些

服务不能实现,组件将无法工作。

Page 14: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 14

组件接口

Provides interfaceRequires interface

ComponentDefines the servicesfrom the component’senvironment that ituses

Defines the servicesthat are providedby the componentto other components

Page 15: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 15

数据采集组件的模型

Provides interfaceRequires interface

Data collector

addSensorremoveSensorstartSensor

stopSensor

testSensor

listAllreport

initialise

sensorManagement

sensorData

Page 16: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 16

组件和对象

组件是可部署的实体 组件不定义类型 组件实现是不透明的 组件是独立于语言的 组建是标准化的

Page 17: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 17

组件模型

组件模型定义了组件实现、文档书写及部署的标准。

组件模型的例子:• EJB 模型 (Enterprise Java Beans)• COM+ 模型 (.NET 模型 )• Corba 组件模型

组件模型规定应如何定义组件接口及在一个接口定义中应该包含的元素,如操作名,参数及异常等。

Page 18: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 18

组件模型的基本要素

Component model

InterfacesUsage

informationDeployment

and use

Interfacedefinition

Specificinterfaces

Composition

Namingconvention

Meta-dataaccess

Customisation

Packaging

Documentation

Evolutionsupport

Page 19: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 19

中间件支持

组件模型是提供支持组件执行的中间件的基础。 组件模型实现提供的服务:

• 平台服务 允许按照模型写入组件,进行相互通信;

• 水平服务 应用无关的服务可以被很多不同的组件使用

为利用组件模型基础设施所提供的服务,将组件部署在预先定义的标准的容器中。 容器是一组接口,通过这些接口来访问支持服务的实现。

Page 20: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 20

由组件模型提供的服务

Platform services

AddressingInterfacedefinition

Componentcommunications

Exceptionmanagement

Horizontal services

Security

Transactionmanagement

Concurrency

Componentmanagement

Persistence

Resourcemanagement

Page 21: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 21

面向复用的组件开发

组件是为某个特定的应用而发展起来的,通常就要将其一般化,使它们可以被复用。

如果组件与一个稳定的领域抽象(业务对象)关联起来,它就更可能被复用。

例如,在一个医院管理系统中,稳定的领域抽象就与主要目标——病人、治疗和护士等关联起来。

Page 22: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 22

可复用组件的开发 如果组件是对普遍使用的业务对象或是一组相关对象的实现,

它就可能被复用。 组件的可复用性

• 应该反映稳定的应用领域抽象;• 应该隐藏状态显示;• 应该尽可能的独立;• 应该通过组件接口提供异常处理。

组件的可复用性与可重用性之间需要折衷:• 接口越通用,可复用性越高,但是,接口也越复杂,因而降低了组件的可理解性。

Page 23: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 23

为组件的复用性所做的改变

去除特定应用的方法; 改变组件的名字使它们更通用; 增加方法以拓宽应用领域; 做出一致的异常处理; 为组件的适应性增加一个配置接口; 集成所需要的组件来减少组件之间的依赖性。

Page 24: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 24

遗留系统组件

现存的遗留系统,实现了一些有用的业务功能它可以被重新包装成组件,以供复用。

为使这些组件可复用,我们必须给它一个接口,由此定义组件的接口,然后再访问遗留系统。

封装的开发成本通常要远低于重新实现遗留系统的成本。

Page 25: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 25

CBSE 过程

当重用组件的时候,对理想的需求和可用的组件实际能提供的服务之间做出权衡,是很有必要的。

该过程包括:• 开发概要性的需求;• 组件搜索,然后对其作修改• 按照可利用的功能修改需求;• 再一次组件搜索,进一步的变更需求。

Page 26: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 26

CBSE 过程

Identify candidatecomponents

Outlinesystem

requirements

Modifyrequirements

according to discoveredcomponents

Identify candidatecomponents

Architecturaldesign

Composecomponents tocreate system

Page 27: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 27

组件识别过程

Componentselection

Componentsearch

Componentvalidation

Page 28: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 28

组件识别活动

信任。你需要能够信任一个组件的提供商。最好的情况是,一个不够信任的组件不会像广告宣传的那样运行,最坏的情形是,它会破坏系统的安全性。

需求。 不同的组件组会满足不同的需求。 验证。

• 组件说明可能不会详细到让你开发出完备的测试用例集。

• 组件可能会有比你想要的多得多的功能。你怎样能测试出它不会干扰你对组件的应用呢?

Page 29: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 29

Ariane 运载火箭失败

1996年, 在 Ariane 5 火箭首次发射中,惯性导航软件在升空 37秒后失败,火箭因而失去控制。

缺陷发生在一段 Ariane 5 所不需要的代码上,对所复用的软件的有效性验证测试是基于Ariane 5 的需求的。

在这个组件中的一些功能是 Ariane 5 所不需要的。

Page 30: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 30

组件合成

组件合成是指通过组件组装来创造新系统的过程。

组件合成包括组件之间的集成和与其他组件基础设施的集成。

对所有组件,你都必须写“胶水代码”来连接组件。

Page 31: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 31

组件合成的类型

顺序合成 这种情况的发生是指合成组件中,构成组件是按顺序执行的,即将各个组件的 提供接口组合在一起。

层次合成 发生在一个组件直接调用由另一个组件所提供的服务时。它对应于一个组件的提供接口与另一个组件的需要接口组合在一起的情形。

叠加合成 这种情况发生在两个或两个以上的组件接口合在一起来创建一个新组件的时候。

Page 32: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 32

组件合成的类型

(a)

A A

B B

A B

(b) (c)

Page 33: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 33

接口的不兼容

参数不兼容 接口每一边的操作有相同的名字,但参数类型与参数数目不同。

操作不兼容 提供接口和需要接口的操作名不同。

操作不完备 一个组件的提供接口是另一个组件的需要接口的一个子集,后者相反

Page 34: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 34

不兼容的组件

addressFinder

phoneDatabase (string command)string location(string pn)

string owner (string pn)

string propertyType (string pn)

mapper

mapDB (string command)displayMap (string postCode, scale)

printMap (string postCode, scale)

Page 35: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 35

适配器组件

对所有情况,都必须通过编写适配器组件来解决不兼容的问题,适配器组件使两个可复用组件的接口相一致。

适配器的准确形式依赖于合成的类型。 一个叫做 postCodeStripper 的适配器组件,

它从 addressFinder 组件得到位置数据并剥离出邮政编码,这一邮政编码转而作为 mapper组件的输入,从而实现了 addressFinder 组件和 mapper 组件的合成。

Page 36: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 36

通过适配器的合成

组件 postCodeStripper 是一个适配器,它促进了 addressFinder 组件和 mapper 组件的顺序合成。下面的代码说明实现它所需要的调用序列:

Page 37: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 37

数据采集器组件的适配器

Data collector

addSensorremoveSensorstartSensor

stopSensortestSensor

listAllreportinitialise

sensorManagement

sensorData

Adaptersensor

start

getdata

stop

Page 38: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 38

接口的语义

关于组件合成讨论假设你可以依赖组件文档来判断接口是否是语义兼容的。

考虑一下 PhotoLibrary 组件的一个接口:

public void addItem (Identifier pid ; Photograph p; CatalogEntry photodesc) ;public Photograph retrieve (Identifier pid) ;public CatalogEntry catEntry (Identifier pid) ;

Page 39: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 39

相片库组成

PhotoLibrary

adaptorImage

Manager

getImage

UserInterface

getCatalogEntry

addItem

retrieve

catEntry

Page 40: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 40

相片库文档

“此方法将相片加入相片库并为相片起一个名字和制作一个目录。” “若相片名字已与库中其他相片名重复会怎样?”“ 相片描述符在目录入口和相片本身都有吗?也就是说,如果删除相片,是否要删除目录信息?”

Page 41: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 41

对象约束语言( OCL)

对象约束语言 (OCL) 设计用来描述 UML 对象模型中的约束。

前置条件和后置条件是用 pre和 post 来指示的。

Page 42: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 42

Photo Library 接口的形式描述

Page 43: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 43

Photo library 描述

按照说明, OCL 与 Photo Library 组件的关联描述为:• 相片库中的相片不能有和待加入的相片有相同的标识。• 库必须是存在的——假定创建一个库就加入一个项在其中,

这样库的大小始终大于 0.• 库的大小增 1(因此只产生一个入口)。• 如果用同一个标识符去取相片,就可以得到新添加的那张

相片 ;• 如果再次用相同的标识符在目录中查找,就可以得到所生

成的目录入口。

Page 44: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 44

合成折衷

当通过合成组件来创建一个系统时,你会发现在功能性需求和非功能性需求之间,在尽可能快速移交软件和创建一个能随需求变更而进化的系统之间,都存在着潜在的冲突。

你必须做折衷的地方有:• 在移交系统功能性需求方面,哪种组件的合成方

式是最有效的?• 组件的哪种合成将允许适应未来的需求变更?• 合成系统将有哪些总体特性?

Page 45: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 45

数据采集和报告生成组件

(a) Datacollection

(b)

Datamanagement

Reportgenerator

Datacollection Data base

Report

Report

Page 46: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 46

要点

基于组件的软件工程基于复用的方法来定义、实现和组合松散耦合的独立组件,使之成为一个系统。

组件是一个软件单元,它的功能和可依赖性完全由一套公共接口定义。

组件模型定义了一组组件标准,包括接口标准、使用标准和部署标准。

在 CBSE 过程中,我们不得不将需求工程过程与系统设计交织在一起。

Page 47: 第 19 章  基于组件的软件工程

陈江平 Software Engineering, 8th edition. Chapter 19 Slide 47

要点

组件合成是将组件“捆”到一起来创建一个系统的过程。

当合成不是专为你的应用写的可复用组件时,通常要编写适配器以使不同组件接口互相兼容。

当选择合成方式时,必须考虑系统所需的功能、非功能性需求和当系统发生改变时,一个组件能被另一个组件代替的难易程度。