【IT168技术文档】探究将软件重用到面向服务的体系结构(SOA)时对其起负面作用的因素,了解重用工程如何给SOA价值实现过程带来积极影响。
引言
对于许多组织而言,有效而系统的软件重用仍然是一个很难达到的目标。现在真的存在很多与重用相关的业务促进因素。首当其冲的可能就是IT成本削减以及对IT体系结构和基础系统中的灵活性和响应能力的迫切需要。
通常,您同样也会发现阻碍进行更为成功的重用起负面作用的因素(或者,至少看起来是这样的)。不过,要应付这些起负面作用的因素却并不容易。同时,面向服务的体系结构(SOA)方面的技术演变为实现软件重用提供了基础。SOA价值方面的关键部分就是通过软件重用得到的益处。
作为重用的关键实现技术的SOA
一项对developerWorks和其他开发人员参考资料中的各种SOA非常好的实践文章的调查表明,有大量的对SOA中的接口的重要性的论述。服务接口是集成设计的关键。通过与标准的使用相结合,接口成为了创建松散耦合(服务客户机与服务提供程序的通信不受编程语言和平台的限制)的基本元素。服务需要独立,以使客户机无需了解服务组件的内部工作;实质上,服务作为“黑盒”进行操作。“白盒”重用(或复制与粘贴)中将对源代码进行修改,以在另一个上下文中使用,这种方法很有用,但通常不如“黑盒”重用的好处多。“由于在整个生命周期中可以从黑盒重用获得较多的好处,因此系统的重用程序可以在不进行更改的情况下进行重用”(摘自Measuring Software Reuse:Principles,Practices,and Economic Models,请参阅参考资料)。服务对功能进行封装,此功能可以是业务功能或实用功能。在developerWorks文章“Migrating to a service-oriented architecture”中对SOA属性进行了更为详细的讨论(请参阅参考资料)。
SOA的所有这些特征提供了可进行软件重用的技术环境。不过,即使有了SOA概念和技术提供的重用关键组件,传统的重用阻碍因素仍然是个问题。
重用阻碍因素
在大多数开发组织中,会频繁进行软件重用(至少会临时出现这种情况)。项目之间以一种非正式的方式共享。SOA提供了更为正式的重用,当服务客户机访问服务以给定功能时,将出现重用。重用方(服务客户机)甚至都不知道其所重用的代码是什么,而且也不需要知道。它们只知道服务正向其提供所需的功能。那么,问题是什么呢?此处,我们将分析一些与可重用服务的创建与使用相关的挑战。
教育培训与文化:对某些项目团队而言,Web服务之类的SOA技术可能还是新事物,因而在利用可用服务之前,他们需要学习一些新的技能技巧。项目团队有效找到可用服务,理解其功能并确定给项目带来的好处的能力水平决定了该团队实现服务重用价值的可能性。UDDI注册中心非常重要,但单单这个还不够。WSDL文档设计用于供机器读取,人也能读懂其内容,希望重用服务的团队通常需要其他信息。服务学习曲线会对重用价值造成影响,因此,这也是项目团队要考虑的因素,以确定是进行重用,还是重新编写代码。
可重用服务的可用性:显然,必须存在有价值的可重有服务才能实现服务重用。确定在给定组中的这些服务,并实际创建和提供它们,可能是一大挑战。必须进行某种层次的域分析,以确定在整个域中存在的共性,从而确定哪种类型的服务具有重用价值。组中的项目团队为其解决方案创建的软件中可能包含可硬编码为可重用服务的良好候选服务,这些服务能够以经济高效的方式在更广泛的范围内使用。了解何种情况下可以进行重用是一个挑战,而提供允许在已确认可以进行重用的地方执行重用的组织构造则更是一大挑战。
重用工程
对工程进行重用的核心是担任跨项目边界的职务的专家(重用工程师)的重用工作。他们在资产的使用和生产方面为项目团队提供帮助。Robert Fichman和chris Kemerer在“Journal of Systems and Software”发表的一篇文章“Incentive compatibility and systematic software reuse”(请参阅参考资料)中提供了这个描述:
“重用中心的重用工程师实际上是‘外借’给应用程序开发团队以通过重用实践为他们提供帮助。在重用使用方面,重用工程师提供关于潜在的可重用内容的知识,并在任何必要的重用的采用过程中提供帮助。在生产方面,重用工程师识别何处最适合产生新组件,并帮助实现这些组件的可重用性。而对项目而言,重用工程师将记录域的知识、可重用的新资产以及关于哪些现有资产本身已经很好了,哪些尚需要修改或增强的知识。”
重用工程师必须技术熟练,有项目级的经验,且能最终促进重用的实现。重用工程师角色的一个关键特点就是其职位是跨多个项目组的。软件重用是重用工程师的“日常工作”,他们通常在其影响范围内有与重用结构相关的目标和措施。就取得重用程序的成功以及对SOA活动而言,对此类涉及的工作领域超过单个项目的角色的投资非常重要。很少有组织通过一次只专注于一个项目而实现了成功的系统重用(Software Reuse: Architecture, Process and Organization for Business Success——请参阅参考资料)。就我对组织应用重用的经验而言,我发现采用这个方法处理传统重用阻碍因素(如前面所述的那些因素)非常有效。对于这些阻碍因素中的每一个,我都将讨论重用工程的影响。
教育培训与文化
具有SOA技能的重用工程师通过与项目团队协作,可以降低这些团队采用SOA的壁垒。项目经理接受过相关培训,要降低其项目的风险。搜索和重用别人的软件可能有风险,但重用工程师是确定可用服务的专家,可以减少这些风险。他们可以与项目团队合作,以评估和了解需求,然后花时间对服务进行搜索、了解和分析,并为团队提供指导,告知如何以及何时使用这些服务。而且,他们还可以利用其他使用该服务的项目的实现经验。所有这些将降低学习曲线的影响和减少重用风险。这些工程师可以对团队进行培训,告知他们迁移到SOA并尽可能少地影响其现有软件的非常好的方法。例如,改为使用服务(而不在应用程序内提供此功能)时,可以引入适配器设计模式以尽可能减少对应用程序代码的干扰。
重用工程还对组织文化带来了积极的影响。软件重用并不是一个新概念,多年来各种组织对此进行了很多次尝试,取得了不同程度的成功。因此,重用是大部分人都可以对其有自己的看法的事物,这些看法可能是正面的,可能是反面的,也可以介于两者之间。重用工程师可以了解那些从来不会通过搜索框或表单表达出来的项目需求。人与人之间的交互提供了一个不能通过搜索工具和资产存储库加以解决的通信层次。这在项目团队和重用工程师之间创造出一种和谐的气氛,而这可以进一步帮助创建和引入重用文化,项目团队将在此过程中更加认识到协作重用努力的重要性。重用工程师成为了一个通道,项目团队可以通过他/她获得以服务的形式创建可重用软件资产的机会。
可重用服务的可用性
可以采用多种形式创建服务。对组织而言,第一步是理解哪些是有价值的服务。SOMA(面向服务的建模与体系结构——请参阅参考资料)是一种非常具有描述性的方法,其中包含了几个补充服务识别方法(包括域分解)。重用工程是SOMA的补充,因为通过它可以对域加以了解。
域分析可以确定域中存在的共性,从而确定哪种类型的具有重用价值。可以通过若干方法进行域分析。对于重用工程模型,一个项目要进行一次域分析。重用工程师通过与项目团队协作,可以捕获项目团队需要提供的功能。对给定域中此信息的分析,将揭示哪些地方存在对相同功能的重复使用,以及哪些地方可以引入服务以创造重用价值。由于企业体系结构方向和项目团队提供的实际解决方案架构之间的差异,某些广泛的水平重用机会没有被发现(如developerWorks文章“Elements of service-oriented analysis and design”中所述,请参阅参考资料),此方法对于发现这种机会特别有效。由于重用的数量可能很大,所以这些常见的服务机会可以迅速体现SOA的价值,提供大量的投资回报,这一点非常诱人。
例如,以创建功能需求(如为企业内的应用程序对用户访问进行重新验证)为例。随着越来越关注法律法规的遵守、此类业务控制变得重要得多。由于广泛要求提供此功能,可能组织内一次又一次地重新开发解决方案,最后的结果是没有任何一个解决方案是可以重用的,缺乏业务的集中控制,而IT投资被大量浪费。这种类型的功能也可以作为可以广泛重用的一组服务提供,异构企业中的应用程序都可以使用这些服务。各个层次的企业受益人(从CFO到应用程序开发人员)都可以实现SOA的价值,以一种实际的方式进行重用。
重用工程师在发现这些机会的同时,也会获得可以减少向SOA迁移的成本知识。具体来说,重用工程师将对候选服务进行分类。这就是项目团队为其解决方案创建的软件,是一个可能硬编码为可重用服务的候选项,能满足通过域分析确定的需求。了解何处存在这些机会通常是个挑战。重用工程师可以明确地确定非常好的的实现,能提供生成服务的非常好的机会。重用工程团队也可以担任进行硬编码的角色,从而交付服务。或者,他们可以将以前项目中完成的工作与新项目的要求结合,从而在新项目范围内硬编码为服务。这个“下个项目生成”模型(Measuring Software Reuse:Principles, Practices, and Economic Models——请参阅参考资料)可以提高可重用服务的可用性和使用,能在不需要新投资流情况下实现重用。重用工程是发现那些经常被忽略的机会并针对其进行处理的关键。
总结
重用是有效的SOA的必要属性,是SOA的业务案例的组成部分。重用工程是将软件重用非常好的实践应用到SOA的有效方法,可以在整个企业范围内高效地产生和使用服务。