前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】软考高级-架构设计师 083-基于构件的软件工程

【愚公系列】软考高级-架构设计师 083-基于构件的软件工程

原创
作者头像
愚公搬代码
发布于 2024-08-02 00:36:04
发布于 2024-08-02 00:36:04
5160
举报

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、联网、络安全、数据、工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

基于构件的软件工程(CBSE)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构件的复用,使得软件开发过程更加高效和灵活。

应用场景

  • 企业软件开发
    • 在企业级软件开发中,通过重用构件可以快速构建复杂的业务应用,减少开发周期。
  • 嵌入式系统
    • 在嵌入式系统中,基于构件的方法有助于开发高度模块化和可定制的系统。
  • 云计算微服务架构
    • 在云计算和微服务架构中,基于构件的设计思想有助于实现高效的服务部署和管理。

🚀一、基于构件的软件工程

🔎1.概念

基于构件的软件工程(Component-Based Software Engineering, CBSE)是一种基于分布对象技术的方法,强调通过可复用构件设计与构造软件系统。CBSE体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装。

🦋1.1 构件的特征

用于CBSE的构件应该具备以下特征:

  1. 可组装性
    • 构件的所有外部交互必须通过公开定义的接口进行,确保其能够与其他构件正确协作。同时,构件应对自身信息的外部访问进行控制,确保数据的安全性和完整性。
  2. 可部署性
    • 软件构件必须是自包含的,可以作为一个独立实体在构件平台上运行。构件通常以二进制形式存在,无需在部署前重新编译。
  3. 文档化
    • 构件必须完全文档化,用户可以根据文档判断构件是否满足其需求。文档应详细描述构件的功能、接口和使用方法。
  4. 独立性
    • 构件应该是独立的,能够在无需其他特殊构件的情况下进行组装和部署。如果确实需要其他构件提供服务,则应明确声明这些依赖关系。
  5. 标准化
    • 构件必须符合某种标准化的构件模型。标准化模型定义了构件的实现、文档化和开发标准,确保构件的一致性和互操作性。

🦋1.2 构件模型要素

构件模型包含以下要素:

  1. 接口
    • 构件通过接口来定义,接口描述了构件提供的操作、参数以及可能的异常。构件模型规定了如何定义接口及其应包含的要素。
  2. 使用信息
    • 为了实现构件的远程分布和访问,必须给构件分配一个特定的、全局唯一的名字或句柄。构件元数据包含构件的接口和属性信息,这些信息对于构件的使用和集成至关重要。
  3. 部署
    • 构件模型包括一个规格说明,指出如何打包构件使其成为一个独立的可执行实体。部署信息中包含有关包内容和二进制构成的信息,确保构件可以顺利部署和运行。

基于构件的软件工程(CBSE)通过使用标准化、文档化、独立且可部署的构件,提高了软件开发的效率和质量。CBSE方法将重点放在构件的选取和组装上,而不是从头编写代码,从而实现了软件系统的快速构建和高效维护。

🔎2.被构件使用的通用服务

构件模型提供了一组被构件使用的通用服务,这些服务主要包括以下两种:

  1. 平台服务
    • 平台服务允许构件在分布式环境下进行通信和互操作。这些服务确保不同构件之间可以无缝协作,无论它们部署在何处。
  2. 支持服务
    • 支持服务是许多构件共需要的通用服务。这些服务包括但不限于:
      • 身份认证服务:确保只有经过认证的用户或系统能够访问构件。
      • GPS服务:提供位置信息,供需要地理定位功能的构件使用。
  3. 中间件服务
    • 中间件负责实现共性的构件服务,并提供这些服务的接口。通过中间件,构件可以方便地调用各种通用服务,简化开发过程并增强系统的整体功能。

构件模型通过平台服务和支持服务提供了构件所需的通用功能。这些服务由中间件实现,并通过标准接口提供给构件使用,从而确保构件能够在分布式环境中高效互操作,并具备必要的共性功能。

🔎3.主要活动

