随笔 - 181, 文章 - 2, 评论 - 85, 引用 - 0
数据加载中……

6月9日-----今天计划有些变更

由于这周六IBM DB2认证考试,并且今天晚上公司项目组还要集体出去Happy一下,聚餐一顿,就当休息了。所以计划有些打乱,不过还好,前几天也弄出些文档来。那么今天下午大家就抓紧看DB2吧,晚上痛痛快快的玩一把。周六考完DB2就再全身心投入文档的编写讨论和下一步的计划制定中来。

posted @ 2006-06-09 00:56 wsdfsdf 阅读(140) | 评论 (0)编辑 收藏

6月7日-----我来谈谈IBM的ESB工具

今天看了一些ESB方面的资料,对其又有一些理解,下面说说:

ESB是一个总线,是SOA的核心,IBM对ESB的支持有2种产品可用。一个是WESB,它是基于WAS构建的一个平台,他支持的是将所有服务都"插"到ESB上,对其中的服务进行消息路由,消息格式转换等。其中一个关键的地方就是里面的Mediation Flow Components,它是Service 提供方和Service请求方的中间件。它所做的就是在两者之间建立一个Flow,对其中的消息做处理,有效地通过一定的逻辑连接两者。
第二个产品是WMB,或者叫AdvanceEBS,它是基于WMQ构建的。它除了能够实现WESB的功能外,还能够支持除了服务之外的东西,支持的协议也多。比如"插"在ESB上的可以是一个Application,甚至是word,和excel文档也能”插“。

其实选择哪种产品要根据实现系统的需求而定,现在依据我们的需求用到了ERP和CRM,就应该用WMB。

posted @ 2006-06-07 15:45 wsdfsdf 阅读(578) | 评论 (0)编辑 收藏

6月7日-----以服务为中心的企业整合SOI

IBM WebSphere的企业集成构架分六类:
1 业务逻辑服务
 1.1 整合已有应用 - 应用和信息访问服务
  1.1.1 可接入服务(On-Ramp Service)
  1.1.2 事件发现服务(Event Detect Service)
 1.2 整合新开发的应用 - 业务应用服务
  1.2.1 组件服务(Component Service)
  1.2.2 核心服务(Core Service)
  1.2.3 接口服务(Interface Service)
 1.3 整合客户和业务伙伴(B2C/B2B)-伙伴服务
  1.3.1 社区服务(Community Service)
  1.3.2 文档服务(Document Service)
  1.3.3 协议服务(Protocol Service)
2 控制服务
 2.1 数据整合-信息服务
  2.1.1 联邦服务(Federation Service)
  2.1.2 复制服务(Replication Service)
  2.1.3 转换服务(Transformation Service)
  2.1.4 搜索服务(Search Service)
 2.2 流程整合- 流程服务
  2.2.1 编排服务(Choreography Service)
  2.2.2 事务服务(Transaction Service)
  2.2.3 人工服务(Staff Service)
 2.3 用户访问整合 - 交互服务
  2.3.1 交付服务(Delivery Service)
  2.3.2 体验服务(Experience Service)
  2.3.3 资源服务(Resource Service)
3 连接服务
 企业服务总线ESB
4 业务创新和优化服务
 4.1 公共事件框架服务(Common Event Infrastructure Service)
 4.2 采集服务(Collection Service)
 4.3 监控服务(Monitoring Service):
5 开发服务
 5.1 建模服务(Model Service)
 5.2 设计服务(Design Service)
 5.3 实现服务(Implementation Serivice)
 5.4 测试服务
6 IT服务管理
 6.1 安全和目录服务(Security and Directory Service)
 6.2 系统管理和虚拟化服务(System Management and Virtualization Service)

posted @ 2006-06-07 00:23 wsdfsdf 阅读(179) | 评论 (0)编辑 收藏

6月7日-----用例建模指南

用例(Use Case)是一种描述系统需求的方法,使用用例的方法来描述系统需求的过程就是用例建模。用例方法最早是由Iva Jackboson博士提出的,后来被综合到UML规范之中,成为一种标准化的需求表述体系。用例的使用在RUP中被推崇备至,整个RUP流程都被称作是"用例驱动"(Use-Case Driven)的,各种类型的开发活动包括项目管理、分析设计、测试、实现等都是以系统用例为主要输入工件,用例模型奠定了整个系统软件开发的基础。

1. 什么是用例?

在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能,在这种表述方式中,系统功能被分解到各个系统功能模块中,我们通过描述细分的系统模块的功能来达到描述整个系统功能的目的。一个典型的软件需求规约可能具有以下形式:



采用这种方法来描述系统需求,非常容易混淆需求和设计的界限,这样的表述实际上已经包含了部分的设计在内。由此常常导致这样的迷惑:系统需求应该详细到何种程度?一个极端就是需求可以详细到概要设计,因为这样的需求表述既包含了外部需求也包含了内部设计。在有些公司的开发流程中,这种需求被称为"内部需求",而对应于用户的原始要求则被称之为"外部需求"。

功能分解方法的另一个缺点是这种方法分割了各项系统功能的应用环境,从各项功能项入手,你很难了解到这些功能项是如何相互关联来实现一个完成的系统服务的。所以在传统的SRS文档中,我们往往需要另外一些章节来描述系统的整体结构及各部分之间的相互关联,这些内容使得SRS需求更象是一个设计文档。

1.1 参与者和用例

从用户的角度来看,他们并不想了解系统的内部结构和设计,他们所关心的是系统所能提供的服务,也就是被开发出来的系统将是如何被使用的,这就用例方法的基本思想。用例模型主要由以下模型元素构成:

  • 参与者(Actor)
    参与者是指存在于被定义系统外部并与该系统发生交互的人或其他系统,他们代表的是系统的使用者或使用环境。
  • 用例(Use Case)
    用例用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生的一段对话。
  • 通讯关联(Communication Association)
    通讯关联用于表示参与者和用例之间的对应关系,它表示参与者使用了系统中的哪些服务(用例),或者说系统所提供的服务(用例)是被哪些参与者所使用的。

这大三种模型元素在UML中的表述如下图所示。



以银行自动提款机(ATM)为例,它的主要功能可以由下面的用例图来表示。ATM的主要使用者是银行客户,客户主要使用自动提款机来进行银行帐户的查询、提款和转帐交易。



通讯关联表示的是参与者和用例之间的关系,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者;如果你不想强调对话中的主动与被动关系,可以使用不带箭头的关联实线。在参与者和用例之间的信息流不是由通讯关联来表示的,该信息流是缺省存在的(用例本身描述的就是参与者和系统之间的对话),并且信息流向是双向的,它与通讯关联箭头所指的方向亳无关系。

1.2 用例的内容

用例图使我们对系统的功能有了一个整体的认知,我们可以知道有哪些参与者会与系统发生交互,每一个参与者需要系统为它提供什么样的服务。用例描述的是参与者与系统之间的对话,但是这个对话的细节并没有在用例图中表述出来,针对每一个用例我们可以用事件流来描述这一对话的细节内容。如在ATM系统中的"提款"用例可以用事件流表述如下:

提款-基本事件流

1. 用户插入信用卡

2. 输入密码

3. 输入提款金额

4. 提取现金

