第11章软件重用退出重用(reuse)也称为再用或复用,是指同一事物不做修改或稍加改动就多次重复使用。软件重用的优点:(1)提高软件生产率,降低软件生产代价;(2)提高软件质量;(3)互操作性好;(4)推动标准化;(5)支持原型开发。软件复用就是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。可复用的软件成分,也称为可复用构件(ReusableComponent)可从旧软件中提取,也可以专门为复用而开发。软件复用不仅是对程序的复用,它包括对软件生产过程中任何活动所产生的制成品的复用。如:项目计划、可行性报告、需求定义、分析模型、详细说明、源程序和测试用例等等。软件生产过程主要是正向过程,即软件产品从抽象级别较高的形态向抽象级别较低的形态演化,所以较高级别的复用容易带动较低级别的复用,反之则不然。复用级别越高,可得到的回报也越大,因此分析软件(AnalysisWare)和设计软件(DesignWare)的复用备受重视。软件复用的形式一、按照重用活动所跨越的应用领域的类型分1.横向复用(horizontalreuse)也称为水平复用,是指复用活动的范围跨越了几个不同的应用领域,复用的软件产品主要包括数据结构、通用算法、人机界面等软件元素。2.纵向复用(verticalreuse)也称为垂直复用,是指复用活动的范围限制在同一个应用领域或者是一类具有较多共性的应用领域内。二、基于软件复用的软件开发过程的角度分1.生产者复用(productreuse)指建立、获取或者重新设计可复用构件的活动。涉及到的活动包括:复用的规划、领域分析、构件的开发、构件库的组织和管理。2.消费者复用(consumerreuse)指使用可复用的构件建立新的系统的活动。涉及到的活动包括:应用系统的规划、构件的检索和选择、应用系统中非复用部分的开发、应用系统的组装。建立构件组装应用生产者复用消费者复用(为复用开发构件)(使用构件开发应用)生产者复用与消费者复用复用具有许多明显的优点,目前应用不广泛的主要原因是:(1)技术因素构件与应用系统之间的差异;构件要达到一定的规模,才能支持有效的复用;发现合用构件的困难;基于复用的软件开发方法和软件过程需要一些新的理论、技术及支持环境。软件复用的困难(2)人的因素喜欢自己创造而不喜欢使用别人的东西。(3)管理因素把复用构件和一般软件构件同等看待,把复用看作可有可无的事。(4)教育因素软件科学技术的教育与培训中,缺乏关于软件复用的内容,缺少专门教材和课程。软件复用的困难11.1可重用的软件成分11.2软件重用过程11.3领域工程11.4开发可重用的构件11.5分类和检索构件11.6软件重用的效益11.7小结11.1可重用的软件成分广义地说,软件重用可划分成以下三个层次:①知识重用(例如,软件工程知识的重用);②方法和标准的重用(例如,面向对象方法或国家标准局制定的软件开发规范或某些国际标准的重用);③软件成分的重代码的复用设计结果的复用分析结果的复用测试信息的复用高抽象程度低包括目标代码,也包括文本形式的源代码。受实际环境影响小,可复用机会多,所需修改少。可被复用的分析结果是针对问题域的某些事物或某些问题的抽象程度更高的解法。主要包括测试用例(testcase)的复用和测试过程信息的复用。三种方式复用:从现有系统的分析结果中提取可复用构件用于新系统的分析;用一份完整的分析文档作为输入,成生针对不通软硬件平台和其它实现条件的多项设计;独立于具体应用,专门开发一些可复用的分析构件。软件成分的重用可以进一步划分成以下三个级别。(1)(2)设计结果重用指的是,重用某个软件系统的设计模型(即求解域模型)。这个级别的重用有助于把一个应用系统移植到完全不同的软/(3)这是一种更高级别的重用,即重用某个系统的分析模型。这种重用特别适用于用户需求未改变,但系统体系结构发生了根本变化10种。·项目计划。软件项目计划的基本结构和许多内容(例如,SQA计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间,也降低了与建立进度表和进行风险分析等活动相关联的不确定性。·成本估计。因为在不同项目中经常含有类似的功能,所以有可能在只做极少修改或根本不做修改的·体系结构。即使在考虑不同的应用领域时,也很少有截然不同的程序和数据体系结构。因此,有可能创建一组类属的体系结构模板(例如,事务处理体系结构)·需求模型和规格说明。类和对象的模型及规格说明是明显的重用的候选者,此外,用传统软件工程方法开发的分析模型(例如,数据流图),也是可重用·设计。用传统方法开发的体系结构、数据、接口和过程设计结果,是重用的候选者,更常见的是,·源代码。用兼容的程序设计语言书写的、经过·用户文档和技术文档。即使针对的应用是不同的,也经常有可能重用用户文档和技术文档的大部分。·用户界面。这可能是最广泛被重用的软件成分,GUI(图形用户界面)软件经常被重用。因为它可占到一个应用程序的60%代码量,因此,重用的效果非常显著。·数据。在大多数经常被重用的软件成分中,被重用的数据包括:内部表、列表和记录结构,以及文·测试用例。一旦设计或代码构件将被重用,相关的测试用例应该“附属于”11.2软件重用过程11.2.1“重用”应该是每个软件过程的一个不可缺少的组成部分。图11.1所示的构件组装模型,举例说明了怎样把一个可重用的软件构件库集成到典型的演化过程模型中。图11.1构件组装模型11.2.2利用面向对象技术,可以比较方便、有效地实现软件重用。面向对象技术中的“类”,是比较理想的可重用的软构件,不妨称之为类构件,在上一小节中讲述的构件组装模型,就是利用类构件来构造应用程序。1.(1)(2)(3)接口清晰、简明、2.(1)(2)面向对象方法特有的继承性,提供了一种对已有的类构件进行裁剪的机制。当已有的类构件不能通过实例重用完全满足当前系统需求时,继承重用提供了一种安全地修改已有类构件,以便在当前系统中重用的手段(3)利用多态性不仅可以使对象的对外接口更加一般化(基类与派生类的许多对外接口是相同的),从而降低了消息连接的复杂程度,而且还提供了一种简便可靠的软构件组合机制,系统运行时,根据接收消息的对象类型,由多态性机制启动正确的方法,去响应一个一般化的消息,从而简化了消息界面和软构件连接11.2.3为了实现软件重用,已经提出了许多过程模型,这些模型都强调领域工程与软件工程同时进行。领域工程完成一系列工作,以建立一组可以被软件工程师图11.2给出了一个典型的明显适用于重用的过程模型。领域工程创建应用领域的模型,在软件工程流中使用该模型作为分析用户需求的基础。软件体系结构及相应的结构点(见11.3.3节)为应用系统的设计提供了输入信息。最后,在可重用的软件成分作为领域工程的一部分被构造出来之后,它们可以在软件开发图11.2一个强调重用的过程模型11.3领域工程领域工程的目的是,标识、构造、分类和传播一组软件成分,在特定的应用领域中这些软件成分可适用于现有的和未来的软件系统。其总体目标是,建立相应的机制,使得软件工程师可以在新的或现有的系统中分享这些软件成分——领域工程包括三个主要的活动,它们是分析、构造和传播。图2领域分析设计软件体系结构开发可重用的软件成分中心库可重用软件成分/构件领域模型结构模型系统分析规格说明与设计建造系统规格说明分析与设计模型应用软件用户需求软件工程领域工程重用的过程模型典型的重用的过程模型,描述了领域工程与软件工程的关系。11.3.1·····领域分析是对特定应用领域中共同的特征、知识、需求的标识、分析和规约。领域分析是特定领域内软件重用的基础,它的目标就是:发现和挖掘在特定领域内可以被复用的构件。领域分析活动中输入和输出如图所示:领域分析输入信息技术文献已有应用专家经验/建议当前与未来的需求输出信息领域语言复用标准分类方法功能/行为模型领域分析的输入和输出领域分析(DomainAnalysis)是对一类应用系统的共同应用领域进行系统化分析,以发现该领域的共同知识、需求及其应用系统的共同特征。领域分析又称领域工程(DomainEngineering),是软件工程的发展与延伸。领域分析是一项比系统分析更难的工作。领域分析方法可采用结构化方法和面向对象方法,而后者将成为主流。领域分析不是针对某个特定的软件系统,而是针对一类软件系统的共同的特征、知识和需求。比需求分析更一般、更抽象、更广泛的特征。11.3.2为了确定一个可能可重用的软件成分在特定情况下是否确实可以被使用,有必要定义一组领域特征,这些特征是该领域中所有软件共有的。领域特征定义了该领域中所有产品共有的类属属性,例如,安全(或可靠性)的重要性,程序设计语言,处理中的并发性等。一个可重用的软件成分的领域特征集可以表示为{DP},集合中每一项DPi表示一个特定的领域特征。赋给DPi的值表示等级,它指出该特征与软件成分P的···相关,但存在差异无关紧要,该软件成分经过·明显相关,如果新软件不具有此特征,虽然重·很相关,如果新软件不具有此特征,重用将是当在该应用领域中要开发一个新软件w时,可以为它导出一组领域特征{Dw},然后比较DPi与Dwi,以决定是否现存的软件成分P可以在应用系统w中有效地重表11.1列出了可能对软件重用有影响的典型的领域特征,为了有效地重用软件成分,必须考虑这些领表11.1产品过程人员需求稳定性过程模型动机并发软件过程符合性教育内存限制项目环境经验/培训应用大小进度限制·应用领域用户界面复杂性预算限制·过程程序设计语言生产率·平台安全/可靠性·语言寿命需求开发队伍产品质量生产率产品可靠性即使待开发的软件明显属于某个应用领域,对该领域中可重用的软件成分也必须加以分析,以确定它们在当前项目中的可重用性。在少数情况下,从头开11.3.3每个应用领域都可以用一个结构模型来刻画(例如,不同飞行器飞行控制系统的细节差别很大,但是在该领域的所有现代软件都具有相同的结构模型),因此,结构模型是一种体系结构制品,它可以也应该在该领11.4开发可重用的构件11.4.1当开发一个新软件时,应该对描述需求的分析模型进行分析,以发现模型中那些指向现有的可重用的软件成分的元素。为此,应该使用能够导致“规格说领域分析的结果为构件的选取和开发提供了指导性的原则。除了有领域分析作为其基础,构件开发还需要遵循一定的设计概念和原则。构件应该具有相当的一般性和抽象性,能够用于满足一类相似的需求,一个过于特殊的构件是很难被重复使用的。即使一个通用性很高的构件也不可能完全适应用户的需求和运行环境,所以在一个构件被不同的应用复用时,对它的某些部分进行修改是不可避免的。所以构件开发时,需要为用户对构件的调整和修改留出余地。例如继承、参数化、模板和宏都是典型的提高构件灵活性和可调整性的机制。一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性解决一个相对独立的问题,或大问题中某个相对独立的部分;(2)完整性提供较完整的解决,不要遗留很多缺口,让复用者做大量补充;(3)可标识性构件所解决的问题应该是可标识的,可命名,有简要介绍,便于理解和使用。11.4.2可复用构件(4)通用性构件解决的问题,应在同类应用中具有一般性;(5)适应性应用场合有某些变化时,构件仍是可用的,使构件的某些数据参数化和数据类型参数化;(6)可靠性要求构件对预计将要使用它的系统时可靠的;(7)标准化可复用构件的标准化对于软件复用是至关重要的。11.4.3当重用在应用系统开发中占据主导地位时,就把这样的开发方法称为基于构件的开发或构件软件。领域工程为基于构件的开发提供了所需要的可重用构件库,这些可重用的构件中的一部分是内部开发的,另一部分是从现有的应用系统中抽取出来的,还有一部但是,怎样创建一个具有一致结构的构件的库呢?答案是,采用统一的构件标准。因为重用对软件产业有非常巨大的潜在影响,主要的公司和产业联盟已经提出了构件软件的一些标准。1.OpenDoc主要技术公司(包括IBM、Apple和No