软件工程:软件复用

发布于:2025-08-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

简介

本篇博客围绕“软件复用”的核心概念、分类、实现方式以及构件化开发过程进行了深入浅出的学习和实践总结。通过闯关式任务,系统地掌握了软件复用的定义、各种复用类型(如黑盒/白盒、横向/纵向等)、复用的优缺点、实现软件复用所面临的技术与管理挑战等理论知识,并通过多项选择题检验对知识点的掌握程度。紧接着进一步探讨了构件的构成与标准、可复用构件的条件、常见构件分类方式(如枚举分类、刻面分类等)及其在构件库中的检索方法。最后,在第3关中,结合领域工程与应用系统工程的双维视角,梳理了基于构件的软件开发全流程,为后续的软件工程学习和实际开发奠定坚实基础。

第1关:什么是软件复用?

任务描述

本关任务:掌握软件复用的基本概念与特征,并完成相应的选择题。

相关知识

为了完成本关任务,你需要掌握:

软件复用的概念;

软件复用的分类;

软件复用的级别;

实现复用的基本条件;

实现软件复用的关键因素;

软件复用的优点;

实现软件复用的困难。

什么是软件复用

软件复用就是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率、开发成本的目的。
软件复用不仅是对程序的复用,他包括对软件生产过程中任何活动所产生的制成品的复用。例如:项目计划、可行性报告、需求定义、分析模型、详细说明、源程序和测试用例等。

注意:软件复用是一项活动,不是一个对象。

软件复用的分类

1.根据复用活动所跨越的领域分类:

横向复用:横向复用是复用不同领域中的软件元素,如数据结构、排序算法、人机界面构件等。为此建立标准函数库;

纵向复用:纵向复用是在一类具有较多公共性的应用领域之间的复用软件构件。由于在两个截然不同的应用领域之间进行软件复用的潜力不大,所以多数复用集中在纵向复用。

2.根据实现复用的途径分类:

组装复用:组合复用是事先已有一个可复用构件库,开发软件是事先已有一个可复用构件库,开发软件时从库中选择合适的构件,组装成新系统。必要时还要开发一些库中没有的构件,组装成新的系统。此类复用源自于源代码集的复用。

生成式复用:生成式复用是根据一些待开发软件的形式化描述,通过应用生成器自动生成相应的应用软件。例如,典型的词法分析和语法分析器 Lex 和 Yacc。

3.根据复用的方式分类:

黑盒复用:黑盒复用是指不对可复用构件做任何修改,原封不动地复用。此类复用要求可复用构件通用性、封装性、可靠性强,具有标准接口。

白盒复用:白盒复用是指在复用一个构件时需对其进行部分修改,以适应具体应用的需要。

软件复用的级别

当今及近期的未来最有可能产生显著效益的复用是对软件生命周期中一些主要开发阶段的软件制品的复用,按抽象程度的高低,可以划分为如下的复用级别:

代码的复用:包括目标代码和源代码的复用。

设计的复用:设计结果比源程序的抽象级别更高,因此它的复用受实现环境的影响较少,从而使可复用构件被复用的机会更多,并且所需的修改更少。

分析的复用:这是比设计结果更高级别的复用,可复用的分析构件是针对问题域的某些事物或某些问题的抽象程度更高的解法,受设计技术及实现条件的影响很少,所以可复用的机会更大。

测试信息的复用:主要包括测试用例的复用和测试过程信息的复用。

软件复用的条件

有可复用的对象;

所复用的对象必须是有用的;

复用者需要知道如何去使用被复用的对象。

实现复用的关键因素

实现软件复用的各种技术因素和非技术因素是相互联系的,关系如下图:

软件复用的优点

提高软件生产率,降低软件生产成本;

提高软件质量;

提高互操作性;

推动标准化;

支持原型开发。

实现软件复用的困难

技术因素

构件与应用系统之间的差异;
构件要达到一定的规模,才能支持有效的复用;
发现构件的困难;
基于复用的软件开发过程和软件过程需要一些新的理论、技术及支持环境。

人为因素

喜欢自己创造的而不喜欢使用别人的东西。

管理因素

和一般软件构件同等看待。
把复用看作可有可无的事。

教育因素

软件科学技术的教育与培训中,缺乏关于软件复用的内容,缺少专门的教材的课程。

作答要求

根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。

测试说明

平台会对你选择的答案进行判断,全对则通过测试。