5. 退出系统,取回信用卡

但是这只描述了提款用例中最顺利的一种情况,作为一个实用的系统,我们还必须考虑可能发生的各种其他情况,如信用卡无效、输入密码错、用户帐号中的现金余额不够等,所有这些可能发生的各种情况(包括正常的和异常的)被称之为用例的场景(Scenario),场景也被称作是用例的实例(Instance)。在用例的各种场景中,最常见的场景是用基本流(Basic Flow)来描述的,其他的场景则是用备选流(Alternative Flow)来描述。对于ATM系统中的"提款"用例,我们可以得到如下一些备选流:

提款-备选事件流

备选流一:用户可以在基本流中的任何一步选择退出,转至基本流步骤5。

备选流二:在基本流步骤1中,用户插入无效信用卡,系统显示错误并退出信用卡,用例结束。

备选流三:在基本流步骤2中,用户输入错误密码,系统显示错误并提示用户重新输入密码,重新回到基本流步骤2;三次输入密码错误后,信用卡被系统没收,用例结束。

通过基本流与备选流的组合,就可以将用例所有可能发生的各种场景全部描述清楚。我们在描述用例的事件流的时候,就是要尽可能地将所有可能的场景都描述出来,以保证需求的完备性。

1.3 用例方法的优点

用例方法完全是站在用户的角度上(从系统的外部)来描述系统的功能的。在用例方法中,我们把被定义系统看作是一个黑箱,我们并不关心系统内部是如何完成它所提供的功能的。用例方法首先描述了被定义系统有哪些外部使用者(抽象成为Actor),这些使用者与被定义系统发生交互;针对每一参与者,用例方法又描述了系统为这些参与者提供了什么样的服务(抽象成为Use Case),或者说系统是如何被这些参与者使用的。所以从用例图中,我们可以得到对于被定义系统的一个总体印象。

与传统的功能分解方式相比,用例方法完全是从外部来定义系统的功能,它把需求与设计完全分离开来。在面向对象的分析设计方法中,用例模型主要用于表述系统的功能性需求,系统的设计主要由对象模型来记录表述。另外,用例定义了系统功能的使用环境与上下文,每一个用例描述的是一个完整的系统服务。用例方法比传统的SRS更易于被用户所理解,它可以作为开发人员和用户之间针对系统需求进行沟通的一个有效手段。

在RUP中,用例被作为整个软件开发流程的基础,很多类型的开发活动都把用例作为一个主要的输入工件(Artifact),如项目管理、分析设计、测试等。根据用例来对目标系统进行测试,可以根据用例中所描述的环境和上下文来完整地测试一个系统服务,可以根据用例的各个场景(Scenario)来设计测试用例,完全地测试用例的各种场景可以保证测试的完备性。





回页首


2. 建立用例模型

使用用例的方法来描述系统的功能需求的过程就是用例建模,用例模型主要包括以下两部分内容:

  • 用例图(Use Case Diagram)
    确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。
  • 用例规约(Use Case Specification)
    针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容。

在用例建模的过程中,我们建议的步聚是先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。

2.1 寻找参与者

所谓的参与者是指所有存在于系统外部并与系统进行交互的人或其他系统。通俗地讲,参与者就是我们所要定义系统的使用者。寻找参与者可以从以下问题入手:

  • 系统开发完成之后,有哪些人会使用这个系统?
  • 系统需要从哪些人或其他系统中获得数据?
  • 系统会为哪些人或其他系统提供数据?
  • 系统会与哪些其他系统相关联?
  • 系统是由谁来维护和管理的?

这些问题有助于我们抽象出系统的参与者。对于ATM机的例子,回答这些问题可以使我们找到更多的参与者:操作员负责维护和管理ATM机系统、ATM机也需要与后台服务器进行通讯以获得有关用户帐号的相关信息。



2.1.1 系统边界决定了参与者

参与者是由系统的边界所决定的,如果我们所要定义的系统边界仅限于ATM机本身,那么后台服务器就是一个外部的系统,可以抽象为一个参与者。



如果我们所要定义的系统边界扩大至整个银行系统,ATM机和后台服务器都是整个银行系统的一部分,这时候后台服务器就不再被抽象成为一个参与者。



值得注意的是,用例建模时不要将一些系统的组成结构作为参与者来进行抽象,如在ATM机系统中,打印机只是系统的一个组成部分,不应将它抽象成一个独立的参与者;在一个MIS管理系统中,数据库系统往往只作为系统的一个组成部分,一般不将其单独抽象成一个参与者。

2.1.2 特殊的参与者――系统时钟

有时候我们需要在系统内部定时地执行一些操作,如检测系统资源使用情况、定期地生成统计报表等等。从表面上看,这些操作并不是由外部的人或系统触发的,应该怎样用用例方法来表述这一类功能需求呢?对于这种情况,我们可以抽象出一个系统时钟或定时器参与者,利用该参与者来触发这一类定时操作。从逻辑上,这一参与者应该被理解成是系统外部的,由它来触发系统所提供的用例对话。



2.2 确定用例

找到参与者之后,我们就可以根据参与者来确定系统的用例,主要是看各参与者需要系统提供什么样的服务,或者说参与者是如何使用系统的。寻找用例可以从以下问题入手(针对每一个参与者):

  • 参与者为什么要使用该系统?
  • 参与者是否会在系统中创建、修改、删除、访问、存储数据?如果是的话,参与者又是如何来完成这些操作的?
  • 参与者是否会将外部的某些事件通知给该系统?
  • 系统是否会将内部的某些事件通知该参与者?

综合以上所述,ATM系统的用例图可表示如下,



在用例的抽取过程中,必须注意:用例必须是由某一个主角触发而产生的活动,即每个用例至少应该涉及一个主角。如果存在与主角不进行交互的用例,就可以考虑将其并入其他用例;或者是检查该用例相对应的参与者是否被遗漏,如果是,则补上该参与者。反之,每个参与者也必须至少涉及到一个用例,如果发现有不与任何用例相关联的参与者存在,就应该考虑该参与者是如何与系统发生对话的,或者由参与者确定一个新的用例,或者该参与者是一个多余的模型元素,应该将其删除。

可视化建模的主要目的之一就是要增强团队的沟通,用例模型必须是易于理解的。用例建模往往是一个团队开发的过程,系统分析员在建模过程中必须注意参与者和用例的名称应该符合一定的命名约定,这样整个用例模型才能够符合一定的风格。如参与者的名称一般都是名词,用例名称一般都是动宾词组等。

对于同一个系统,不同的人对于参与者和用例都可能有不同的抽象结果,因而得到不同的用例模型。我们需要在多个用例模型方案中选择一种"最佳"(或"较佳")的结果,一个好的用例模型应该能够容易被不同的涉众所理解,并且不同的涉众对于同一用例模型的理解应该是一致的。

2.3 描述用例规约

