巧用组件复用 加速软件开发

日期: 2009-07-13 来源:TechTarget中国 英文

  目前,关于SOA应用的研究和讨论已经成为IT业界的新热点。许多专家纷纷发表意见,认为基于SOA松耦合的服务调用思想是解决和整合多种异构系统的最佳方向。而且,基于SOA思想的组件复用技术更被视为是解决软件危机的一条现实可行的途径。

  近期,我参与了一个在原有金融系统上增加新功能的开发项目。面对原有金融系统的特定应用环境,在考虑时间和成本的多重压力因素下,为了更快的完成任务,我们选择了基于SOA组件复用的开发方式。本文是分享我在此项目中得到的一些经验和总结,文章先分析组件复用对软件开发的重要性和影响,然后在此基础上再探讨实施SOA组件复用的步骤和方法。

  一.软件开发普遍存在的三个要求

  在我所参与的金融系统开发项目中,由于原有的金融系统功能单一,已经不能满足业务发展的需要。所以,客户要求我们选择一个适当的开发体系和开发模式以达到在最短的时间内开发出一个可满足现有需求,同时也要为未来发展保持高度扩展性的系统。在项目启动会议上,客户给我们开发团队提了三点要求:

  (1)尽量利用原有的体系资源

  在项目启动会议上,客户提出的第一个要求是:要尽量利用原有的系统体系资源。目前的现状是这个金融系统经过了多次的升级和改造,系统内混合存在着三种体系结构:基于客户机/服务器的两层结构、基于浏览器/服务器的结构、基于中间件的三层次客户机/服务器结构。这三种体系结构存在于各个不同的应用系统中,各有优势,如果再加上将要新开发的功能,将会是一个多种结构共存的异构系统,也是我们在选择新系统开发架构和开发模式要解决的第一个难题。

  (2)快速开发要求

  在开发启动会议上,客户还要求我们要考虑快速开发。这个要求使我们面临的挑战是:如何快速且高质量地完成开发任务。一般来说,在软件实现过程中无论采用什么模式的开发方法,都要对设计过程中定义的各个模块进行代码级的实现,但这无疑是需要花费大量的时间,但时间却是我们这个项目所欠缺的。但如果此时拥有很多可复用的组件,就可以节约大量的开发时间。例如,只需修改组件接口或再加一个转换用的中间接口,本来需要从头开始的工作就这样事半功倍了。因此,客户建议我们在开发过程中可把一些功能独立的模块分类、收集、不断抽象和封装,并在多个系统中进行重复使用。

  (3)尽量要降低测试难度

  客户要求快速开发带来了另一个大问题:就是如何在短时间内,把系统尽量测试得更可靠一些。众所周知,在很多时候测试工作其实是软件开发过程中很重要的一环,在有些大型项目中实现测试的时间甚至超过开发的时间。在这次的项目中,测试包括两个主要的方面:一是测试新开发功能的开发质量;二是测试新功能与原有系统整合后稳定性。所以,如何降低测试难度成为我们开发团队面临的另一个大问题。

  二.基于SOA松耦合的组件复用

  近年来,软件复用技术越来越引起人们的重视,是因为人们认识到复用不但能提高生产效率,而且能大大缩短开发时间和减少测试的工作量。例如,基于SOA松耦合思想的组件复用可以减少软件开发活动中大量的重复性工作。更重要的是我们在过往的金融系统开发中已经积累了大量的可用组件。故此,我们将这次项目的整个开发思路定位为基于SOA松耦合的组件复用模式。正如我们项目主管所说:复用的本质是经济问题,也正是我们这次项目的最大要求。

  (1)什么是组件复用技术?

  软件复用的主要思想是将软件看成是由不同功能成分的”组件”所组成的有机体,每一个组件在设计编写时都被设计成可以完成同类工作的通用部件,类似于传统工业中的零部件。这样当完成各种工作的组件被建立起来后,编写一特定软件的工作就变成了将各种不同组件连接起来的工作,这对于软件开发的最终质量和维护工作都有着本质的改变。

  软件组件是共生于软件复用的,基于组件的软件复用是当前复用技术研究的焦点。一般来说,软件组件是一种定义良好的、独立的、可复用的二进制代码,包括功能模块、被封装的对象类、软件框架和软件系统模型等。因此,组件复用可以是设计复用、代码复用或开发过程的其它产品复用。如程序模板、源代码或目标模块、需求说明、规格说明、程序说明、数据说明、测试说明和测试用例等。

  与面向对象编程语言不同,组件技术是一种更高层次的对象技术。它独立于语言而面向应用程序,它只规定组件的外在表现形式而不关心其实现方法。因此,组件最重要的特征是具有独立于应用的接口,这个优点可以使它不加修改或者基本不加修改就可作为一个部件和其它组件一起组装成更大的软件。所以,对于组件我们更多的理解为一种资源,一种封装良好的、可供重复使用的代码资源。这里有一点需要区分清楚的是,在一个系统中多次使用一个相同的软件成分,则不称作复用而是称作共享;而对一个软件进行修改,使它运行于新的软硬件平台也不称作复用,而是称作软件移植。

  (2)组件技术与组件化

  组件技术与组件化的区别在于组件化的关注点不在于组件本身的技术实现,而在于如何把应用系统分解成稳定、灵活、可重用的组件,在于如何利用已有的组件库组装出随需应变的应用软件。它是从一个面向组件的环境中去分析如何做出灵活、重用的组件,也可以说组件技术是组件化的基础,它为组件的工厂化生产提供技术保障。

  著名的计算机专家杨芙清教授曾指出:软件组件可分为可复用组件和不可复用组件。我们剖析一个系统就可以发现其中有三类构成成分:①通用基本组件:是指应用系统的基本构成成分,如基本的数据结构、用户界面元素等,它们大同小义的存在于各种应用系统中。②领域共性组件:是指应用系统所属领域的共性构成成分,它们存在于该领域的各个应用系统中。③应用专用组件:是指每个应用系统的特有构成成分。

  在软件系统开发中的重复劳动主要在于前两类构成成分的重复开发,在前两类中越靠底层的部分越容易复用。例如库函数、面向对象、软件组件、开发框架等。由于大部分软件的开发过程是从抽象级别较高的形态向抽象级别较低的形态演化,因而复用的级别越高,可得到的回报也越大。因为无论使用哪种技术,都需要首先形成一个个遵循一定业务规则、执行一定业务逻辑并管理一定数据,可在某一领域内多种项目中重复使用的组件。

  (3)基于SOA松耦合思想的技术架构

  作为一种深奥的、复杂的理念,SOA要么被简化等同于一些产品、技术;要么被神化为是无所不能。其实,从根本上讲SOA是针对系统开发和系统集成的一种思想方法,它的本质是为系统中分散的业务功能、封装提供标准服务的接口。因此,面向组件的SOA架构是一项令人鼓舞的技术,因为它能解决长期困扰软件开发的软件复用和软件灵活性问题。

  一般来说,紧耦合意味着应用程序的不同组件之间的接口与其功能和结构是紧密相连的,因而当需要对部分或整个应用程序进行某种形式的更改时,它们就显得非常脆弱。而在SOA架构中,它着重强调的是软件的松散耦合。它是将应用程序的不同功能单元通过定义良好的接口和契约联系起来,藉此让软件应用系统变得灵活。松耦合系统的好处有两点:一是它的灵活性;另一个是当组成整个应用程序的每个组件的内部结构和实现逐渐地发生改变时,它能够继续的存在。

  简单的说,SOA是一种分布式和减少服务和服务之间耦合的架构模式。这种耦合性减少与OO方法中以对象和对象之间关系的耦合性减少是不一样的。对于对象和对象之间关系的耦合性减少,我们可用IOC设计模式很好的解决,但OO方法却逐渐不能满足用户需求变更加速和老系统集成的需求;而SOA耦合性的减少是把服务和服务之间的耦合性减少,这样就能很好的解决异构系统的集成问题。换句说就是,在开发过程中我们可以利用SOA思想做概要分析和概要设计,而利用OO思想做详细设计。

  三.应用组件复用加速软件开发

  软件开发已经不再是追求艺术创作的过程,而是尽可能地朝着工业化、标准化的方向发展。曾有程序员戏称:软件开发的最佳方法是不进行任何开发。软件复用正是朝着这一方向努力的一个表现,因此面向组件的软件复用技术是近几年研究的热点,它正改变着软件系统的开发方式。总结我所参与的这个金融系统项目的开发经验,应用基于SOA松耦合思想的组件复用主要有以下几个步骤:

  (1)建立复用指导思想和树状线路图

  在这次项目的复用中,给我最大的感受是要想创造可以重用的代码资源,最重要的是要让开发人员形成一些正确观念。例如,重复开发就是浪费,不要重复发明轮子等。因为有可能任何一项开发工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人或资料,发挥资源的杠杆效应。建立复用指导思想还包括建立一个团队内部关于组件复用的树状线路图,这样在开发时就可以做到时时检视了。

  (2)识别和开发最可能被复用的组件

  大多数软件人员进行软件开发时并没有考虑到复用,因此他们生产出的组件可复用性很差。例如,大量的程序只能运行在特定的环境中,程序模块存在着多种多样的调用关系、没有独立性和封装性、没有标准的接口等,使到在以后的开发中很难将其复用。因此,基于SOA复用思想的软件开发模式的一个很重要的方面:首先是要识别最可能复用的组件,然后还要将复用性较差的组件改造成具有较高可复用性的组件。

  (3)建立组件复用库/目录

  一般来说,组件的分类和组件的提取是密切相关的。因此,为了方便组件复用者找到需要的组件,我们需要针对组件复用树状线路图建立一个复用库和复用目录。所以,有效的复用组件管理方法应该是一旦开发出一定数量的组件后,就要对组件要进行分类,并将其存入到组件库中,以保证整个开发团队都能很方便的共享和使用这些复用组件。

  (4)有效地复用已存在的组件

  一般来说,基于复用的软件开发者与传统的软件开发者的工作是有很大的不同的。例如,他们不必一切从零做起,也不必编写所有的程序代码。他们的主要任务是使用已存在组件库中的组件去构造满足用户需求的软件系统,或在已有的可复用组件的基础上组装应用系统。一般包括这三个环节:组件提取、组件的适应性修改和组件组装。

  因此,要想高效的让开发人员利用可复用组件进行开发,必须要解决开发人员的习惯和意识问题。简单的说,就是要在开发团队全范围内建立善用资源的意识和氛围,要让大家明白到想做聪明的开发人员就要最大程度的利用已有的组件和代码,而不是一接到任务就埋头去开发和写代码。事实上,实践也证明复用已有组件比重新开发会有更高的效率,而且对测试也更有好处。

  总而言之,使用基于SOA松耦合思想的组件复用去构造新的软件系统,在本质上是为了快速适应不断变化的需求,它的重要性要重于软件复用技术本身。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 购买应用集成工具可以采取平衡做法

    购买应用程序集成工具需要好好看看你的公司需求,知道从供应商里面要寻找哪些关键功能。