技术开发 频道

软件复用和基于可重用组件技术软件开发

【IT168 技术文章】

  1 引言
  
  随着人们对软件需求的不断增加,软件的功能、可操作性、智能化程度也迅速发展,从而使软件变得更加复杂、更加庞大在,开发的难度也越来越大,开发的周期越来越长、参与开发人数越来越多。为了解决这种软件危机,减少重复劳动,降低被开发软件出错的概率,软件利用技术也就应运而生。
  
  2 软件复用
  
  软件复用的思想最早是在1968年NATO的软件过程会议上提出的,在过去的几十年里,软件复用得到了越来越广泛的应用。软件复用是指在两次或多次不同的软件开发过程中重复使用相同或相似元素的过程。软件复用不同于软件移植和共享。软件移植是指对软件进行修改和扩充,使之在保留原有功能、适应原有平台的基础上,可以运行于新的软硬件平台。而复用则指在多个系统中,尤其是在新系统中使用已有的软件成分。共享是在一个系统中多次使用一个相同的软件成分。
  2.1 复用的资源
  2.1.1 二进制代码
  是指已经通过编译和测试的机器语言,不做任何修改,直接用于复用,是理想的利用方式。常见的形式有动态链接库和静态库的复用,这种复用也称为黑盒复用。
  2.1.2 源代码
  基于源代码的复用也称为白盒复用,它可根据用户需求对已有产品进行适应性修改。源代码的复用将受到开发语言和开发工具特性的一些限制。
  2.1.3 系统设计的复用
  系统设计复用有三种途径,第一种途径是从现有系统的设计结果中提取一些可复用的设计组件,并把这些组件应用于新系统的设计;第二种途径是把一个现有系统的全部设计文档在新的软硬件平台上重新实现,也就是把一个设计运用于多个具体的实现;第三种途径是独立于任何具体的应用,有计划地开发一些可复用的设计组件。
  2.1.4 分析的复用
  系统设计复用有三种途径,第一种途径是从现有系统的设计结果中提取一些可复用的设计组件,并把这些组件应用于新系统的设计;第二种途径是把一个现有系统的全部设计文档在新的软硬件平台上重新实现,也就是把一个设计运用于多个具体的实现;第三种途径是独立于任何具体的应用,有计划地开发一些可复用的设计组件。
  一般情况下抽象级别越高,它的复用受实现环境的影响较少,从而使可复用组件被复用的机会更多,且所需的修改越少。
  2.2 系统复用部分
  以常见的应用系统为例,我们来分析一下典型应用系统的代码量。
  (1)通用组件:在程序设计语言之上提供通用程序设计支持。一般用于界面标准件、数据库的操作等功能。这些组件一般跨领域使用,一般最多占典型应用系统规模的20%左右。
  (2)与具体领域有关的组件:完成软件产品的应用领域专用的功能。如应用领域是数据处理,这类组件可能包括排序软件包、文件管理软件包和杂凑函数等。这类组件一般在应用领域专用的,最多占典型应用系统规模的65%。
  (3)与具体应用系统有关的代码:此类代码是应用系统专用的代码。一般来说,应用系统专用代码不能用于其他应用系统,一般最多占典型应用系统规模的15%。
  通过上面的分析,我们可以看出软件复用有着广阔的发展前景。
  2.3 软件复用的困难
  软件利用存在多方面的困难,无论是技术问题还是非技术问题,都影响着软件复用的广泛运用。下表给出了一些研究人员对软件复用障碍的归纳。
  
  3 组件和CBSE
  
  组件技术是90年代初出现的一种新技术,它是在结构化设计和面向对象技术的基础上发展起来的,是面向对象技术之后的软件开发的标准方法体系,是面向对象的开发技术的延伸。
  3.1 组件
  组件的定义多种多样,例如:组件是经过封装、有定义完备接口的可发布软件包[CBSE 1999]。软件组件是具有接口义务的合成单元,并且明确规定了所有背景的依赖关系。软件组件是由第三方进行合成的主体,可以独立部署[Szyperski和Pfister 1997]。组件是软件实现的一种内聚包[D'Souza和Wills 1998]。从上面的定义可以看出,组件的定义中未给出任何的具体实现技术。组件的性质:组件具有独立性,能够独立的开发分发。具有接口性,所提供的服务被 明确,完备的定义,同时也明确、完备的定义了期望从外部得到服务的接口。具有合成性,能够与其它组件合成,可定制部分属性而不用修改组件本身。下图给出了一种明确定义和其它组件及组件所执行交互的组件高层模型。
  3.2 常见组件模型
  在组件规范化的过程串,许多公司做了很多的努力并取得了一定的成功。下面介绍一下常见的组件模型。
  (1)CORBA:CORBA是由OMG(对象管理集团)开发的工业版本,是用来解决以下的问题:系统独立于操作系统,系统基于网络且功能分布开各机器之间,组件开发独立于语言。
  (2)COM(组件对象模型):COM是由微软公司提出并实践的组件模型。COM是用于“便利系统能够通过独立开发的二进制组件,动态、有效地合成系统的组件重用”[BOX 1998]。COM组件是二进制层次上的组件复用,是基于接口的编程,模块间的耦合度低,易于部署和软件的升级。
  (3)EJB组件:EJB是用于开发安全、可扩展、事务型和多用户组件的一种分布式组件模型。EJB可以部署在分布式多层体系结构环境中的服务器端的软件组件,它允许把应用程序逻辑与系统级服务分开,使系统开发人员集中精力编写具体的业务处理问题,而不必关心系统的编程。每个EJB可由一个或多个Java对象组成,每个EJB是按照相同的规范开发的,Bean之间可以相互调用,实现任务的分解和进行业务处理,具有非常高的扩展性。
  (4) .Net组件
  .NET就是借鉴Java,采用XML,并远远超出Java的新的体系。.NET允许添加类似关键字的描述性声明来批注编程元素的元数据,可以实现被封装的对象类、类树、功能模块、软件框架、软件构架(或体系结构)、文档、分析件、设计模式等。
  
  4 CBSD(基于组件的系统开发)开发过程
  
  CBSD开发过程是不遵循传统的分析需求并找出组件的软件开发过程,这种过程一般会造成组件失败。因为这种过程没有考虑现有的可复用的组件,并且试图满足分析师新确定的组件要求。如果存在成熟的组件市场,同开发过程应该考虑采办组件,而不是开发组件。
  CBSD完成各种活动的方式严重依赖于组件的性质和类型。当使用不同的组件构造系统时,可能系统的各种特性完全不同。
  下表给出了CBSE与传统软件开发的比较:
  下图给出了基于组件开发中的活动:
  (1)查找:此过程是从文档定义完备的组件库中发掘出具有可能要使用的组件集合;
  (2)选择:从找到的组件集合中进一步选择合适的组件;
  (3)适配:定制所选的特定的组件,以满足用户使用组件新条件的需求的过程;
  (4)创建:如果组件经过适配也不能满足需求时,产品集成人员必须针对这种特定的应用系统开发和创建新组件;
  (5)合成:合成是联编和集成的过程;
  (6)替代:替代过程用于产品的维护。系统随着时间的进化和用户对新功能的需求,需要改正组件中的错误,并增加新的功能。老版本的组件被撤出,换上经过修改的版本;
  (7)更新组件库:当新的组件被创建或老组件被修改,为了保持组件库的正确和大适用范围,可以将新组件或更新的组件加入组件库中。在修改组件库时,要编写或修改相应的文档及不同组件版本的管理。
  
  5 结束语
  
  CBSE虽然在理论基础、体系结构、标准化等方面还有待完善,但我们相信CBSE将大大增加软件复用的程序,使软件开发进入新的时代。

 

0
相关文章