应该避免这样一种误解――认为由参与者和用例构成的用例图就是用例模型,用例图只是在总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有一个总体的认识。除此之外,我们还需要描述每一个有例的详细信息,这些信息包含在用例规约中,用例模型是由用例图和每一个用例的详细描述――用例规约所组成的。RUP中提供了用例规约的模板,每一个用例的用例规约都应该包含以下内容:

  • 简要说明 (Brief Description)
    简要介绍该用例的作用和目的。
  • 事件流 (Flow of Event)
    包括基本流和备选流,事件流应该表示出所有的场景。
  • 用例场景 (Use-Case Scenario)
    包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。
  • 特殊需求 (Special Requirement)
    描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等)。
  • 前置条件 (Pre-Condition)
    执行用例之前系统必须所处的状态。
  • 后置条件 (Post-Condition)
    用例执行完毕后系统可能处于的一组状态。

用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明。只要有助于表达的简洁明了,就可以在用例中任意粘贴用户界面和流程的图形化显示方式,或是其他图形。如活动图有助于描述复杂的决策流程,状态转移图有助于描述与状态相关的系统行为,序列图适合于描述基于时间顺序的消息传递。

2.3.1 基本流

基本流描述的是该用例最正常的一种场景,在基本流中系统执行一系列活动步骤来响应参与者提出的服务请求。我们建议用以下格式来描述基本流:

1) 每一个步骤都需要用数字编号以清楚地标明步骤的先后顺序。

2) 用一句简短的标题来概括每一步骤的主要内容,这样阅读者可以通过浏览标题来快速地了解用例的主要步骤。在用例建模的早期,我们也只需要描述到事件流步骤标题这一层,以免过早地陷入到用例描述的细节中去。

3) 当整个用例模型基本稳定之后,我们再针对每一步骤详细描述参与者和系统之间所发生的交互。建议采用双向(roundtrip)描述法来保证描述的完整性,即每一步骤都需要从正反两个方面来描述:(1)参与者向系统提交了什么信息;(2)对此系统有什么样的响应。具体例子请参见附录。

在描述参与者和系统之间的信息交换时,需指出来回传递的具体信息。例如,只表述参与者输入了客户信息就不够明确,最好明确地说参与者输入了客户姓名和地址。通常可以利用词汇表让用例的复杂性保持在可控范围内,可以在词汇表中定义客户信息等内容,使用例不至于陷入过多的细节。

2.3.2 备选流

备选流负责描述用例执行过程中异常的或偶尔发生的一些情况,备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。在描述备选流时,应该包括以下几个要素:

1) 起点:该备选流从事件流的哪一步开始;

2) 条件:在什么条件下会触发该备选流;

3) 动作:系统在该备选流下会采取哪些动作;

4) 恢复:该备选流结束之后,该用例应如何继续执行。

备选流的描述格式可以与基本流的格式一致,也需要编号并以标题概述其内容,编号前可以加以字母前缀A(Alternative)以示与基本流步骤相区别。

2.3.3 用例场景

用例在实际执行的时候会有很多的不同情况发生,称之为用例场景;也可以说场景是用例的实例,我们在描述用例的时候要覆盖所有的用例场景,否则就有可能导致需求的遗漏。在用例规约中,场景的描述可以由基本流和备选流的组合来表示。场景既可以帮助我们防止需求的遗漏,同时也可以对后续的开发工作起到很大的帮助:开发人员必须实现所有的场景、测试人员可以根据用例场景来设计测试用例。

2.3.4 特殊需求

特殊需求通常是非功能性需求,它为一个用例所专有,但不适合在用例的事件流文本中进行说明。特殊需求的例子包括法律或法规方面的需求、应用程序标准和所构建系统的质量属性(包括可用性、可靠性、性能或支持性需求等)。此外,其他一些设计约束,如操作系统及环境、兼容性需求等,也可以在此节中记录。

需要注意的是,这里记录的是专属于该用例的特殊需求;对于一些全局的非功能性需求和设计约束,它们并不是该用例所专有的,应把它们记录在《补充规约》中。

2.3.5 前置和后置条件

前置条件是执行用例之前必须存在的系统状态,后置条件是用例一执行完毕后系统可能处于的一组状态。

2.4 检查用例模型

用例模型完成之后,可以对用例模型进行检查,看看是否有遗漏或错误之处。主要可以从以下几个方面来进行检查:

  • 功能需求的完备性
    现有的用例模型是否完整地描述了系统功能,这也是我们判断用例建模工作是否结束的标志。如果发现还有系统功能没有被记录在现有的用例模型中,那么我们就需要抽象一些新的用例来记录这些需求,或是将他们归纳在一些现有的用例之中。
  • 模型是否易于理解
    用例模型最大的优点就在于它应该易于被不同的涉众所理解,因而用例建模最主要的指导原则就是它的可理解性。用例的粒度、个数以及模型元素之间的关系复杂程度都应该由该指导原则决定。
  • 是否存在不一致性
    系统的用例模型是由多个系统分析员协同完成的,模型本身也是由多个工件所组成的,所以我们要特别注意不同工件之前是否存在前后矛盾或冲突的地方,避免在模型内部产生不一致性。不一致性会直接影响到需求定义的准确性。
  • 避免二义性语义
    好的需求定义应该是无二义性的,即不同的人对于同一需求的理解应该是一致的。在用例规约的描述中,应该避免定义含义模糊的需求,即无二义性。




回页首


3. 系统需求

RUP中根据FURPS+模型将系统需求分为以下几类:

  • 功能(Functionality)
  • 可用性(Usability)
  • 可靠性(Reliability)
  • 性能(Performance)
  • 可支持性(Supportability)
  • 设计约束等

除了第一项功能性需求之外的其他需求都归之为非功能性需求。

3.1 需求工件集

用例模型主要用于描述系统的功能性需求,对于其他的非功能性需要用其他文档来记录。RUP中定义了如下的需求工件集合。

  • 用例模型:记录功能性需求
    • 用例图:描述参与者和用例之间的关系
    • 用例规约:描述每一个用例的细节信息
  • 补充规约:记录一些全局性的功能需求、非功能性需求和设计约束等
  • 词汇表:记录一些系统需求相关的术语

在实际应用中,除了这些工件之外,我们还可以根据实际需求灵活选用其他形式的文档来补充说明需求。并不是所有的系统需求都适保合用用例模型来描述的,如编译器,我们很难用用例方法来表述它所处理的语言的方法规则,在这种情况下,采用传统的BNF范式来表述更加合适一些。在电信软件行业中,很多电信标准都是采用SDL语言来描述的,我们也不必用UML来改写这些标准(UML对SDL存在着这样的兼容性),只需将SDL形式的电信标准作为需求工件之一,在其他工件中对其加以引用就可以了。总之,万万不可拘泥于用例建模的形式,应灵活运用各种方式的长处。

3.2 补充规约

