浅谈软件复用技术的四个关键问题
[摘要]软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
60年代出现的软件危机导致了有关软件复用的研究。
软件复用是指重复使用“为了复用目的而设计的软件”的过程。
通过软件复用,在应用系统开发中可以充分利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率。
同时,通过复用高质量的已有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
[关键词]软件复用技术软件危机软件复用
一、引言
软件复用的概念是由McI1roy在1968年的NATO软件工程会议上提出的。
McI1roy提出了发展以可复用源代码软件构件为基础的软件工业和利用COTS (Component Off The Shelf)构件工业化生产软件的观点。
软件复用被认为是解决所谓“软件危机”的技术上可行的、现实的解决方案。
软件复用的对象包括软件开发过程中所使用和产生的各种资源:源代码、各种文档、测试数据、设计方法、体系结构等等,总称可复用构件。
软件复用是为了改善软件生产的资金投入大、开发周期长、软件产品失败率高等不能满足市场需求的现状,充分利用已有的高质量软件产品和部件,经过组装集成快速搭建应用软件系统的软件开发理论。
经历了结构化程序设计、面向对象技术、软件构件技术的发展,软件复用已经成为加速软件工业化早日实现的重要力量。
二、面向对象技术
面向对象技术提供了新的认知和表示世界的思想和方法。
面向对象方法就是用对象来作为描写客观信息的基本单元,它包括封装在一起的对象标识、对象属性和对象操作。
面向对象技术是以对象为基础来构件系统的,可以通过一个指向对象的指针或对它的引用,就可以访问这个对象的所有数据和方法,用面向对象技术建造起来的系统不仅易于管理和使用,而且源代码的可读性高。
如果没有对象,在程序中必须保存大量的变量和一个个孤立的函数,然后在这些没有多大关连的变量和函数之间进行变量传递,这不仅给编程增加了很大的复杂性,而且使得程序的可读性极差。
通过把这些有关连的变量和函数封装在一个对象中,大大的简化了编程的复杂性,提高了程序可读性,并且提供了一种抽象,该抽象是可扩展性的关键。
正是因为面向对象技术的特点,封装和继承使得面向对象技术成为了软构件技术的基础。
面向对象技术具有以下一些特性能够使它和软件复用相结合:
(一)对象是可重用构件的雏形,面向对象技术中,对象(类)已经充当了构成系统的基本单元,由于它的一系列特有的性质,使它具有了可重用构件的雏形;
(二)对象是部件化了的软件单元,具有通用性;
(三)对象具有抽象性:具有用户定义的复杂的数据类型功能,使它能表示一些复杂工程领域的问题;
(四)对象具有封装性:保证了对象类及对象可作为独立性很强的模块,为大型软件提供可靠的软件集成的单元模块;
(五)对象具有继承性:提供了一种代码共享的手段,可以避免重复代码的设计,使得面向对象方法确实行之有效,同时,可以通过继承机制不断扩充功能,而不影响原有软件的运行;
(六)对象具有易维护性:对象实现了抽象和封装,使其中可能出现的错误限制在自身,不会向外传播,易于检错和修改。
面向对象技术的这些特性,使其很容易与软件复用技术相结合,OO(Object Oriented)技术中类的聚集、实例对类的成员函数或操作的引用、子类对父类的继承等使软件的可重用性有了较大的提高,而且这种类型的重用容易实现,所以这种方式的软件重用发展软快,并且能够使软件开发过程向缩短软件开发周期、降低成本和提高软件质量的方向发展。
三、三种复用方式
(一)“原封不动”复用
寻找“原封不动”使用的现存类,提供所需要的特性。
此时。
所需要的类已经存在。
现在建立它的一个实例,用以提供所需要的特性。
这个实例可直接为应用软件利用,或者它可以用来做另一个类的实现部分。
通过复用一个现存类.可得到不加修改就能工作的已测试的代码。
由于大多数面向对象语言的两个特性,即界面与实现的分离(信息隐蔽和封装1,这种复用一般是成功的。
(二)进化性复用
此时,一个能够完全符合要求特性的类可能并不存在,但是,如果具有类似功能的类存在,则可以通过继承。
由现存的类渐进式地设计新类。
如果新类将要成为一个现存类的子类,它应当继承这个现存类的所有特性。
然后新类可以对需要追加的数据及必需的功能作局部定义还可以将几个现存类的特性混合起来开发出新的类.每个现存类是某些概念的模型.混合起来则产生了一个为特定待开发软件所用的具有多重概念的类。
有时。
一个现存的类可能会提供某些新类中需要的特性以及某些新类中不需要的特性。
因此,可先建立一个新的更抽象自。
使之成为要设计的类的父亲。
然后。
修改现存类以继承新的父类。
(三)“废弃性”开发
即不用任何复用开发一个新类。
任何一个类,只要它的开发不涉及现存类。
就可看作是一个新的继承结构的开始。
因此,将建立两种类:一种是抽象类。
它概括了将要表达的概念;另一种是具体类。
它要实现这个概念。
虽然不需要使用现存类来演变成新类,但还是有复用的可能性。
在新类的实现时,通过说明一些现存类的实例。
可以加快一个类的实现。
像表格、硬件接口等都可以用来作为一个新类的局部。
四、开放系统技术
开放系统技术的基本原则是在系统的开发中使用接口标准,同时使用符合接口标准的实现。
这些为系统开发中的设计决策,特别是对于系统的演化,提供了一个稳定的基础,同时,也为系统(子系统)间的互操作提供了保证。
开发系统技术具有在保持(甚至是提高)系统效率的前提下降低开发成本、缩短开发周期的可能。
对于稳定的接口标准的依赖,使得开发系统更容易适应技术的进步。
当前,以解决异构环境中的互操作为目标的分布对象技术是开放系统技术中新的主流技术。
开放系统技术为软件复用提供了良好的支持。
特别是分布对象技术使得符合接口标准的构件可以方便地以“即插即用”的方式组装到系统中,实现黑盒复用。
这样,在符合接口标准的前提下,构件就可以独立地进行开发,从而形成独立的构件制造业。
五、基于构件的软件开发
基于构件的软件开发(Component.Based Soft.ware Development,CBSD)的理论建立在软件工程、软件复用和分布式计算等基础之上,已经成为新一代的软件开发方法。
而且CBSD方法在CORBA、EJB和DCOM等构件标准的支持下已经有了相当快的发展。
在CBSD中,一个应用系统是由一些标准的构件(通用的和专用的)组装而成,这些构件可以通过商业采购、定制或自主开发获得。
不像传统的软件开发,基于构件的软件开发重在软件的集成,而不是软件的编程。
构件开发常常成为第三方的任务,他们定义了一组预制好的标准构件,以适应某些特殊需求。
软件开发人员只需将这些构件搭建起来,构成一个应用系统。
构件模型(标准)、构件的生产(创建)、构件库系统、构件的复用和组装(集成)是CBSD研究的主要内容。
图1给出了基于构件的软件开发过程。
目前,业界已存在了大量的CBSD概念、方法和工具,但是CBSD还未发展成熟,还需解决的关键问题有:必须建立一个完善的CBSD概念框架;必须有切实可行的构件描述方法和技术;建立一个合理的过程模型;支持描述技术和过程模型的辅助开发工具等。
六、总结
毫无疑问,软件复用将大大提高软件开发的效率,提高软件的质量。
软构件
技术是软件复用的基础和关键因素,面向对象技术是一种强有力的软件开发方法,这种开发方法的特点非常适用于软构件的开始,为软构件的开发和复用提供了基本的技术保证。
参考文献:
[1] 林振荣,李洪,伍军云. 软件复用过程中构件技术的研究[J]. 科技广场,2005,(05) .
[2] 向阳. 浅谈软件复用技术的发展[J]. 中国科技信息,2005,(04).
[3]杨芙清,梅宏,吕建,金芝. 浅论软件技术发展[J] .电子学报,2002,(S1) .
[4]杨芙清,梅宏,李克勤. 软件复用与软件构件技术[J] .电子学报,1999,(02) .
[5]杨芙清. 软件工程技术发展思索[J] .软件学报,2005,(01) .
[6]尹锋. 软件工程的若干热点技术发展现状与展望[J] .长沙大学学报,2006,(05) .
注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
”。