软件架构设计

软件架构设计(一)

  • 引言
  • 软件架构的概念
  • 软件架构设计及其生命周期
    • 1. 需求分析阶段
        • 需求分析与SA研究二者的联系:
    • 2. 设计阶段
    • 3. 实现阶段
    • 4. 构件组装阶段
    • 5. 部署阶段
    • 6. 后开发阶段
  • 软件架构的重要性

引言

从第一个程序被划分成模块开始,软件系统就有了体系结构。
—— Shaw and Garlan

软件架构的概念

软件构件:
一个程序和计算机系统软件的体系结构:是指系统的一个或多个结构。结构即软件的构件,包含构件的外部可见属性和构件间的相互关系。
—— Bass、Clements和Kazman

(体系结构:体,机体/软件体;系,一系列的组成部分,这里体系全指软件;结:联系关系,构:构件)

软件构件可以是简单的程序模块面向对象的类,也可以是数据库、或能够完成客户与服务器网络配置的“中间件”。

软件体系结构设计的两个层次(设计金字塔):数据设计和体系结构设计

数据设计:数据构件和面向对象系统中类的定义(类的属性和操作)
体系结构设计:关注软件构件的结构、属性和交互作用。
体系结构设计即是构件软件的初始蓝图。

软件架构设计及其生命周期

1. 需求分析阶段

本质上,需求和SA面临的是不同的对象:一个是问题空间,另一个是解空间。保持二者的可追踪性和转换,是软件工程领域追求的目标。

从软件需求模型向SA模型转换:
1)如何根据需求模型构建SA模型
2)如何保证模型转换的可追踪性

上述问题的解决方案,随需求模型的不同而各异。
例如,采用User Case图描述需求的方法中,从User Case图向SA模型(包括类图等)的转换一般经过词性分析和一些经验规则来完成,而可追踪行则通过表格或 User Case Map等来维护。

需求分析与SA研究二者的联系:

已有系统的SA模型对新系统的需求工程有很好的借鉴作用;在需求阶段开始对SA研究有助于将SA的概念贯穿整个软件的生命周期,保证软件开发过程中的概念完整性,有利于各阶段参与者的交流,也易于维护各个阶段的可追踪性。

2. 设计阶段

设计阶段是SA模型研究关注的最早和最多的阶段。
主要工作如下:

  • SA模型的描述
    • SA的基本概念
      构件(软件系统中相对独立的部分)和连接子(构件间的互联关系)的建模。今年,也有讲Aspect等引入SA模型的。
    • 体系结构描述语言
      支持上述构件和连接子配置描述的语言,ADL(Architecture Description Language)。包括:UniCon、Rapide、Darwin、Wright、C2 SADL、Acme、xADL、XYZ/ADL和 ABC/ADL等。
    • SA模型的多视图表示
      从不同视角描述系统的体系结构,从而得到多个视图,用以描述整体的SA模型。这是一个SA模型描述的重要研究方向,体现的是不同参与者对系统的不同关注点,体现了关注点分离的思想。
      将ADL和多视图结合起来描述系统体系结构,优点:
      • 使系统更易于理解,方便交流

      • 利于系统的一致性检测、系统质量属性的评估

        典型的多视图方案:
        ** 学术界:**

        • 4+1模型(逻辑视图、进程视图、开发视图、代码视图)
        • Hofmesiter的4视图模型(概念视图、模块视图、执行视图、代码视图)
        • CMU-SEI的 View and Beyond模型(模块视图、构件和连接子视图、分配视图)。
          ** 工业界:**
        • IEEE 1471-2000(软件密集型系统体系结构描述推荐实践) 、
        • 开放分布式处理参考模型(RM-ODP)
        • 统一建模语言(UML)
        • IBM 的Zachman框架
  • SA模型的设计与分析方法
  • 设计经验总结与复用

3. 实现阶段

为了不仅仅是关注较高层次的系统设计、描述和验证,需要有效地实现从SA设计到实现的转换,这阶段的体系结构研究包含如下:
- 研究基于SA的开发过程支持,如项目组织结构、配置管理等
- 寻求从SA向实现过渡的途径,例如将程序设计语言元素引入到SA阶段、模型映射、构件组装、复用中间件平台等。
- 研究基于SA的测试技术。
SA 提供了待生成系统的蓝图,根据该蓝图实现系统需要较好的开发组织结构和过程管理技术。以体系结构为中心的项目管理方法。开发团队的组织结构应该和体系结构模型有一定的对应关系,从而提高软件开发的效率和质量。
实践方法和案例:
1)大型复杂软件,参与人员多,SA的引入扩充了配置管理能力,模型描述中(例如UniCon,xADL)引入了构件和连接子的版本和可选信息。
2)为填补高层SA模型和底层实现之间的鸿沟,一要屏蔽封装底层实现细节,二是通过模型转技术,模型精化等手段缩小概念差距;
封装底层的实现细节,使之成为较大粒度构件,在SA指导下通过构件组装的方式实现系统,这往往需要底层中间件平台(组件封装、集成平台例如,COM平台、CORBA、EJB、XML、SOAP等)。