补充规约记录那些在用例模型中不易表述的系统需求,主要包括以下内容。

  • 功能性
    功能性需求主要在用例模型中刻画,但是也有部分需求不适合在用例中表述。有些功能性需求是全局性的,适用于所有的用例,如出错处理、I18N支持等,我们不需要在所有的用例中描述这些功能性需求,只需要在补充规约中统一描述就可以了。
  • 可用性
    记录所有可用性相关的需求,如系统的使用者所需要的培训时间、是否应附合一些常见的可用性标准如Windows界面风格等。
  • 可靠性
    定义系统可靠性相关的各种指标,包括:
    • 可用性:指出可用时间百分比(xx.xx%),系统处于使用、维护、降级模式等操作的小时数;
    • 平均故障间隔时间(MTBF):通常表示为小时数,但也可表示为天数、月数或年数;
    • 平均修复时间(MTTR):系统在发生故障后可以暂停运行的时间;
    • 精确度:指出系统输出要求具备的精密度(分辨率)和精确度(按照某一已知的标准);
    • 最高错误或缺陷率:通常表示为bugs/KLOC(每千行代码的错误数目)或bugs/function-point(每个功能点的错误数目)。
  • 性能
    记录系统性能相关的各种指标,包括:
    • 对事务的响应时间(平均、最长);
    • 吞吐量(例如每秒处理的事务数);
    • 容量(例如系统可以容纳的客户或事务数);
    • 降级模式(当系统以某种形式降级时可接受的运行模式);
    • 资源利用情况:内存、磁盘、通信等。
  • 可支持性
    定义所有与系统的可支持性或可维护性相关的需求,其中包括编码标准、命名约定、类库、如何来对系统进行维护操作和相应的维护实用工具等。
  • 设计约束
    设计约束代表已经批准并必须遵循的设计决定,其中包括软件开发流程、开发工具、系统构架、编程语言、第三方构件类库、运行平台和数据库系统等等。

3.3 词汇表

词汇表主要用于定义项目特定的术语,它有助于开发人员对项目中所用的术语有统一的理解和使用,它也是后续阶段中进行对象抽象的基础。





回页首


4. 调整用例模型

在一般的用例图中,我们只表述参与者和用例之间的关系,即它们之间的通讯关联。除此之外,我们还可以描述参与者与参与者之间的泛化(generalization)、用例和用例之间的包含(include)、扩展(extend)和泛化(generalization)关系。我们利用这些关系来调整已有的用例模型,把一些公共的信息抽取出来重用,使得用例模型更易于维护。但是在应用中要小心选用这些关系,一般来说这些关系都会增加用例和关系的个数,从而增加用例模型的复杂度。而且一般都是在用例模型完成之后才对用例模型进行调整,所以在用例建模的初期不必要急于抽象用例之间的关系。

4.1 参与者之间的关系

参与者之间可以有泛化(Generalization)关系(或称为"继承"关系)。例如在需求分析中常见的权限控制问题(如下图所示),一般的用户只可以使用一些常规的操作,而管理员除了常规操作之外还需要进行一些系统管理工作,操作员既可以进行常规操作又可以进行一些配置操作。



在这个例子中我们会发现管理员和操作员都是一种特殊的用户,他们拥有普通用户所拥有的全部权限,此外他们还有自己独有的权限。这里我们可进一步把普通用户和管理员、操作员之间的关系抽象成泛化(Generalization)关系,管理员和操作员可以继承普通用户的全部特性(包括权限),他们又可以有自己独有的特性(如操作、权限等)。这样可以显著减速少用例图中通讯关联的个数,简化用例模型,使之更易于理解。



4.2 用例之间的关系

用例描述的是系统外部可见的行为,是系统为某一个或几个参与者提供的一段完整的服务。从原则上来讲,用例之间都是并列的,它们之间并不存在着包含从属关系。但是从保证用例模型的可维护性和一致性角度来看,我们可以在用例之间抽象出包含(include)、扩展(extend)和泛化(generalization)这几种关系。这几种关系都是从现有的用例中抽取出公共的那部分信息,然后通后过不同的方法来重用这部公共信息,以减少模型维护的工作量。

4.2.1 包含(include)

包含关系是通过在关联关系上应用<<include>>构造型来表示的,如下图所示。它所表示的语义是指基础用例(Base)会用到被包含用例(Inclusion),具体地讲,就是将被包含用例的事件流插入到基础用例的事件流中。



包含关系是UML1.3中的表述,在UML1.1中,同等语义的关系被表述为使用(uses),如下图。



在ATM机中,如果查询、取现、转帐这三个用例都需要打印一个回执给客户,我们就可以把打印回执这一部分内容提取出来,抽象成为一个单独的用例"打印回执",而原有的查询、取现、转帐三个例都会包含这个用例。每当以后要对打印回执部分的需求进行修改时,就只需要改动一个用例,而不用在每一个用例都作相应修改,这样就提高了用例模型的可维护性。



在基础用例的事件流中,我们只需要引用被包含用例即可。

查询-基本事件流

1. 用户插入信用卡

2. 输入密码

3. 选择查询

4. 查看帐号余额

5. 包含用例"打印回执"

6. 退出系统,取回信用卡

在这个例子中,多个用例需要用到同一段行为,我们可以把这段共同的行为单独抽象成为一个用例,然后让其他的用例来包含这一用例。从而避免在多个用例中重复性地描述同一段行为,也可以防止该段行为在多个用例中的描述出现不一致性。当需要修改这段公共的需求时,我们也只需要修改一个用例,避免同时修改多个用例而产生的不一致性和重复性工作。

有时当某一个用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。

4.2.2 扩展(extend)

扩展(extend)关系如下图所示,基础用例(Base)中定义有一至多个已命名的扩展点,扩展关系是指将扩展用例(Extension)的事件流在一定的条件下按照相应的扩展点插入到基础用例(Base)中。对于包含关系而言,子用例中的事件流是一定插入到基础用例中去的,并且插入点只有一个。而扩展关系可以根据一定的条件来决定是否将扩展用例的事件流插入基础用例事件流,并且插入点可以有多个。



例如对于电话业务,可以在基本通话(Call)业务上扩展出一些增值业务如:呼叫等待(Call Waiting)和呼叫转移(Call Transfer)。我们可以用扩展关系将这些业务的用例模型描述如下。





在这个例子中,呼叫等待和呼叫转移都是对基本通话用例的扩展,但是这两个用例只有在一定的条件下(如应答方正忙或应答方无应答)才会将被扩展用例的事件流嵌入基本通话用例的扩展点,并重用基本通话用例中的事件流。

值得注意的是扩展用例的事件流往往可以也可抽象为基础用例的备选流,如上例中的呼叫等待和呼叫转移都可以作为基本通话用例的备选流而存在。但是基本通话用例已经是一个很复杂的用例了,选用扩展关系将增值业务抽象成为单独的用例可以避免基础用例过于复杂,并且把一些可选的操作独立封装在另外的用例中。

4.2.3 泛化(generalization)

当多个用例共同拥有一种类似的结构和行为的时候,我们可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。



以下是一个用例泛化关系的例子,执行交易是一种交易抽象,执行房产交易和执行证券交易都是一种特殊的交易形式。

用例泛化关系中的事件流示例如下:



4.3 调整用例模型

用例模型建成之后,我们可以对用例模型进行检视,看是否可以进一步简化用例模型、提高重用程度、增加模型的可维护性。主要可以从以下检查点(checkpoints)入手:

  • 用例之间是否相互独立?如果两个用例总是以同样的顺序被激活,可能需要将它们合并为一个用例。
  • 多个用例之间是否有非常相似的行为或事件流?如果有,可以考虑将它们合并为一个用例。
  • 用例事件流的一部分是否已被构建为另一个用例?如果是,可以让该用例包含(include)另一用例。
  • 是否应该将一个用例的事件流插入另一个用例的事件流中?如果是,利用与另一个用例的扩展关系(extend)来建立此模型。




回页首


