UML软件工程组织

软件重用评述
王玉勇
  一、软件重用定义

软件重用(Software Reuse,又称软件复用或软件再用)的概念对于大家并不陌生。早在1968年的NATO软件工程会议上就已经提出可复用库的思想。软件重用的定义也很多,比较权威和通用的一种是:软件重用是利用事先建立好的软部品创建新软件系统的过程。这个定义蕴含着软件重用所必须包含的两个方面:

1. 系统地开发可重用的软部品。这些软部品可以是代码,但不应该仅仅局限在代码。我们必须从更广泛和更高层次来理解,这样才会带来更大的重用收益。比如软部品还可以是:分析,设计,测试数据,原型,计划,文档,模板,框架等等。

2. 系统地使用这些软部品作为构筑模块,来建立新的系统。

二、软件重用的好处

软件重用会带来以下好处:
  1. 提高软件生成率。
  2. 缩短开发周期 。
  3. 降低软件开发和维护费用。
  4. 生产更加标准化的软件。
  5. 提高软件开发质量。
  6. 增强软件系统的互操作性。
  7. 减少软件开发人员数量。
  8. 使开发人员能比较容易的适应不同性质的项目开发。

三、软件重用形式

软件重用的形式(或手段)很多,重用的级别有大有小。主要有以下几种:
  1. 源代码模块或者类一级的重用。这是最基本的软件重用形式。
  2. 二进制形式的重用。如组件重用。
  3. 组装式重用。比如:把好几个应用程序的功能集成在一起。例如,要建立一个门户站点应用,登陆用户既可以查询天气情况,又可以查看股市行情,还可以在线购物。这些功能由不同网络应用服务供应商提供,通过这种组装式重用,就可以非常容易地把上述功能都集成到新的门户站点中。
  4. 分析级别重用。
  5. 设计级别重用。
  6. 软件文档重用。

四、软件重用分类

为软件重用分类比较困难,因为软件重用技术众多,一种重用技术可以包括多种重用形式。比如说:框架即可以包括代码级重用,也可以包括设计级重用。有一种分类方法是按照软件重用所应用的领域范围,把重用划分为两种:横向重用和纵向重用。

1. 横向重用是指重用不同应用领域中的软件元素,例如数据结构、分类算法、人机界面构件等。标准函数库是一种典型的原始的横向重用机制。

2. 纵向重用是指在一类具有较多公共性的应用领域之间进行软部品重用。因为在两个截然不同的应用领域之间实施软件重用非常困难,潜力不大,所以纵向重用才广受瞩目,并成为软件重用技术的真正所在。纵向重用活动的主要包括以下几个步骤:

  1) 首先进行域分析。根据应用领域的特征及相似性预测软部件的可重用性。
  2) 然后进行软部品的开发。一旦确认了软部件的重用价值,即可进行软部品的开发并对具有重用价值的软部品进行一般化,以便它们能够适应新的类似的应用领域。
  3) 最后,软部件及其文档即可进入软部品库,成为可供后续项目使用的可重用资源。

五、流行的软件重用技术

最理想的重用技术是它的重用产品能够和用户的需求完全一致,不需要用户做任何自定义,并且能够无需用户学习就能够被使用。然而,一种重用技术能够适合今天,可能不适合明天。一个重用产品越是能够被自定义,它越是可能在一个特定的环境下被使用,但是这也需要用户进行更多的学习,研究和实践。

自从软件重用思想产生以来,计算机科学家和软件工程师就致力与软件重用的技术的研究和实践。在30多年的时间内,出现多种软件重用技术,如:库函数,模板,面向对象、设计模式、组件、框架、构架。

下面是应用程序框架和其它三种软件流行的重用技术的比较。

1. 库函数

库函数是很早的软件重用技术。很多编程语言为了增强自身的功能,都提供了大量的库函数。对于库函数的使用者,他只要知道函数的名称,返回值的类型, 函数参数和函数功能就可以对其进行调用。

2. 面向对象

面向对象技术是近三十年来学术界和工业界研究和应用的一个热点。面向对象技术通过方法、消息、类、继承、封装、和实例等机制构造软件系统,并为软件重用提供强有力的支持。面向对象方法已成为当今最有效、最先进的软件开发方法。与函数库对应,很多面向对象语言为应用程序开发者提供了易于使用的类库,如VC++中的MFC。

3. 模板

模板相当于工业生产中所用的“模具”。有各种各样的模板(如文档模板,网页模板等),利用这些模板可以比较快速地建立对应的软件产品。模板把不变的封装在内部,对可能变化的部分提供了通用接口,由使用者来对这些接口进行设定或实现。

4. 设计模式

设计模式作为重用设计信息的一种技术,在面向对象设计中越来越来流行。设计模式描述了在我们周围不断重复发生的问题,该问题的解决方案的核心和解决方案实施的上下文。设计模式命名一种技术并且描述它的成本和收益,共享一系列模式的开发者拥有共同的语言来描述他们的设计。

5. 构件

普通意义上的构件应从以下几个方面来理解:
  1) 构件应是抽象的系统特征单元,具有封装性和信息隐蔽,其功能由它的接口定义。
  2) 构件可以是原子的,也可以是复合的。因此它可以是函数,过程或对象类,也可以是更大规模的单元。一个子系统是包含其它构件的构件。
  3) 构件是可配置和共享的,这是基于构件开发的基石,且构件之间能相互提供服务。

 6. 构架

普通意义上的构架应从以下几个方面来理解:
  1) 构架是与设计的同义理解,是系统原型或早期的实现。
  2) 构架是高层次的系统整体组织。
  3) 构架是关于特定技术如何合作组成一个特定系统的解释。

 7. 框架

如果把软件的构建过程看成是传统的建筑过程;框架的作用相当于为我们的房屋搭建的“架子”。框架从重用意义上说,是一个介于构件和构架之间的一个概念。构件,框架和构架三者的主要区别在于:对重用的支持程度的不同:
  1) 构件是基础,也是基于构件开发的最小单元。构件重用包括可重用构件的制作和利用可重用构件构造新构件或系统,
  2) 一个框架和构架包含多个构件。这些构件使用统一的框架(构架)接口,使得构造一个应用系统更为容易。
  3) 框架重用包括代码重用和分析设计重用,一个应用系统可能需要若干个框架的支撑,从这个意义上来说,框架也是一个“构件”的同时,框架又是一类特定领域的构架。
  4) 构架重用不仅包括代码重用和分析设计重用,更重要的是抽象层次更高的系统级重用。
  5) 框架和构架的重用层次更高,比构件更为抽象灵活,但也更难学习和使用。

六、软件重用技术的未来

有人预测:到2003年至少70%的新应用程序将会由构筑模块(building blocks)构成,这些构筑模块(如软构件和应用程序框架)加快了产品的开发速度和企业的应变能力。以设计模式,框架和商业构件形势出现的软部品可以通过重用显著的提升开发品质和生产力,重用反过来也可以显著的降低成本和缩短软件开发周期。未来应用程序的开发依存于一个开放的,便利构件选择和装配的综合体系结构。信息系统组织必须为基于构件开发制定一项战略。

 

版权所有:UML软件工程组织