软件复用.docx
- 文档编号:6308741
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:10
- 大小:24.11KB
软件复用.docx
《软件复用.docx》由会员分享,可在线阅读,更多相关《软件复用.docx(10页珍藏版)》请在冰豆网上搜索。
软件复用
第十章软件复用
10.1软件复用概述
10.1.1软件复用目的
软件复用使得应用系统的开发不再采用一切从“零”开始的模式,可以充分利用过去应用系统开发中积累的知识和经验,从而可以高效、高质地开发和维护软件系统,主要表现在以下几个方面:
1、缩短软件开发和维护的时间;
2、降低软件开发和维护的成本;
3、保证软件的可靠性;
4、保证软件的一致性;
5、保护投资者的利益。
10.1.2软件复用的类型
软件复用可以分为横向复用和纵向复用两种类型。
横向复用是指复用不同应用领域中的软件成份,如数据结构、算法、人机界面构件等。
纵向复用活动的关键在于领域分析:
根据应用领域的特征和相似性,预测软件成份的可复用性。
一旦确认了软件成份的可复用价值,便进行开发,然后将开发得到的软件制品存入可复用构件库,供未来开发项目使用。
10.1.3软件复用的内容
软件复用的内容,除了源程序代码外,还有许多其它软件制品,甚至特定的分析建模方法、检查技术、质量保证过程等,均可以被复用。
C.Jones定义了10种可能复用的软件制品:
(1)项目计划:
软件项目计划的基本结构和许多内容,如SQA计划,均可以跨项目复用。
(2)成本估计:
由于不同项目中常包含类似的功能,所以有可能在极少修改或不修改的情况下,复用对该功能的成本估计。
(3)体系结构:
即使应用论域千差万别,但程序和数据的体系结构很少有截然不同的情形。
因此,有可能创建一组类属的体系结构模板,如事务处理结构,将这些模板作为可复用涉及的框架。
(4)需求模型和规格说明:
数据流图、类模型等均可以复用。
(5)设计:
系统和对象设计等是常见的复用成份。
(6)源代码
(7)用户文档和技术文档:
即使特定的应用不同,也有可能复用用户文档和技术文档中的大部分内容。
(8)用户界面:
用户界面可能是最广泛地被复用的软件制品。
由于它可能占一个应用软件的60%的代码量,所以复用的效果最明显。
(9)数据:
在大多数经常被复用的软件制品中,数据包括:
内部表、列表和记录结构,以及文件和完整的数据库。
(10)测试用例:
一旦设计或代码被复用,相关的测试用例应该“附属于”它们。
10.1.4针对复用的过程模型
针对复用的过程模型强调并行的工作方式。
领域工程执行一系列工作,以建立一组可以被软件工程师复用的软件制品。
领域工程创建应用领域的模型,以用作在软件应用工程流中分析用户需求的基础。
软件体系结构为应用软件的设计提供基础。
最后,在可复用软件制品被构造好后(作为领域工程的一部分),它们可以在软件建造活动中被软件工程师所用。
领域工程和应用工程是并行的
10.1.5软件复用成功实施的关键
软件复用的实施除了建立和使用可复用制品库外,还需要在软件开发方法、工具、度量等方面为复用提供支持。
除非一个组织明确地和正式地实施复用,否则它不可能重复地利用在多个软件项目中的复用机会。
实施复用是困难的,有大量的工作要做,但如果成功地实施复用,那么复用带来的回报是巨大的,下面是成功实施复用的关键。
1.管理者的支持
获得管理者的支持对于保证成功实施复用是非常重要的。
向公司引入复用必须得到各级管理者的积极配合,因为它影响了企业的组织结构、文化和软件技术等方面。
2.复用组织的支持
要成功地实施复用,必须建立一个正式的复用支持组,以承担可复用软件制品的建立、获取、验证、分类和管理。
3.复用库的支持
可复用软件制品除了应有较高的质量外,还应容易被快速找到、易于理解,并且能被安全地修改等。
复用库就是用来对可复用软件制品进行分类、组织、存储和管理。
4.复用驱动的方法支持
与复用有关的活动和技术必须加入到有关开发方法中,一方面指导可复用制品的建立人员识别复用机会和侯选的可复用制品,并建立一个可复用制品,另一方面指导应用软件开发人员寻找可复用制品,并利用它们组装成新的应用。
10.1.6复用成熟度模型
在IBM的RMM(ReuseMaturityModel,缩写为RMM)中,将软件复用水平分为五级。
成熟度等级
复用比例
过程
复用制品
范围
工具
初始级
没有复用
-20%至20%
特定的过程
子程序
宏
个人
没有库
监控级
原始的复用
10%至50%
项目级的过程
模块
包
小组
非正式的数据库
协调级
计划的复用
30%至40%
标准的过程
子系统
模型
框架
部门
有配置管理功能的数据库
计划级
正式的复用
50%至70%
大规模的复用
应用程序生成器
现场
复用库
牢固级
领域分析
80%至90%
软件组装过程
特定领域体系结构
公司
一组特定领域复用库的集合
10.1.7针对复用的软件项目组织
针对复用的软件项目组织必须有两个职能,并由两个部门分别承担。
一个职能是创建可复用制品,相应的部门是创建者或领域工程部门。
另一个职能是利用可复用制品来建立系统,相应的部门是复用者或应用工程部门。
10.2领域工程
10.2.1领域工程与应用工程
在单个应用系统工程(简称应用工程)的开发过程中,软件开发人员的任务是在特定的条件下,针对一组特定的需求产生一组特定的设计和实现。
与应用工程相比,领域工程处于一个较高的抽象级别上,对领域中相似系统的共同特征进行抽象,并通过领域模型和领域构架DSSA表示了这些共同特征之间的关系。
领域工程和应用工程是相互联系的。
一方面,领域工程的主要信息来源是通过应用工程得到的现有系统,包括需求规格说明、设计、实现等。
另一方面,领域工程和应用工程需要解决一些相类似的问题。
不过,领域工程要适用于一族系统,而不只是一个系统。
因此,领域工程比应用工程要复杂,往往不能事先设计划好,也很难实施管理。
10.2.2领域工程过程
有关领域工程的基本活动和任务如下:
1)领域分析
领域分析的目标主要是获得领域模型。
领域模型描述了领域中应用系统之间的共同需求。
2)领域设计
领域设计的目标是获得领域构架DSSA。
领域构架DSSA描述了在领域中表示的需求的解决方案,它不是单个应用系统的设计,而是能够适应领域中多个系统需求的一个高层次的设计。
3)领域实现
领域实现的主要目标是定义将需求翻译到由可复制品创建的系统的机制。
领域工程是一个反复的、逐渐精化的过程,在实施过程中都可能返回到以前的步骤,对以前的步骤得到的结果进行修改和完善后,再回到当前步骤。
10.2.3领域工程参与人员
领域工程的人员可以划分四种角色:
领域专家、领域分析员、领域设计员和领域实现员。
1)领域专家
在领域工程中,领域专家可能包括该领域中应用系统有经验的用户。
2)领域分析员
领域分析员由应具有知识工程背景的有经验的系统分析员来担任。
3)领域设计人员
领域设计人员应由有经验的软件设计人员来担任。
4)领域实现员
领域实现员应由有经验的程序设计人员来担任。
10.2.4领域模型
领域模型描述了领域中一些基本的概念,如功能、特性、数据、对象类和需求,以及这些概念间的相互关系,是领域内系统的通用和差异属性、属性和领域概念的意义以及差异属性之间的依赖性的明确表示。
一般情况下,领域模型包括以下成分:
1.领域定义
2.领域字典
3.概念模型
4.特征模型
10.2.5领域架构
领域构架是使用可复用制品来构造领域中应用系统的高层设计模型。
它可以采用过程交互模型,模块结构图等形式,这取决于选择何种类型的模型来表示系统设计。
软件构架描述了构建系统的元素、元素间的交互、指导元素组合的模式以及对这些模式的限制。
管道/过滤器模式和层次体系结构模式是两种典型的软件构架模式。
在管道/过滤器模式的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
在层次体系结构模式中,每一层为上层服务,并作为下层客户。
许多现有的软件系统是两层的体系结构,也称为客户机/服务器体系结构。
三层模型则可以明显地改善系统的可扩展性和可复用能力。
10.2.6FODA方法
FODA(Feature-OrientedDomainAnalysis)方法是由卡内基·梅隆大学的软件工程研究所提出的领域工程方法。
它支持对某领域中系统共性和个性的发现、分析和文档记录。
FODA方法的有关步骤如下:
1)上下文分析
2)领域建模
3)构架建模
10.3组件技术概述
10.3.1组件的定义与复用
组件(Component),亦称构件,是指语义完整、语法正确和有可重用价值的单位软件,它是语义描述、通信接口和实现代码的复合体。
组件是具有一定的功能,能够独立工作或能同其它组件装配起来协调工作的程序体,其使用同它的开发、生产无关。
组件可分为源代码组件和二进制代码组件。
组件复用有白盒和黑盒两种方式。
黑盒是指不作修改的直接引用;白盒指进行适应性修改的引用。
随着对软件复用理解的深入,组件的概念不再局限于源代码和二进制代码,而是包括一切对开发活动有用的信息,如需求规约、软件体系结构(构架)、文档、数据等。
本书将广义的组件用软件制品(简称制品)来称呼,而组件则仍是指源代码和二进制代码。
10.3.2组件模型
组件模型通常由基于各种语言开发工具、组件嵌入机制和相关服务(事务、安全、认证、负载均衡等)组成。
目前,比较成熟的组件模型有OMG的CORBA、SUN的EJB(JavaBean)和Microsoft的COM/DCOM/COM+。
10.3.3组件获取与描述
组件获取:
(1)从现存组件中获取得符合要求的组件,直接使用或作适应性修改,得到可复用的组件;
(2)通过遗产工程,将具有潜在复用价值的组件提取出来,得到可复用的组件;
(3)从市场上购买现成的商业组件,即COTS(CommercialOff-The-Shelf)组件;
(4)开发新的符合要求的组件。
在获取组件时,为便于复用者使用,应对组件进行描述,其主要内容包括:
(1)属性。
描述了组件的特征。
属性值对外可以读出,也可以修改。
(2)功能接口。
即组件向外提供的服务。
(3)依赖关系。
指出组件在实例化时所依赖的其它组件的特定接口,是组件完成其任务所必需的。
组件获取后,可对它进行结构化组织并放入可复用组件库,以备复用。
10.3.4组件分类
为了便于组件的复用,需要对收集和开发的软件组件进行分类并置于可复用组件库的适当位置,便于组件的存储和检索。
(1)关键词分类方式
(2)多面分类方式
①多面分类机制
②同义词库
③概念距离图
10.3.5组件检索
可复用组件库的检索方法与组件分类方式密切相关。
(1)基于关键词的检索
(2)多面检索
多面检索方法基于多面分类组织方式,由三步组成:
①构造查询
②检索组件
③排序组件
10.3.6组件使用
(1)理解组件
(2)修改组件
(3)合成组件
组件合成技术大致有三种:
①基于功能的合成技术
②基于数据的合成技术
③面向对象的合成技术
10.4公共对象请求代理体现结构
10.4.1CORBA的组成
1.ORB核/ORB接口
2.IDL及静态/动态调用
3.对象适配器(ObjectAdapter,OA)
对象适配器是ORB与对象实现间的接口,其主要的工作如下:
①对象实现的注册
②生成及管理对象引用
③服务器进程激活
④对象激活
⑤对象撤消
⑥对象向上调用
10.4.2ORB运行机制
ORB运行机制描述如下:
⑴开始;
⑵客户获取特定对象实现的对象引用;
⑶如果对象以静态方式实现,则通过IDL存根向对象实现发出请求,然后转⑥;
⑷将请求发给ORB提供的DII;
⑸DII根据接口库的信息将请求传递给对象实现;
⑹ORB传递请求;
⑺ORB内核在请求到达后做一定的处理,然后将其送给对象实现登记的对象适配器;
⑻对象适配器接收请求;
⑼如果不是本ORB域登记,则转⒁;
⑽如果有相应的IDL骨架存在,则对象适配器通过IDL骨架调用对象实现中的方法,并转(18);
⑿对象适配器通过DSI调用对象实现方法;
⒀转⒅;
⒁将请求传给DSI;
⒂DSI产生一个代理对象;
⒃代理对象将请求转成中间协议表示形式传给目的ORB;
⒄目的ORB将中间协议表示形式转换成本地DII请求,以实现对对象实现中的方法进行调用;
⒅将结果按原路返回给客户;
⒆结束。
10.4.3基于CORBA的软件开发
基于CORBA的应用系统开发的主要步骤如下:
①编写OMG定义的IDL接口规范说明文件,描述服务对象所支持的操作和类型;
②编译IDL规格说明文件,生成客户端存根和服务器端骨架;
③编写对象实现程序;
④编写服务器和客户主程序结构;
⑤将对象实现程序,服务主程序和生成的服务器骨架编译连接成服务端可执行程序;
⑥将客户端主程序和生成的客户端存根编译连接成客户端可执行程序,且若服务器端是基于Web和浏览器方式的,则相应地编写HTML超文本文件,链入编写的客户方JavaApplet小程序;
⑦分别运行服务器端和客户端程序。
10.4.4CORBA的特点
①同时支持分布计算技术和面向对象技术。
②支持许多现存的语言并把这些语言混合到一个分布式应用系统之中。
③代理机制使得客户端程序和服务器端程序完全分离。
④提供了“软件总线”的功能,实现了软件组件的即插即用。
⑤提供了一种高度的互操作性。
10.5组件对象模型
10.5.1COM标准
COM作为一面向对象的编程模型,目的是提高软件的交互协同工作能力,而不受开发语言和方法、运行环境和地点的限制。
1.COM对象
2.COM接口
3.COM库
10.5.2COM客户/服务器模型
COM对象通过接口来向客户程序提供服务,实现客户和服务器之间的交互。
客户和服务器之间的关系有三种类型:
进程内的、本地的(位于同一主机的不同进程)及远程外的(不同主机通过网络来通信)。
10.5.3分布式COM(DCOM)
对于组件程序与客户程序不在同一主机的情形,DCOM则把COM的进程模型的透明性拓展为位置透明性,把COM中本地跨进程(同一主机不同进程)通信用一个网络协议传输过程来替代,组件程序和客户程序均感觉不到中间发生的过程,只是中间数据传递的路线更长一些。
由于DCOM的所有扩充对用户均是透明的,因而从用户的角度来看,DCOM与COM几乎没有差别。
10.5.4COM+简介
COM+进一步把COM、DCOM和MTS(MicrosoftTransactionServer)统一起来,形成真正适合于企业应用的组件技术。
10.6EJB模型
10.6.1JavaBean组件模型
一个JavaBean组件可以与同一Java虚拟机中别JavaBean组件通过?
InfoBus通信,或者可以通过RMI、IIOP、或JDBC访问远程对象。
InfoBus是一个紧凑的JavaAPI,可以使Applets或者Beans组件在网页或Java应用程序中进行通信和数据交换,是动态的,在运行时确定。
RMI提供了两个Java虚拟机之间的远程方法调用,两端都是Java的应用程序。
Java支持OMGIDL并提供IDL编译程序。
JDBC提供了Java与数据库的连接能力。
一个JavaBean组件主要通过属性、方法和事件来与外部环境进行交互。
在远行时,可以过自查(Introspection)制机发现JavaBean组件的属性、方法和事件。
10.6.2EJB体现结构
EJB的体系结构主要包括客户端程序和EJB服务器。
EJB客户使用Java命名和目录服务(JNDI)获取EJB对象实例的一个参照,并且通过本地EJB接口与远程EJB接口充分利用所有的基于EJB的功能。
EJB服务器是管理EJB容器的高端进程或应用程序,由开发商提供。
10.7可复用面向对象设计模式
10.7.1设计模式的描述与分类
一个设计模式事实上是系统地命名、解释和评价某一重要的可重现的面向对象设计方案。
所有设计均可从四个方面加以描述:
1)模式名称:
用一至两个词描述设计问题、解决方案和效果。
模式名称便于使用者在更高的抽象层次上进行设计并交流有关设计思想。
2)问题描述:
指明使得设计模式可以被应用所必须存在的环境条件。
它解释了设计问题及其背景。
3)解决方案:
描述了设计方案的组成部分,它们之间的关系及各自的职责和协作方式。
4)效果:
描述应用设计模式后的结果及使用模式应权衡的问题。
10.7.2创建型模式
创建型模式帮助系统独立于对象的产生、组合和表示。
它们一方面均将关于系统使用哪些具体的类的信息封装起来;另一方面隐蔽了这些具体类的实例是如何被创建和放在一起的。
因此,创建型模式在“什么”被创建、“怎样”被创建、“谁”创建它以及“何时”创建等方面带来了很大的灵活性,有利于设计可复用的软件成分。
1、工厂方法模式
2、抽象工厂模式?
?
10.7.3结构式模式
结构型模式涉及如何组合类和对象构成更大的结构。
一种方法是采用继承机制来组合接口或实现来形成更大的结构;另一种方法通过对象组合方式对一些对象进行组合来形成。
由于对象组合可以在运行时刻改变,而继承机制为静态类组合,因而对象组合方式具有更大的灵活性。
1、适配器模式
2、组合模式
10.7.4行为型模式
行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。
这些模式刻划了在运行时难以跟踪的复杂的控制流。
行为型模式使设计者的注意力从控制流转移到对象间的联系方式上。
1、迭代器模式
2、观察者模式
3、访问者模式
10.8应用框架
10.8.1应用框架的特点
面向对象应用框架利用了面向对象的三个突出特征,即数据抽象、多态性和继承。
面向对象应用框架同类库、设计模式和组件相比,具有以下四个主要的优越:
1)模块化
2)复用性
3)可扩展性
4)控制倒置
当然,框架的复用与其它复相比,也存在许多挑战,比开发成本、学习成本、可集成性、可维护性的效率等,如不能有效地解决这些问题,常常会导致框架开发和复用的失败。
10.8.2应用框架的分类
根据复用方式的不同,应用框架可分为三类:
白盒框架、灰盒框架和黑盒框架。
根据框架涉及的范围不同,框架又可分为三类:
系统基础设施框架、中间件集成框架和企业应用框架。
根据框架与应用之间的关联程度,又可分为水平框架(横向框架)和垂直框架(纵向框架)。
10.8.3应用框架的学习与使用
学习框架的最好办法之一是从例子开始。
大多数的框架都提供人们学习该框架的例子集。
例子是具体的,一般用来解决一个特定的问题。
第一次使用一个框架总是一个学习该框架的过程。
选择一个框架明显适合的小应用,考虑例子集中相似的例子,然后拷贝它并实现一些简单的功能。
采用框架来开发的应用常常包含三部分内容:
框架本身、框架同有关类对应的具体类及其它。
10.8.4框架的开发
框架的开发有两类方法:
自顶向下分析法和自顶向上综合法。
自顶向下分析法是通过进行某种领域工程过程来开发框架,首先进行领域分析,然后实行领域的设计和实现。
自底向上综合法则首先在框架领域内开发一个应用,然后引入应用的变种来形成框架。
在自顶向下分析方法中,许多人将框架的开发看作是一种有计划的领域工程过程,在领域分析阶段,框架就开始成型。
领域分析可采用如下6个步骤:
①分类问题;
②研究相似问题;
③描述问题领域;
④分析领域的通用性;
⑤反复审查并求精分析结果;
10.8.5MVC框架
模型-视图-控制器(Model-View-Controller,MVC)框架结构是为那些需要为同一数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。
MVC框架把应用程序分为三种对象类型:
模型、视图和控制器。
模型是应用对象,它包含一些数据值,维护数据并提供数据访问方法。
视图显示模型的部分数据或所有数据,多个视图可以以不同的方式来显示模型中的数据。
控制器处理用户输入事件,如键盘和鼠标的动作。
模型、视图和控制器在构建用户界面应用时常混合在一起。
使用MVC框架将三类对象分离,极大的提高了设计的灵活性和可复用性。
不过,在缺乏必要更新的精确信息时,update机制效率很低。
10.9小结
软件复用是提高软件质量和生产效率的可行方法。
领域工程、组件技术、设计模式和应用框架是目前软件工程中较流行的软件复用技术。
正确理解软件复用的有关概念,系统掌握软件复用的有关技术是成功实施软件复用的前提。
本章介绍了软件复用的有关概念,主要包括软件复用的目的、类型、内容和组织;对领域工程有关活动、领域模型和构架作了阐述,并简要介绍了FODA领域工程方法;在介绍组件技术时,除了组件的有关概念外,对当前流行的三种组件模型从运行的角度作了比较全面的介绍。
对设计模式的介绍主要从设计模式的结构入手,并通过具体的Java程序来加强对设计模式的理解。
对应用框架从特点、分类、学习、使用以及开发等方面进行介绍,对读者今后学习和使用框架有很好的指导意义,并以MVC框架为例进一步增加对应用框架的认识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件