4. 构件组装阶段

在SA设计模型(作为系统的蓝图)的指导下,可复用构件组装可在较高层次上实现系统,提升实现效率。
主要研究内容:

  • 如何支持可复用构件的互联,即对连接子的实现提供支持。

  • 在组装过程中,如何检测并消除体系结构失配问题

    典型工具的支撑情况:不少工具可以将连接子转换为代码

    UniCon:定义了Pipe、FileIO、ProcessCall等內建的连接子类型,它们在设计阶段被实例化,并可以在实现阶段在工具的支持下转化为具体的实现机制,如过程调用、操作系统数据访问、Unix管道和文件、远程过程调用等。

    中间件遵循特定的构件标准,为构件互联提供支持,并提供相关的公共服务,如安全服务、命名服务等。

    中间件支持的连接子有如下优势:

    • 构件之间可跨平台交互,且可遵循特定的工业标准,如CORBA、J2EE、COM等,可以有效地保证构件之间的通信完整性。
    • 可以提供强大的公共服务能力,保证系统的质量属性,如消息通信连接子最好选择提供消息通信机制的中间件平台。这也引发了新的SA风格,即中间件导向的体系结构风格。
    • 检测并消除体系结构失配

5. 部署阶段

随着网络和分布式软件的发展,软件部署逐渐从软件开发过程中独立出来。
关注分布式系统的质量属性,如性能、可靠性等,考虑部署软件构件的互联性、硬件的拓扑结构、硬件资源占用(如CPU、内存)等。SA对软件部署的作用如下:

  • 提供高层的体系结构视图描述部署阶段的软硬件模型
  • 基于SA模型可以分析部署方案的质量属性,选择合理的部署方案。
  • 具体的部署分析还是需要部署人员参与。

6. 后开发阶段

这一阶段的SA研究主要关注维护、演化、复用等方面。
典型的研究方向:

  • ** 动态软件体系结构 **
    传统的SA设计是静态的,后面不会修改。但实际上运行时经常会动态变化。
    例如:根据不同配置状况采用不同的连接子来传送数据。
    不停机升级,而修改配置,从而修改了系统的体系结构。
    因此需要对SA的设计提出更高要求:
    1)在SA体系结构设计阶段,考虑变化的描述、修改策略、影响分析
    2)运行时基础设施的支持,体系结构的维护、修改约束范围、保证重要子系统的连续可用性、可测试性。
  • ** 体系结构恢复与重建 **
    主要用于遗留系统或参考系统的升级、增强或移植时,通过对体系结构恢复和重建以获得SA 体系结构分析的支持。
    SA重建的方法:从已实现系统中输出一组体系结构视图
    1)手工体系统结构重建
    2) 工具支持的手工重建。
    包括可获得基本体系结构单元、提供图形界面允许用户操作SA模型、支持分析SA模型等。
    如:KLOCworkinSight 工具(www.klocwork.com/products/insight.asp)使用代码分析算法直接从源代码获取SA构件图,用户可以通过操作图形化的SA设定体系结构规则,并可以在工具的支持下实现对体系结构的理解、自动控制和管理。
    3) 通过查询语言来自动建立聚集。适用于较大规模系统。基本思路:在逆向工程工具的支持下分析程序源代码,然后将所得到的体系结构信息存入到数据库,并通过适当的查询语言得到有效的体系结构显示。
    4)其他技术,如数据挖掘等。

软件架构的重要性

降低成本、改进质量、按时按需交付产品的关键因素。
1)能够满足系统的品质
通过架构设计文档可以尽早评估熊的性能、安全性和可维护性等品质。
2)使受益人达成一致的目标
文档化体系架构,确保设计能清楚的传达、理解、讨论、决议和权衡,是架构师的主要职责。
3)支持计划编制过程
架构设计将确定组件间的依赖关系,直接支持项目计划和项目管理的活动,例如细节划分,日程安排、工作分配、成本分析、风险管理和技能开发等;架构师还能协助估算项目成本,体系机构决定了第三方组件的成本,已经支持开发的所有工具的成本;支持风险管理,包括制定每一个风险的优先次序,以及确定一个恰当的风险环节策略。
4)对系统开发的指导性
架构设计的主要目标是确保体系架构能够为设计人员和实现人员所承担的工作提供可靠的框架。很明显,这比简单的传送一个体系架构视图要复杂的多,为了确保体系架构的完整性,架构师必须明确的定义体系架构,例如,系统的组件,组件间的接口和通信。
5)能够有效地管理复杂性
考虑复杂组件的递归分解,将一个大的问题进行分解,逐个解决
6)为复用奠定基础
一个体系架构的建立,能构大粒度的资源复用。系统组件复用、选择,降低使用成本,保证质量。
7)能够降低维护费用
能将维护人员的工作纳入到架构设计,恰当的文档化的体系架构可以减轻系统的可维护性,结合恰当的系统维护机制,考虑系统的适用性和可扩充性。
8)能够支持冲突分析
通过分析组件,来分析对需求的影响。

你可能感兴趣的:(架构思想)