技术开发 频道

组件复用让软件开发事半功倍

【IT168 专稿】

  软件技术的不断发展给软件开发者带来了一个大问题:软件系统规模越来越庞大,开发周期越来越长,在一个系统中集成了各种功能使系统过于复杂,大多数功能不能灵活地装卸、单独升级或重复利用。而在削减开发成本的压力下,提高应用程序开发效率和质量,减少上市时间都使得开发人员承受着巨大的压力。
  
  软件开发已经不再是追求艺术创作的过程,而是尽可能地朝着工业化、标准化的方向发展。有人戏称:软件开发的非常好的方法是不进行任何开发。软件复用则正是朝着这一方向努力的一个表现。大多数有丰富经验的程序员都拥有自己的私人开发库,可以使他们有大约30%的复用代码来开发软件。面向组件的软件复用技术已成为近几年软件复用技术研究的热点,它正改变着软件系统的开发方式。

一.什么是软件复用?

  在越来越多的软件开发中,软件复用计划正慢慢开始成为标准开发过程中的强制执行部分。软件复用可以极大地降低开发成本和复杂性,但只有极少数的开发团队领悟到复用的潜力,将复用技术融入到软件开发生命周期之中。
  
  (1)什么是软件复用
  软件复用(Software Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的成本。软件复用也是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
  
  因此,软件复用不仅仅是对程序的复用,它还包括对软件开发过程中任何活动所产生的制成品的复用,如项目计划、可行性报告、需求定义、分析模型、设计模型、详细说明、源程序、测试用例等。这里有一点需要区分清楚的是,在一个系统中多次使用一个相同的软件成分,则不称作复用,而称作共享;对一个软件进行修改,使它运行于新的软硬件平台也不称作复用,而称作软件移植。

  依据复用的对象,可以将软件复用分为产品复用和过程复用。产品复用指复用已有的软件组件,通过组件集成得到新系统。过程复用指复用已有的软件开发过程,使用可复用的应用生成器来自动或半自动地生成所需系统。过程复用依赖于软件自动化技术的发展,目前只适应于一些特殊的应用领域。
  
  产品复用是目前主流的途径,依据对可复用信息进行复用的方式,可以将软件复用区分为黑盒复用和白盒复用。黑盒复用指对已有组件不需作任何修改,直接进行复用。这是理想的复用方式。白盒复用指已有组件并不能完全符合用户的需求,需要根据用户需求进行适应性修改后才使用。实际上,在大多数应用的组装过程中,组件适应性修改是必需的。
  
  (2)什么是组件复用?
  软件复用的主要思想是将软件看成是由不同功能成分的“组件”所组成的有机体,每一个组件在设计编写时都被设计成可以完成同类工作的通用部件。这样,当完成各种工作的组件被建立起来后,编写一特定软件的工作就变成了将各种不同组件连接起来,这对于软件产品的最终质量和维护工作都有本质的改变。
  
  因此,软件组件(Software components)是共生于软件复用的,基于组件的软件复用是产品复用的主要形式,软件组件技术是当前复用研究的焦点。一般来说,软件组件是一种定义良好的、独立的、可复用的二进制代码,包括功能模块、被封装的对象类、软件框架和软件系统模型等。与面向对象编程语言不同,组件技术是一种更高层次的对象技术。它独立于语言,面向应用程序,只规定组件的外在表现形式,而不关心其实现方法。因此,组件最重要的特征是具有独立于应用的接口,这个优点可以使它不加修改或者基本不加修改就可作为一个部件和其它组件一起组装成更大的软件。
  
  在软件生命周期各阶段,组件复用可以是设计复用、代码复用或开发过程的其它产品复用。如程序模板、源代码或目标模块、需求说明、规格说明、程序说明、数据说明、测试说明和测试用例等。

二.软件复用的核心技术:组件复用

  软件组件是软件提供业务或技术功能的基本单元或元素,这些单元可以独立地部署。业务组件(Business components)是执行业务逻辑、遵循一定的业务规则并且管理相应的数据;而技术组件(Technical components)则是提供相应的平台以便业务组件可以运行,例如权限管理、组件管理等。
  
  (1)技术层面的复用
  通常包含三类: ①通用基本组件: 是应用系统的基本构成成分,如基本的数据结构、用户界面元素等,它们大同小义的存在于各种应用系统中。②领域共性组件: 是应用系统所属领域的共性构成成分,它们存在于该领域的各个应用系统中。③应用专用组件: 是每个应用系统的特有构成成分。应用系统开发中的重复劳动主要在于前两类构成成分的重复开发。
  
  在应用系统的前两类中,越靠底层的部分越容易复用,所以人们在软件复用方面的研究和应用经历了从底层到高层的过程,先后经历了库函数、面向对象、软件组件、开发框架等。目前各种开发框架复用已经得到广泛应用,例如在系统整体结构设计规划,包括全局组织与控制结构,组件间通信、同步和数据访问的协议,伸缩性和性能设计选择等。由于开发框架本身的通用性造成其组件粒度比较小,抽象程度比较高。所以,开发框架复用覆盖了可复用软件组件的所有活动。当开发同一领域中的新应用时,可以根据开发模型复用确定新应用的需求规格,并以此为基础选择可复用组件进行组装,从而形成新系统。
  
  (2)业务层面的复用
  许多开发者的软件复用大多是从技术角度出发的,例如J2EE组件框架是一个以库、类和接口形式提供的基础架构,最终构成应用的业务逻辑和表现/控制逻辑则要由建立在这个框架上的业务组件实现。而实际上,应用软件最终要解决的却是应用问题或者说是业务问题,如果软件能够在更高层次的业务层面上进行大范围复用,那么对提高软件开发效率的作用将会更大。
  
  由于大部分软件的开发过程是从抽象级别较高的形态向抽象级别较低的形态演化,所以较高级别的复用容易带动较低级别的复用,因而复用的级别越高,可得到的回报也越大。因为无论使用哪种技术,都需要首先形成一个个遵循一定业务规则、执行一定业务逻辑并管理一定数据,可在某一领域内多种项目中重复使用的组件。他们不同于Struts、JdonFramework、Hibernate这样的技术组件或者由技术组件形成的框架,后者并不能解决特定的业务问题,而是为业务组件提供赖以生存的运行基础。
  
  因此,组件技术正呈现业务化的发展趋势。随着技术层次组件的积累和成熟,企业应用开发迫切需要的不再是细粒度的技术组件,而是粗粒度的业务组件,以业务组件为中心的面向组件开发才能够真正提升开发速度、降低开发成本,并改善软件质量。

三.主流组件复用技术

  面向对象技术的组件模型为软件体系结构设计和大型应用软件开发给予了强有力的支持,目前已经为开发者广泛接受。现在主要有两种组件模型统治着市场:微软的OLE/COM和Sun的JavaBean/EJB,它们构成了实现级组件模型工业标准的竞争与互操作并存的格局。
  
  (1)Sun/JavaBean
  JavaBean是基于Java环境,可视的、可操纵的和可复用的组件。JavaBean为软件构造工具所利用,也能通过程序接口直接操纵,Java类库中提供了相应的控制类。JavaBean系统扩展了JavaApplet以适应基于组件的软件开发所需的更复杂的软件组件。JavaBean组件模型是Sun制定的关于Bean的软件组件标准,规定设计所有Bean所依据的框架,确保Bean在具备特定功能的同时,还能被可视化软件构造工具所识别、操纵,并能将这些设计信息保存下来,指导运行时的行为。
  
  作为可视化组件,所有JavaBean都具备如下特征:内省(introspection)机制,能够告诉软件构造工具其所能完成的功能,从而允许软件构造工具在设计时对其加以操纵。用户定制(customization)机制,允许程序员在软件开发阶段利用软件构造工具改变Bean的外观和行为方式。事件(event)机制,能捕捉事件、引发事件,并将其所能产生和处理的事件告知软件构造工具。特性(properties)机制,除在软件开发阶段支持用户定制外,还使得软件系统能够在运行时刻对Bean进行加工和控制。保持(persistence)机制,保存程序员开发时利用构造工具对Bean所做的修改,并在运行时予以恢复。
  
  (2)OLE/COM
  微软的OLE/COM是基于分布式对象模型的开放标准,得到许多系统软件开发商、独立软件开发商(ISV)和用户的支持。OLE实际上是建立在组件对象模型(COM)基础上的一组高层次技术。从基本中间件功能视图的角度来说,COM支持对象的定义、创建、调度、引用及对象之间的通讯,提供接口定义语言(IDL)。
  
  COM支持由不同程序设计语言或不同编译器实现的对象之间的二进制兼容。OLE/COM结构的另一要素是Automation,允许客户程序动态构造请求(包括方法名、相关参数的类型和取值等),并将请求发送到远端对象,任何符合OLE/COM规范的对象都能自动提供其所能支持的接口信息。
  
  总而言之,软件复用在本质上都是为了快速适应不断变化的需求。但当我们过于注重软件复用时,千万需要牢记一点:快速适应不断变化的需求才是根本目的,它的重要性要重于软件复用技术本身。

0
相关文章