软件复用
提高软件生产力和质量的技术
软件复用(软件 Reuse)是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程,它是提高软件生产力和质量的一项重要技术。软件复用技术可以在应用系统开发中充分地利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动。
软件复用由D·麦克罗伊(D·Mcllroy)在1968年国际首次讨论软件工程的会议上正式提出,作为解决“软件危机”的一种可能方法。早期的软件复用主要是代码级复用,后来逐步扩大到需求、设计代码、文档、领域知识、体系结构等与软件产品相关的各方面。软件构件技术、软件体系结构技术、领域工程技术等是常见的软件复用技术,软件复用可以依据复用对象、可复用信息、复用方法等多个角度来进行分类,常见的分类有产品复用、过程复用、黑箱复用、白盒复用等。
软件复用技术在雷达数据处理、嵌入式开发等领域应用广泛。软件复用的应用不仅是一种技术革命,更是一种社会化的行为,是一种大众化的软件开发方法。它使得更多人能够参与到软件开发的行列中来,共同推动软件产业的发展。要真正实现软件的工业化生产方式,达到软件产业发展所需要的软件生产率和质量,软件复用是一条现实可行的途径。
发展沿革
背景
计算机的计算资源的应用可以促进社会的飞速发展,随着生产力的不断发展,出现的功能又更加复杂化,这就需要更多的新的软件的出现。但每一个新软件的开发,都必然从头开始,在每一个阶段都会不可避免的出现重复劳动,使开发效率降低。并且,软件开发在最初都会面临一些问题,其中就包括工期短、任务重、缺少骨干人员等。为了解决这个问题,人们开始探索软件复用的方法和技术,以提高软件的生产力和质量,降低软件开发和维护的成本。
起源及发展
萌芽
软件复用的正式提出是在1968年,D·麦克罗伊(D·Mcllroy)在国际首次讨论软件工程的会议上建议建立生产软组件的工厂,用软组件构成复杂系统,作为解决“软件危机”的一种可能方法。最早用于软件复用的软件成分是程序代码,软件开发人员通过使用相应的子程序名和参数,就可以在软件开发过程中重复使用这些程序代码,这是软件复用的一种原始形态。D·麦克罗伊还指出,构件其实可以按照它的方便性,操作平台,易用性进行分类,仿照其它工业模式使复杂的软件系统通过构件的标准化接口合理对接、集成,这其实是类构件的本质,是类构件最初的想法。然而,在这以后软件复用技术发展异常缓慢。
再发现期
20世纪70年代末到80年代末,软件复用技术迅速发展成为软件工程的一个重要的应用领域。1983年纽波特(Newport)、海德毕格士塔夫(Hed Biggerstuff) 和 艾伦佩蒂斯(Alan Petis)第一次在美国组织了软件复用研讨会。1984年、1987年,美国《IEEE(Institute of Electrical and Electronics Engineers)软件工程汇刊》和《IEEE软件期刊》先后出版了软件复用相关技术的专辑。
发展期
20世纪90年代,程序设计进入了基于组件的软件开发阶段,该阶段以过程为中心,强调软件开发采用组件化技术和体系结构技术,要求开发出的软件具备很强的自适应性、互操作性、可扩展性和可复用性。1991年,德国举行了第一届软件复用国际研讨会(JWSR),后来在1993年又举行了第二次软件复用研讨会。1992年,STARS项目组提交了ALOAF(基于ALOAF的分布式构件库框架模型)开放体系结构的构件库框架,实现了ALOAF规约作为该参考模型的实例。卡尔迪耶里(Caldieri)和巴西利(Basili)提出了基于复用的软件开发过程。1993年,弗里曼(Freeman)进一步拓宽了软件复用概念。为了给予软件复用技术上的帮助,这几年里欧洲重点设计了几个软件复用的项目,如ESF(Eureka 软件 工厂)等。
成熟期
一九九四年的软件复用国际研讨会议正式更名为软件复用国际会议,这标志着软件复用已经发展到一个成熟阶段,软件复用已经深入人心。此时软件复用开始受到高度重视,软件业界越来越多的人投入到软件复用的探讨大军当中,同时面向对象技术的崛起赋予了软件复用新的生命力。类库、构件等都是利用了复用的思想,微软ActiveX技术是一个很好的例子。这一切都表明了软件复用技术已经走向成熟。互联网的出现及由它引发的全球化分工为复用技术提供了一个更大的发展空间,很多软件复用相关学者正开始研究互联网上软件类库的设计思想。至2011年,软件复用领域取得一些实用成果,软件复用进入初步实用期。各厂商开发了许多支持复用的软件系统,如东芝东芝)的软件工厂,Draco,Genesis系统等。截止2018年,软件技术可以通过容器实现不同服务,也为逻辑模型提供了帮助,在日后的构件技术发展中奠定了实践基础。
分类
软件复用可以依据不同的复用对象、可复用信息、复用方法、功能需求、预算多个角度来进行分类。根据复用对象的不同,可以将软件复用分为产品复用和过程复用。根据可复用信息的不同,可以将软件复用区分为黑箱复用和白盒复用。依据复用方法的不同,软件复用按照复用过程可以将软件复用分为组合式复用和生成式复用。依据不同的功能需求(技术级别),软件复用可分为代码复用、设计复用、分析复用和测试复用。按照预算投入的不同,软件复用可分为主动型、反应型和提取型,依据软件复用的预算投入选择适合的复用类型。
依据复用对象分类
根据复用对象的不同,可以将软件复用分为产品复用和过程复用。
产品复用
产品复用指复用已有的软件构件,通过构件集成(组装)得到新系统。产品复用是目前现实的、主流的途径。
过程复用
过程复用指复用已有的软件开发过程,使用可复用的应用生成器来自动或半自动地生成所需系统。过程复用依赖于软件的发展,目前只适用于一些特殊的应用领域。
依据复用信息分类
根据可复用信息的不同,可以将软件复用区分为黑箱复用和白盒复用。
黑盒复用
黑盒复用(Black-box)指对已有产品或构件不需作任何修改,直接进行复用,这是理想的复用方式。
白盒复用
白盒复用(White-box)是指已有构件并不能完全符合用户需求,必须根据用户需求对已有产品进行适应性修改后才可使用。而在大多数应用 的组装过程中,构件的适应性修改是必需的。
依据复用方法分类
依据复用方法的不同,软件复用按照复用过程可以将软件复用分为组合式复用和生成式复用。
组合式复用
采用组合式复用技术时,对己有构件不作修改或作部分修改,就将构件组装在一起,从而构造出新的目标系统。UNLX中的Shell语言和管道采用的就是典型的组合式复用的思想,其他如技术、软件IC技术等也是采用组合式复用的例子。组合式复用主要的研究内容包括构件的分类、检索、评估、定制、组合、库的组合、管理、使用等,大量的构件必须用库来管理,对于这种专用库来说,库的管理、库中内容的组织、分类、检索等都是新的研究课题。
生成式复用
生成式复用技术则是利用可复用的模式,通过应用生成器产生新的程序或程序段,产生的程序可以看作是模式的实例,比较有名的生成式复用例子如UNLX中的词法分析器Lex和语法分析器Yacc等生成式复用的特点是复用效率一般比较高。但是实现生成式复用一般比较困难。生成式复用的研究重点是如何形式化地表示特定领域的规格说明书、系统处理过程及元生成器等。
依据功能需求分类
根据不同的功能需求(技术级别),软件复用可分为代码复用、设计复用、分析复用和测试复用。
代码复用
代码复用是针对目标代码、源代码两点。目标代码复用是通过连接、绑定等功能实现,把相似软件的代码复制连接起来。源代码复用是直接把需要使用的代码复制到新软件的程序里,无需重新设计新的代码即可编程。代码复用必须要具备大量可复用的构件,这样才能正常复用代码操作。
设计复用
设计复用相对于代码复用级别更高,这种复用的操作难度更大。设计复用方法包括:对已经设计好的软件系统结果筛选,选择可以复用的构件;将旧软件系统的所有文档重新运用于新软件,确定哪些构件可以复用;结合新软件的功能要求,重新开发新的设计构件,该复用流程十分复杂。
分析复用
分析复用是一种自动性的软件复用级别,该法不会受到软件设计技术的限制。主要复用方式包括:对已经建成的系统综合分析,筛选能够被复用的构件参与新软件的开发;利用新的文档作为输入端,再借助硬件平台操作设计新系统;按照新软件的需要重新设计可复用的构件。
测试复用
测试复用是经过软件检测确定复用的对象,以免复用后的构件在新系统运行时发生冲突。测试复用分为测试用例复用、测试过程信息复用。如测试过程信息复用时,对软件工具测试过程的信息详细记录,涉及到操作步骤、输入参数、系统运行等,经过测试可保证复用构件的可靠性。
依据预算分类
按照预算投入的不同,软件复用可分为主动型、反应型和提取型,依据软件复用的预算投入选择适合的复用类型。
主动型
以主动型方式开发的复用软件,系统的设计和实施要考虑所有可能的变化,其中就包括复用资产的设计,针对产品线的主动型开发方式,就像针对传统软件的瀑布模型,产品线开发又被称为领域工程,是指“为复用而开发”的过程,以生产可复用的软件资产(RSA),组织采用这种方法可以准确地估计产品线的长远需求。然而,如果未来的产品需求不符合预期的需求,这种方法就会面临投资失败的风险。
反应型
在反应型方法中,当开发产品时,如果出现复用机会就可以进行可复用软件的开发,这种方法可以在下列情况中使用:很难对产品变化的需求进行长期预测;机构需要保持一个积极的生产计划,没有太多的资源来开发可复用资产。
提取型
提取型方式介于主动型和反应型之间。在制定一个领域工程的初期,可以采用提取型方式复用一些操作性较强的软件产品,是一种能够迅速地从传统方式转移到领域工程的复用方式。
依据应用领域范围分类
按照软件复用所应用的领域范围的不同,软件复用可以分为横向复用和纵向复用。
横向复用
横向复用是指复用不同应用领域中的软件元素,例如数据结构、分类算法、人机交互构件等。标准函数库是一种典型的原始的横向复用机制。
纵向复用
纵向复用是指在一类具有较多公共性的应用领域之间进行软部品复用。
依据粒度大小和抽象层次
依据复用粒度大小和抽象层次的不同,可将软件复用分为小粒度、中粒度和大粒度三类。
小粒度复用
小粒度复用即小规模复用,例如程序代码的复用。主要表现为函数、子程序/面向对象中的类、方法的复用。源代码复用和目标代码复用属于小粒度复用。
中粒度复用
中粒度复用即中等规模复用,例如软件设计结果的复用。进一步按复用粒度的大小,又分为两种:微体系结构的复用和宏体系结构的复用。前者是注重于如何对系统的局部行为进行要领建模和解释,而后者则以宏体系结构为基础,注重系统的全局结构的建立。在面向对象的程序设计中,微体系结构由描述相关的类及其相互关系的设计和代码两部分组成。而宏体系结构的复用对象则是组成系统的各微体系结构及其相互关系。设计结果复用和分析结果复用均属于中粒度复用。
大粒度复用
大粒度复用即大规模复用,例如应用子系统的复用。复用对象是独立开发的应用程序或子系统。在复用过程中,它们不能作任何修改和扩充。通过一些标准协议,可使这些大粒度构件(应用程序)协同工作,共同实现某些功能。类块复用和构件技术属于大粒度复用。
软件复用过程
一般过程
软件复用的一般过程包含两个主要的复用阶段:生产者复用阶段和消费者复用阶段。
生产者复用
生产者复用是建立、获取以及管理可复用资产的阶段,该阶段的活动主要涵盖抽象、实现与入库。
抽象是一种泛化的过程,它旨在从一系列已有软件制品中抽取那些被不同应用所共享的可复用软件部分并刻画其可复用特性,同时摈弃已有软件制品特定的实现细节。实现是创建可复用资产的过程。入库是将已开发或获取得到的可复用资产存放于统一的资产库的过程。按照资产库的要求,入库时需要为可复用资产标识其属性、刻面等信息。
消费者复用
消费者复用是使用可复用资产建立新的应用产品的阶段,该阶段的活动主要是选取、定制与集成。
选取是复用者根据自身的需要以及可复用对象的描述,寻找、比较和选择适合需要的可复用资产。定制表示对可复用的制品进行修改或适配,使其满足复用的需求与上下文。集成指将定制后的可复用制品与其他制品一起组合为应用系统。
软件复用的关键技术
实现软件复用的因素主要包括:软件构件技术、领域工程、软件构架、软件再工程、开放系统、软件过程、CASE 技术等,以及各种非技术因素。实现软件复用的各种技术因素和非技术因素是互相联系的,它们结合在一起,共同影响软件复用的实现。
软件构件技术
软件构件技术是支持软件复用的核心技术,是近几年来迅速发展并受到高度重视的一个学科分支。构件(Component)是指应用系统中可以明确辨识的构成成分,而可复用构件(Reusable Component)是指具有相对独立的功能和可复用价值的构件。在软件开发过程中,软件开发人员合理运用软件构件可以显著增强应用软件的功能,使其功能更加多样化。此外,在构件编写过程中,软件开发者若能够合理将软件构件连接起来并放入数据库中,增强软件构件的应用性,将在一定程度上提高软件开发的效率,控制软件开发成本。构件的概念已不再局限于源代码构件,而是延伸到需求、系统和软件的需求规则约、系统和软件的构架、文档、测试计划、测试案例和数据以及其他对开发活动有用的信息。其主要研究内容包括:
(1)构件获取:有目的的构件生产和从已有系统中挖掘提取构件;
(2)构件模型:研究构件的本质特征及构件间的关系;
(3)构件描述语言:以构件模型为基础,解决构件的精确描述、理解及组装问题;
(4)构件分类与检索:研究构件分类策略、组织模式及检索策略,建立构件库系统,支持构件的有效管理;
(5)构件复合组装:在构件模型的基础上研究构件组装机制,包括源代码级的组装和基于构件对象互操作性的运行级组装;
(6)标准化:构件模型的标准化和构件库系统的标准化。
软件构架
软件构架是对系统整体结构设计的刻划,包括全局组织与控制结构,构件间通讯、同步和数据访问的协议,设计元素间的功能分配,物理分布,设计元素集成,伸缩性和性能,设计选择等。软件构架研究如何快速、可靠地从可复用构件构造系统的方式,着重于软件系统自身的整体结构和构件间的互联。其中主要包括:软件构架原理和风格,软件构架的描述和规约,特定领域软件构架,构件向软件构架的集成机制等。通过对软件构架的研究,有利于发现不同系统在较高级别上的共同特性;获得正确的构架对于进行正确的系统设计非常关键。对各种软件构架的深入了解,使得软件工程师可以根据一些原则在不同的软件构架之间作出选择;从构架的层次上表示有利于系统较高级别性质的描述和分析。在基于复用的软件开发中,为复用而开发的软件构架可以作为一种大粒度的、抽象级别较高的软件构件进行复用,且软件构架还为构件的组装提供了基础和上下文,对于成功的复用具有非常重要的意义。
领域工程
领域工程是为一组相似或相近系统的应用工程建立基本能力和必备基础的过程,它覆盖了建立可复用软件构件的所有活动。领域是指一组具有相似或相近软件需求的应用系统所覆盖的功能区域。
领域工程包括三个主要的阶段:
(1)领域分析:这个阶段的主要目标是获得领域模型(Domain Model)。领域模型描述领域中系统之间的共同的需求、这个阶段的主要活动包括确定领域边界,识别信息源,分析领域中系统的需求,确定哪些需求是被领域中的系统广泛共享的,哪些是可变的,从而建立领域模型。
(2)领域设计:这个阶段的目标是获得领域构架(Domain Specific 软件 建筑,缩写为 DSSA)。DSSA描述在领 域模型中表示的需求的解决方案,它不是单个系统的表示,而是能够适应领域中多个系统的需求的一个高层次的设计。建立了领域模型之后,就可以派生出满足这些被建模的领域需求的DSSA。由于领域模型中的领域需求具有一定的变化性,DSSA也要相应地具有变化性。
(3)领域实现:这个阶段的主要行为是定义将需求翻译到由可复用构件创建的系统的机制。根据所采用的复用策略和领域的成熟和稳定程度,这种机制可能是一组与领域模型和DSSA相联系的可复用构件,也可能是应用系统的生成器。
软件再工程
软件再工程是一个工程过程,它将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式。再工程的基础是系统理解,包括对运行系统、源代码、设计、分析、文档等的全面理解。但在很多情况下,由于各类文档的丢失,只能对源代码进行理解,即程序理解。现存大量的遗产软件系统由于技术的发展正逐渐退出使用,如何对这些系统进行挖掘和整理,得到有用的构建;已有的构件随着时间的流逝会逐渐变得不可使用,如何对它们进行维护,以延长其生命期等等,软件再工程正是解决这些问题的主要技术手段。
开放系统技术
开放系统技术的基本原则是在系统的开发中使用接口标准,同时使用符合接口标准的实现。这些为系统开发中的设计决策,特别是对于系统的演化,提供了一个稳定的基础,同时也为系统(子系统)间的互操作提供了保证。开放系统技术为软件复用提供了良好的支持,特别是分布对象技术使得符合接口标准的构件可以方便地以“PnP”的方式组装到系统中,实现黑箱复用。在符合接口标准的前提下,构件就可以独立地进行开发,从而形成独立的构件制造业。
软件过程
软件过程是为了实现一个或者多个事先定义的目标而建立起来的一组实践的集合,这组实践之间往往有一定的先后顺序,作为一个整体来实现事先定义的一个或者多个目标。需要特别指出的是:这里所提及的一个或者多个目标就是软件项目管理试图要实现的目标,例如成本、工期以及质量等典型目标。当讨论过程改进的相关概念时,技术(包括工具)革新、人员培训以及流程优化等均属于软件过程改进的内容。为了以示区别,可以将软件过程区分为狭义的过程和广义的过程。狭义的过程指前文所描述的一组有先后顺序的实践;广义的软件过程则应该包括技术、人员以及狭义过程。过程的作用则不仅仅是这个三角形中的一极,它更加关键的作用是连接技术和人员的粘合剂,只有将技术、人员以及狭义过程三者融合成一个整体,才是一个真正可以指导工作的软件过程。
CASE技术
在软件工程活动中,软件工程师和管理员按照软件工程的方法和原则,借助于计算机及其软件工具的帮助,开发、维护、管理软件产品的过程,称为计算机辅助软件工程 CASE(Computer Aided 软件 Engineering)。计算机辅助软件工程是一套方法和工具,可按系统开发商规定的应用规则,并由计算机自动生成合适的计算机程序。CASE工具可分成高级CASE和低级CASE。高级CASE工具用来绘制企业模型以及规定应用要求;低级CASE工具用来生成实际的程序代码。CASE工具和技术可提高系统分析和程序员工作效率。CASE的实质是为软件提供一组能大量节省人力的软件开发工具,实现软件生存期各阶段的自动化,并使其成为一个整体。
非技术因素
除了上述的技术因素以外,软件复用还涉及众多的非技术因素,如:机构组织如何适应复用的需求;管理方法如何适应复用的需求;开发人员知识的更新;创造性和工程化的关系;开发人员的心理障碍;知识产权问题;保守商业秘密的问题;复用前期投入的经济考虑;标准化问题等等。
层级
软件复用分为四个层级,分别是抽象级、对象级、组件级和系统级。
抽象级
在抽象级别上,并不是直接复用软件,而是在软件的设计中使用关于一些成功的抽象知识。设计模式、软件体系结构模式都是面向服用的抽象知识表示的方式。
对象级
在对象级别上,直接复用来自库中的对象而不是自己写成代码。为了实现这种类型的复用,必须找到合适的库,而且确定其中的对象和方法是否提供了所需要的功能。例如,如果需要在一个Java程序中处理电子邮件消息,可以使用JavaMail库中的对象和方法。
组件级
组件是对象和对象类的集合,他们一起运行以提供相应的功能和服务,常常都要通过增加一些自己的代码来对组件进行适配和扩展。一个组件级复用的例子是利用一个框架来构建自己的用户界面。这个框架包括一组实现事件处理、显示管理等的通用对象类。需要增加与显示数据之间的连接,并且写代码来定义特定的显示细节。
系统级
第三方提供商业现成产品(Commercial-off-The-Shelf,COTS)任何应用系统复用,又称应用系统级。例如,工作流管理、数据清洗等应用系统。此过程中通常会包括对这些系统的某种方式的配置。这可能通过增加和修改代码来实现,或者通过使用系统自身的配置接口来实现。大多数商业化系统现在都是用这种方式构建的,其中会对通用的应用系统进行适配和复用。有时候这种方法还可以对多个应用系统的集成来创建一个新系统。
优点及缺点
优点
由于复用的软件被广泛使用,它前期暴露的软件缺陷已被修复,所以使用以前的软件往往缺陷更少。
构建一个新的组件可能比复用现有的组件更容易失败,软件通过复用减少了许多不确定因素,大大降低了信息系统项目本身的固有风险。
软件复用对快速原型设计有一定的支持效果,那么快速有效地构造出应用程序的原型可以充分利用可复用构件和构架,从而获得用户对系统功能的反馈;通过使用同一个接口的实现,系统将更为有效地实现与其它系统之间的互操作。
软件复用使系统的维护代价得以减少;如果现有的资产被复用,项目就会变得更具有成本效益。
对于合理的复用,找到复用组件及对它的调整所花费的时间远远小于开发新组件所需的时间,软件工程师在规约、设计、实施和测试等活动会花费更少的时间和精力,更快更好地完成任务。
缺点
若构件的源代码不可得,随着系统的变更,系统中复用部分的不兼容性增加,维护成本也需要相应地增加。比如,复用组件的外部更改可能会迫使改变复用软件;更改一个复用组件比自定义一个组件难。填充构件库并保证软件人员能使用需要极大的开销,且当前对构件的分类、编写目录和恢复技术尚不成熟。
维护复用组件的目录和寻找组件的支持较少,开发工具不能较好地支持复用组件的开发。没有良好的分类模式,使得构件查找比较困难。并且,在软件复用的过程中,往往缺乏良好的构件库支持和控制复用,构件库中的构件没有良好的接口,已有的部件不是为了复用而开发的。
软件复用适用于许多通用组件,但是不适用域名具体的组件。
影响软件复用发展的因素
软件复用各方面的困难,无论是技术问题还是非技术问题,都影响着软件复用的广泛实行。影响软件复用发展的因素主要有技术因素、人为因素和管理因素。
技术因素
在对软件复用技术进行应用时常常会出现构件与应用方面出现不兼容的问题,通常情况之下,构件要在其他的应用或者软件中使用,就需要对构件进行调试,才能够使它融入到应用与软件之中发挥作用,这让软件复用在使用方面遇到了一定的困难。随着计算机技术的不断发展,很多原有的软件技术代码或者函数方面的问题已经得到了解决,组件的分布也得到了极大程度的改善。
人为因素
软件开发是一种创造性工作,大多数计算机软件开发的工作人员拥有自己的创造性思维,长期从事这个行业的人们形成了一种职业习惯:对于他人的工作成果往往比较不屑,并且不愿意花费时间进行复用与调试。在很多情况之下,对于其他已经开发的软件进行适当的修改就可以进行重新运用,但是工作人员往往想要重新开发,这会消耗大量不必要的时间与精力,对软件复用的推广有着极大的消极影响。
管理因素
对于计算机软件管理工作来讲,先前所设计出的软件使用规则以及程序复用方面来讲有着很大的差异。如计算工作量时,对复用的部分打很大的折扣,甚至不算工作量;另外不是在项目开始时自觉地向着造就可复用构件的方向努力,而是在它完成之后,再看能否从中找到一些可复用构件。这些弊端妨碍了复用水平的提高和复用规模的扩大,甚至会挫伤致力于软件复用的人员的积极性。
影响及应用
软件复用的应用不仅提高了软件开发的效率和质量,降低了开发成本,而且加速了软件行业的发展步伐。这种技术手段不仅是一种技术革命,更是一种社会化的行为,一种大众化的软件开发方法。它使得更多人能够参与到软件开发的行列中来,共同推动软件产业的发展。
生成式复用
生成式复用的概念与流程生成式复用的核心是应用程序生成器,生成器主要包含翻译器与生成规则两个部分。生成式复用的开发过程是对应用程序生成器的复用过程,是对生成器内部转换规则的复用过程,而转换规则又内含了对各种领域知识的复用。针对一个特定领域的生成式复用能够带来比较高的效益,对终端用户而言其使用也较为简单(终端用户只需要基于DSL,写出特定应用的规格描述),但能生产出的应用产品被限制在一个领域范围内,不具有跨领域的通用性。
面向对象技术中的软件复用
面向对象(Object-Oriented,OO)技术已是最为流行的软件开发技术。由于OO具有封装、继承与多态的特性,因此OO比面向过程的软件开发方法具有更多的支持软件复用的能力。OO技术中的复用主要包括针对类的复用以及针对设计模式的复用。
组装式复用
组装式复用是基于预先已创建的可复用资产库,在开发软件时从库中选取合适的软件制品(如软件构件),然后组装生成新的软件产品的过程。组装式复用是对软件功能实体的复用,保存在可复用资产库中的软件实现单元被集成在不同的应用产品中,从而有效降低了软件开发的成本,提高了开发效率。
雷达数据处理
雷达数据处理采用软件复用的思想与技术,在软件模块化设计的基础上,对各个模块进行复用分析,分离差异,提炼出各模块可复用内容,实现了大部分模块的软件复用。降低雷达数据处理系统软件开发过程中所用的成本与时间,提高软件的灵活性和可维护性,通过软件复用技术,缩短了系统开发周期,提升了软件开发效率,保证了软件开发质量,具有较高的工程价值与经济价值。
定制嵌入式操作系统
嵌入式应用系统配置差别较大,大部分外设驱动软件也没有标准化,这就要求在开发环境中对操作系统进行剪裁和扩展,使之和应用程序绑定在一起生成一个可运行在目标环境下的高效应用系统。这是降低系统硬件成本,减少系统资源消耗,提高系统灵活性的关键。而以软件模块化复用设计为基础的操作系统剪裁配置技术为应用开发者定制系统提供了有力的支持。
发展趋势
虽然当前各种各样的软件复用实践已经相当普遍,但是大规模、系统化的基于复用的软件开发却并未获得普遍成功。随着软件开发技术的发展以及应用类型的不断丰富,基于框架或中间件的开发成为软件复用另一种流行的方式。框架为应用系统制定了基本的逻辑架构,实现了其中的通用部分,并为特定应用的开发提供了可定制和可扩展的能力;中间件则为分布式的应用开发提供了便捷的基础设施。因此,使用框架或中间件进行应用开发的人员可将其精力聚焦于应用特定的逻辑、功能部分。
软件复用发展到今天已经超出了简单的代码、测试用例复用的范畴,软件开发过程已经成为一种新的复用对象。主要从历史项目中挖掘软件项目成功的子过程、控制策略等或是从失败的历史项目中找到反面警示,软件过程的挖掘与复用方面尚处于起步阶段。
参考资料
..2024-05-18
目录
概述
发展沿革
背景
起源及发展
萌芽
再发现期
发展期
成熟期
分类
依据复用对象分类
产品复用
过程复用
依据复用信息分类
黑盒复用
白盒复用
依据复用方法分类
组合式复用
生成式复用
依据功能需求分类
代码复用
设计复用
分析复用
测试复用
依据预算分类
主动型
反应型
提取型
依据应用领域范围分类
横向复用
纵向复用
依据粒度大小和抽象层次
小粒度复用
中粒度复用
大粒度复用
软件复用过程
一般过程
生产者复用
消费者复用
软件复用的关键技术
软件构件技术
软件构架
领域工程
软件再工程
开放系统技术
软件过程
CASE技术
非技术因素
层级
抽象级
对象级
组件级
系统级
优点及缺点
优点
缺点
影响软件复用发展的因素
技术因素
人为因素
管理因素
影响及应用
生成式复用
面向对象技术中的软件复用
组装式复用
雷达数据处理
定制嵌入式操作系统
发展趋势
参考资料