5. 管理用例模型复杂度

一般小型的系统,其用例模型中包含的参与者和用例不会太多,一个用例图就可以容纳所有的参与者,所有的参与者和用例也可以并存于同一个层次结构中。对于较复杂的大中型系统,用例模型中的参与者和用例会大大增加,我们需要一些方法来有效地管理由于规模上升而造成的复杂度。

5.1 用例包

包(Package)是UML中最常用的管理模型复杂度的机制,包也是UML中语义最简单的一种模型元素,它就是一种容器,在包中可以容纳其他任意的模型元素(包括其他的包)。在用例模型中,我们可以用构造型(Sterotype)<<use case>>来扩展标准UML包的语义,这种新的包叫作用例包(Use Case Package),用于分类管理用例模型中的模型元素。

我们可以根据参与者和用例的特性来对它们进行分类,分别置于不同的用例包管理之下。例如对于一个大型的企业管理信息系统,我们可以根据参与者和用例的内容将它们分别归于人力资源、财务、采购、销售、客务服务这些用例包之下。这样我们将整个用例模型划分成为两个层次,在第一层次我们看到的是系统功能总共分为五部分,在第二层次我们可以分别看到每一用例包内部的参与者和用例。



一个用例模型需要有多少个用例包取决你想怎么样来管理用例模型的复杂度(包括参与者和用例的个数,以及它们之间的相互关系)。UML中的包其实就类似于文件系统中的目录,文件数量少的时候不需要额外的目录,文件数量一多就需要有多个目录来分类管理,同样一组文件不同的人会创建不同的目录结构来进行管理,关键是要保证在目录结构下每一个文件都要易于访问。同样的道理存在于用例建模之中,如何创建用例包以及用例包的个数取决于不同的系统和系统分析员,但要保证整个用例模型易于理解。

5.2 用例的粒度

我的系统需要有多少个用例?这是很多人在用例建模时会产生的疑惑。描述同一个系统,不同的人会产生不同的用例模型。例如对于各种系统中常见的"维护用户"用例,它里面包含了添加用户、修改用户信息、删除用户等操作,这些操作在该用例的事件流可以表述成为基本流的子事件流(subflow)。



维护用户-基本事件流

该基本流由三个子事件流构成:

1) 添加用户子事件流

2) 修改用户 子事件流

3) 删除用户子事件流

但是你也可以根据该用例中的具体操作把它抽象成为三个用例,它所表示的系统需求和单个用例的模型是完全一样的。



应该如何确定用例的粒度呢?在一次技术研讨会上,有人问起Ivar Jacoboson博士,一个系统需要有多少个用例?大师的回答是20个,当然他的意思是最好将用例模型的规模控制在几十个用例左右,这样比较容易来管理用例模型的复杂度。在用例个数大致确定的条件下,我们就很容易来确定用例粒度的大小。对于较复杂的系统,我们需要控制用例模型一级的复杂度,所以可以将复杂度适当地移往每一个用例的内部,也就是让一个用例包含较多的需求信息量。对于比较简单的系统,我们则可以将复杂度适度地曝露在模型一级,也就是我们可以将较复杂的用例分解成为多个用例。

用例的粒度不但决定了用例模型级的复杂度,而且也决定了每一个用例内部的复杂度。我们应该根据每个系统的具体情况,因时因宜地来把握各个层次的复杂度,在尽可能保证整个用例模型的易理解性前提下决定用例的大小和数目。

5.3 用例图

用例图的主要作用是描述参与者和用例之间的关系,简单的系统中只需要有一个用例图就可以把所有的关系都描述清楚。复杂的系统中可以有多个用例图,例如每个用例包都可以有一个独立的用例图来描述该用例包中所有的参与者和用例的关系。

在一个用例模型中,如果参与者和用例之间存在着多对多的关系,并且他们之间的关系比较复杂,如果在同一个用例图中表述所有的参与者和用例就显得不够清晰,这时我们可创建多个用例图来分别表示各种关系。



如果想要强调某一个参与者和多个用例的关系,你就可以以该参与者为中心,用一个用例图表述出该参与者和多个用例之间的关系。在这个用例图中,我们强调的是该参与者会使用系统所提供的哪些服务。



如果想要强调某一个用例和多个参与者之间的关系,你就可以以该用例为中心,用一个用例图表述出该用例和多个参与者之间的关系。在这个用例图中,我们强调的是该用例会涉及到哪些参与者,或者说该用例所表示的系统服务有哪些使用者。



总之在用例建模过程中,你可以根据自己的需要创建任意多个用例图,用不同的用例来强调参与者和用例之间不同的关系。但是最重要的是要考虑整个用例模型的可理解性,如果可以用一个用例图把意思表述清楚,就不要再用第二个,因为越是简洁的模型越易于理解。

posted @ 2006-06-07 00:19 wsdfsdf 阅读(231) | 评论 (0)编辑 收藏

6月6日-----对SCA的理解清晰了一些了

看完了一些资料,对SCA的理解清晰了一些了。
SCA Module是包装SCA Component的,SCA Module上有对外的接口(这个接口可以是Java的,也可以是WSDL的),而且SCA Module可以放在WPS上进行测试,WPS上有自己设定的一些UI来帮助测试。如果有JSP之类的东西要访问SCA Component的话,要在SCA Module中建立一个StandAlone reference,之后JSP就通过StandAlone reference访问SCA Component。
SCA Component可以有多种实现方法,包括Java,Human Task,BPEL,Business rules等。比如业务流程中有5个服务,那么我们就可以建立6个SCA Module,其中的一个SCA Module中的SCA Component是用BPEL实现的,BPEL连接的5个业务模块是靠调用另5个SCA Module中的SCA Component来实现。而这5个SCA Component可以是不同的实现方法,比如分别为:Java,Business rules,Java,Human Task,Business rules。这样就可以实现一种面向服务的开发。每个SCA Component中可能包括1个或者多个再细分的服务,这就依情况而定了。

呵呵,希望理解的到位一些了。

posted @ 2006-06-06 21:03 wsdfsdf 阅读(288) | 评论 (1)编辑 收藏

6月6日-----暂定所用工具

WBM, RSA, WID, WPS, WBM(Monitor),RAD or WAD, WESB or WMB.

posted @ 2006-06-06 19:51 wsdfsdf 阅读(150) | 评论 (0)编辑 收藏

6月5日-----本周任务分工

经过昨天的商讨,文档由三人分开编写。
Merlin:业务模型分析和设计(包括商业价值分析)
April:系统外观界面设计,服务模型分析和设计
Tory:系统架构设计


如完成后还有时间,就继续钻研老师给的光盘资料。周末讨论并整理这些文档,并制定下一步文档计划。

posted @ 2006-06-05 11:15 wsdfsdf 阅读(159) | 评论 (0)编辑 收藏

6月3日-----面向服务的统一过程

引言

虽然 SOA 可以带来许多好处,但同时也可能受到以下一个或多个问题的困扰:

  • 高复杂性和短上市时间,这样会增加失败的风险
  • 由于高成本和量化投资回报 (ROI) 困难而导致较难容忍出现错误
  • 需要恰当管理的动态要求和业务需求

