系统架构22 - 软件架构设计(1)

概述

需求分析到软件设计之间的过渡过程称为软件架构(Software Architecture, SA)。只要软件架构设计好了,整个软件就不会出现坍塌性的错误,即不会崩溃。
一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系
体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:
(1)分析设计在满足所规定的需求方面的有效性;
(2)在设计变更相对容易的阶段,考虑体系结构可能的选择方案;
(3)降低与软件构造相关联的风险。

在体系结构设计的环境中,软件构件简单到可以是程序模块或者面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器网络配置的“中间件”(也可以是作为包含数据库和能够完成客户与服务器网络配置的“中间件”的扩充)。
软件体系结构的设计通常考虑到设计金字塔中的两个层次——数据设计和体系结构设计。数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操作),体系结构设计则主要关注软件构件的结构、属性和交互作用

软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)指导构件集成的模式以及这些模式的约束组成
在软件中,架构决策包括如何组织代码、模块和组件,如何处理数据流、用户界面和业务逻辑。好的软件架构能够确保软件具有良好的性能、可扩展性、可维护性和安全性。所以,软件架构就是软件的总体设计方案,它决定了软件如何组织和工作,以满足用户需求和业务目标。好的架构是构建可靠软件的基础。

关键步骤

需求分析、软件架构设计和系统设计是软件开发过程中密切相关的三个关键步骤,它们相互连接,确保最终软件产品满足客户需求并具有良好的质量和性能。

  • 需求分析:明确定义问题,确定客户的需求和期望。这包括与客户交流,了解他们的需求,并将其转化为详细的功能和规范。
  • 软件架构设计:考虑如何将系统组织成各种模块、构件和服务,以满足需求。这包括确定系统的总体结构和构件之间的关系。
  • 系统设计:进一步详细设计每个组件和模块。这包括定义接口、数据结构、算法等。

生命周期

需求分析阶段

需求分析和SA设计面临的是不同的对象:一个是问题空间;另一个是解空间。从软件需求模型向SA模型的转换主要关注两个问题:

  1. 如何根据需求模型构建SA模型。
  2. 如何保证模型转换的可追踪性。

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

软件复用的角度看, SA 影响需求工程也有其自然性和必然性,已有系统的 SA 模型对新系统的需求工程能够起到很好的借鉴作用。在需求分析阶段研究 SA,有助于将 SA 的概念贯穿于整个软件生命周期,从而保证了软件开发过程的概念完整性,有利于各阶段参与者的交流,也易于维护各阶段的可追踪性。

设计阶段

设计阶段是SA研究关注的最早和最多的阶段。这一阶段的SA研究主要包括:SA 模型的描述、SA 模型的设计与分析方法,以及对 SA 设计经验的总结与复用等。
有关SA模型描述的研究分为3个层次:SA的基本概念(构件和连接件)、体系结构描述语言ADLSA 模型的多视图表示
(1)SA 的基本概念,即S A模型由哪些元素组成,这些组成元素之间按照何种原则组织。
(2)体系结构描述语言 (Architecture Description Language,ADL),支持构件、连接子及其配置的描述语言就是如今所说的体系结构描述语言。 ADL 对连接子的重视成为区分 ADL和其他建模语言的重要特征之一。典型的 ADL 包括UniCon、Rapide、Darwin、Wright、C2 SADL、Acme、xADL、XYZ/ADL和 ABC/ADL等。
(3)SA 模型的多视图表示,从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的 SA 模型。系统的每一个不同侧面的视图反映了一组系统相关人员所关注的系统的某一特定方面,多视图体现了关注点分离的思想

实现阶段