CBSE过程是支持基于构件组装的软件开发过程,主要包括以下六个活动:

  1. 系统需求概览
    • 确定系统的整体需求和功能需求,概述系统的目标和预期功能,为后续活动提供基础。
  2. 识别候选构件
    • 在需求概览的基础上,识别可以满足这些需求的现有构件。分析市场上可用的构件库,选择符合系统需求的候选构件。
  3. 根据发现的构件修改需求
    • 根据已识别的候选构件,调整和修改系统需求,以确保需求与可用构件的功能相匹配。这一步确保了系统需求的可实现性和合理性。
  4. 体系结构设计
    • 设计系统的总体体系结构,定义各个构件的角色和它们之间的交互方式。确保体系结构能够有效地集成所有已选择的构件。
  5. 构件定制与适配
    • 对已选择的构件进行必要的定制和适配,以满足系统的具体需求。这可能包括修改构件的配置、接口或行为,使其与系统的其他部分兼容。
  6. 组装构件创建系统
    • 将所有定制和适配好的构件进行组装,创建最终的系统。确保各个构件之间的正确集成和协作,进行系统级别的测试和验证。

CBSE过程通过系统需求概览、识别候选构件、修改需求、体系结构设计、构件定制与适配以及组装构件创建系统等六个主要活动,支持基于构件组装的软件开发过程。这一过程强调构件的重用和集成,旨在提高软件开发的效率和质量。

🔎4.不同点

CBSE过程与传统软件开发过程的不同点:

  1. 需求明确性
    • CBSE:早期需要完整的需求,以便尽可能多地识别出可复用的构件。
    • 传统软件开发:需求可以在开发过程中逐步细化,不要求在早期阶段就完全明确。
  2. 需求细化和修改
    • CBSE:在过程早期阶段,根据可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求。
    • 传统软件开发:需求通常由开发团队根据用户的初始需求进行详细的需求分析,不需要考虑已有构件的约束。
  3. 进一步的构件搜索及设计精化
    • CBSE:在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适合功能和架构的要求。
    • 传统软件开发:系统设计完成后,开发团队通常直接进行编码实现,不需要额外的构件搜索和适配工作。
  4. 开发过程
    • CBSE:开发就是将已经找到的构件集成在一起的组装过程,强调构件的集成和复用。
    • 传统软件开发:开发主要集中在从头开始编写代码,进行详细的设计和实现,复用的构件较少。

CBSE过程与传统软件开发过程的主要不同点在于:CBSE在早期需要明确的需求,依赖现有构件来细化和修改需求,强调构件的搜索和适配,并以构件集成为主要开发活动。而传统软件开发过程则更加注重逐步细化需求,直接进行编码实现。

🔎5.组装方式

构件组装是指通过直接集成构件或使用专门编写的“胶水代码”将构件整合在一起,以创建一个系统或另一个构件的过程。常见的构件组装方式有以下三种:

  1. 顺序调用组装
    • 通过按顺序调用已有的构件,可以用两个已经存在的构件来创造一个新的构件。例如,上一个构件的输出作为下一个构件的输入。
    • 这种方式通过简单的流水线式调用,串联多个构件以实现复杂功能。
  2. 层次组装
    • 这种情况发生在一个构件直接调用另一个构件所提供的服务时。被调用的构件为调用的构件提供所需的服务。
    • 层次组装要求两个构件之间的接口匹配兼容,使调用关系能够顺利进行。
    • 这种方式强调构件之间的层次关系和依赖性。
  3. 叠加组装
    • 这种情况发生在两个或两个以上的构件放在一起创建一个新构件时。新构件合并了原构件的功能,从而对外提供了新的接口。
    • 外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。
    • 这种组装类型适合于构件是程序单元或者构件是服务的情况,能够实现功能的叠加和扩展。

构件组装通过顺序调用组装、层次组装和叠加组装三种方式,将不同的构件集成在一起,创建更复杂的系统或构件。每种组装方式有其特定的应用场景和优势,适用于不同类型的构件集成需求。

🔎6.不兼容问题

在构件组装过程中,可能会遇到以下三种不兼容问题,可以通过编写适配器来解决:

  1. 参数不兼容
    • 问题:接口两侧的操作名称相同,但参数类型或参数个数不相同。
    • 解决方法:编写适配器以转换参数类型或调整参数个数,使两个接口的参数匹配。
  2. 操作不兼容
    • 问题:提供接口和请求接口的操作名称不同。
    • 解决方法:通过适配器将一个接口的操作名称映射到另一个接口的操作名称,确保调用能够正确匹配。
  3. 操作不完备
    • 问题:一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。
    • 解决方法:编写适配器来补充缺失的操作,或者在调用时忽略多余的操作,确保两个接口的操作集合能够兼容。

