一、 填空题

 1、实施软件复用的目的是要使 进行得“更快、更好、更省”。
 2、对建立软件目标系统而言,软件复用就是利用某些 的对建立新软件系统有用的软件元素来生产新系统。
 3、软件复用可以区分为 是复用不同应用论域中的软件元素; 是在一类具有较多公共性的应用论域间复用软件构件。
 4、系统的软件复用由可复用资产的创建、 、支持和复用4个过程组成。
 5、论域工程创建应用论域的模型,该模型成为软件工程中分析 的基础。
 6、论域分析必须具有比需求分析更为  的视角:不仅要服务于当前的应用,而且还要放眼于同类或相似应用论域的未来软件项目。
 7、需求级软件构件通常包括问题(及子问题)描述、有关的  知识、相应的需求规格说明。
 8、设计级软件构件包括设计规格说明(片段)、 描述、相应的设计文档(如总体设计方案、抽象算法)。
 9、需求级和设计级软件构件的开发必须遵循的原则之一是将构件应用的上下文与构件严格
 10、在基于对象和面向对象程序设计语言及相应的开发环境下,软件构件可以用Ada程序包或C++ 来实现。
 11、功能抽象是指软件构件的功能由接口说明中的输入�D输出关系确定,实现细节对构件的 隐藏起来。
 12、可复用性、可理解性、正确性和易组装性是衡量软件构件质量的重要标准。这些标准都与构件开发过程中的程序设计 密切相关。
 13、可复用性与易组装性要求除参数外,接口中的成分不应与 相关。
 14、在构件的设计过程中必须预先考虑构件对于各类可能的 环境的可移植性和对于不同软件环境的适应能力。
 15、采用多面分类法进行可复用构件库的组织,必须在存储软件构件的同时,表示并存储多面分类机制、 库和 图。
 16、Tracz提出的3C模型包括 描述软件构件做什么。 描述软件构件的概念如何实现。 将可复用的构件安置到它的应用论域中。
 17、良好定义的软件体系结构是简化软件系统 的关键,可让大规模的软件开发以并行方式开展工作。
 18、在分层的体系结构中,最高层是应用层,可包容许多应用系统。次高层是构件层,可包括多个 系统,可用于建立应用系统。
 19、在应用系统层,每个应用系统可以通过其 与其他系统操作,还可以通过低层软件提供的服务或对象(如操作系统、特定业务服务)间接地与其他系统交互操作。
 20、特定业务层应当包括专门针对不同业务类型的一系列  系统。
 21、中间件层为各个构件库系统提供 类,以及不依赖于 的服务。


二、单选填空题

 1、复用必须以对被复用对象的(��)为基础。
A. 使用       
B. 理解
C. 重构       
D. 标准化

 2、可供选择的软件构件从库中被检索出来之后,用户还必须理解它的功能或(��),以判定它是否真正适合于当前的应用。
A. 行为       
B. 数据结构
C. 过程       
D. 界面

 3、针对复用的过程模型强调(��)的工作方式。以这种方式,论域工程和基于构件的应用开发同时进行。
A. 顺序       
B. 串行
C. 协同       
D. 并行

 4、开发需求级和设计级构件时应利用抽象化、(��)等手段提取公共特征。
A. 实例化      
B. 模块化
C. 参数化      
D. 结构化

 5、数据抽象是在功能抽象的基础上进一步(  )除接口参数外的所有数据。
A. 细化       
B. 求精
C. 隐藏       
D. 抽象

 6、可复用性与易组装性要求(  )建立构件的外部接口,保证接口在语法上和语义上的清晰性。
A. 显式       
B. 通过全局数据
C. 隐式       
D. 按照功能

 7、在构件的设计过程中应当尽可能将构件的与(  )有关的因素抽象成为构件的参数。
A. 调用程序      
B. 全局变量
C. 文件       
D. 环境

 8、超文本是一种非线性的(  )信息组织方法,它以结点为基本单位,链作为结点之间的联想式关联。
A. 网状       
B. 层次性
C. 关系型      
D. 面向对象型

 9、开发组织的(��)越大(特别是跨地域分布的情形),通信联系的开支就越大,因为软件人员必须经常协调他们的工作。
A. 年龄       
B. 规模
C. 复杂性      
D. 严密性

 10、软件的组织方式通常是指软件的(��)分层结构,就像在编译连接时软件各个模块之间的分层依赖关系那样。
