软件复用与构件技术简介李 戈北京大学 信息科学技术学院 软件研究所 2008年10月16日北京第三届优秀软件构件评选支持单位: 北京市科学技术委员会 主办: 北京软件行业协会 北京软件与信息服务业促进中心 北京软件产业基地公共技术支撑体系 承办: 北京软件产品质量检测检验中心 北京大学北京第三届优秀软件构件评选z提升北京市软件企业的核心竞争力 –帮助企业提高软件开发技术与研发能力,提 高软件开发效率,降低软件开发成本 推动以企业为主体、产学研相结合的技术创新体 系的建设 促进北京软件产业的变革,使软件产业走上工程 化、工业化的发展轨道zz软件企业的现状与问题z现状:– 软件系统的规模和复杂度不断提高 – 对生产效率和产品质量的要求不断提高z问题 问题:– 如何提高软件生产的效率? – 如何掌控软件产品的质量? – 生产效率 与 产品质量 怎可得兼?为什么需要软件复用z应用软件系统的一般开发模式设计 实现 测试 运行需求分析z基本特征:应用系统的开发总是从头开始– 每个应用系统的开发均涉及大量的重复劳动¾ ¾ ¾ ¾ ¾用户需求获取的重复 需求分析、设计的重复 编码实现的重复 测试工作的重复 文档工作的重复为什么需要软件复用z应用系统的构成成分分类– 探讨应用系统的本质,其构成成分可分为:¾ ¾ ¾特定于计算机系统的构成成分 应用系统所属领域的共性构成成分 每个应用系统的特有构成成分系统专用的构成成分 软件系统的 构成成分 领域共用的构成成分 通用的系统构成成分什么是软件复用z避免重复劳动的解决方案--软件复用 避免重复劳动的解决方案 软件复用– 应用系统的开发不再采用一切“从零开始”的模式 – 充分利用过去应用开发中积累的知识和经验: 充分利 去应 发中 的知¾需求分析结果、设计方案、源代码、测试计划及 案例等– 以已有的工作为基础,重点关注应用的特殊性z软件复用– 重复使用“为了复用目的而设计的软件”的过程 复使 为 复 的 计的软件 的软件复用的历史z软件复用概念的提出– 1968年NATO软件工程会议z之前 子程序的概念也体现了复用的思想 之前,子程序的概念也体现了复用的思想– 目的,是为了节省当时昂贵的机器内存资源 ¾ 并不是为了节省开发软件所需的人力资源 – 然而,子程序的概念可以用于节省人力资源的目的 – 从而,出现了程序库——将一些通用子程序收集到程 序库中,供其他程序员在编程时使用 – 例如,数学程序库就是一个成功的子程序复用软件复用的历史z在其后的发展过程中– 有许多复用技术的研究成果和成功的复用实践活动 – 但是,复用技术在整体上对软件产业的影响却并不尽 如人意 ¾ 这有技术方面和非技术方面的种种因素 ¾ 其中技术上的不成熟是一个主要原因z近十几年来,面向对象技术的出现并逐步成为主 十几年来 面向对象技术的出现并 步成为 流技术– 为软件复用提供了基本的技术支持 – 软件复用研究重新成为热点 – 被视为解决软件危机,提高软件生产效率和质量的现 实可行的途径软件复用的历史z复用的发展反映出复用的不同层次– 低级的复用(被动的复用) – 高级的复用(主动的复用) 高级的复 主动的复z软件复用包括两个相关的过程 件 个– 开发可以复用的软件成分 – 利用可复用的软件成分构造新的应用系统z软件复用是必然– 实践证明,软件复用是解决软件危机,提高软件生产 效率和软件产品质量的现实可行的途径。
如何进行软件复用z软件复用的基本原则– 必须有可以复用的对象 – 要复用的对象必须是有用的 复 的对象 有 的 – 需知道如何去使用被复用对象z需要解决的问题:– 可复用的对象是什么? – 如何构造具有良好可复用性的复用对象? – 如何管理可复用对象?如何管理软件开发的过程?如何进行软件复用z传统工业的复用方式– 如汽车 如汽车、飞机、船舶制造业,建筑业 飞机 船舶制造业 建筑业 – 其成功的基本模式是 ¾ 符合标准的构件生产 ¾ 基于标准构件的产品生产(组装) – 其中构件是核心和基础,复用是必需的手段 其中构件是核心和基础 复用是必需的手段阶段1:符合 标准的零部件 (构件)生产阶段2:基于 标准零部件的 产品生产软件产业的工业化生产模式z实践 明 实践证明– 这种模式是产业工程化、工业化的必由之路 – 是软件产业发展的良好借鉴 – 这正是软件复用受到高度重视的根本原因z借鉴传统产业的工业化生产模式,被认为是解决“软件 危机”,提高软件开发效率和质量,实现软件产业工业 化生产方式的重要途径软件复用过程:阶段1:可复 用软件资产的 生产 阶段2:基于可 复用软件资产的 应用系统开发基于构件的软件开发zCBSD– Component Based Software Developmentz基于构件的软件开发– 生产具有良好可复用性的构件 – 利用已有的构件资源进行组装z软件复用的有效途径– 重复使用“为复用目的而开发的软件构件” – 生产模式:从传统的软件编码工作转换为以软件构件为基础的 系统集成组装z软件工业化生产的必然– 软件的复杂性、构造性、演化性使之成为必然软件复用相关技术z基于构件的软件复用支持技术领域工程 软件再工程 软件构架 开放系统技术 非 技 术 因 素软 件 过 程构件、构架 构件 构架 获取构件标准化 与描述构件分类、 存储与检索构件 组装软件构件技术CASE技术什么是软件构件z概念的由来– 1968年NATO软件工程会议,Mcllroy的论文 “大量 生产的软件构件”提出了“ 生产的软件构件 提出了 Software Component p ”一 词。
– “Component”一词的翻译:“构件”与“组件”z软件构件(Software Component)– 应用系统中具有相对独立性 应用系统中具有相对独立性,且可以明确辨识的构成 且可以明确辨识的构成 成分。
可复用软件构件( 件 件 Reusable Software Component p ) – 可复用构件是指具有相对独立的功能和可复用价值的 构件z对软件构件概念的理解z狭义的构件– 软件系统中具有相对独立功能、可以明确辨识、接口 由契约指定、和语境有明显依赖关系、可独立部署、 且多由第三方提供的可组装软件实体。
且多由第三方提供的可组装软件实体 – 既包括以EJB,COM/DCOM,ActiveX,Web Services 等形式存在的可运行二进制程序 也包括经过封装的 等形式存在的可运行二进制程序,也包括经过封装的 源代码程序。
z广义的构件– 随着对软件复用理解的不断深入,软件构件概念的外 延也在扩展。
– 从构件实体到需求规约、系统构架、设计文档、测试 案例等各种具有复用价值的软件资源都可称为构件。
做什么样的构件z构件模型– 对现实构件世界(问题空间和设计空间)的抽象 – 研究构件的本质特征及构件间关系 – 实现系统化复用的第一个关键因素 – 标准化工作的基础 软件复用是一项复杂的系统工程。
要建立系统化的复用 计划,建立合适的构件模型是第 步。
计划,建立合适的构件模型是第一步。
系统化复用的实施涉及众多不同人员,不同的人员对对 构件的关 角度不同 很难建 统 的模型来满足不同 构件的关心角度不同,很难建立统一的模型来满足不同 方面的需求,需要从不同的角度、在不同的抽象层次上 看待构件,需要一组构件模型来满足不同的需求zzWill Tracz 的3C模型z概 ( 概念 (Concept) p) – 关于“构件做什么”的抽象描述¾ 可以通过概念去理解构件的功能 ¾ 概念包括接口规约和语义描述两个部分z内容(Content) – 概念的具体实现¾ 描述构件如何完成概念所刻划的功能z语境(Context) – 构件和外围环境在概念级和内容级的关系¾ 语境刻划构件的应用环境 ¾ 为构件的选用和适应性修改提供指导关于构件模型的讨论z学术界讨论的构件模型:– Unicon:支持 支持Unix环境下的系统组装、内定的连接子( 环境下的系统组装 内定的连接子(Connector)类 型及组装机制 – Wright:以进程代数(CSP)描述构件交互,强调体系结构风格 (Style)的表达与应用,支持系统验证 的表达与应 支持 统 – C2:特定的层次的、基于消息总线风格 – Rapide p :基于事件,并支持描述并发和分布系统模型,将计算和交互 基于事件,并支持描述并发和分布系统模型,将计算和交互 建模为偏序事件集,构件接口通过事件集定义 – Darwin:支持定义系统的动态配置 – Reboot:面向构件库系统的构件模型 – Resolve ……..z工业界成熟的构件实现模型:– EJB,COM/DCOM,ActiveX,Web Services……软件构件的典型形态之一软件构件的典型形态之Web Services 与软件构件z Web Services–Web Services完成相对独立的功能–Web Services具有由契约指定的接口W b S i–通过组装的方式集成到应用系统中–在系统中可以被明确地辨识z Web Services 的构件特性–接口与实现的区分更加明确–对实现体进行的封装更加有效–具有较强的平台无关性–更加易于在Internet上发布相应培训课程名称:SOA & Web Services 培训时间:2008-12-11z什么是软件体系结构–长期以来,CMU-SEI在其网站上公开征集SA的定义,至今已有百余种.z较有影响力的定义包括:–软件系统的结构包含软件元素、软件元素外部可见的软件系统的结构包含软件元素软件元素外部可见的属性以及这些软件元素之间的关系;包含构件构件之间构件与环–软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系,以及相关的设计与演化原则等.共同特性z共同特性:–一般都将构件以及构件之间的连接作为SA的基本组成部分.z什么是软件体系结构–对系统结构的总体设计与说明是种高层设计–是一种高层设计–关注三方面问题:构件、构件间关系、关系约束构件z构件:–软件系统由哪些部分构成构件间的关系z构件间的关系:–这些部分之间的交互关系是什么z关系的约束:–这些关系有什么约束体系结构示例z体系结构示例:z软件体系结构风格–描述某一特定应用领域中系统组织方式的惯用模式z软件体系结构模式–描述了软件系统基本的结构化组织方案,–是对设计模式的扩展,可以作为具体SA的模板z常见的体系结构风格:–Pipes and FiltersPipes and Filters–Layered Organization–Distributed Processes–Repositories–Event-based, Implicit Invocation–Main Program/Subroutine, Explicit InvocationMain Program/Subroutine Explicit Invocation–Client/Serverz软件体系结构的延伸–需求分析阶段¾提供解空间试图,便于设计人员与用户交流–软件设计阶段利用多视角展现有利于问题的分解¾利用多视角展现,有利于问题的分解–软件开发阶段明确关联关系有利于保持系统的一致性¾明确关联关系,有利于保持系统的致性–软件运行阶段通过系统运行态的动态视图便于运行监控¾通过系统运行态的动态视图,便于运行监控–软件维护阶段体系结构的演化体现软件的不断演化¾体系结构的演化,体现软件的不断演化基于体系结构的构件组装(ABC)z体系结构刻划系统整体结构–全局组织与控制结构,构件间通讯、同步和数据访问–着重于软件系统自身的整体结构和构件间的互联。