通过编写适配器,可以有效解决参数不兼容、操作不兼容和操作不完备等构件组装中的不兼容问题,实现不同构件之间的无缝集成。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
How Do You Test AI Systems?--你如何测试AI系统
RonSchmelzerContributor(Ron SchmelzerContributor公司)
顾翔
2020/05/20
7110
ML Ops:数据质量是关键
ML Ops 的发展弥补了机器学习与传统软件工程之间的差距,而数据质量是 ML Ops 工作流的关键,可以加速数据团队,并维护对数据的信任。
机器之心
2020/10/27
8580
ML Ops:数据质量是关键
别掉队!2020年将出现的7种新兴自动化Web测试趋势,你知道吗?
在最近几年中,技术以多种形式发展。从开发到测试再到持续交付,我们已经看到了IT行业的许多变化。但是,软件测试过程遇到了最积极的变化,特别是在测试过程中引入自动化之后,测试人员可以轻松便捷地测试Web应用程序或网站。
小小科
2020/06/10
6500
质量保障的方法和实践
传统的质量保证通常需要在进行任何测试之前进行大量的准备工作和脚本编写。这导致在接近deadline日期时发现软件中的更多错误。从敏捷测试开始,更多的质量保证涉及自动化测试和持续集成。这种方法在软件开发周期开始时就发现了大多数错误,并随着周期的进行进行了修复。达到减少了在项目结束时需要解决的错误的目的,从而可以无缝、轻松地交付。
FunTester
2020/09/08
5510
面向AI应用的测试思考
“ 人工智能(AI)已无处不在,AI正在为各行各业赋能,并以前所未有的速度全方位地改变着我们的生活。然而,由于AI是一种新的编程范式,无论在学术界还是工业界,对于AI测试的研究和实践尚处于起步阶段。”
Criss@陈磊
2020/09/08
1.6K0
MLOps:构建生产机器学习系统的最佳实践
你可能已经听过很多次了,但只有一小部分机器学习模型投入生产。部署和运行机器学习模型对于大多数已经开始将ML应用于用例的行业来说都是一个挑战。在这篇文章中,我将分享一些MLOps的最佳实践和技巧,它们将允许您在生产环境中使用您的ML模型并正确地操作它。在我们开始之前,让我们讨论一下我们可能都知道的典型的ML项目生命周期。
deephub
2021/04/16
1.3K0
软件测试:概念篇
目的:验证软件有或没有问题。 原则:以客户为中心,遵循软件测试的规范、流程、标准和要求。
测试开发社区
2019/09/20
7530
软件测试:概念篇
算法工程师的日常工作内容?你想知道的可能都在这里
有很多小伙伴可能都对未来的工作内容有所好奇,不知道所谓的算法工程师到底日常在做什么,而我以后能不能胜任?
AI算法与图像处理
2019/09/17
1.7K0
算法工程师的日常工作内容?你想知道的可能都在这里
未来的QA测试工程师
软件测试和编程项目快速增长的体量已经让QA别无选择,只能用更有效的自动化解决方案代替人工操作。IT领域正在朝着自动化软件技术方面快速发展。由于越来越多的企业采用敏捷方法并应用DevOps,因此质量保证不再是启动前的阶段。它贯穿整个产品生命周期。
FunTester
2020/01/10
6760
如何测试人工智能模型:QA入门指南
https://dzone.com/articles/how-to-test-ai-models-an-introduction-guide-for-qa-1
顾翔
2020/05/21
1.6K0
如何测试人工智能模型:QA入门指南
如何有效提升软件测试质量?
软件质量保障 | 测试质量保障、自动化工具/框架、平台开发、算法测试、BAT/TMD大厂测试岗面试题/面经分享、测试团队建设与管理、测试新技术的分享。 偶尔也聊聊个人工作的收获与经验。可以帮忙内推字节、阿里、百度等大厂。
互联网金融打杂
2022/08/01
1.2K0
如何有效提升软件测试质量?
新词:QA-Ops
QAOps是指通过使用DevOps思维方式来保持软件质量。DevOps指软件开发(Dev)和IT运维(Ops),并在开发和IT运营之间建立关系。将DevOps引入业务实践的目的是改善两个业务部门之间的协作。
FunTester
2020/04/08
7970
「AI工程论」AI的透明性(Transparent)及一种多因素评估方法
让人工智能发挥作用的一个基石是机器学习——机器从经验和数据中学习,并随着学习而不断提高的能力。事实上,机器学习的研究和应用的爆炸式增长使得人工智能成为了最近的兴趣、投资和应用热点。从根本上说,机器学习就是给机器大量的数据来学习,然后使用复杂的算法,从学习中归纳出机器从未见过的数据。在这种情况下,机器学习算法是教会机器如何学习的配方,而机器学习模型是这种学习的输出,然后可以归纳为新的数据。
用户7623498
2020/08/05
8560
「AI工程论」AI的透明性(Transparent)及一种多因素评估方法
机器学习下的持续交付
机器学习在行业中的应用变得越来越流行,然而相对于传统软件开发,例如Web服务或者Mobile应用来说,这类程序的开发、部署和持续改进也变得更加的复杂。它们的功能改变通常由以下三个维度驱动:
ThoughtWorks
2020/03/13
5830
AI智能体的开发流程
AI智能体的开发流程是一个多阶段、迭代的过程,它将机器学习、软件工程和领域知识结合在一起,旨在创建一个能够感知、推理、学习和行动的自主系统。下面是一个详细的AI智能体开发流程。
数字孪生开发者
2025/06/16
2130
AI智能体的开发流程
模型运营是做什么的(概念模型数据库)
我们过去几年的调查表明,很多不同行业的机构对机器学习(ML)越来越感兴趣。有几个因素促成人们在产品和服务中运用机器学习。首先,机器学习社区已经在企业感兴趣的许多领域实现了研究的突破,并且大部分研究都通过预发表和专业会议演示进行了公布。我们也开始看到研究人员共享出在流行的开源框架中编写的示例代码,有些甚至共享出了预先训练好的模型。企业和机构现在还可以从更多的应用案例从中吸取灵感。非常有可能在你感兴趣的行业或领域里,你可以找到许多有趣的机器学习的应用并借鉴参考。最后,建模工具正在被改进和优化,同时自动化工具已经可以让新用户去解决那些曾经是需要专家才能解决的问题。
全栈程序员站长
2022/08/01
8080
模型运营是做什么的(概念模型数据库)
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……
在机器学习领域,训练数据准备是最重要且最耗时的任务之一。实际上,许多数据科学家声称数据科学的很大一部分是预处理的,并且一些研究表明,训练数据的质量比你使用的算法类型更为重要。
AI科技大本营
2020/03/16
8740
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……
在软件开发中实施人工智能和敏捷管理的9种方法
几十年来,人工智能通过帮助各行各业的企业蓬勃发展,证明了其价值。从汽车制造厂的机器人到预测货币和库存变动到交易员,人工智能是我们生活的一部分。
Java架构师历程
2019/03/08
1.3K0
在软件开发中实施人工智能和敏捷管理的9种方法
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
2006 年,Geoffrey Hinton 等人发表了一篇论文,展示了如何训练一个能够以最先进的精度(>98%)识别手写数字的深度神经网络。他们将这种技术称为“深度学习”。深度神经网络是我们大脑皮层的(非常)简化模型,由一系列人工神经元层组成。在当时,训练深度神经网络被普遍认为是不可能的,大多数研究人员在 1990 年代末放弃了这个想法。这篇论文重新激起了科学界的兴趣,不久之后,许多新论文证明了深度学习不仅是可能的,而且能够实现令人惊叹的成就,其他任何机器学习(ML)技术都无法匹敌(在巨大的计算能力和大量数据的帮助下)。这种热情很快扩展到许多其他机器学习领域。
ApacheCN_飞龙
2024/05/24
1.3K0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
机器学习正在改变软件测试的未来(Computing)
大多数软件开发团队认为他们的软件测试能力不足。他们明白质量缺陷所带来的影响是巨大的,在质量保证方面投入了大量资金,但仍然没有得到想要的结果。这并不是因为缺乏人才或努力,而是因为软件测试的技术效率极低。软件测试这一行业一直没有得到很好地发展。
谭雪儿
2020/12/18
9200
相关推荐
How Do You Test AI Systems?--你如何测试AI系统
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 🚀前言
  • 🚀一、基于构件的软件工程
    • 🔎1.概念
      • 🦋1.1 构件的特征
      • 🦋1.2 构件模型要素
    • 🔎2.被构件使用的通用服务
    • 🔎3.主要活动
    • 🔎4.不同点
    • 🔎5.组装方式
    • 🔎6.不兼容问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档