4.5.1 软件复用的概念
  软件复用就是将已有的软件成分用于构造新的软件系统。
  从上述定义中,我们知道软件复用是指在构造新系统时使用已有的软件成分,而不是说在一个系统中多次使用一个相同的软件成分,这种情况称为共享。在这里,可被复用的软件成分被称为可复用构件,它可以是从已有软件中提取的,也可以是为了复用而专门开发的。
  软件复用不仅仅局限于对程序的复用,它包括对软件开发过程中任何活动产生结果的复用,如项目计划、成本估计、体系结构、需求规格说明、分析模型、设计模型、源程序、技术文档、用户界面、数据结构、测试用例等。
  按照抽象程度的高低,软件复用可以分成以下类型:
  (1) 程序代码的复用
  程序代码的复用包括目标代码和源代码的复用。目标代码复用的早期例子是子程序库的使用,当前大部分编程语言的运行支持系统都提供了连接、绑定等功能来支持这种复用。近年来,一些新技术将程序复用推进到一个新的水平,如OLE技术等,既支持在源程序级定义构件并用以构造新的系统,又使这些构件在目标代码级上仍然是一些独立的可复用构件。
  (2) 设计结果的复用
  设计结果的复用比源程序的抽象级别更高,一是从现有系统的设计结果中提取一些可复用的设计构件,将其应用于新系统的设计;二是将一个现有系统的全部设计文档在新的软硬件平台上重新实现,即将一个设计运用于多个具体的实现;三是独立于任何具体应用,有计划地开发一些可复用的设计构件。
  (3) 分析结果的复用
  可复用的分析构件是针对问题域的某些事物或某些问题的抽象程度更高的复用,一是从现有系统的分析结果中提取一些可复用构件用于新系统的分析;二是用一份完整的分析文档在不同的软硬件平台上产生多个设计;三是独立于具体应用,专门开发一些可复用的分析构件。
  (4) 测试信息的复用
  测试信息的复用主要包括测试用例的复用和测试过程信息的复用,即将一个软件的测试用例在新的软件测试中使用,或者在测试过程中通过软件工具自动地记录测试的过程信息。

  一个软件构件只有在多个系统中被使用才能真正称得上是"可复用构件",因此可复用构件应该具备以下条件:
  (1) 独立性
  一个可复用构件应该解决一个相对独立的问题,后者解决一个大问题中某个相对独立的饿部分,构件对外的联系或接口应尽可能地少。
  (2) 完整性
  构件应该对某个问题或者一个问题的某个局部提供完整的解决,不要遗留许多缺口,让复用者做大量的补充。
  (3) 可标识性
  构件所解决的问题是可以标识的,即可以明确构件到底是解决什么问题的。
  (4) 一般性
  构件所解决的问题,应该在同类应用中具有一般性。
  (5) 适应性
  构件的设计应该追求较高的适应性。
  (6) 可靠性
  可复用构件的可靠性比普通软件有更高的要求,不仅要求它对目前正在使用它的系统可靠,而且要求它对预计将要使用它的系统也是可靠的。
  (7) 标准化
  标准化对于软件复用是至关重要的,因此,可复用构件必须符合一定的标准,否则将很难在新的系统中被复用。