题目

  • 1、

    下列关于软件复用正确的是( )

    A、

    软件复用既可以是一项活动,也可以是一个对象。

    B、

    根据复用活动所跨越的领域分类,软件复用可以分为组装复用和生成式复用。

    C、

    即使没有可复用的对象,依然可以进行软件复用。

    D、

    黑盒复用是指不对可复用构件做任何修改,原封不动地复用。

  • 2、

    下列关于软件复用,正确的有( )

    A、

    如果所复用的对象是无用的,软件复用就不可以正常进行。

    B、

    由于在两个截然不同的应用领域之间进行软件复用的潜力不大,所以多数复用集中在横向复用。

    C、

    实现软件复用的各种技术因素和非技术因素是相互联系的。

    D、

    词法分析和语法分析器 Lex和Yacc,前者是组装复用,后者是生成式复用。

答案

D,AC

思考

关键词拓展

  • 复用活动是“行为”而非“结果”:软件复用是一种贯穿整个开发过程的活动,而不是单纯复制已有模块的动作。

  • 复用对象:可复用的不仅是代码,还包括需求文档、测试用例、项目计划、架构图等软件工程产物。

  • 黑盒 vs 白盒复用对比

    • 黑盒复用优势在于安全性高、修改成本低;

    • 白盒复用灵活性更强,但维护成本相对较高。

高频考点总结

  • 按跨领域划分:横向复用(通用模块)、纵向复用(领域专用模块)

  • 按方式划分:黑盒复用(不修改)、白盒复用(可修改)

  • 按复用方式划分:组装式、生成式

第2关:可复用构件

任务描述

本关任务:掌握构件的基本概念与基于构件的软件开发过程,并完成相应的选择题。

相关知识

为了完成本关任务,你需要掌握:

构件的相关概念;

常见的构件标准;

建造可复用构件的注意事项;

可复用构件的条件;

可复用构件的两个基本模型;

构件的检索。

什么是构件?

构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。构件是一个独立发布的功能部件,可以通过其他接口访问它的服务。

而软件构件是软件系统中具有相对独立功能,可以明确标识,接口由规约指定,与语境有明显依赖关系,可独立部署,且多由第三方提供的可组装软件实体;软件构件必须承载有用功能,并遵循某种构件模型;可复用构件是指具有可复用价值的构件。

常见的构件标准

COM+

COM+ 注重于分布式网络应用的设计和实现,已经成为 Microsoft 系统平台策略和软件发展策略的一部分。它是微软开发的一个构件对象模型,可以在成品中升级和扩展,而不会对使用它们的客户端应用程序造成负面影响;

CORBA(公共对象请求代理架构)

CORBA 是由 OMG(对象管理集团)组织制订的一种标准的面向对象的应用程序体系规范。OMG 发布的构件标准核心是 ORB(对象请求代理),定义了异构环境下对象透明地发送请求和接受响应的基本机制;

EJB

EJB 用于封装业务,而业务可分为业务实体和业务过程。在 J2EE 模型当中,中间层的业务功能通过 EJB 构件实现,使用 JSP 实现业务逻辑处理结果的动态发布,构成动态的 HTML 页面,中间层也可以使用 Servlet 实现更为灵活的动态页面。因此它提供了让客户使用远程分布式对象的框架。

构件的分类

构件库管理系统主要用于构件的存储、检索、浏览和管理。

而对构件库中的构件进行合理的分类和组织,能有效的帮助软件开发人员找到所需要的构件。大多数的研究都建议使用图书馆科学索引方法进行构件分类。

下图则是源于图书馆科学索引方法的分类法:

构件的常见分类有以下三种:

枚举分类

将构件组织成分类层次结构,构件库中的构件按某些性质分成若干大类,每个大类又分成若干个较小的类,经过若干次分解,形成构件分类的层次结构,实际的构件位于层次构件的最低层,其他层则表示构件的类或子类。

枚举分类模式的分层结构易于理解和检索,但是,在建立层级结构之前,必须进行领域分析,寻找合适的供分类的性质。

刻面分类

一个刻面描述构件某一方面的特征,刻面分类则是从不同的侧面对构件进行分类,每一种分类方式称为一个刻面。不同的刻面根据其重要性可以设置不同的优先级。

对构件的每一个刻面赋予相应的值,用以描述该构件,刻面分类具有较好的灵活性,易于加入新的刻面值,因此刻面分类比枚举分类更易于扩展和修改。

支持多重观点对构件进行分类,例如从构件的应用领域、构件所描述的对象、构件的观点和编程语言等不同的方式来分类。每一种分类方法称为一个刻面。每个刻面把构件集合划分为一个子集,各刻面所划分的子集形成一些较小的交集。

例如:

