跳到主要内容

软件架构概述

概述

软件架构是从需求分析到软件设计之间的过渡过程,只要架构设计好,整个软件就不会出现坍塌性的错误。

  • 架构设计就是需求分配,将满足需求的职责分配到组件上。
  • 软件架构为系统提供了结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。
  • 软件架构不仅规定了系统的组织结构和拓扑结构,还显示了系统需求和构件之间的对应关系,提供了设计决策的基本原理。
  • 解决好软件的复用、质量和维护问题,是研究软件架构的根本目的。

软件架构设计的核心要点

  • 包括提出架构模型、产生架构设计、进行设计评审等活动,是一个迭代的过程。
  • 架构设计主要关注软件组件的结构、属性和交互作用,并通过多种视图全面描述系统的架构。
  • 架构能在设计变更相对容易的阶段,为技术人员与非技术人员就软件设计进行交流,能展现软件结构、属性与内部交互关系。
  • 架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的结构,制约系统质量属性。
  • 架构使推理和控制的更改更加简单,有助于原型设计和培训。
  • 架构是可传递和可复用的模型,通过研究架构可预测软件质量。

软件架构设计与生命周期

软件架构设计贯穿于软件开发的各个阶段,每个阶段关注点不同,整体流程可总结为"需设实组部后"。

需求分析阶段

  • 关注对象:问题空间(需求本身)与解空间(架构方案)。
  • 重点:如何根据需求模型构建SA模型,如何保证模型转换的可追踪性

设计阶段

  • 这是SA研究关注最早和最多的阶段
  • 主要内容:
    • SA模型的描述(如构件、连接子等基本概念)
    • SA模型的设计与分析方法
    • SA设计经验的总结与复用
  • 研究层次:基本概念、体系结构描述语言(ADL)、多视图表示。

实现阶段

  • 关注SA设计向实现的转换
  • 主要内容:
    • 开发过程支持(如项目组织、配置管理)
    • 模型映射与组装(如将设计语言元素引入SA阶段、复用中间件平台)
    • 基于SA的测试技术

构件组装阶段

  • 目标:高效组装可复用构件,实现系统蓝图
  • 关注点:
    • 支持构件互联(连接子实现)
    • 检测并消除体系结构失配(如接口、连接子、全局假设冲突等)

部署阶段

  • 作用:
    • 提供高层体系结构视图,描述软硬件模型
    • 分析部署方案的质量属性,选择合理部署方案

后开发阶段

  • 关注:维护、演化、复用等。
  • 研究方向:
    • 动态软件体系结构(运行时结构变化、重配置)
    • 体系结构恢复与重建(如手工重建、工具支持、数据挖掘等)

记忆口诀:需设实组部后(需求、设计、实现、组装、部署、后开发)

每个阶段都有其独特的关注点和方法,掌握各阶段的核心任务和常见问题,有助于系统性理解软件架构设计全流程。

构件

构件是软件架构的核心单元,理解其本质、特性和相关技术是考试与实际开发的重点。

构件的定义与本质

  • 构件是一个独立可交付的功能单元,外界通过接口访问其服务。
  • 构件通常由一组需要同时部署的原子构件组成。
  • 原子构件一个模块和一组资源的组合,是部署、版本控制和替换的基本单位
  • 大多数原子构件永远不会被单独部署,而是作为构件家族成组部署。
  • 模块是不带资源的原子构件,通常为一组类、过程或函数等。
  • 资源是指原子构件运行所需的配置、数据文件等辅助内容。

构件与对象的区别

  • 构件:独立部署单元,可包含多个类元素,但一个类元素只能属于一个构件。
  • 对象:实例单元,有唯一标识,可能具有外部可见状态,封装状态和行为。

构件的特性

  1. 独立部署单元
  2. 作为第三方的组装单元
  3. 没有(外部的)可见状态

构件接口

  • 接口标准化关注消息的格式、模式和协议的标准化,强调输入输出消息的规范。

面向构件的编程(COP)

  • 关注如何支持建立面向构件的解决方案
  • 需要支持:
    • 多态性(可替代性)
    • 模块封装性(高层次信息隐藏)
    • 后期绑定与装载(部署独立性)
    • 安全性(类型和模块安全性)

主流构件技术

  • EJB(Java):三类——会话Bean、实体Bean、消息驱动Bean,适合企业级应用。
  • COM/DCOM/COM+(微软):支持分布式、位置无关,COM+为更高层次发展。
  • CORBA(OMG):三层——对象请求代理、公共对象服务、公共设施,强调分布式对象互操作。

记忆要点

  • 构件=独立部署+无外部状态+可组装
  • 构件接口=消息标准化
  • COP=多态+封装+后期绑定+安全
  • 技术流派:EJB、COM、CORBA