最初SA研究往往只关注较高层次的系统设计、描述和验证。为了有效实现SA设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面。
(1)研究基于 SA 的开发过程支持,如项目组织结构、配置管理等。
(2)寻求从 SA 向实现过渡的途径,如将程序设计语言元素引入S A阶段、模型映射、构件组装、复用中间件平台等。
(3)研究基于 SA 的测试技术
对于大型软件系统而言,由于参与实现的人员较多,所以需要提供适当的配置管理手段。SA 引入能够有效扩充现有配置管理的能力,通过在S A描述中引入版本、可选择项 (Options)等信息,可以分析和记录不同版本构件和连接子之间的演化,从而可用来组织配置管理的相关活动。典型的例子包括支持给构件指定多种实现的 UniCon、 支持给构件和连接子定义版本信息和可选信息的XADL等。
为了填补高层 SA 模型和底层实现之间的鸿沟,可通过封装底层的实现细节、模型转换、精化等手段缩小概念之间的差距。典型的方法如下。
(1)在 SA 模型中引入实现阶段的概念,如引入程序设计语言元素等。
(2)通过模型转换技术,将高层的 SA 模型逐步精化成能够支持实现的模型
(3)封装底层的实现细节,使之成为较大粒度构件,在 SA 指导下通过构件组装的方式实现系统,这往往需要底层中间件平台的支持。

构件组装阶段

在 SA 设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中, SA设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。
(1)如何支持可复用构件的互联,即对 SA 设计模型中规约的连接子的实现提供支持。
(2)在组装过程中,如何检测并消除体系结构失配问题
在构件组装阶段的失配问题主要包括三个方面:

  • 由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的假设存在冲突引起的失配。
  • 由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配。
  • 由于系统成分对全局体系结构的假设存在冲突引起的失配等。要解决失配问题,首先需要能够检测出失配问题,并在此基础上通过适当的手段消除检测出的失配问题。

部署阶段

SA 对软件部署作用如下:
(1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
(2)基于 SA 模型可以分析部署方案的质量属性,从而选择合理的部署方案。
现阶段,基于 SA 的软件部署研究更多地集中在组织和展示部署阶段的 SA评估分析部署方案等方面,部署方案的分析往往停留在定性的层面,并需要部署人员的参与

后开发阶段

后开发阶段是指软件部署安装之后的阶段。这一阶段的 S A 研究主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等

  • 动态软件体系结构。现实中的软件具有动态性,体系结构会在运行时发生改变。现阶段,动态软件体系结构研究可分为以下两个部分:体系结构设计阶段的支持、运行时刻基础设施的支持
  • 体系结构恢复与重建对于现有系统在开发时候没有考虑 SA 的情况,从这些系统中恢复或重购体系结构。从已有的系统中获取体系结构的重建方法分为4类:手工体系结构重建、工具支持的手工重建、通过查询语言来自动建立聚集、使用其他技术(如数据挖掘等)

相关推荐

  1. 系统架构22 - 软件架构设计1

    2024-02-08 15:26:01       32 阅读
  2. 系统架构设计师-22年-上午答案

    2024-02-08 15:26:01       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 15:26:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 15:26:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 15:26:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 15:26:01       18 阅读

热门阅读

  1. 【C/C++ 16】C++11线程库

    2024-02-08 15:26:01       30 阅读
  2. 前端bug手册

    2024-02-08 15:26:01       32 阅读
  3. react中的diff算法

    2024-02-08 15:26:01       32 阅读
  4. 线程和进程的区别及基础线程创建

    2024-02-08 15:26:01       31 阅读
  5. pandas dataframe写入excel的多个sheet页面

    2024-02-08 15:26:01       34 阅读
  6. Debian系统中挂载一个数据盘

    2024-02-08 15:26:01       31 阅读
  7. 有道论文翻译接口,python版和lua版

    2024-02-08 15:26:01       37 阅读
  8. [Android] Client->NuPlayer

    2024-02-08 15:26:01       31 阅读
  9. work day7

    2024-02-08 15:26:01       30 阅读
  10. 【mybatis自动治愈插件】

    2024-02-08 15:26:01       31 阅读
  11. LeetCode 二叉树/n叉树的解题思路

    2024-02-08 15:26:01       37 阅读
  12. Mockito测试框架中的方法详解

    2024-02-08 15:26:01       32 阅读
  13. C语言中大小写字母转换详解

    2024-02-08 15:26:01       34 阅读