📙食用说明

emoji 说明
🥑 不考
🍌 了解
🍇 要考
🍉 重点
🚩 flag

🥑软件危机

软件危机

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题

软件危机的具体表现

  1. 对开发成本和开发进度难以进行准确地估计
  2. 用户对软件产品不满意
  3. 软件产品的质量难以保证
  4. 软件产品维护非常困难
  5. 软件产品没有适当的文档资料
  6. 软件成本在计算机系统总成本中所占的比例逐年上升
  7. 软件开发效率的提高远远跟不上计算机应用快速普及的趋势

软件危机的成因

  1. 硬件生产效率的快速提高
  2. 用户需求不明确
  3. 软件产品的规模越来越大
  4. 软件产品开发的复杂度越来越高
  5. 整个软件开发过程缺乏正确的理论指导

  6. 软件产品生产效率较低

  7. 软件供需失衡

克服软件危机

  1. 人们面临的不光是技术问题,更重要的是管理问题。管理不善必然导致失败 。
  2. 要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与工业化的生产技术。
  3. 在技术上,应该采用基于重用的软件生产技术;
  4. 在管理上,应该采用多维的工程管理模式。

🍌软件复用

概念🚩

软件复用是指利用现有的软件资源来开发新应用系统的过程

软件复用包括三个相关的基本过程:软件对象的开发软件对象的理解软件对象的复用

从已有的应用系统中抽取可复用软件成分的过程,经常被称为“重用再工程(Reuse Re-engineering)”过程

逆工程(Reverse-engineering)是在软件维护过程中,对当前的软件系统进行理解,识别部件和部件之间关系的过程

再工程(Re-engineering)是在软件维护过程中,为了改善系统的性能,使其适应硬件和应用环境不断变化的需求,对原有系统进行再加工的过程

软件重用再工程的五个阶段

  1. 在侯选阶段,对程序源代码进行分析,根据功能和代码的内聚性,生成若干软件部件集合

  2. 在选择阶段,将软件部件集合和收集活动组织在一起,通过适当的降耦合、再工程和一般化处理,产生一组可复用软件对象

  3. 在资格说明阶段,对每一个可复用软件对象进行详细地描述,给出模块功能和界面说明书

  4. 在分类和存储阶段,按照分类标准对复用软件对象及其相关说明书进行分类组织,目的是确定中心仓库(Repository),并将生成的可复用软件对象及其说明书存入其中

  5. 在查找和检索阶段,建立用户界面使之与中心仓库进行交互,目的是使查找用户所需求的可复用软件对象的步骤尽可能简化

软件复用的实现技术

  • 代码复用可分为目标代码复用和源代码复用
  • 设计复用比源程序复用的级别更高
  • 分析复用要比设计复用的级别更高
  • 测试复用主要包括测试用例复用和测试过程复用

软件复用的实现技术包括组装和生成两种类型

  1. 在组装技术中,软件构件是复用的基石
  2. 在生成技术中,由程序生成器完成对软件结构模式的复用

影响软件复用的相关因素

软件构件技术是软件复用的核心与基础,从集中式的小粒度组件向分布式的大粒度组件发展,从用于界面制作的窗口组件向完成逻辑功能的业务组件发展

领域工程是为一组相似或相近的应用工程建立基本能力和必备基础的过程,它覆盖了建立可复用软件构件的所有活动

软件再工程是一个过程,它将逆向工程、重用和正向工程组合起来,对现存的系统进行重新构造以获取新的应用系统

影响软件复用的相关因素

开放系统技术是在系统的开发过程中使用接口的标准,同时使用了符合接口标准的相关实现技术

CASE技术与软件复用密切相关,其主要研究内容包括:在面向复用的软件开发过程中,抽取、描述、分类和存储可复用的构件

非技术因素包括:机构组织、管理方法、开发人员的知识更新、知识产权等

软件复用的意义

  1. 增加软件系统的可靠性
  2. 降低了软件开发过程中的风险
  3. 加快项目开发的速度
  4. 软件复用促进了标准的推广
  5. 专家知识的有效利用

🥑软件构件的组织与检索

只有当构件要达到一定的规模时,才能有效地支持软件复用,然而获取大量的构件需要有较高的投入和长期的积累

当构件达到较大的规模时,使用者要想从中找到一个自己需要的构件,并判断其是否与自己的需求相符,却不是一件轻而易举的事情

合理的构件分类体系是构件库有效构造、存储、管理及检索的基础,其最终目的对获取的信息进行正确地分类组织