如果您使用了软件方法——软件开发的系统方法——来在初始 SOA 推出期间提供所需的严格控制和过程,并在优化 SOA 的过程中进行调整,就可以避免这些问题。在考虑此处给出的软件方法之前,请阅读本系列的第二篇文章,该文指出,在面向服务的体系结构成熟度模型的第 3 级或第 4 级的“面向服务的体系结构成熟度模型”组织应使用 RUP 等正式的软件方法进行开发工作。只要达到了第 5 级,他们就应该使用 XP 之类的灵活方法了。

您的企业如何在保持开发过程一致的前提下过渡到较高的成熟度级别呢?本文将介绍一种最佳组合的方法,面向服务的统一过程 或 SOUP,用于开展构建工作并随后进行持续优化。在继续阅读本文之前,您应当对 RUP 和 XP 的工作方式有基本的了解。请参阅参考资料,以获得可帮助您了解相关知识的链接。







什么是 SOUP?

SOUP (Service-Oriented Unified Process)是一种使用 RUP 和 XP 中的最佳部分来构建和管理 SOA 项目的软件方法。它的目标是任何组织中正在进行的 SOA 项目。

典型的软件开发项目包含应用程序开发过程、项目管理以及所使用的技术。此外,软件开发项目通常具有四个变量:时间、预算、范围质量。任何一个变量的变化对整个项目都有影响。不断变化的业务需求使得范围和质量成为两个最难管理的因素。技术复杂性可能导致时间和预算管理方面出现问题。

SOA 项目比通常的软件项目复杂得多,因为它们要求配备更大的跨功能的团队,并且还有因此而带来更复杂的团队间沟通和日常管理工作。

虽然 SOA 可以为组织带来许多好处,但同时也可能带来很大的成本支出和时间消耗。如果项目没有经过良好定义,并且在项目启动时没有关于最终结果的远景,则失败的可能性就非常大。

可以帮助 SOA 成功完成的关键因素有:

  • 明确定义的开发过程
  • 与业务相关的项目团队之间增强的沟通渠道
  • 明确的支持和控制策略

在初始开发过程中,采用正式软件方法是尽可能地减少已确定的风险的最好办法。成功建立了 SOA 项目后,可利用正式的维护和增量开发方法来增加项目的 ROI。然而,XP 之类的灵活方法可能不够正式,不适合在初始阶段使用。SOUP 方法可帮助减少 SOA 推出阶段的风险,并能让您随后进行持续 SOA 优化工作。

SOUP 是一个由六个阶段组成的软件开发方法。每个阶段代表对于 SOA 成功推出非常关键的一组特有的活动。当然,和在任何项目中一样,您将需要根据所在组织的情况对相关过程进行调整。

图 1 显示了 SOUP 过程。此方法也没有非常特别的地方:所有软件或 SOA 项目都是采用类似的方式定义的。



图 1. SOUP 过程模型
面向服务的统一过程

我将 SOUP 过程分为两类:






用于初始 SOA 部署的 SOUP

图 2 显示了用于初始 SOA 部署的 SOUP 的各个阶段。



图 2. SOUP 与 RUP 模型
SOUP 与 RUP

每个阶段都包含主要交付内容和活动:

初始

在此阶段,将确定组织对 SOA 项目的需求。您可以通过应用 SOA 成熟度模型来确定组织的体系结构成熟度水平并确定 SOA 的驱动因素。此时,您将需要向为业务服务的所有项目团队说明 SOA 的基本概念,并拟订与反馈和建议流程有关的策略计划。

此阶段的主要交付内容有:

  • SOA 远景和范围:给出项目的整体远景。它还提供了确定项目范围的边界,该范围至少应包含两个业务线或项目。
  • SOA 策略:说明项目将如何执行的概略计划。
  • ROI 分析:给出此项目将带来的成本支出和节省情况。
  • 沟通计划:说明 SOA 团队将如何与其他项目团队和业务用户进行沟通。

客户(即业务干系人)通常并不能完全了解新软件产品可以带来的好处。定义 SOA 策略的企业团队需要利用项目团队的专业知识来帮助确定业务问题以及简化操作的方法。

跨功能分析人员和项目管理人员将对客户的业务进行分析,以确定基于 SOA 的解决方案的优势。分析人员将对客户的内部操作进行研究,此外还要分析其与合作伙伴、供应商以及他们的客户的交互情况,而且也会研究其总体业务模型。这些因素有助于分析人员制定 SOA 策略并向客户推荐。

在此阶段,您还需要对推荐的 SOA 策略进行全面的 ROI 分析。此分析应当清楚地表明短期、中期和长期的成本优势。

此阶段最重要的交付内容是沟通计划。项目 IT 团队和业务干系人比体系结构团队和分析人员更了解业务。沟通计划可以确保这些内部干系人能够理解并参与到开发过程中来。

定义

到目前为止,定义阶段是 SOA 项目中最为关键的阶段。此阶段业务和项目团队的参与将最终决定项目的成功。团队成员需要积极地参与到作为初始 SOA 推出的一部分开发的需求定义和用例方面的工作中来。

项目生命周期的此阶段的活动包括:

  • 收集需求
  • 分析需求
  • 定义非功能需求
  • 制定项目计划,其中包含时间安排和项目估算
  • 定义技术基础设施
  • 定义和实现用例
  • 定义和记录总的体系结构

此阶段的主要交付内容有:

  • 功能需求文档:详细描述 SOA 将作为业务服务提供的所有业务流程。
  • 非功能需求文档:包括性能注意事项、服务水平协议 (SLA) 和基础设施要求。
  • 用例和用例实现:详细说明将构建的所有业务服务的用例。
  • SOA 体系结构文档:描述项目总的体系结构,包括硬件和软件组件。
  • SOA 适用性文档:说明哪些项目将在 SOA 项目的范围内以及如何在 SOA 的基础上构建后续项目。
  • 基础设施定义文档:包括详细的基础设施部署图,其中列出相关服务器以及实现 SOA 所需的服务器的连接和连接位置。
  • 项目计划:整个项目的详细计划,包括里程碑和依赖关系。
  • 支持和控制模型:描述将如何支持和控制 SOA。其中包括各种注意事项,如 SLA 监视和管理。

研究(请参阅参考资料)表明,与需求相关的问题是软件项目失败的首要原因;SOA 项目也不例外。软件质量 有时定义为软件对其需求的满足情况。但是,测定软件质量的更好办法可能是通过其满足的需求的质量 测定,而不是通过其满足的需求的数量 测定。

在明确说明了交付内容后,SOUP 方法将建议一个用于进行需求收集和管理的正式流程。XP 并不定义用于收集和记录需求的正式流程;而 XP 开发人员将创建一些用户案例(请参阅参考资料)并按逻辑顺序对这些案例进行排列,以提供一个需求序列。在此开发阶段,这样的流程并不够用。在 RUP 中,相应的流程更为详细,并使用更多的正式技术来确保举行相关的需求收集会议、对需求进行记录并加以验证。我建议使用需求存储库,该存储库将与用例、设计和代码紧密结合,以在项目进行的整个过程中提供可跟踪性。该存储库可以为 IBM Rational® RequisitePro® 工具或您组织选用的任何其他需求管理工具。更改管理流程也很重要。

