【IT168信息化】
您向往获取 IBM® Rational® ClearCase®和 IBM® Rational® ClearQuest®,这样您就应该设计一个发布管理策略,并通过 ClearCase UCM 来实现。为了能够拥有给系统进行最好的配置,并使之满足您所有目标的需求,您应该对这个具有挑战性的前景进行四个不同角度的关注:
一方面(项目管理),会有项目管理者们监控着他们开发小组的工作成果,看何时能够达到他们发布最终期限的目标。
接下来的一方面是(发布管理)发布管理者,他们必须与每个正在进行的项目一起工作并决定每个项目的什么功能已经作好发布的准备了。此外,发布管理者还要确定项目之间存在什么样的依赖关系。
第三个方面(构架管理)是应用构架师,他必须与 ClearCase 管理员一起合作来创建合适的 ClearCase 结构,并储存各种应用程序的各种组件,以便管理工作有更好的适应性。
最后一方面(工作区管理)是技术领导者,他必须与 ClearCase 管理员一起合作,提供适当的 ClearCase 工作区以确保以发布为目标的工作与其它工作是相互隔离的。这包括创建必要的流程,以及合适的项目来执行这个必要的隔离。
有时,软件开发中的这四个方面看起来是隔离且相互独立的。为了设计非常好的解决方案,提供适当的弹性来满足您发布策略的目标,您必须考虑各个方面,然后设计最有可能让您成功的解决方案。
假定
发布管理对于不同的人群有不同的意义,还有很多这个范围之外的发布管理策略。在这个范围的一端是在它的项目计划的基础上,发布一个应用软件的能力。这是一个以应用软件为中心的策略,假定它的项目管理小组确定发布的准备工作已经完成,这个应用软件就会发布。
在这个范围的另一端是一个由部门或者组织控制的协调发布周期。利用这个策略,定期时间的发布将在预先确定的时间间隔内发布,那些发布包括不止一个的应用软件。协调必须是发生在应用软件小组,管理那些应用软件小组的活动项目,以及发布管理人员之间的活动。这篇文章将处理更具有挑战性的发布策略。
定义(正如应用在这篇文章的)
应用程序:一个可配置的单元。在 Java™ 工作区它很可能是一个 EAR (Enterprise Archive) 文档。 众所周知,您可以分别部署一个应用软件的层次(比如一个共享的数据库,或者一个 Enterprise JavaBean 或者由多个应用软件使用的 EJB),但是我们都 不会检查这个文档中的风险。然而,这篇文章任何地方所提到的应用软件,您都可以将它视为一个可配置的单元。
项目:一个资金、人员以及项目管理的成果。一个项目可能包括一个或者更多的应用软件,也可能跨越一个或者更多的发布。
发布:当一个或者更多应用软件的一套新功能已经投入生产环境后的一个协调的、有规律预定的时间。
正如前面所提到的,这四个方面每一个都能对有效生产一个发布的最终目标产生不同的影响。让我调查一下每个侧面,看 IBM®Rational®工具是如何帮助您达到您的目标的。
发布管理
接下来,让我们看看发布管理。作为一个发布管理人员,您拥有绝对不一样的看法。您必须将来自您所负责的应用软件的组合中被配置的二进制文件装配起来。每次发布都包括许多应用软件,并包括许多项目。记住一个项目可能负责许多应用软件的变更。这样导致如此不堪的事实:您的两个截然不同的项目可能设计到同一个应用软件。作为一名发布管理人员,帮助协调那两个项目是您的职责,这样这两个项目就会有一个集成,以次来保证发布的质量。
当预定的发布策略被使用时,发布管理人员与项目经理必须紧密合作。当发布日期确定以后,希望将他们的一些功能置入这个发布中的项目经理就必须从这个发布日期向后进行工作。项目经理就必须计划他们的迭代,并从这个日期向后进行工作,使之与发布日期相吻合。他们必须设计过渡到产品的具体时间,测试的各种水平,以及文件等等,如图 1所示。随着发布日期的迫近,必须确定一次发布所包含的内容,或者被排除的内容。

