本文是由两部分组成的系列文章的第1部分,阐述了普遍接受的方法学(例如Scrum、极限编程(Extreme Programming,XP)、Crystal、动态系统开发方法(Dynamic Systems Development Method,DSDM)和主要研究精益软件开发(Lean Software Development,LSD)的其他方法学)内包含的敏捷开发的基本原则。当今,必须提高业务的灵活性和速度,以应对不断变化的客户需求、市场机会和外部竞争对手的威胁。为使这些业务得以成功,可以采用面向服务的体系结构(SOA)的开发方法来设计以适应性(对变化和需求做出响应的能力)为目标的IT系统。本系列的第2部分详细描述了它们用于开发SOA的适应性。
引言
面向服务的体系结构(SOA)由Mark Colan等受人尊敬的思想领袖定义和阐述(请参阅“Service-Oriented Architecture expands the vision of Web services, Part 1”),作为普遍接受的用于设计可适应的、企业级IT系统的新兴风格,它已经得到了很大的发展。虽然目标十分明确,但实现目标的方法却并非如此,因为还没有受到广泛接受的SOA方法学。不过,在这方面还是进行了一些研究(请参见SOA的方法学)的。
负责设计SOA的每个人都会面对两个主要挑战:1)如何设计一个系统来很好地适应业务流程、业务目标和IT体系结构,2)如何构建一个能对将来的变化做出响应的体系结构?第二个挑战与敏捷性相关,通常在敏捷软件开发方法的背景下进行讨论。在本文中,我们将介绍如何将此方法的思想扩展到SOA的设计。我们先回顾一些最常见的敏捷开发方法,然后再研究“精益软件开发”(LSD)的原则。最后,我们讨论在构建SOA的过程中对LSD的初步分析。
SOA入门
什么是SOA?
在构建IT体系结构(特别是企业级体系结构)时,我们的目标始终是:支持业务流程并对业务变化做出响应。在最近几年中,出现了一些构建系统体系结构的新方法,这些方法主要围绕功能单元(称为服务)来构建复杂的系统。
最新的理解是,服务包含4个主要方面:
·提供
·使用
·说明
·中介
Web服务也对以上这几个方面提供基于系统和标准的支持。因此,Web服务具有无与伦比的敏捷性这一优点。例如,使用Web服务基础设施可以在运行时更改服务提供者,而不影响使用者。
某个系统本身要被称为基于SOA的系统,应具备以下特性:
·业务流程映射到软件服务;因此,业务可通过软件进行跟踪。
·存在一种基础结构,支持上述服务的4个不同方面。这样服务级别就具有高度的敏捷性。
·服务是监视和管理单元。因此,一个人可以跟踪业务流程的操作属性和问题。
SOA应用程序
图1从应用程序角度展示了企业级SOA所包含的元素。业务流程 由用户界面应用程序 和服务应用程序 进行部分和完全支持。业务流程中的一个步骤或者通过人工执行,或者得到用户界面应用程序的支持。用户界面应用程序实现了许多宏工作流,而且它们还使用实现业务功能的服务。
在服务编排层,组合服务是通过编排语言(例如业务流程执行语言(Business Process Execution Language,BPEL))定义的。组合服务的编排通过基本服务 定义其流程和组成。编排层应由支持图形规范的编排工具提供支持,例如IBM WebSphere? Business Integration Modeler和IBM Rational? Application Developer。
基本服务(由服务编排层使用,也由用户界面应用程序使用)通过服务应用程序实现。而服务实现又可以调用其他服务,这些服务通常来自另外的服务应用程序。

图1。 SOA的元素
SOA的方法学
构建一个合理的SOA应采用何种开发方法?从前面的部分可以看出,有业务流程、应用程序和服务。显然,对服务建模是此类方法必须支持的主要任务。另一个重要的方面是确保业务流程和服务之间的链接。
文章“Elements of Service-Oriented Analysis and Design”说明了现有的模型(例如面向对象的分析和设计(Object-Oriented Analysis and Design,OOAD)、企业体系结构框架和业务流程建模技术)对SOA设计的作用。本文还指出,您需要将其他方法元素用于SOA,例如用于服务标识和聚合的方法和技术、业务跟踪能力、现有资产的集成和重用。
在另一篇IBM developerWorks文章“Service-oriented modeling and architecture”中描述了一种方法,回答了上述许多问题。本文主要介绍服务的建模,它是在域分解、现有系统分析和目标服务建模之类的技术支持下实现的。
引用的这两篇文章提出了许多问题,我们仍需要回答这些问题——例如,SOA控制问题。我们要提出的另一个问题是:在SOA开发中应采用哪些规则和实践来确保服务模型能对将来的变化做出响应?在这里,我们可以求助于各种敏捷软件开发方法。
敏捷软件开发
敏捷软件开发是自上世纪90年代Kent Beck提出极限编程(XP)时开始兴起的,这种编程方法用一组价值标准、原则和实践来规划、编码、设计和测试软件。(有关对XP的介绍,请参见Extreme Programming: A gentle introduction。)
所有敏捷软件开发方法都具有以下几个共同价值标准,例如
·频繁检查和改写
·频繁交付
·协作和密切沟通
·深思熟虑的改进
·突出需求(递增)、技术和团队能力
·授权和自我组织
·基于事实而非假象进行处理
·勇气和尊重
从这些价值标准可以看出,现在使用的各种敏捷方法都注重不同的实践。
2001年2月定义了Agile Manifesto,它在流程和工具的基础上评价个体和交互操作,在综合性文档的基础上使用软件,在合共协商的基础上进行客户合作,并在遵循计划的基础上对变更做出响应。它是现今使用的所有敏捷方法的基础。
为了使本文的阐述更加清楚,我们简要介绍了最常用的敏捷方法,因为在开发SOA时它们中的许多都是非常有用的。我们知道,SOA不仅与软件开发有关,而且还与业务和IT体系结构有关。因此,如果我们了解软件开发实践,则我们必须始终评估它们是否适合SOA。在本系列文章的第2部分中完成此评估。
Scrum
Scrum似乎是很简单的,但仍有一些实践会对工作体验产生深远的影响,并获得重要的适应性和敏捷性。在这些方法中,Scrum与众不同的特点是对自我指导团队、每日团队评估和避免说明性流程进行了极大的提升。Scrum的一些关键实践包括:
·自我指导和自我组织团队
·每日就特殊问题(您做了什么、您将做什么和您遇到哪些问题)开站立会议
·通常采用30天的日历循环
·在每个循环的开始,制订客户驱动的适应计划
·向参与者演示功能(在每个循环结束时)
对于企业级活动,了解和管理项目间的依赖项非常重要。在Scrum中使用“Global Backlog”就可以很好地做到这一点,Global Backlog是对用户有价值的功能和非功能需求的企业视图。Global Backlog在全局区分优先级。每个项目从Global Backlog获得项目范围内的最重要的部分。“Scrum of Scrums”还涉及项目间的同步,这是一个每两天(或每周)一次的会议,来自每个团队的代表参加这个会议,以便在团队之间同步。