zoukankan      html  css  js  c++  java
  • 第一章 软件体系结构概论

    转自:https://blog.csdn.net/mabingyao/article/details/104495903

    1.1 软件危机

    1. 20世纪60年代产生的软件危机的具体表现
      (1)开发成本与开发进度难以准确估计——实际成本高于预期,发布时间较预期延迟
      (2)用户对软件产品不满意——闭门造车,沟通出现问题,需求不明确
      (3)软件产品的质量难以保证——软件质量保证技术未应用到软件开发过程中
      (4)软件产品维护困难——开发过程缺乏管理,可遵循的文档资料有限
      (5)软件产品没有适当的文档资料——软件产品=程序+整套文档资料
      (6)软件成本在计算机总成本中的比重增大,硬件成本比重越来越低
      (7)软件开发效率跟不上计算机应用快速普及趋势
    2. 软件危机成因
      (1)硬件生产效率的快速提高——高性能计算机普及,需求提高
      (2)软件产品生产效率低——当时软件开发沿用“手工作坊”的生产方式
      (3)软件供需失衡——需>供,需求扩展,但软件开发过程难控,效率低,成本高
      (4)用户需求不明确——需求表达不准确,理解差异,沟通不足
      (5)整个开发过程缺乏正确的理论指导——过分依赖程序设计人员,软件产品个性化
      (6)软件产品规模越来越大——多数人员缺乏开发大型软件系统的经验
      (7)软件产品开发的复杂度越来越高——软件产品的特殊性和人类智力的局限性

    1.2 软件复用

    1. 软件复用:利用现有的软件资源(已经存在的软件或专门用于开发设计且可复用的软件构件)来开发新应用系统的过程。
    2. 软件重用再工程(Reuse Re-engineering):从已有的应用系统中抽取可复用的软件成分的过程,可划分为“候选、选择、资格说明、分类和存储、查找和检索”五个阶段。
      软件重用再工程(Reuse Re-engineering)

    1.2.1 软件复用技术的发展

    软件复用技术的发展时间线

    1.2.2软件复用的实现技术

    1. 根据复用对象的类型不同,软件复用可分为:代码复用、设计复用、分析复用、测试复用。
      (1)代码复用可分为目标代码复用(连接link和绑定binding)和源代码复用(构件库中包含大量可复用构件,如对象链接及嵌入技术Object Linking and Embedding,OLE)。
      (2)设计复用有三种途径:①从现有系统的设计结果中提取可复用设计元素,并应用到新系统的设计中。②把现有系统的全部设计文档在新的软硬件平台上重新实现,即把一个设计用于多种具体实现。③独立于任何具体应用,有计划地开发可复用的设计元素。
      (3)分析复用的三种途径:①从现有系统的分析结果中提取可复用分析元素,并应用到新系统的分析中。②根据完整的分析文档产生针对不同软硬件平台和其他实现条件的多项设计结果。③独立于具体应用问题,开发专门用于复用的分析成分。
      (4)测试复用主要包括:测试用例复用和测试过程复用
      级别:目标代码复用<源代码复用<设计复用<分析复用,测试复用不做级别上的比较。
    2. 根据信息复用的方式不同,软件复用可分为:黑盒(Black-box)复用和白盒(White-box)复用。区分在于是否对已有软件构件进行修改。
    3. 软件复用的实现技术包括:组装和生成。
      (1)组装技术中,软件构件是复用的基石,构件的组合方式:连接、消息传递和继承、管道机制。
      (2)生成技术中,由程序生成器完成对软件结构模式的复用。

    1.2.3 影响软件复用的相关因素

    1. 软件构件技术Software Component Technology
    2. 领域工程Domain Engineering
    3. 软件构架Software Architecture
    4. 软件再工程Software Re-engineering
    5. 开放系统Open System
    6. 软件过程Software Process
    7. CASE技术
    8. 各种非技术因素

    1.2.4 软件复用意义

    1. 增加软件系统的可靠性——被重复使用的构件在各种环境得到实际使用和反复测试。
    2. 降低了软件开发过程中的风险——项目成本估计中的不确定性降低。
    3. 加快项目开发速度——缩短开发时间和验证时间。
    4. 促进标准的推广。
    5. 有效利用专家知识——让专家开发可复用构件。

    1.3 软件构件的组织与检索

    构件的高效检索依赖于分类体系的有效建立与实施。

    1.3.1构件的分类

    构件的分类从构件的表示角度出发,可分为三大类:人工智能方法、超文本方法、信息科学方法。在软件复用技术中,信息科学方法是应用较为成功的。信息科学方法主要包括:枚举、层次、关键词、属性值、刻面(Facet)和本体。

    1. 枚举:将某个领域划分为若干个不相交的子领域,并依次构成层次结构。
    2. 层次:构建类的层次关系。
    3. 关键词:每个构件以一组与之相关的关键词编目。
    4. 属性/值:为所有构件定义一组属性,每个构件都使用一组属性/值来进行描述。
    5. 刻面:将术语置于一定的语境中,从反映本质特性的视角去精确描述构件。
    6. 本体:捕获相关领域知识,提供对该领域知识的共同理解,确定该领域内共同认可的词汇,并从不同层次上形式化定义词汇之间的相互关系。

    1.3.2 软件构件的检索与匹配

    1. 构件检索是软件复用技术中较为重要的环节。
      构件检索
    2. 基于本体的构件搜索步骤:
      (1)在概念词典的帮助下,自然语言查询语句将被分割为多个有意义的单词,将这些单词映射为本体中的概念,包括类、关系和实例。概念词典记录了词汇和概念之间的对应关系。
      (2)根据本体库的知识框架确立刻面和术语,建立检索树。若检索树中存在着不一致的地方,则提示用户修改查询请求。
      (3)根据检索树的刻面、术语及本体库中的语义关系,利用推理规则找出其隐含语义。
      (4)对构件进行语义匹配,返回匹配的相关构件。
    3. 从库中选择构件时,需要鉴别是否符合要求,这一过程叫做构件匹配。

    1.4 软件构件化

    1.4.1 软件构件

    1. 构件模型是关于可复用软件构件和构件之间进行互相通信的一组标准的描述
      构件模型
    2. 当前主流的构建模型:
      (1)美国OMG(Object Management Group,对象管理组织)的CORBA技术
      (2)Sun公司的JavaBean/EJB
      (3)Microsoft公司的DCOM/COM/COM+
      我国自主研发的“和欣”操作系统就是利用构件来进行软件开发的典型实例,创造性地实现了CAR(Component Assembly Runtime),是一种完全面向下一代网络的服务技术。
    3. 基于构件的软件开发过程
      基于构件的软件开发过程

    1.4.2 构件获取

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

    1.4.3 基于构件的软件开发

    基于构件的软件开发的基本思想是将用户需求分解成一系列的子功能构件,开发过程中不必重新设计这些基本功能模块,只需从现有构件库中寻找合适的构件来组装应用系统。基于构件的软件开发应具备以下要素:①由构件组装的应用程序 ②独立服务 ③公共构件基础设施及通用服务。

    1.5软件体系结构

    1. 什么是软件体系结构?
      对其并没有一个完全统一的定义。有以下要点
      (1)软件体系结构主要包括:组件、关系、结构
      (2)属于软件系统之上的构件级复用
      (3)软件体系结构指定了系统的组织结构和拓扑结构
      (4)显示系统需求与构成元素之间的对于关系
      (5)提供了设计决策的基本原理
      (6)自顶向下,提供了利用现有构件资源设计实现软件系统的新途径。全局性蓝图。
    2. 软件体系结构的作用?
      贯穿整个软件生命周期,在需求阶段、设计阶段、实现阶段、部署阶段和后开发阶段,软件体系结构始终扮演着中介角色,是整个软件系统的一个开发草图。各阶段研究方向:
      软件生命周期中软件体系结构的研究与作用
    3. 研究软件体系结构的意义?
      (1)可以作为项目开发的指导方针
      (2)设计过程的开端
      (3)具有可复用性
      (4)促进系统理解
      (5)软件体系结构描述除了提供清晰精确的文档之外,还对文档进行一致性分析和依赖性分析,暴露其中的各种问题
      (6)构件复用是建立体系结构良好的软件系统的出发点
      (7)规定了系统演化方向,提供了系统管理的有效手段
      (8)软件体系结构对系统演化具有重要意义,演化中对系统功能的修改,调整,增加等
      (9)影响着开发组织和维护组织的结构
    4. 我国对软件体系结构的重视度不足。

    1.5.4 软件体系结构的CASE技术

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

  • 相关阅读:
    eslint 翻译
    .prettierrc
    轻松掌握golang的defer机制
    golang的逃逸分析
    《python解释器源码剖析》第17章--python的内存管理与垃圾回收
    《python解释器源码剖析》第16章--python的多线程机制
    《python解释器源码剖析》第15章--python模块的动态加载机制
    MongoDB:最受欢迎的文档型数据库
    (持续更新中)opencv:处理图像的高性能模块
    (写了一点写不下去了,虽然垃圾但又不想扔)nginx--最流行的web服务器
  • 原文地址:https://www.cnblogs.com/hddkman/p/14230148.html
Copyright © 2011-2022 走看看