构件的分类

  1. 枚举分类方法能够将某个领域划分为若干个不相交的子领域,并依次构成层次结构
  2. 层次分类方法的本质是构建类的层次关系,首先把所有的构件划分为一些大类,再对每一个大类进行细化形成层次较低的小类,不断地重复划分过程,直到层次关系的最低层是构件为止
  3. 在关键词分类方法中,每个构件以一组与之相关的关键词编目,使用主题来描述构件,主题词多为短语,每个主题下可有多个描述子,多为单词,查询者使用关键词来描述所需要的构件,通过关键词与主题词相匹配的手段来寻找目标构件
  4. 在属性/值分类方法中,为所有构件定义了一组属性,每个构件都使用一组属性/值来进行描述
  5. 在刻面分类方法中,将术语置于一定的语境中,从反映本质特性的视角去精确描述构件,管理者使刻面与术语相互对应,在构件之间建立起一种复杂的关联关系

软件构件的检索与匹配

根据某一查询要求得到的可复用构件往往不止一个,从构件库中选择适当的构件来适应新系统的需求并进行组装,这些都离不开构件的检索与匹配技术

本体包含了语义信息,使用本体来描述构件,可以让计算机知道我们所描述的词汇的含义,在本体描述的基础上,可以对构件库进行语义检索,检索出含义上相匹配的构件

基于人工智能的检索算法:

  1. 基于行为采样的构件检索技术,利用软件构件的执行能力来检索构件
  2. 基于知识的构件检索技术,基本原理是:根据用户提出的要求,生成系统内部的提问形式,启动推理机获取用户所需要的构件,并以用户易读的形式来显示
  3. 基于神经网络的构件检索技术,以神经网络为基础,依据构件功能的相似程度来检索构件

    超文本检索方法强调构件之间的相互关系,在元模型中,存储了构件之间的非线性关联关系,软件开发人员可以利用支持超文本链接的浏览器来检索构件

    图书馆科学和信息科学中的检索方法主要包括关键字检索和自由文本检索

  4. 关键字检索是一种受控的检索方式,在一个领域中预先定义好很多关键字,根据这些关键字为构件建立索引

  5. 自由文本检索又被称为全文检索,是一种非受控的检索方式,在用户输入待查字符串之后,检索工具将对构件库中每个构件说明进行全文匹配

基于本体的构件搜索

  1. 在概念词典的帮助下,自然语言查询语句将被分割为多个有意义的单词,将这些单词映射为本体中的概念,包括类、关系和实例,概念词典记录了词汇与概念之间的对应关系
  2. 根据本体库的知识框架确立刻面和术语,建立检索树,若检索树中存在着不一致的地方,则提示用户修改查询请求
  3. 根据检索树的刻面、术语以及本体库中的语义关系,利用推理规则找出其隐含语义
  4. 对构件进行语义匹配,将匹配的相关构件返回

🍇软件构件化

软件构件

构件模型是关于可重用软件构件和构件之间进行相互通信的一组标准的描述

构件模型的最重要贡献是把应用开发和系统部署分割开来

image-20230505025052614

构件所能提供的服务是通过接口来声明的,接口完全独立于具体的实现细节

接口是服务的抽象描述,对构件的理解和复用都是通过接口来实现的,接口是构件服务契约化的规范,也是构件与外界交互的唯一通道,构件之间的组合实质上是通过接口来实现的

主流的构件模型包括:

  1. 美国OMG(Object Management Group对象管理组织)的CORBA技术
  2. SUN公司的JavaBeans/EJB
  3. 微软公司的DCOM/COM/COM+

软件构件化和集成化的目标🚩

  1. 由不同厂商来提供构件
  2. 使用不同语言来开发构件
  3. 在不同硬件平台上去实现构件
  4. 以方便系统的动态集成

基于构件的软件开发过程

image-20230505025225644

构件获取

构件获取主要分为两个阶段,即构件发现阶段和构件评估阶段

  1. 在发现阶段,将会对构件的属性如功能、接口、调用方法、可靠性、可用性及可扩展性等进行明确化

  2. 在评估阶段,使用多种成熟的评估方法对获取的软件构件进行评估

构件获取主要有以下四种方式:

  1. 从构件库中,按照适合新系统的原则选取,并作适应性修改以获得可重用的构件
  2. 根据新功能模块进行自行开发,以获取新构件
  3. 对遗留系统进行功能分析,将具有潜在应用价值的模块提取出来,使其接口进行标准化以获得可重用性构件
  4. 通过商业方式购买合适的构件,利用互联网资源进行共享或免费获取

基于构件的软件开发

将用户需求分解为一系列的子功能构件,在开发过程中不必重新设计这些基本功能模块,只需从现有构件库中寻找合适的构件来组装应用系统