A. 静态       
B. 动态
C. 网状       
D. 关联

 11、在构件库的说明文档中应当全面、准确地说明构件的功能和行为、相关的论域知识、(��)约束条件和例外情况、可以预见的修改部分和修改方法。
A. 正确性      
B. 可复用性
C. 可理解性      
D. 可适应性

 12、用户必须借助设计信息和说明文档来理解、修改构件。例如,如果需要将用C语言编写的构件(源程序代码)改写为其他语言的形式,构件的(��)描述就十分必要。
A. 接口       
B. 算法
C. 模块       
D. 修改履历

 13、类库的组织方式采用类的(��)层次结构。
A. 动态链接      
B. 对象嵌入
C. 继承结构      
D. 复合方式

 14、类库的文档以(��)方式组织,每个类的说明文档中都可以包含指向其他说明文档的关键词结点的链接指针。
A. 图解       
B. 超文本
C. 正文文本      
D. 图文结合

 15、为了在子类中使用库中的基类的属性和操作,可以考虑在子类中引进基类的(��)作为子类的实例变量,然后在子类中通过实例变量来复用基类的属性或操作。
A. 变量       
B. 操作
C. 属性       
D. 实例


三、选择填空题

1、从供选择的答案中选出与下列有关软件复用的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
 �实施软件复用的目的是要使软件开发工作进行得(  A  )。软件复用的实际效益除了(  B  )之外,在企业的经营管理方面也可望达到理想的效益。
 新的应用软件开发技术和工具是以(  C  )作为关键,复用大粒度的(  D  ),为的是快速开发应用软件。这些新技术包括微软的(  E  )、(  F  )、(  G  ),SUN公司的Java,OMG公司的CORBA、IDL等。
供选择的答案:
A. � ① 更简捷  ② 更方便  ③ 更快、更好、更省 ④ 更丰富
B.��① 复用率  ② 功能扩充  ③ 效率   ④ 空间利用率
C, D. ① 软件  ② 固件   ③ 构件    ④ 属性
���⑤ 对象    ⑥ 事物   ⑦ 数据    ⑧ 代码
E~G. ① office     ② Visual Basic   ③ Active X   ④ Photoshop
���⑤ OLE    ⑥ Fortran    ⑦ COBOL   ⑧ Delphi  

2、从供选择的答案中选出与下列有关软件复用的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�以往的软件工程技术不能满足复用的需要,体现在工程、(  A  )、(  B  )、经营业务等4个方面。“工程”指软件开发工程,表现在缺乏(  C  )手段,缺乏(  D  )构件,缺乏对潜在可复用的(  E  ),缺乏实施复用的工具。
供选择的答案:
A, B.�① 需求     ② 过程   ③ 环境   ④ 组织管理
C~E.�① 复用   ② 可靠性  ③ 灵活性  ④ 界定
��� ⑤ 工具   ⑥ 互连性

3、从供选择的答案中选出与下列有关论域工程的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
  �当今大多数软件复用过程中,都涉及创建过程的一个重要活动,即界定潜在的可复用的资源。在这个活动中需要一整套的界定方法,并需要一个能确保可复用资源被复用的体系结构。这个活动就叫做(  A  )。而应用软件的开发过程或复用过程则称为(  B  )。系统地软件复用的实质是:(  C  )先投资,即界定并仔细地创建出可复用的资源,从而可以使得(  D  )能够又快又省地开发应用软件。
供选择的答案:
A, B.�① 应用系统工程  ② 软件工程  ③ 论域工程  ④ 需求工程
C, D.�① 用户    ② 创建者    ③ 复用者  ④ 投资者
��� ⑤ 管理者

4、从供选择的答案中选出与下列有关论域工程的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
 论域工程过程要在选定的应用论域中界定出(  A  )和(  B  ),要为多个应用和构件定义一个(  C  ),并开发一系列可适度扩展的(  D  )。创建可复用构件既困难又昂贵。所以,应当帮助软件人员进行界定工作,以及按重要性对各项(  E  )进行优先性排队。在一定程度上,这项工作要依赖于(  F  )。
供选择的答案:
A, B, E, F:① 共性   ② 特性   ③ 可变性  ④ 属性
������⑤ 灵活性   ⑥ 可靠性  ⑦ 健壮性  ⑧ 适用性
C, D:���① 固件   ② 构件   ③ 体系结构  ④ 组件
������⑤ 总体框图  ⑥ 数据结构