此阶段最重要的交付内容是支持和控制模型。组织将如何支持 SOA?控制指导方针有哪些?如果推出了一个 SOA,但没有人使用,则项目就失败了。支持和控制模型文档可以防止发生这种情况。

企业应当在制定了真实可行的计划和目标的情况下启动项目。其他需求应留待以后解决。如果在预期的时间和预算内,可以完成有关需求的有效业务-IT (B2IT) 协作,则可以帮助确保项目的成功。

请在项目早期定义支持整个 SOA 所需的技术基础设施。这包括服务器、网络基础设施和培训要求方面的详细评估。

设计

在设计阶段,您将对定义阶段确定的设计构件进行细化。用例实现和软件体系结构文档将转化为详细的设计文档。

此时,SOA 架构师(通常为企业架构师中的一部分)需要与项目架构师合作,以确保 SOA 团队给出的设计可以供具体的项目使用。SOA 架构师甚至可能选择完成一些概念验证 (proof-of-concept) 项目,以证明 SOA 远景。此阶段的主要交付内容有:

  • 详细设计文档:描述如何设计和构建服务。
  • 应用程序编程模型:提供有关设计开发项目的结构的指南。涉及的主题包括使用的流程和技术、编码标准以及部署过程。
  • 数据库模型:包括 SOA 使用的数据库的实体关系图。
  • 测试和 QA 计划:详细说明测试和 QA 计划,并在其中包括测试用例。

构造

在构造阶段,将使用您选择的迭代构建方法来构建 SOA。此阶段中包括新的开发和集成活动。您的活动不仅限于软件方面,还涉及到与基础设施相关的子项目,如硬件整合项目或服务器承载集中化工作。虽然整个工作是在单个 SOA 项目中进行管理的,但仍然很有可能将由各种小型子团队进行不同的构造活动。

项目生命周期的此阶段将涉及到各种活动,如:

  • 迭代开发
  • 迭代 QA 和测试
  • 用户文档

此阶段的主要交付内容有:

  • 基本代码:该代码应存储在某类源代码管理存储库中。
  • 测试结果:执行测试用例和 QA 计划的结果应可供进行检查分析。
  • 文档:文档中应包含关于代码以及对设计文档的任何更新的详细信息。

部署

在部署阶段,您将向各个项目团队推出 SOA,这些项目团队将开始在其生产环境中的项目上使用此 SOA。此阶段最明显的主要交付内容或许就是投入生产环境中使用的应用程序。然而,SOA 试验项目的计划却是更为重要的交付内容。这将导致进入 SOUP 方法的下一个步骤,该步骤将确定后续项目如何使用新体系结构。此阶段的其他主要交付内容有:

  • 部署模型:给出总的 SOA 部署结构。
  • 用况模型:提供有关如何使用 SOA 的指南。随着各个项目团队和业务线开始使用新体系结构,此模型会变得非常重要。
  • 后续支持级别模型:将对定义阶段开发的支持和控制模型的任何更新进行系统化。

支持

软件开发周期的这最后一个步骤非常重要。在支持阶段,您将确保提供后续 SOA 支持、错误修正和进行新功能开发。项目生命周期的此阶段将涉及到各种活动,如:

  • 维护
  • 错误修正
  • 培训
  • 持续项目投入

您的 SOA 现在已经投入生产了。但项目团队如何从该体系结构受益呢?为了构建使用现有服务的应用程序,或设计使用现有 SOA 的新服务,他们是否需要遵循上面详细列出的所有步骤?正如您将在下面的部分中看到的,实际上,他们可以从一个更为轻量级的方法中获益。







用于后续 SOA 管理的 SOUP

SOUP 方法可以用于那些使用已经推出的 SOA 的项目。在这种情况下,SOUP 对 XP 进行了大量的参考。图 3 表明了 SOUP 和 XP 过程彼此重叠。



图 3. 重叠的 SOUP 和 XP 过程
SOUP 和 XP

这种方法主要带来什么样的好处呢?SOA 项目的价值在于,它可提供良好定义的体系结构和严格的技术指南。您获得了一个框架,可以在其中以服务的形式构建应用程序。项目团队的主要任务是构建和使用服务。他们最适合执行这些任务,因为他们具有必要的业务领域知识。但是,他们并不需要考虑技术体系结构或技术的创新,因为这些任务将由 SOA 团队完成。

此类项目将遵循上一部分中列出的相同 SOUP 指南;不过,您将发现,每个阶段的工作量都大幅度地减少了。这一部分的许多交付内容都和前面描述的一样;必要时,我会说明它们与从头构建 SOA 时的项目中的对等项之间的差异。

初始

启动 SOA 并运行后,仍然需要进行一些开发工作。您无疑将希望构建使用现有服务或公开新服务的项目。初始阶段的主要交付内容有:

  • 项目远景和范围:这仅包含单个项目的范围,而不包含更大的 SOA 计划的范围。
  • 项目策略:描述此具体项目的策略和流程,并说明其如何利用 SOA。
  • ROI 分析:项目的详细成本优势分析,这对于帮助进行与实现有关的决策非常关键。

定义

在定义阶段,您将构建与 SOA 项目有关的各项内容,并了解如何利用 SOA。您需要标识 SOA 可以提供的服务和仍然需要构建以满足您的项目目标的服务。

项目生命周期的此阶段的活动包括:

  • 收集需求
  • 标识服务
  • 制定项目计划,其中包括时间安排和项目评估
  • 开发测试用例

此阶段的主要交付内容有:

  • 功能需求文档:软件项目的典型需求文档。
  • 用例和用例实现:涵盖所有正在构建的新业务流程。
  • SOA 适用性文档:说明现有 SOA 框架如何应用到此项目。
  • 项目计划:详细说明整个项目,包括里程碑和依赖关系。
  • 服务策略:标识已经存在并能够使用的服务以及可以公开的新服务。
  • 测试计划:其中包括项目的测试用例。

在此阶段,您不需要严格遵循在 SOA 推出期间遵循的正式需求收集标准。相反,可以通过用户案例或类-责任-协作者(Class, Responsibilities, Collaborator,CRC)卡(请参阅参考资料)来简化需求收集。根据 XP 的思想,测试案例是在这种类型的项目的早期构建的。

设计

此阶段可以迅速完成,因为大部分服务都在初始 SOA 推出时已经完成。在设计阶段,只需要关心如何使用这些服务,需要在现有服务的基础上构建什么功能,以及需要构建哪些新服务。

此阶段的主要交付内容有:

  • 详细设计文档:说明您的设计如何利用总体 SOA,并建立设计与应用程序编程模型。
  • 数据库模型:封装供此特定项目使用的逻辑和物理数据设计。

构造

构造阶段涉及更多的是装配,而不是新部署。随着提供的服务越来越多,每个项目都将有越来越多的可重用服务,而需要构建的新服务也就越来越少。XP 的迭代开发技术是此开发阶段的最佳选择。在 XP 中,理论上的迭代周期设置为两周,当在 SOA 环境中构建小型服务和使用一组服务时,这一时间对于一个开发 Development-QA 周期来说绝对足够了。使用此迭代方法,SOA 可以通过快速软件发布提供有价值的业务灵活性。

项目生命周期的构造阶段的活动包括:

  • 迭代开发
  • 迭代 QA 和测试
  • 用户文档