基于构件的软件开发的基本目标是以组装的方式来生成新应用系统,组装是以那些形式上独立的构件服务为基础来进行的

基于构件的软件开发技术应该具备以下要素:由构件组装的应用程序、独立服务、公共构件基础设施以及通用服务

🍉软件体系结构

软件体系结构的定义🚩

Soni、Nord和Hofmeister指出软件体系结构至少应该包括以下四个不同的实例化结构:概念体系结构、模块连接体系结构、执行体系结构和代码结构,这些结构从不同方面对系统进行了描述

David Garlan和Dewayne Perry认为软件体系结构是程序或系统中组件的结构、组件之间的相互关系、设计的基本原则以及随时间进化的指导方针

Hayes-Roth认为软件体系结构是由功能构件组成的抽象系统说明,该说明对功能构件的行为、界面和构件之间的相互作用进行了详细地描述

本书的定义,软件体系结构主要包括构件、连接件和配置约束三个部分:

  1. 构件是可预制和可重用的软件部件,是组成体系结构的基本计算单元或数据存贮单元
  2. 连接件是可预制和可重用的软件部件,是构件之间的连接单元
  3. 配置约束用来描述构件和连接件之间的关联关系

软件体系结构的作用🚩

在需求阶段、设计阶段、实现阶段、部署阶段和后开发阶段,软件体系结构始终扮演着中介角色,是整个软件系统的一幅开发草图

  1. 需求阶段的软件体系结构,包括两方面研究工作:

    1. 在较高抽象层次上,用软件体系结构的概念和描述手段来刻画问题空间的软件需求,
    2. 二是探讨如何将软件需求规约自动或半自动地转变为软件体系结构模型
  2. 设计阶段的软件体系结构,研究内容主要包括:

    1. 软件体系结构描述
    2. 软件体系结构设计
    3. 软件体系结构分析、
    4. 以及对软件体系结构设计经验的总结与复用
  3. 实现阶段的软件体系结构,研究内容主要包括:

    1. 基于软件体系结构的开发支持
    2. 软件体系结构向实现的过渡途径
    3. 基于软件体系结构的测试技术
  4. 部署阶段的软件体系结构,软件体系结构视图可以充分地描述部署阶段的软硬件配置,可以记录软件部署的经验,以便在下次部署时复用已有的经验,利用软件体系结构模型可以分析部署方案的质量属性,从而选择合理的部署方案

  5. 后开发阶段的软件体系结构,主要涉及软件体系结构的维护、演化和复用等问题,包括:

    1. 动态软件体系结构
    2. 软件体系结构的恢复
    3. 软件体系结构的重建

项目开发很少从头开始,许多软件开发任务是对已有的遗留系统进行升级、增强或移植来完成的,软件体系结构重建是指从已实现的系统中获取体系结构的过程,重建的输出是一组体系结构视图

研究软件体系结构的意义🚩

  1. 软件体系结构可以作为项目开发的指导方针,提供了表达各种关注、协调各方面意见和行动的共同语言,体现了早期开发的决策
  2. 软件体系结构是设计过程的开端,软件体系结构体现了系统最早期的设计决策,对软件生命周期的影响很大
  3. 软件体系结构具有可复用性,根据模型对构件及构件间关系的详细描述,可以方便地找到可重用构件
  4. 促进系统的理解,软件体系结构是整个系统结构的抽象,简化了我们对复杂系统的理解
  5. 软件体系结构描述除了提供清晰精确的文档之外,还对文档进行了一致性分析和依赖性分析,暴露其中隐藏的各种问题

  6. 构件复用是建立体系结构良好的软件系统的出发点,基于软件体系结构的开发方法,常常注意构件的组合与装配,编程并不是其主要活动

  7. 软件体系结构规定了系统演化的方向,提供了系统管理的有效手段。软件体系结构对系统演化具有重要的意义,一方面,在设计系统体系结构之初,就应当充分考虑到将来可能出现的演化问题,另一方面,在进行演化阶段的开发时,由于体系结构充分地刻画了系统框架,清晰地描述了构件及其之间的相互关系,所以应当充分加以利用
  8. 软件体系结构影响着开发组织和维护组织的结构,软件体系结构不仅规定了所开发软件的系统结构,而且还影响着项目开发的组织结构

软件体系结构的CASE技术

CASE(Computer Aided Software Engineering) 智能化计算机辅助软件工程工具。

CASE技术对软件工程和软件体系结构有着重要的影响,可以为分析、设计、代码生成、测试、版本控制、配置管理、再工程、软件过程、软件体系结构设计、构件管理、软件资源检索以及项目管理等问题提供自动或半自动支持