基于构件的软件开发

长期以来的软件开发状况

多数软件都是针对某个具体的应用系统从头进行开发的。

导致:出现了大量的同类软件重复开发,造成大量人力、财力的浪费,而且软件的质量也不高。

对比:汽车工业的生产模式

在已有的部件基础上通过组装进行生产:有专门的部件生产工厂,汽车设计者在设计中选择市场上已有的合适的部件。

避免了大量的重复劳动,提高了产品质量和生产效率,促进分工合作。

我们的目标:将制造业中的组装式生产模式引入到软件开发中

基于构件的软件开发概述

基于构件的软件开发(Component-Based Software Development)简称CBSD

是指使用可复用构件来开发应用软件

基于构件的软件工程(Component-Based Software Engineering)简称CBSE

构件(Component)的典型定义

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

Brown的定义:构件是一个独立发布的功能部分,可以通过其接口访问它的服务

“计算机科学技术百科全书”的定义:软件构件是软件系统中具有相对独立功能,可以明确标识,接口由规约指定,与语境有明显依赖关系,可独立部署,且多由第三方提供的可组装软件实体;软件构件须承载有用的功能,并遵循某种构件模型;可复用构件是指具有可复用价值的构件

构件的要素

  1. 规格说明:建立在接口概念之上,作为服务提供方与客户方之间的契约
  2. 一个或多个实现
  3. 受约束的构件标准
  4. 包装方法
  5. 部署方法

3C构件模型

关于构件的一个指导性模型,由构件的三个不同方面的描述组成

  1. 概念(concept):关于“构件做什么”的抽象描述,可以通过概念去理解构件的功能。概念包括接口规约语义描述部分,语义描述和每个操作相关联(至少表示为前后置谓词形式)(就是写个大致说明是做什么的)
  2. 内容(content):概念的具体实现,描述构件如何完成概念所刻画的功能(写怎么做的)
  3. 周境(context):描述构件和外围环境在概念级和内容级的关系,刻画构件的应用环境,为构件的选用适应性修改提供指导

REBOOT构件模型

基于面向对象技术的复用——REBOOT(Reuse Based on Object_Oriented Technology)

一种基于刻面(facet)的模型

  • 刻面:对领域进行分析,所得到的一组基本的描述特征(得到一组数据)
  • 刻面可以描述构件执行的功能、所操作的数据、构件应用的周境或任何其他特征(执工操数构周奇特)
  • 通常的刻面描述在不超过7或8个刻面

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

抽象(abstraction):它是构件概念的抽象性描述

操作(operation):它是构件所提供的操作的描述

操作对象(operand):它描述操作的对象

依赖(dependency):它描述构件与外界的依赖关系

常用的构件标准

CORBA(公共对象请求代理体系结构)

  • Common Object Request Broker Architecture
  • OMG发布的构件标准
  • 核心是ORB(Object Request Broker),定义了异构环境下对象透明地发送请求接受响应的基本机制

COM+

  • 微软开发的一个构件对象模型,提供了在运行于Windows操作系统之上的单个应用中使用不同厂商生产的对象的规约

