龙源期刊网软件复用技术的分析与应用作者:饶建农来源:《电脑知识与技术》2012年第31期摘要:软件复用在软件开发过程中有着重要的意义,能够降低软件开发与维护成本的费用,提高开发效率。简要分析了软件复用技术中存在的相关问题,总结了软件复用的优缺点。通过具体实例,提出了解决软件复用过程中存在问题的方法。关键词:软件复用;行动研究;原型中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)31-7489-03随着软件公司投入越来越多的钱花在开发新产品上,解决软件复用就变得更有吸引力。可复用的构件在软件公司被称为软件资产,包括可执行代码、源代码、需求规格、设计和架构等等。软件复用对于把代码测试和代码实现结合起来是一种很好的方法,同时可以帮助软件公司快速地制定解决方案,因为事实上编写和测试过的代码已经实现了一定的功能。引入新的软件复用系统也可能存在风险。软件复用是在新项目中使用老项目中的代码的工作。这可能节省软件公司开发新产品的时间,但也可能浪费时间,这一切都取决于代码如何复用和使用的复用工具。复用代码的开发员必须很好地了解代码能做什么,怎么做和为什么必须复用。许多代码在编写的过程中没有考虑在以后的项目中能否使用,因此很难打破旧代码的单一功能,而编写的复用代码需要包含更好的软件文档和描述性的变量名。大多数开发员从老项目中复制代码并粘贴到自己的项目中,这是一个非常简单的实现代码复用的方式。代码复用期间使用的工具也是影响花在寻找所需代码的时间多少的重要因素。1软件复用理论1.1软件复用的概念目前,对于软件复用还没有一个形式化的概念,许多研究人员从各自不同的角度对软件复用这个概念作了说明。Biggerstaff和Ritcoher认为软件复用是在新的开发项目中使用以前已获得的概念和对象。Tracz认为软件具有事先性,复用特别为复用目的而设计的软件过程,而把使用不是特别为复用目的的设计的软件称为软件挽救。Gambhir把在多个应用中使用相同的构件称作软件复用,不区分软件复用和软件挽救之间的区别。软件复用是一个系统到另一个系统的各种知识的重新应用,为了减少开发和维护成本的新的系统。可利用的现有软件成分即复用成分是软件复用的核心。1.2软件复用的讨论龙源期刊网年首次提出了软件复用的概念,从那以后就不断地被讨论和运用。软件复用的想法是好的,但是实现起来却是困难的,主要是由于软件复用在软件开发中实现的复杂性。Krueger在他的研究中提出了为什么软件复用从来没有成为一个标准的软件工程方法的原因。Larsen提出了大量有关老项目投入新项目的复用部分,这是首次展现软件复用的前景。Tabatabai在他的文章中介绍了关于软件复用更具体的问题和项目,如在编译器中复用代码。1.3软件复用的优点软件复用可以让开发公司受益良多。例如,当在一个项目中需要一个公共函数时,开发人员可以导入经过测试的能正常工作的这个函数。当开发一个新的系列产品时这是特别好的方法。软件复用的主要优点:1)增加可靠性:以前使用的软件往往缺陷更少。2)减少过程风险:构建一个新的组件可能比复用现有的组件更容易失败。3)提高互操作性:通过使用同一个接口的实现,系统将更为有效地实现与其它系统之间的互操作。4)促进标准遵循:复用组件可以促进开发员遵循软件的开发标准,提高组件的可用性。5)支持快速原型:可以快速构造出系统可操作的模型,以获得用户对系统功能的反馈。1.4软件复用的缺点Stephen在他的《QualityImpactsofClandestineCommonCoupling》一书中描述了软件复用的危险性。他们通过对跟踪耦合和整个Linux内核的代码复用的研究,表明同一个模块在许多版本中被不做更改地广泛使用。示例表明代码复用为什么会威胁到另一个项目:“假设程序员负责开发和维护一个模块M,如果意识到常见耦合的不良影响,那么他会想尽一切办法来减少模块M和产品其它部分之间的耦合。即使程序员不会以任何方式改变模块M,开发另一模块的程序员的后续更改也会增加模块M和产品其它部分的耦合。”在他们的介绍中描述了许多关于耦合的问题,“虽然所有类型的耦合在设计时是有用的,但是也证明某些类型的耦合可能引起软件存在更大的故障。人们普遍认为,一些耦合类型应该限制使用”。软件复用的主要缺点:龙源期刊网)增加维护成本:复用组件的外部更改可能会迫使改变复用软件;更改一个复用组件比自定义一个组件难。2)缺乏工具支持:维护复用组件的目录和寻找组件的支持较少;开发工具不能较好地支持复用组件的开发。3)非我发明综合症:许多软件工程师更倾向于重写一个组件而不是复用别人开发的组件。4)复用的障碍:一个软件开发人员只会寻找一个他期望最合适的可复用的组件;寻找他能辨认的提供了解决方案的组件;只会用他能够理解的组件;如果组件能够解决最紧要的问题它才能被成功使用;只有开发人员在初期认为所有步骤是成功的复用过程才会开始。5)复用适用于许多通用组件,但是不适用域名具体的组件。2案例实施与分析2.1研究目的软件复用过程中存在的问题是:如何使开发人员很容易地寻找到他们所需要的特定代码,并根据客户的要求来完善它。本文的目的是识别并尝试解决软件复用的缺陷。软件复用的想法已经存在几十年了,但尚未挖掘出它的全部潜力。由于没有软件复用的标准工具,所以本文试图通过实现一个原型来解决软件复用过程中存在的问题,并且处理客户提出的要求。2.2研究方法研究方法由行动研究图来描述,如图1所示。在“识别问题/问题调查”阶段,将识别最关键的问题,是当前周期中重点关注的对象。在“开展研究”阶段,将获得解决问题的一个好的方法。“制定行动计划”阶段将包括“修复”第一阶段中确定的问题。“反思和评价行动”阶段,所做的更改将会评估对问题的修改有多大的影响。“行动研究可以被视为一个可变的案例研究,而案例研究员是一个独立的观察者,一个行动研究者:在系统的实现中是一位参与者,同时要评估某些干预技术。行动研究员不是一个独立的观察者,但是一个参与者。”龙源期刊网选择行动研究是因为一个原型是基于采访和文档资料的开发。事实上,行动研究是一个迭代,根据新的访谈和发现的文档实现自然更新。每个研究周期将不超过两周,因为事实上时间是至关重要的。2.3案例实施为了开发出解决软件复用中存在问题的原型,本文以Reveny公司作为研究对象。RevenyAB公司是JeevesAB信息系统公司的子公司,大约20个开发人员,是一个开发商业系统的软件公司。在实验过程中,处理软件复用需要一个解决方案,使设计的原型能够帮助Reveny公司管理代码并使他们的代码很容易搜索到。在构造这个原型时许多因素都要考虑到。原型的实现必须把执行速度和可用性作为主要考虑因素。因为如果程序执行缓慢,很难使用,就没有人会用它,使得实现变得冗余,而且不能解决问题。代码还应该易于维护。因此一个好的设计很有必要,代码良好的层次结构使得扩展起来也更容易。原型以这样一种方式工作:开发人员通过某些关键字搜索一个指定的文件夹,文件列表包含这些关键字。在分析特定的文件后,开发人员可以看到他正在寻找的代码片段。所有的代码存储在同一个地方——代码库,它可以使所有的开发人员拥有最新的文件。原型的目的是使开发人员的工作更容易,让他们通过访问代码,找到他们所要寻找的功能。代码库可以设置,但它的本质是在一个地方存储所有代码,使其可以让每个需要访问的人访问它。设计原型的时候,时间和可用性是两个主要因素。原型的第一个版本需要许多时间来显示文件和文件夹。时间的问题通过文件和文件夹数量的算法来解决。2.4案例分析解决软件复用存在的问题相当简单的办法是设置一个SVN(Subversion)服务器,这能够使利用版本处理问题变得可能。由于目前的原型没有SVN功能,迫使Reveny公司让所有开发人员在安装SVN客户机的系统上工作。解决这个问题的另一种方式是将代码存储在一个服务器上,让开发人员通过磁盘共享进行访问,这使得原型的使用非常容易,但是没有版本处理问题的优势。现在,这个原型用c#语言开发。如果Reveny公司未来开发这个系统,它必须包含一个针对文件夹库的“activedirectorylistener”的功能,通知其他的客户机轮流更新资源库。CVS(ConcurrentVersionsSystem)系统已经实现的功能可以提醒开发员,如果要添加新文件他必须把新文件提交到资源库。3结束语虽然已经有很多关于代码复用的讨论,但是仍然没有通用的工具或过程应用于代码复用方面。一个正常工作的软件复用工具能够让开发公司受益:使开发人员在单位时间内能够产生更龙源期刊网多的代码;确保插入的代码能正常工作;节省开发人员调试和测试的时间;创建一个代码存储的标准过程;如果使用SVN,开发公司可以获取版本修订的好处。参考文献:[1]KruegerCW.SoftwareReuse[J].ACMComputingSurveys,1991,41(2).[2]郑明春,张家重,王岩冰.关于软件复用[J].计算机科学,1994,21(4).[3]陈东升.软件复用技术研究[J].硅谷,2008(18).[4]杜银霞.软件复用技术的探讨[J].电脑知识与技术,2011(12).