软件架构的概念
本文提到的“软件架构”和“体系结构”是相同的含义。
一个程序和计算机系统软件体系结构,是指系统的一个或者多个结构。解耦股中包含软件的构件,构件的外部可见属性以及他们之间的相互关系。
体系结构并非可运行的软件,切确的说,他是一种表达,使软件工程师能够:
- 分析设计在满足规定需求方面的有效性。
- 在设计变更相对容易的阶段,考虑体系结构可能的选择方案。
- 降低与软件构造相关联的风险。
软件架构的重要性
- 1.架构设计能够满足系统的品质
- 2.架构设计使受益人达成一致的目标
- 3.架构设计能够支持计划编制过程
- 4.架构设计对系统开发的指导性
- 5.架构设计能够有效管理复杂性
- 6.架构设计为复用奠定了基础
- 7.架构设计能够降低维护费用
- 8.架构设计能够支持冲突分析
软甲架构设计与生命周期
- 1.需求分析阶段
- 2.设计阶段
- 3.实现阶段
- 4.构建组装阶段
- 5.部署阶段
- 6.后开发阶段
软件架构风格
经典软件体系结构风格
- 管道和过滤器
每个构件都有一组输入和输出,数据输入构件,经过内部处理,然后产生输出数据。这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出,传到另一个过滤器的输入。
-
数据抽象和面向对象组织 抽象数据类型对软件系统有着十分重要的作用。目前软件界已经普遍转向使用面向对象系统。这种风格建立在数据抽象和面向对象的基础上。数据的表示方法和他们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。
-
事件驱动系统
事件驱动系统风格不直接调用一个过程,而是触发或者广播一个或者多个事件。系统中其他构件的过程在一个或者多个事件中注册。当一个事件触发的时候,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程的调用
- 分层系统
层次系统组成一个层次结构,每一层为上一层服务,并作为下一层的潜在客户。在一些层次结构系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。这样的系统中构件在层上实现了虚拟机。连接层通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最多只影响2层,同时只需要给相邻的层提供接口,允许每层用不同的方法来实现,同样为软件的重用提供了强大的支持。
- 仓库及知识库
在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。
如果构件控制共享数据,则仓库是一传统型数据库; 如果中央数据结构的当前状态触发进程执行的选择,则仓库是黑板系统。
- C2风格
C2体系结构风格可以概括为通过链接件绑定在一起,按照一定的规则运作的并行构件网络。C2风格中的系统组织规则如下:
(1)系统中的构件和连接件都有一个顶部和一个底部。 (2)构件的顶部应连接到某连接件的底部,构件的底部应连接到某连接件的顶部。 (3)一个连接件可以和任意数目的其他构件和连接件连接。 (4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
客户/服务器风格
C/S计算技术在信息产业中有十分重要的作用。它由三个部分组成:数据库服务器、客户应用程序和网络。
客户应用程序和服务器构件分别运行在不同的计算机上。
三层C/S结构风格
三层C/S结构相比于二层C/S结构,多加了一个应用服务器,整个应用的逻辑驻留在应用服务器上,只有表示层存在于客户机上。 应用程被分为表示层、功能层和数据层三个部分。
ps:有点类似于web应用中的MVC架构。
浏览器/服务器风格
B/S 风格就是上述三层应用结构的一种实现方式。其具体的结构就是 浏览器、Web服务器 和 数据库服务器。
系统架构的评估
系统架构评估指标
主要评估方法
SAAM
SAAM(Scenarios-based Architecture Analysis Method)是卡耐基梅隆大学软件工程研究所的Kazman等人于1983年提出的。最早用于比较不同软件体系的体系结构,以分析SA的可修改性。后来实践证明也可用于其他的质量属性。如可移植性、可扩充性等,发展成为一个系统的体系结构。
- 特定目标
SAAM的目标是对描述应用程序属性的文档,验证基本的体系结构假设和原则。此外,该分析方法有利于评估体系结构固有的风险。SAAM指导对体系结构的检查,使其主要关注潜在的问题点,如需求冲突,$仅从某一参与者的观点出发的不全面的系统设计。SAAM不仅能够评估体系结构对于特定系统需求的使用能力,也能被用来比较不同的体系结构。
- 评估技术
SAAM所使用的评估技术是场景技术。场景代表了描述体系结构属性的基础,描述了各种系统必须支持的活动和将要发生的变化
- 风险承担者
SAAM协调不同参与者所感兴趣的方面,作为后续决策的基础,提供了对体系结构的公共理解。
- 体系结构描述
SAAM用于体系结构的最后版本,但早于详细设计。体系结构的描述形式应当被所有参与者理解。功能、结构和分配被定义为描述体系结构的三个主要方面。
- 方法活动
SAAM的主要输入问题是问题描述、需求声明和体系结构描述。
- 目前知识库的可用性
SAAM不考虑这个问题。
- 方法验证
SAAM是一种成熟的方法,已被应用到众多系统中,这些系统包括空中交通管制、嵌入式音频系统、WRCS(修正控制系统)、KWIC[8](根据上下文查找关键词系统)等。
ATAM
ATAM
- 特定目标
ATAM的目标是在考虑多个相互影响的质量属性的情况下,从原则上提供一种理解软件体系结构的能力的方法。对于特定的软件体系结构,在系统开发之前,可以使用ATAM方法确定在多个质量属性之间折中的必要性。
- 质量属性
ATAM方法分析多个相互竞争的质量属性。开始时考虑的是系统的可修改性、安全性、性能和可用性。
- 风险承担者
在场景、需求收集有关的活动中,ATAM方法需要所有系统相关人员的参与。
- 体系结构描述
体系结构空间受到历史遗留系统、互操作性和以前失败的项目约束。在5个基本结构的基础上进行体系结构描述,这5个结构是从Kruchten的4+1视图派生而来的。其中逻辑视图被分为功能结构和代码结构。这些结构加上它们之间适当的映射可以完整地描述一个体系结构。
用一组消息顺序图显示运行时的交互和场景,对体系结构描述加以注解。ATAM方法被用于体系结构设计中,或被另一组分析人员用于检査最终版本的体系结构。
- 评估技术
可以把方法视为一个框架,该框架依赖于质量属性,可以使用不同的分析技术。它集成了多个优秀的单一理论模型,其中每一个都能够髙效、实用地处理属性。该方法使用了场景技术。从不同的体系结构角度,有三种不同类型的场景,分别是用例(包括对系统典型的使用,还用于引出信息)、增长场景(用于涵盖与它的系统修改)、探测场景(用于涵盖那些可能会对系统造成压迫的极端修改)。
ATAM还使用定性的启发式分析方法(QualitativeAnalysisHeuristics),在对一个质量属性构造了一个精确分析模型时要进行分析,定性的启发式分析方法就是这种分析的粗粒度版本。
- 方法的活动
ATAM被分为4个主要的活动领域(或阶段),分别是场景和需求收集、体系结构视图和场景实现、属性模型构造和分析。
- 领域知识库的可重用性
领域知识库通过基于属性的体系结构风格(Attribute-BasedArchitectareStyle)维护。ABAS有助于从体系结构风格的概念转向基于特定质量属性模型的推理能力。获取一组基于属性的体系结构风格的目标在于要把体系结构设计变得更为惯例化、更可预测,并得到一个基于属性的体系结构分析的标准问题集合,使设计与分析之间的联系更为紧密。
- 方法验证
该方法已经应用到多个软件系统,但仍处于研究之中。虽然软件体系结构分析与评价已经取得了很大的进步,但是在某方面也存在一些问题。例如,习题结构的描述、质量特征的分析、场景不确定性的处理、度量的应用体系结构分析和评价支持工具等。这些都影响和制约着分析评估技术的发展。