刻面 刻面值 
应用领域 图形用户界面编程
对象 菜单
功能 动态修改菜单项
编程语言 Java

属性-值分类

为所有构件定义一组属性,每个构件都具有一组属性值,开发人员通过指定一组属性值对构件库中的构件进行检索。

该分类方法与刻面分类方法非常类似,不同点在于:

属性-值分类法对可使用的属性数量没有限制,而刻面描述一般限制在7或8个刻面;

属性没有优先级,而刻面根据其重要程度,有相应的优先级。

建造可复用构件

建造构件的目的是为了以后复用构件,即为复用而建造构件。

在建造构建时应遵循抽象、逐步求精、信息隐蔽、功能独立、结构化程序设计等思想和原则。

由于面向对象方法具有封装性、继承等特性,能有力地支持复用,所以应尽可能考虑采用面向对象方法。

可复用构件的条件

一个软件只有在多个系统中被使用才可称为“可复用构件”,可复用构件必须具备的条件:

条件 含义
独立性 解决一个相对独立的问题,或大问题中某个相对独立的部分
 
完整性 提供较完整地解决,不要遗留很多缺口,让复用者做大量补充
可标识性 构件做解决的问题应该是可标识的,可命名的,有简要介绍,便于理解和使用
通用性 构件解决的问题应在同类应用中具有一般性
适应性 应用场合有某些变化时,构件仍时可用的,使构件的某些数据参数和数据类型参数化
可靠性 要求构件对预计将要使用它的系统是可靠的
标准化  可复用构件的标准化对于软件复用是至关重要的

可复用构件的两个基本模型

3 C 构建模型:关于构件的一个指导模型。
 由构件的三个不同方面的描述组成:

概念:关于“构件做什么”的抽象描述,可以通过概念去理解构件的功能。概念包括接口规约和语义描述两部分,语义描述和每个操作相关联(至少表示为前后置谓词形式);

内容:概念的具体实现,描述构件如何完成概念所刻画的功能;

周境:描述构件和外围环境在概念级和内容级的关系,刻画构件的应用环境,为构件的选用和适应性修改提供指导。

REBOOT 构建模型:基于面向对象技术的复用。
 一种基于刻面的模型:

刻面:对领域进行分析,所得到的一组基本描述特征;

刻面可以描构件执行的功能、所操作的数据、构件应用的周境或任何其他特征;

通常的刻面描述限制在不超过7或8个刻面。

 一个构件通常包括以下刻面:

抽象:它是软件概念的抽象性描述;

操作:它是构件所提供操作的描述;

操作对象:它描述操作的对象;

依赖:它描述构件与外界的依赖关系。

构件检索

构件库中检索一个构件和在数据库中检索一个记录是不同的:数据库记录是按关键字检索;构件库按照子集(刻面值)或属性检索。

检索的两个指标是:查准率、查全率。

检索的不确定性带来了两种相互矛盾的结果:

检索的结果可能是一个较大的构件集合,要从中找到所需的构件仍然很费力;

检索得到的集合没有把真正需要的构件包括在内。

不确定性的解决办法也相应有两种:

构件库系统能对提出的检索条件作广义解释;

使检索得到的构件集合尽可能不包括对用户无用的构件。

作答要求

根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。

测试说明

平台会对你选择的答案进行判断,全对则通过测试。

题目

  • 1、

    下列关于构件说法正确的是( )

    A、

    EJB是一种常见的构件标准,一种基于javascript的构件标准。

    B、

    构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。

    C、

    包装方法和部署方法都是构件的要素。

    D、

    软件构件必须承载有用功能,并遵循某种构件模型。

  • 2、

    下列关于构件的描述,错误的是( )

    A、

    枚举分类模式的分层结构易于理解和检索。

    B、

    刻面没有优先级,而属性根据其重要程度,有相应的优先级。

    C、

    REBOOT 构建模型是一种基于面向对象技术的复用。

    D、

    构件检索的不确定性会使得检索得到的集合没有把真正需要的构件包括在内。

答案

BCD,B

思考

构件设计要点

  • 封装性:构件必须隐藏实现细节,只暴露清晰、规范的接口;

  • 独立性:构件应独立于上下文使用,便于迁移;

  • 适应性和参数化:通过参数化接口与配置支持多场景复用;

  • 标准化与版本控制:复用构件需遵循标准接口规范,如 COM、CORBA、EJB 等,并支持版本管理以提升可维护性。

分类方式举例

  • 枚举分类:如图形→菜单→右键菜单

  • 刻面分类:如构件语言(Java)、功能(认证模块)、平台(Web)