EJB:一种基于Java的构件标准

  • EJB(Enterpise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。
  • EJB规约规定了EJB构件如何与EJB容器进行交互。

基于构件的软件开发过程

(这不是第一章的基于构件的软件开发模型的图吗?)

领域工程步骤

  1. 领域分析:首先要进行领域分析,收集领域中有代表性的应用样本,分析应用中的公共部分或相似部分,抽取该领域的应用体系结构
  2. 建立领域特定的基准体系结构模型:在领域分析的基础上,构造该领域的基准体系结构,这个基准体系结构应是可以裁剪和扩充的,并可供该领域的应用复用
  3. 标识候选构件:在领域分析和领域基准体系结构模型的基础上标识该领域的候选构件
  4. 泛化(generalization)和可变性(variability)分析:提高其通用性,同时寻找候选构件在不同应用中的变化点(variation point),通过设置参数、继承或其他手段,使可变部分局部化
  5. 重建构件:在泛化和可变性分析的基础上,重建构件,使它成为可复用的构件
  6. 构件的测试:对重建的可复用的构件要严格测试,以提高其可靠性
  7. 构件的包装:经测试的构件应根据构件库的要求,对它进行包装,以便构件库对它分类储存和检索
  8. 构件入库:包装后的构件即可存入构件库

应用系统步骤

  1. 建立应用系统的体系结构模型:可以使用构件生产者提供的领域特定的基准体系结构经裁剪和/或扩充而获得
  2. 寻找候选构件:根据应用系统的体系结构模型,从构件库或其他可利用的构建源中寻找候选构件
  3. 评价和选择合适的构件:评价候选构件以判断是否适合于待开发软件
  4. 构件的修改(modify)和特化(specialize):在复用时对构件进行特化以满足特定应用的需要
  5. 开发未被复用的部分:对新系统中未复用的部分进行开发
  6. 构件的组装:将特化和修改后的可复用构件和新开发的部分组装成一个新的软件系统
  7. 集成测试:对组装后的软件系统进行集成测试
  8. 评价被复用的构件,并推荐可能的新构件

建造可复用构件

  1. 建造构件的目的是为了以后复用构件,即为复用而建造构件
  2. 在建造构件时仍应遵循抽象、逐步求精、信息隐蔽、功能独立、结构化程序设计思想和原则
  3. 由于面向对象方法具有封装性、继承等特点,能有力地支持复用,所以应尽可能考虑采用面向对象方法

对可复用构件的要求

  1. 构件的设计应具有较高的通用程度
  2. 构件应易于调整
  3. 构件应易于组装
  4. 构件必须具有可检索性
  5. 构件必须经过充分的测试

创建领域构件的设计框架

除应遵循已有的设计概念和原则外,还必须考虑应用领域的特征,如:

  1. 标准数据:应该研究应用领域,并标识出标准的全局数据结构(如文件结构和完整的数据库)。于是所有设计的构件都可以使用这些标准数据结构来刻画
  2. 标准接口协议:应该建立三个层次的接口协议:构件内接口、构件外接口以及人机接口
  3. 程序模板:程序的结构模型可以作为新程序的体系结构设计的模板

可变性分析

  1. 构件应具有较强的通用性和可变性
  2. 为了满足不同的复用需求,需要在构件复用时可能发生变化的一个或多个位置上标识变化点(variation point),同时为变化点附加一个或多个变体(variant)

可变性机制

继承:在变化点上创建指定抽象类型或抽象类的子类型或子类。

扩展和扩展点:可以在用况和对象构件中的变化点(或扩展点)上符加变体(或扩展)

参数化:用于模板、框架和宏的类型和类

适用于变体较小时(经常是一个数值、短语或表达式)

应用系统工程

任务:通过组装可复用构件得到应用系统

CBSD中,构件是组成应用系统的基本单元

注重体系结构和构件接口的分析和设计,忽略构件内部实现的设计

关注接口的设计

  • 接口是构件行为的描述机制,并提供了对其服务的访问

    • 供应接口(Provided interface):描述构件所提供的服务,可以被其他构件访问
    • 请求接口(required interface):请求接口描述构件为完成其功能(服务)需请求其他构件为其提供的服务(构件调用构件)
  • 一个接口可以有多种实现,并且对使用者隐蔽
  • 接口描述构件使用者能依赖的所有信息,因此构件接口描述的表达能力和完整性是CBSD方法主要关注的问题之一

基于构件的体系结构

  • 基于构件的应用系统体系结构

    • 描述了组成应用系统的构件,构件之间的组织结构、交互、约束和关系
    • 对系统的组成、结构以及系统如何工作的较为宏观的描述
  • 如果在领域工程中已开发了领域基准体系结构(reference architecture),则可以通过对基准体系结构的剪裁和/或扩充获得应用系统的体系结构

基于构件的体系结构层次

  • 逻辑体系结构

    • 以接口形式对每组服务进行描述,并描述哪些包怎样交互来满足通常的用户使用场景
    • 展示了系统设计的蓝图,可用于验证系统是否提供了适当的功能,并能在系统功能需求变化时方便地改变系统的设计
  • 物理体系结构
    • 描述系统的物理设计,包括硬件及其拓扑结构、网络和通信协议、基础设施(如运行平台、中间件、数据库管理系统等),以及软件系统的部署
    • 展示了系统的实现构架,有助于理解系统的许多非功能属性,如性能、吞吐量、服务的可用性等

基于构件的应用系统开发方法

  • Rational统一过程

    • Rational‘s Unified Process,简称RUP
    • 一个关于软件开发的广泛的过程框架,覆盖了整个软件生命周期
    • 使用UML进行分析和设计建模,鼓励使用CBSD方法
  • 选择视图的方法
    • 支持通用的构件设计方法,并以Select Component Manager为目标
    • 通用构件设计准则使用UML作为构件设计符号
  • Enterprise-CBD方法
    • 鼓励使用UML的拓展形式把构件的规格说明和实现分离
    • 允许制作技术中立的规格说明,然后再使用不同的实现技术实现规格说明
  • 共同点:关注构件库中的构件接口的设计基于构件构架的应用程序组装

构件鉴定(qualification)

  • 目的:确保获得的构件可以完成所需的功能并被集成在系统中与系统的其他构件正确交互
  • 主要依据:是构件的接口描述相关的规格说明,但这些信息往往还不足以确保构件能成功地集成到系统中
  • 对于外部提供的成品构件(COTS)可通过运行构件测试版进行鉴定

构件鉴定需考虑的因素

  1. 应用编程接口(API)
  2. 该构件所需的开发和集成工具
  3. 运行时需求,包括使用的资源(如内存或存储器)、时间或速度以及网络协议
  4. 服务需求,包括操作系统接口和来自其他构件的支持
  5. 安全特征,包括访问控制和身份验证协议
  6. 嵌入式设计假定,包括特定的数值或非数值算法的使用
  7. 异常处理

构件的特化和组装

构件特化

  1. 根据应用系统的具体情况对其进行特化,对变化点配置特定的变体必要时自行开发变体
  2. 如果所选的构件不能完全满足应用系统的功能需求,还需对构件作适当的修改
  3. 如果所选的构件未按构件标准开发(如遗产系统中抽取的构件)时,还需按某种构件标准对其进行包装

构件组装

  1. 将经过鉴定和特化后的构件组装成应用系统
  2. 提倡使用构件组装工具来组装应用系统(能检查接口匹配中的错误,实现组装的自动化或半自动化)

构件的管理

构件库的管理:分类、储存、检索、管理

常用的构件分类模式

  • 枚举分类(Enumerated Classification)

    • 将构件组织成分类层次结构,构件库中的构件按某些性质分成若干大类,每个大类又分成若干较小的类,经过若干次分解,形成构件分类的层次结构,实际的构件位于层次结构的最低层,其它层次则表示构件的类或子类
    • 枚举分类模式的分层结构易于理解和检索,但是,在建立层次结构之前,必须进行领域分析,寻找合适的供分类的性质。
  • 属性—值分类(Attribute_Value Classification)
    • 为所有构件定义一组属性,每个构件都具有一组属性值,开发人员通过指定一组属性值对构件库检索(键值对?)
    • 与刻面分类方法非常类似,不同点在于:属性—值分类法对可使用的属性数量没有限制;属性没有优先级;不使用同义词
  • 刻面分类(Faceted Classification)
    1. 根据一组刻面对构件分类,每个刻面从不同的侧面构件库中的构件进行分类,并根据重要性设置刻面的优先级
    2. 每个刻面由一组术语(term)构成,称之为术语空间(term space),这些术语通常是描述性的关键词
    3. 检索:用户通过指定一组刻面的术语值寻找匹配的构件
    4. 使用同义词词典(thesaurus)解决用户指定的术语值与库中构件所对应的术语值之间的不一致问题
    5. 评价:具有较好的灵活性,易于加入新的刻面值,比枚举分类模式易于扩展和修改

构件库管理系统的主要功能

  1. 构件的分类存储(即添加构件):根据构件库的分类模型入库的构件储存在构件库
  2. 构件检索:从构件库中检索出满足用户要求或接近用户要求的构件.
  3. 构件库浏览:浏览库中的全部或部分构件
  4. 删除构件:将不再使用的构件从构件库中删去
  5. 构件使用情况评价:根据用户使用和检索构件的反馈意见对构件作出评价,为进一步的改进提供依据

构件的描述和检索

  • 构件库管理系统的两个关键技术(描述和检索)

    1. 直接影响到构件库检索的查准率(precision)、查全率(recall)和效率(efficient)
    2. 常用的构件检索方法
      • 规约匹配:基于有序的谓词逻辑的匹配,通过谓词演算公式进行精确匹配,通过逻辑连接符和逻辑量词进行部分精确匹配
      • 特征(signature)匹配:通过接口的定义进行匹配,适用于函数之类的构件
      • 术语轮廓匹配:基于构件编目描述语言的匹配,将每一个构件的编目描述作为该构件的一个特征矢量,通过测算矢量的距离进行匹配(这个有点牛逼)
      • 行为采样:基于构件测试的匹配,根据测试结果相同的概率进行匹配

小结

  1. 基于构件的软件开发(CBSD)是20世纪90年代开始流行的开发方法
  2. CBSD支持软件复用,能有效提高软件的开发效率和质量,降低开发和维护成本,因此受到人们的关注
  3. 本章内容:基于构件的软件开发的概念、领域工程过程和应用系统工程过程、可复用构件的建造、基于CBSD的应用系统分析和设计、以及构件的管理

软件工程导论08-基于构件的软件开发相关推荐

  1. 软考高级系统架构设计师系列论文七:论基于构件的软件开发

    软考高级系统架构设计师系列论文七:论基于构件的软件开发 一.摘要 二.正文 三.总结 一.摘要 本文以我主持开发的某公司生产经营管理系统为例,探讨了基于构件的软件开发问题.该系统是一个集原料采购.生产 ...

  2. 系统架构师论文-论基于构件的软件开发(测井资料处理与解释集成软件)

    论基于构件的软件开发 –测井资料处理与解释集成软件 [摘要] 去年初,单位承担了新立的"测井资料处理与解释集成软件"项目,目的是集成目前国内零敬的测井解释方法,我有幸参加该项目,并 ...

  3. 软考高级系统架构设计师系列论文三十六:论基于构件的软件开发

    软考高级系统架构设计师系列论文三十六:论基于构件的软件开发 一.摘要 二.正文 三.总结 一.摘要 本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问 ...

  4. 系统架构师论文-论基于构件的软件开发

    论基于构件的软件开发 [摘要] 本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问题以及解决的方法.文章首先解释了基于构件技术开发软件的基本概念,认为 ...

  5. 【软考 系统架构设计师】原创必过论文④ 论基于构件的软件开发

    >>回到总目录<< 文章目录 论基于构件的软件开发 范文 摘要 正文 论基于构件的软件开发 软件系统的复杂性不断增长.软件人员的频繁流动和软件行业的激烈竞争迫使软件企业提高软件 ...

  6. Java架构II_C1 软件架构设计导论_4 基于架构的软件开发(ABSD)

                                                                         田超凡 原创博文,严禁复制转载,仿冒必究,部分素材转载自慕课网 ...

  7. 《基于模型的软件开发》——1.2 结构化开发

    本节书摘来自华章计算机<基于模型的软件开发>一书中的第1章,第1.2节,作者:[美]H. S.莱曼(H. S. Lahman)著, 更多章节内容可以访问云栖社区"华章计算机&qu ...

  8. 温故知新(一)——基于 RTOS 的软件开发理论

    目录 前言 1 RTOS的特点 2 任务设计 2.1 任务的特性 2.2 任务划分的方法 2.2.1 设备依赖性任务 2.2.2 关键任务 2.2.3 紧迫任务 2.2.4 数据处理任务 2.2.5 ...

  9. 【基于Android聊天软件开发-哔哩哔哩】 https://b23.tv/109B82i

    [基于Android聊天软件开发-哔哩哔哩] https://b23.tv/109B82i https://b23.tv/109B82i Android聊天软件开发(仿QQ) 要求: Android ...

最新文章

  1. 如何写网站的robots.txt和meta name robots的配置
  2. 通过httpmodule获取webapi返回的信息
  3. 抓包工具Charles简单使用介绍(可抓取Android中app的请求)
  4. 2017年前端工作小结,个人踩坑之旅,前端学习者的杂谈
  5. SQL Tuning 基础概述01 - Autotrace的设定
  6. 关于BP神经网络的大牛的论述
  7. 【英语学习】【Daily English】U15 Culture L02 For a second I wanted to go home
  8. lazada发货_Lazada 怎么发货:Lazada 订单发货流程
  9. 利用HTML+JS+CSS实现简单的网页计算器,附html所有源代码,可直接黏贴运行
  10. 2019年3月训练记录(3.01~3.23)
  11. 华为harmonyos公测,华为开启HarmonyOS2.0开发者Beta公测招募第二期
  12. 怎样用52单片机做计算机,利用串口小助手实现AT89S52单片机简易计算器完整程序(Keil)...
  13. 【Mysql密码管理】-【管理员密码已知、未知(忘记密码)、破解】
  14. dockers-系统学习
  15. Android 实现定时闹铃功能
  16. NOTES邮箱打不开,提示打开的文件出错(打开的文件时出错)。
  17. pureMVC的争议,说说缺点
  18. ms在计算机是什么作用,请问电脑MS是什么意思?
  19. 基于自然流布局的可视化拖拽搭建平台设计方案
  20. XBee/XBee-Pro@ SX模块快速入门

热门文章

  1. c++点餐系统(C++、多态、sqlite数据库)
  2. c语言产生式系统动物识别系统,简单动物识别系统的知识表示实验报告
  3. Python脚本中调用其他Python脚本
  4. JavaWeb --- JavaScript
  5. 小程序uni-app生成条形码
  6. python找出某个文件夹下某个后缀的文件
  7. Qt串口通信实时曲线上位机源代码
  8. [柒穆雨] 2020平面设计的发展趋势
  9. 影视后期制作学习第四天(AE)
  10. c语言井字棋程序设计报告,井字棋游戏(课程设计)总结报告.doc