此阶段的主要交付内容有:

  • 新服务:在本阶段结束时,任何将要公开的新服务都会准备就绪。
  • 测试结果:执行测试用例所得到的结果应提供给所有相关方。
  • 文档:此开发阶段应产生详细的代码文档以及对以前创建的其他文档的所有必要更新。

部署

在此阶段,将启动使用多个服务的应用程序,或启动新服务。由于基础设施是由 SOA 团队进行管理的,因此该流程相对比较简单。

支持

在此阶段,将仅为您的新服务提供支持。在进行此项工作的过程中,请遵循在原始 SOA 项目期间制定的支持指南。单个项目不需要花很多时间制定新的支持指南。







管理 SOA 生命周期

本文向您介绍了 SOUP,这种新的软件方法可用于构建 SOA 并将此体系结构的好处带给各个项目。文中说明了可以如何使用类似于 RUP 的正式方法来对 SOA 进行初始构建,然后转向 XP 样式的灵活流程,以进行后续服务推出工作。通过实现这两个过程的最佳组合,您可以依靠一个统一的开发模式来进行相关工作,此模式可提供足够的灵活性,以便对 SOA 生命周期的不同阶段进行管理。


posted @ 2006-06-03 23:06 wsdfsdf 阅读(172) | 评论 (0)编辑 收藏

6月3日-----SCA服务组件与传统组件的主要区别

1. 服务组件往往是粗粒度的,而传统组件以细粒度居多。

2. 服务组件的接口是标准的,主要是WSDL接口,而传统组件常以具体API形式出现。

3. 服务组件的实现与语言是无关的,而传统组件常绑定某种特定的语言。

4. 服务组件可以通过组件容器提供QoS的服务,而传统组件完全由程序代码直接控制。

posted @ 2006-06-03 16:53 wsdfsdf 阅读(221) | 评论 (0)编辑 收藏

6月2日-----推荐Ajax学习用书

现在浏览器端以 JavaScript 为核心,基于各种 Web 标准(即:早已完成标准化的XHTML/CSS/DOM/XML/XSLT 和正在进行标准化的XMLHTTP)的技术正在加速整合,Ajax 就是这一系列技术的一个统称。

虽然网络上已经有大量的相关资源,但是为了打好基础,认真读上几本书还是很有必要的。好在 Ajax 并不是什么全新的技术,它仅仅是传统技术的发展和增值,是对于这些基于 Web 标准的传统技术的重新包装,使其更加适合于企业应用,并且和服务器端结合地更加紧密。因此学习 Ajax,首先就要从深入学习这些传统的技术开始。我由浅入深地列出一些我读过的书籍,提供给大家做参考:

1、XHTML 教程(XHTML)

作者:Chelsea Valentine, Chris Minnick

New Riders 原版,人民邮电出版社中文版

是的,今天你最应该学习的是 XHTML,而不是 HTML。HTML 4.x 已经是一个被废弃了的标准,今天的标准是 XHTML 1.0。XHTML 1.0 也不是 XHTML 最新的版本,但是它是目前唯一得到浏览器广泛支持和唯一实用的 XHTML 版本。

2、JavaScript 权威指南第四版(JavaScript: The Definitive Guide)

作者:David Flanagan

O'Reilly 原版,中国电力出版社中文版

JavaScript 爱好者亲切地称之为“犀牛书”,因为 O'Reilly 以犀牛作为这本书的封面。这是目前 JavaScript 领域最深入和最权威的入门书。与其它 JavaScript 相关书籍的区别是这本书一半以上的篇幅着重于深入介绍 JavaScript 语言本身的基础知识,而不是象其它的书一样把基础知识和与 HTML 相结合做 Web 开发的内容(这些内容往往偏重于细节,使得其篇幅很容易就超出了 1000 页,例如《JavaScript Bible》)混杂在一起。对于刚刚开始学习 JavaScript 的初学者,这本书毫无疑问是最佳的入门书。

3、XML 高级编程(Professional XML)

Didier Martin等著

Wrox 原版,机械工业出版社中文版

这本书是关于 XML 开发技术非常详尽的著作。虽然因为作者众多(第一版 12 个人,第二版好像又多了几个),无法摆脱 Wrox 红皮书系列大杂烩的印记,但是这本书可以说是红皮书系列中少有的精品。

这本书可以作为 XML 技术参考书,虽然很厚,但是没有必要从头到尾全部读完。其中与 Ajax 相关的内容包括 XML DOM、XSLT 等等。

4、网站重构(Designing with Web Standards)

作者:Jeffrey Zeldman

New Riders 原版,电子工业出版社中文版

这本书详细地介绍了如何摒弃远古时代(按照我的理解,3 年以前吧)不符合标准,专门针对某种浏览器(90%以上的情况下是 IE)做开发的恶习,真正采用符合标准的方式来做开发,最终走上向后兼容(注意:不是与浏览器以前不能完整支持 Web 标准的版本相兼容,而是与浏览器以后的版本相兼容)的平坦大路上来。这本书虽然不是 CSS 的专著,但是其中充分展示了使用 CSS 的一些高级技巧。尤其是最后一章展示了完全基于 CSS 做布局,摒弃使用 table 做布局的老方法的具体做法。

非常遗憾的是这本书的中文版翻译的非常烂,如果不对照原文,很容易误入歧途。读这本书有任何疑问的朋友都可以直接和我联系。

上面列出的是与 Ajax 涉及到的技术相关的书籍。我没有列出 CSS 的书,是因为我并没有专门读过一本 CSS 方面的专著。附件是网上流传很广的 CSS 2.0 中文手册,可以作为这方面的参考。

读了以上这些书,你已经在技术方面打下了极为坚实的基础,你还需要有一个经常的讨论场所,JavaEye 毫无疑问是你最值得来的地方。

下面我再列出几本与技术没有直接关系的书籍。

5、面向使用的软件设计(Software for Use)

作者:Larry Contantine, Lucy Lockwood

ACM Press 原版,机械工业出版社中文版

大部分的软件都是给人使用的。我在 BEA User Group上的演讲中说到,Ajax 为什么会越来越流行,主要的原因就是它能比传统的基于 HTML FORM 的交互模式带给用户更好的交互体验,也就是 Ajax 可以实现更好的 Web 可用性(Web Usability,这是目前国外的一个专门的研究领域),这才是 Ajax 最大的价值。软件的可用性永远都是一个大的话题,《面向使用的软件设计》正是这方面最权威的专著。我们只要在做最终用户直接使用(有一个可视的界面)的软件开发,提高可用性就是我们需要孜孜不倦追求的目标。

6、软件创新之路(Inmates Are Running the Asylum)

作者:Alan Cooper

Sams Publishing 原版,电子工业出版社中文版

7、About Face 2.0

作者:Alan Cooper

John Wiley & Sons 原版,中文版即将出版

上面两本书都是交互设计大师 Alan Cooper 的名著,相信很多朋友都知道 Alan Cooper 的大名,这两本书是交互设计爱好者必读的著作。

posted @ 2006-06-02 20:34 wsdfsdf 阅读(187) | 评论 (0)编辑 收藏

仅列出标题
共19页: 1 2 3 4 5 6 7 8 9 Last