5、从供选择的答案中选出与下列有关软件构件的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�所谓一个“构件”,可以是一个类型、类或其他的工作成品。对于构件,应当按可复用的要求(  A  )、(  B  )、打包、编写文档。构件是(  C  ),并具有相当稳定的公开的(  D  )。这里的构件是基于(  E  )技术的。(  E  )技术中的封装、多态等特性,可简化构件的开发工作。而(  E  )技术中的(  F  )机制则有使开发简化、维护复杂的两面性。
供选择的答案:
A, B.�① 实现   ② 运行   ③ 设计      ④ 计划
C, D.�① 外联的   ② 内聚的    ③ 公开的     ④ 私有的
��� ⑤ 外设   ⑥ 接口     ⑦ 输出
E, F.�① 面向数据  ② 面向对象    ③ 封装      ④ 继承
��� ⑤ 复用

6、从供选择的答案中选出与下列有关软件构件的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�软件开发人员必须用各种抽象化手段来开发代码级构件。典型的抽象方法有3种。(  A  )、(  B  )、(  C  )。(  A  )使构件的(  D  )仅由接口说明确定,而把实现细节对构件的使用者隐藏起来;(  B  )在(  A  )的基础上进一步隐藏除接口参数外的所有数据。面向对象程序设计语言中的“类”是一种典型的基于(  B  )的构件。(  C  )则在(  B  )的基础上进一步实现在同一构件上并发执行的多个(  E  )的无关性。构件提供端口,以便为多个(  F  )同时访问构件中的资源进行(  G  )控制。
供选择的答案:
A~B.�① 数据抽象  ② 需求抽象    ③ 设计抽象    ④ 过程抽象
��� ⑤ 功能抽象  ⑥ 实例抽象
D~G.�① 异步   ② 程序     ③ 线程     ④ 用户
��� ⑤ 功能   ⑥ 同步

7、从供选择的答案中选出与下列有关软件构件的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�可以有很多方法来描述可复用的构件,其中最理想的是由Tracz提出的3C模型。3C是指(  A  )、(  B  )和(  C  )。(  A  )描述构件做什么。为此,需要完全地描述构件的(  D  )和表示(  E  )。(  B  )描述构件的(  F  )如何实现。一般来讲,(  B  )是对外来用户(  G  )的信息,是只有试图修改或测试该构件的人才需要了解的信息。(  C  )将通过定义概念的、操作的和实现的特征,使用户能够找到合适的构件以满足应用的需求。
供选择的答案:
A~C.�① 包容(container)  ② 上下文(context)  ③ 代价(cost)
 ��� ④ 控制(control)     ⑤ 概念(concept)  ⑥ 内容(content)
D~C.�① 概念   ② 接口   ③ 公开        ④ 服务
��� ⑤ 语义   ⑥ 语法   ⑦ 隐藏   ⑧ 结构

8、从供选择的答案中选出与下列有关软件体系结构的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
 �软件体系设计的一个中心问题是能否(  A  ),以及采用何种软件体系结构风格。有原则地使用体系结构风格可带来一些实际的好处:
�(1) 它促进了对设计的(  B  );
�(2) 它可以带来显著的(  C  )(体系结构风格的不变部分使它们可以共享同一个实现代码);
�(3) 只要系统是使用常用的、规范的方法组织起来的,就可以让其他设计者很容易地理解软件的体系结构;
�(4) 对标准或规范风格的使用也支持了(  D  ),例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;
�(5) 在限制了设计空间的情况下体系结构风格通常允许进行特殊的与风格有关的分析;
�(6) 通常可以对特定的风格提供(  E  )手段。
供选择的答案:
A~C.�① 使用特定的体系模式    ② 使用重复的体系模式
��� ③ 复用   ④ 专用   ⑤ 代码复用  ⑥ 结构复用
D~E.�① 可视化   ② 构件   ③ 互操作性  ④ 可移植性
��� ⑤ 可调度性  ⑥ 框架

