(无锡商业职业技术学院信息工程学院, 江苏 无锡 214153)
随着软件需求的激增、软件规模和复杂度的不断增大,大量资源被浪费在重复开发上,传统的开发方法无法适应用户在质量、效率等方面对软件的需求。软件复用又称软件重用或软件再用,是指重复使用“为了复用目的而设计的软件”的过程,是利用现有的软件成分来构造新的软件系统的过程。近十年来软件复用被认为是解决软件危机、提高软件生产率和质量的最有效和最具潜力的手段。
软件复用不仅仅是对程序的复用,还包括对软件生产过程中任何活动所产生的制成品的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码 (源程序)、测试用例、文档与使用手册等等。按抽象程度的从低到高,软件复用可以被划分为如下5个级别[1]:
(1)代码的复用,包括目标代码和源代码的复用。当前大部分编程语言的运行支持系统都提供了连接(Link)、绑定(Binding)等功能来支持目标代码的复用。源代码的复用级别略高于目标代码的复用,程序员在编程时把一些想复用的代码段复制到自己的程序中,但这样往往会产生一些新旧代码不匹配的错误。大规模的实现源代码的复用只有依靠含有大量可复用构件的构件库,如”对象链接及嵌入”(OLE)技术。
(2)设计的复用。这种复用有三种途径,第一种途径是从现有系统的设计结果中提取一些可复用的设计构件,并把这些构件应用于新系统的设计;第二种途径是把一个现有系统的全部设计文档在新的软硬件平台上重新实现,也就是把一个设计运用于多个具体的实现;第三种途径是独立于任何具体的应用,有计划地开发一些可复用的设计构件。
(3)分析的复用。可复用的分析构件是针对问题域的某些事物或某些问题的抽象程度更高的解法,受设计技术及实现条件的影响很少,所以可复用的机会更大。复用的途径也有三种:从现有系统的分析结果中提取可复用构件用于新系统的分析;用一份完整的分析文档作输入产生针对不同软硬件平台和其它实现条件的多项设计;独立于具体应用,专门开发一些可复用的分析构件。
(4)测试信息的复用,主要包括测试用例的复用和测试过程信息的复用。前者是把一个软件的测试用例在新的软件测试中使用,或者在软件作出修改时在新的一轮测试中使用。后者是在测试过程中通过软件工具自动地记录测试的过程信息,包括测试员的每一个操作、输入参数、测试用例及运行环境等一切信息。
因为软件的开发过程主要是从抽象级别较高的形态向抽象级别较低的形态演化的正向过程,所以较高级别的复用容易带动较低级别的复用。开发者可充分利用其它已有的分析件和设计件,自己设计或编程,完成系统的剪裁、扩充、维护、演化等活动。
软件复用的过程实际上是一系列的相关技术的综合运用过程。这些技术包括软件构件技术、领域工程、软件构架技术、软件再工程、开放系统技术、软件过程、CASE技术以及一些非技术因素。实现软件复用的各种技术因素和非技术因素是互相联系的, 它们互相结合共同影响软件复用的实现。
可复用信息依赖于特定的问题和特定的问题解决方法,具有领域特定性。为此,在识别、获取和表示可复用信息时,应采用面向领域的策略。领域的需求具有一定的稳定性,使得获取的信息可以在较长时间内多次复用。领域工程是一组相似或相近系统的应用工程建立基本能力和必备基础的过程,覆盖了建立可复用软件构件的所有活动,可划分为以下三个阶段[2]:
(1)领域分析。这个阶段的主要目标是获得领域模型。领域模型描述领域中系统之间的共同需求。这个阶段的主要活动包括确定领域边界,识别信息源,分析领域中系统的需求,确定哪些需求是被领域中的系统广泛共享的,哪些是可变的,从而建立领域模型。
(2)领域设计。这个阶段的目标是获得领域构架(Domain-Specific Software Architecture,简称 DSSA)。DSSA描述了领域模型中表示需求的解决方案,它不是单个系统的表示,而是能够适应领域中多个系统需求的一个高层次的设计。建立了领域模型之后,就可以派生出满足这些被建模的领域需求的DSSA。由于领域模型中的领域需求具有一定的变化性,DSSA也要相应地具有变化性。
(3)领域实现。这个阶段的主要行为是定义将需求翻译到由可复用构件创建系统的机制。根据所采用的复用策略和领域的成熟和稳定程度,这种机制可能是一组与领域模型和DSSA相联系的可复用构件,也可能是应用系统的生成器。
这些活动的产品(可复用的软件构件)包括:领域模型、领域构架、领域特定的语言、代码生成器和代码构件等。
研究实践表明,软件复用在特定领域内更容易获得成功。因此,领域工程受到高度重视,已有许多研究成果。有代表性的工作包括卡耐基梅隆大学的软件工程研究所(CMU/SEI)提出的面向特征的领域分析方法(Feature Oriented Domain Analysis method,简称FODA),它支持对某领域中系统共性和个性的发现、分析和文档记录。
对于软件架构,目前还没有一个统一的定义。典型定义是,软件架构是对构成系统的构件接口、行为模式、协作关系等体系问题的决策总和。研究软件构架有利于发现不同系统的高层共性,保证灵活和正确的系统设计,对系统的整体结构和全局属性进行规约、分析、验证和管理。
这样,在基于复用的软件开发中,为复用而开发的软件构架可以作为一种大粒度的、抽象级别较高的软件构件进行复用,而且软件构架还为构件的组装提供了基础和上下文。构架描绘的是系统的蓝图,是沟通软件需求与软件设计的一座桥梁,使软件复用从代码复用发展到设计复用和过程复用。
现存大量的遗产软件系统由于技术的发展,正逐渐退出使用,如何对这些系统进行挖掘和整理,得到有用的构件;己有的构件随着时间的流逝会逐渐变得不可使用,如何对它们进行维护,以延长其生命期等等。软件再工程正是解决这些问题的主要技术手段。软件再工程是一个工程过程,它将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式[3]。再工程的基础是系统理解,包括对运行系统、源代码、设计、分析、文档等的全面理解。但在很多情况下,由于各类文档的丢失,只能对源代码进行理解,即程序理解。
开放系统技术的基本原则是在系统的开发中使用接口标准,同时使用符合接口标准的实现。 开放系统技术为软件复用提供了良好的支持。特别是分布对象技术使得符合接口标准的构件可以方便地以“即插即用”的方式组装到系统中,从而实现黑盒复用。这样,在符合接口标准的前提下,构件就可以独立地进行开发,从而形成独立的构件制造业。
软件过程又称软件生存周期过程,是软件生存周期内为达到一定目标而必须实施的一系列相关过程的集合。一个良好定义的软件过程对软件开发的质量和效率有着重要影响。然而,基于构件复用的软件开发过程和传统的一切从头开始的软件开发过程有着实质性的不同,探讨适应于软件复用的软件过程自然就成为一个迫切的问题。
计算机辅助软件工程(Computer Aided Software Engineering,简称 CASE)可使系统按照开发商规定的应用规则,由计算机自动生成合适的计算机程序。软件复用同样需要CASE技术的支持。CASE技术中与软件复用相关的主要研究内容包括:可复用构件的抽取、描述、分类和存储;可复用构件的检索、提取和组装;可复用构件的度量等等。
除了上述的技术因素外,软件复用还涉及人的素质、教育、法律等非技术因素问题,如:知识产权问题;保守商业秘密的问题;复用前期投入的经济考虑;标准化问题;机构组织如何适应复用的需求;管理方法如何适应复用的需求;开发人员知识的更新;创造性和工程化的关系;开发人员的心理障碍等等。
基于构件的软件复用是迄今为止最优秀的软件复用手段,是支持软件复用的核心技术,并在近几年迅速发展成为受到高度重视的一门学科分支。构件技术的应用必须遵循一些共同的规范,当前流行的有OMG的CORBA、SUN的EJB和微软的DCOM。
构件是具有内部结构和功能的软件构成元素,可通过标准接口独立提供特定服务,并且可由一些连接器及相关规则与其它构件组装成符合要求的新软件或构件。从抽象程度来看,面向对象技术已达到了类级复用,因为它是以类为封装单位的。但这样的复用粒度还太小,不足以解决异构互操作和效率更高的复用。构件将抽象的程度提到一个更高的层次,它是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。整个构件隐藏了具体的实现,只用接口对外提供服务。
因此,在基于构件的软件开发方法下,程序开发模式也相应地发生了根本变化,不再是“算法+数据结构”,而是“构件开发+基于构架指导的构件组装”。基于构件的软件开发过程(Component-based Software Development,简称CBSD)有五个主要的组成部分:需求分析、构件库、构件的获取、构件的复用、构件的组装。计算机软件开发技术从面向对象技术(OO)和分布式面向对象技术(DOO)发展到软件构件技术,并向构件技术方向演变,软件构件以至组件技术为应用软件产品化提供了理论基础,这是应用软件产业化发展的基本方向。
国际上,软件复用在领域工程、构件及构件库的标准化、构件组装技术、基于复用的软件开发过程和复用成熟度模型等方面已经取得了重大成功。国内的相关研究也较多,如北京大学软件工程研究所提出的青鸟构件模型,它的目标是致力于软件复用,以构件作为软件复用的基本单位,提供一种有效的管理和检索构件的工具。
[1]张韧志,田丽芳,葛文庚.软件复用探讨[J].电脑知识与技术,2009,5(23):6452-6453.
[2]张友生,等.软件体系结构[M].清华大学出版社, 2006.11:6.
[3]杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报,1999,27(2):68-75.