▲图1. 面对发布日期的项目工作
在两个项目同时与一个应用软件(在图 1中是A 和 B)发生冲突的案例中,这两个项目的项目经理必须紧密合作,确保有足够的集成时间来一起测试他们的变更。这就迫使这两个相互依存的项目集中关注现实的状况,同时对分配新的活动也会十分小心仔细。
项目管理
正如您所知,项目经理要对整个项目得计划、资源,尤其是预算负责。每个组织都有它自己创建和定义项目的方法。然而,归根结底就是为计划和进度表管理资源的资金小组。在管理这个项目的计划中,项目经理必须与这个项目的技术领导者一起合作,来评估工作的完成进度。
令人兴奋的是 ClearQuest 能够帮助您,并把您看作是一个项目经理。执行一个变更管理工作流程可以帮组您跟踪被分配的工作,您可以控制被分配工作的命令,还可以了解那些工作分配的状况。您可以调查趋势,当您学习如何将您的计划的时程规划与实际相比较时应该能够改进您的项目计划和时间进度安排。
一个良好的 ClearQuest 计划设计包括缺陷或者变更请求,它将提供所有必要的数据了解正在进行中的活跃项目的状况。ClearQuest 的目标时产生必要的实体,这样项目经理就能够管理与特定项目联合的被分配的任务。您必须与项目技术领导者紧密合作,以了解如何分割工作,决定谁来分配工作,以及了解一个实际的变更到底是怎样负责或者简单。
ClearQuest to the Rescue
ClearQuest 是一个十分有价值的工具,能够帮助您管理这个复杂的情况。在这个水平上,项目经理需要十分了解他们小组的活动,同时还要非常清楚为了在发布日期完成任务,他们的项目能够承担多少任务。通过执行管理项目变更的一套简单的实体,比如变更请求或者缺陷(两者在随后的过程中都作为变更请求被提到),您可以获得一个与实际十分接近的项目状况。
变更管理以及活动
与这个项目的技术领导者一起工作,您可以使用这个变更管理来证明这些工作是必要的。这项工作的片断应该直接从一次迭代计划来执行。通过小心地创建必要地变更请求,您将很清楚地知道需要完成多少工作才能满足您项目地迭代目标。
与变更请求联合的工作流程应该加强这个过程,通过这个工程您地组织就可以跟踪并管理变更。如果变更仪器版是您组织的一部分,或者代码检测也是强制被考虑的,那么这个变更请求工作流程就应该反映这些步骤。
变更请求之下的水平是分配给个人的实际活动,如图 2所示。每个便根个请求很可能有更多的活动。此外,一个活动的工作流程应该比较简单,这样在特定的时间您就可以了解哪些活动正在活跃地被执行 ,哪些已经完成,以及哪些还没有开始。这些活动是从战略上来分配的。
项目经理与技术领导者应该紧密合作,从而确定将活动分配给谁以及什么时候分配。从发布中拉出计划好的功能的需求通常是使用这个发布策略的必要条件。您对实际什么活动已经执行,什么活动还没执行了解得越清楚,您对那些关键决定的制定就能做得更好。

▲图 2. 项目、变更请求以及活动的相关级别
构建和发布
现在让我们再次转向发布管理者的几个角度。ClearQuest 如何帮助发布管理人员?反复说过,发布管理人员负责将所有以并列形式分布在产品中的二进制文件装配起来。这意味着:
您要用一种方法组织这个发布,并将这个发布与相关的项目和应用软件联合起来。
您要明白您将制作什么样的官方的构件作为这是发布的一部分。
简单的 ClearQuest 构件和发布实体可以使发布管理人员能够很容易控制这些事情。
在这篇文章中假定您使用的是构架最好的实践,同时假定只有官方的构件才是可用的,可发布到产品中去。在这个案例中,官方的意味着配置的构件是在一个严格控制和可重复的环境下完成的,并且所有的构件源代码要么来自版本控制要么在构件过程中创建的。拥有一个可以为每个官方构件提供数据的 ClearQuest 实体,可以让您访问所有本应该通过官方构件过程搜集的构件信息。
ClearQuest 发布(图 3)只是一个简单的管理实体,您可以用它来搜集信息。发布可以与项目联合,这表明这个项目拥有发布候选。这个发布还可以与构件相关联,这表明发布是由官方的应用软件构件构成的。

▲图 3. 发布关联
目前总概而言,一个设计良好的 ClearQuest 计划(考虑数据的类型,而这些是项目经理和发布经理必须很容易使之生效的)在管理一个成功发布方面是一个长期的过程。对于绝大部分来说,在设计 ClearQuest 计划时这是一个标准,如图 4所示。然而,将这个信息与合适的流程策略联系起来,如您先前所看到的,将把您的解决方案带入下一个水平。

▲图 4. ClearQuest 是怎样支持项目和发布经理的
架构管理
继续向前,让我们检测这个构件管理的各个方面。一个应用软件的构架在某些时候可以被分成有明显分界线的层次(或者组件,子系统等等)。几乎所有的现代应用软件都会利用一些先前所开发的东西,比如一个有用的 JAR 或者一个类库。ClearCase 提供一个组件的概念,它使您能够在一个管理结构中共同寻找并紧密耦合一些代码,使它被看作一个单元。
组件
当一个软件应用被插入到 ClearCase 中,软件构架师需要与are architect needs to work with the ClearCase 管理人员紧密合作来决定怎样将这个应用软件作为“组件”插入到 ClearCase 组件(图 5显示了一个例子)中。我们举一个典型的 Java 或者 Java™2 Platform 的实例,Enterprise Edition (J2EE 平台)应用软件。 相当多企业应用软件当今都会利用开源解决方案之一,包括但不限于以下这些:
Log4J for logging
Struts
Spring
Hibernate
等等
如果您可以重新使用现存的解决方案为什么还要重新创建呢?
在某些方面,大多数组织都建立了一些框架或者有效代码的类型,并通过为开发人员创建简单的 API 使复杂性抽象化。可能还有一些部门的或者业务单元特殊代码存在于应用软件中,比如可能是一个安全解决方案。