9、从供选择的答案中选出与下列有关软件体系结构的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�分层系统采用层次化的组织方法,每一层向其(  A  )提供服务,并利用(  B  )的服务。在一些分层系统中,(  C  )全部被隐藏起来,只有(  D  )和一部分精心选择的功能可以被系统外部看到。在这种系统中,(  E  )是实现在层次结构中的一些虚拟机,(  F  )是层次与层次之间交互的协议,(  G  )包括对层次之间交互的限制。分层系统中有许多可取的属性。首先,它支持(  H  )的系统设计,这使得设计者可以把一个复杂的系统按递增的步骤分解开来;其次,它支持(  I  ),像管道结构的系统一样,因为每一层至多和相邻的上下层交互,因此,功能的改变最多只影响相邻的上下层。另外,它能支持(  J  ),和抽象数据类型一样,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
供选择的答案:
A~D.�① 下层     ② 内部层次   ③ 外部层次
��� ④ 上层    ⑤ 中间件   ⑥ 接口
E~G.�① 接口定义    ② 软件部件     ③ 连接
��� ④ 拓扑约束   ⑤ 规范定义   ⑥ 推理机制
��� ⑦ 系统结构
H~J.�① 基于抽象程度递增  ② 基于具体细节递增 ③ 复用
��� ④ 可视化   ⑤ 互操作   ⑥ 功能增强
��� ⑦ 效率提高   ⑧ 结构化

10、从供选择的答案中选出与下列有关软件体系结构的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
�所谓分层式体系结构是按层组织的软件的一种软件体系结构,其中,每一层的软件建立在低一层的软件层上。低层软件比高层软件更具(  A  )。下图是一种4层次的分层体系结构,请选择B、C、D、E。

供选择的答案:
A.�� ① 高效性     ② 通用性  ③ 可靠性     ④ 保密性
B~E.�① 系统软件  ② 特定业务    ③ 中间件     ④ 应用软件
��� ⑤ 软件平台

11、从供选择的答案中选出与下列有关软件复用类型的叙述相对应的正确答案,将其编号填入到相应的括弧(   )内。
 软件复用可分为以下三个层次:
 (  A  ),例如软件工程知识的复用。
 (  B  ),例如面向对象方法或国家制定的软件开发规范的复用。
 软件成分的复用。软件成分的复用又可进一步划分为(  C  ),如剪贴;(  D  ),如复用设计模型;(  E  ),更高级别复用。
 为了研究软件复用程度与软件生产率之间的关系,我们引进:生产率P = (  F  )和复用率R = (  G  )的公式,以及两者之间的关系P = (  H  )。其中,用Lt代表程序总长度,Ln和Lr分别为新编代码和复用代码的长度。令Et、En和Er分别代表开发该程序的总工作量、新编程序的工作量和复用已有软件构件的工作量,Cn和Cr分别代表开发新代码和复用已有软件构件的生产率。
供选择的答案:
A~E.�① 知识复用    ② 分析结果复用  ③ 代码复用
��� ④ 方法与标准复用  ⑤ 设计结果复用  ⑥ 软件成分复用
 
F~H.  

四、问答题

1、软件复用的含义是什么?软件复用的范围有哪些方面?

2、简述软件复用的大致过程。说明在此过程中每个步骤需采用的关键步骤。

3、回答下列问题。
(1) 比较横向复用和纵向复用的异同及优劣。
(2) 假定有一个结构形如图8.3所示的构件库,基于该构件库的软件复用属于横向复用还是纵向复用?为什么?
解答:(1) 软件复用可以区分为横向复用和纵向复用。横向复用是复用不同应用论域中的软件元素,例如数据结构、排序算法、人机界面构件等。标准函数库是一种典型的原始的横向复用机制。纵向复用是在一类具有较多公共性的应用论域之间复用软件构件。
 横向复用是在几个截然不同的应用论域之间进行软件复用,可复用的资源有限,潜力不大。纵向复用的应用范围较大,从系统软件到特定论域的软件及应用软件,还有软件工程过程方面,许多计算机软件厂商开发了大量可复用的构件或软件包,在软件工程实践中取得显著的效益,因此受到广泛关注。
 (2) 图8.4 是关键词分类结构的示例,它是横向复用的典型例子,用户界面所涉及的技术可用于各个不同应用论域的软件中。

4、回答下列问题。
(1) 简述关键词分类法、多面分类法和超文本分类法等组织方法的概要。
(2) 简述相应的检索方法。

5、试简述基于软件复用的软件项目管理机构的组织和工作职责。