构件检索方法优化建议

  • 设置语义检索功能;

  • 支持模糊匹配与权重排序;

  • 引入构件评分机制,提高查准率。

第3关:基于构件的软件开发过程

任务描述

本关任务:掌握基于构件的软件开发过程,并完成相应的选择题。

相关知识

为了完成本关任务,你需要掌握:

领域工程;

应用系统工程。

基于构件的软件工程

基于构件的软件开发工程也称为构件工程,是以面向对象的方法为基础,实现软件重用,构造新系统的过程。

它是利用预先包装的构件来构造应用部分。包括领域工程和应用系统工程两部分。

领域工程:目的是构建领域模型、领域基准体系结构和可复用构件库。

应用系统工程:目的是使用可复用构件组装应用系统。

领域工程

领域工程创建的步骤如下:

领域分析

对特定应用领域中共同的特性、知识、需求的标识、分析和规约。

建立领域的基准体系结构模型

在领域分析的基础上,构造该领域的基准体系结构,这个基准体系结构是可扩充的,并可供该领域的应用复用。

标识候选构件

在领域分析和构造该领域的基准体系结构模型的基础上标识该领域的候选构件。

泛化和可变性分析

提高其通用性,同时寻找候选构建在不同应用中的变化点,通过设置参数、继承或其他手段,使可变部分局部化。

重建构件

在泛化和可变性分析的基础上,重建构件,使它成为可复用构件。

构件的测试

对重建的可复用构件要严格测试,以提高其可靠性。

构件的包装

经测试的构件应根据构件库的要求,对它进行包装,以便构件库对它分类储存和检索。

构件入库

包装后的构件即可存入构件库。

应用系统工程

应用系统工程的步骤如下:

建立应用系统的体系结构模型

可以使用构件生产者提供的领域特定的基准体系结构经裁剪和/或扩充而获得。

寻找候选构件

根据应用系统的体系结构模型,从构件库或其他可利用的的构件源中寻找候选构件。

评价和选择合适构件

评价候选构件以判断是否适合于待开发的软件。

构件的修改和特化

在复用时对构件进行特化以满足特定应用的需求。

开发未被复用的部分

对新系统中未复用的部分进行开发。

构件的组装

将特化和修改后的可复用构件和新开发的部分组装成一个新的软件系统。

集成测试

对组装后的软件系统进行集成测试。

评价被复用构件,并推荐可能的新构件。
如下图是一个基于构件的软件开发过程:

作答要求

根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。

测试说明

平台会对你选择的答案进行判断,全对则通过测试。

题目

  • 1、

    下列关于基于构件的软件开发过程,说法错误的是( )

    A、

    基于构件的软件开发工程也称为构件工程,是以面向对象的方法为基础,实现软件重用,构造新系统的过程。

    B、

    领域工程创建应用领域的模型,标识、构造、分类和传播一组可重用的软件。

    C、

    领域分析是对特定应用领域中共同的特性、知识、需求的标识、分析和规约。

    D、

    为了实现软件重用,基于软件构件的软件工程强调领域工程和软件工程轮次进行。

答案

D

思考

领域工程重点

  • 分析-抽象-重构流程清晰:先做领域分析,构造基准架构,再泛化构件;

  • 可变性局部化:使用参数化、继承、多态等方式处理差异点;

  • 构件入库与分类:构件需经过标准包装才能被高效管理与复用。

应用系统工程步骤梳理

  1. 体系结构建模

  2. 构件选择与适配

  3. 构件修改与特化

  4. 新代码开发与构件组装

  5. 系统集成与测试

构件工程实用建议

  • 利用已有构件库,避免重复造轮子;

  • 在项目初期就明确可复用构件来源与集成方式;

  • 对所用构件进行评价反馈,促进复用生态发展。

总结

通过本篇关于软件复用与构件化开发的学习,我深刻理解了复用不仅限于源代码的直接调用,还涵盖了从需求分析到测试的全生命周期产物的复用。复用的价值体现在大幅提高开发效率、降低成本、提升软件质量与一致性方面。然而,要实现真正高效的软件复用,还需克服构件通用性不足、缺乏标准接口、组织管理松散等问题。构件化的思想为现代软件工程提供了良好实践模型,构件的独立性、适应性和标准化程度将直接决定其复用价值。本篇博客所涵盖的内容,不仅是考试和项目实战中的重点知识点,也代表了当前软件工程发展的主流趋势。未来,我将继续深入理解各类设计模式、构件模型与构建平台,实现从“写代码”到“组装软件”的开发模式转变。


网站公告

今日签到

点亮在社区的每一天
去签到