《软件架构理论与实践》 —1.4 软件架构研究和应用现状

举报
华章计算机 发表于 2019/12/18 11:14:42 2019/12/18
【摘要】 本节书摘来自华章计算机《软件架构理论与实践》一书中第1章,第1.4.1节,作者是李必信 廖力 王璐璐 孔祥龙 周颖。

1.4 软件架构研究和应用现状

当前,软件架构尚处于迅速发展之中,至今尚无统一的定义,但软件架构作为软件工程领域中的一个组成部分,已经取得了长足的发展,成为软件工程领域的研究热点,作为一门学科受到越来越多软件系统设计和研究人员的重视。目前软件架构的相关研究主要集中在以下两个方面。

1.4.1 软件架构理论和方法研究

(1)软件架构描述与构造表示

ADL是一种规范化架构描述,提供了具体的语法与刻画架构的概念框架,是支持架构描述和推理的形式化语言。目前已经提出了许多软件架构描述语言。国外比较典型的有基于组件和消息的软件架构描述语言C2 SADL[22],分布、并发类型的架构描述语言Wright[23],架构互换语言ACME[24],基于组件和连接的架构描述语言UniCon[25],基于事件的架构描述语言Rapide[26],以及其他比较有影响力的Darwin、MetaH、Aesop、Weaves、SADL、xADL等架构描述语言[36]。国内提出的ADL有基于框架和角色模型的软件架构规约FRADL[27]、多智能体系统架构描述语言A-ADL[28]、基于主动连接件的架构描述语言Tracer[29]、基于XML的软件架构描述语言ABC/ADL[30]、功耗-体系结构描述语言XP-ADL[31]、基于层次消息总线的软件架构描述语言JB/SADL[32]、基于时序逻辑的可视化架构描述语言XYZ/ADL[33–34]、基于高阶多型π演算的动态架构语言D-ADL[35]等。

架构表示是指按照一定的描述方法,用架构描述语言对架构进行说明的结果,并将描述架构的过程称为架构构造。目前常见的架构描述方法包括形式化的架构描述方法、Kruchten的“4+1”架构模型、使用UML的架构描述方法以及IEEE的软件架构描述规范等[36]。

形式化方法是指在严格的数学基础(逻辑、代数、自动机、图论等)之上的方法。该方法按所采用的技术可以分为五类:基于模型的方法、代数方法、过程代数方法、基于逻辑的方法以及基于网格的方法。目前被广泛使用的形式化方法Z规约语言,是一种以状态机为模型的形式规约语言,可以把架构描述的基本语法元素(组件、连接件以及对应的配置)形式化。

Kruchten的“4+1”架构模型从5个不同的视角(包括逻辑视角、过程视角、物理视角、开发视角和场景视角)来描述软件架构。每一个视角只关心系统的一个侧面,5个视角结合在一起才能够反映系统软件架构的全部内容,比较细致地描述了需求和架构之间的关系[37]。类似的还有Siemens的四视角模型,其由Siemens公司研究所开发,从概念、执行、模块和代码架构四个视角分离不同的工程关注点,从而降低架构设计任务的复杂性[38]。

统一建模语言(Unified Modeling Language,UML)是一种通过可视化方法对系统进行描述、实施和说明的标准语言。UML不属于ADL,它更关心使用性,更多地适用于应用软件系统设计,对系统的可构建性建模能力较弱,不具备ADL可构造的组件–连接器框架特征。Medvovonic总结了用UML描述架构的3种途径:不改变UML用法而直接对架构建模;利用UML支持的扩充机制扩展UML的元模型以实现对架构建模概念的支持;对UML进行扩充,增加架构建模元素[36]。

IEEE于1995年成立了架构工作组(AWG),起草了架构描述框架标准[39],即IEEE 1471—2000,该标准建立了架构描述的框架,定义了架构描述的内容,并提供了关键概念和术语的基本原理、与其他标准之间的关系和用法的例子,用于处理软件密集系统架构的创建、分析和支持,以及用架构描述术语记录这些架构。

此外,Rational起草了可重用的软件资产规格说明,并专门讨论了架构描述的规格说明,提出了一套易于重用的架构描述规范[40]。该规范是基于RUP(Rational United Process)开发的,采用UML模型来描述软件架构;认为架构描述的关键是定义视点、视图以及各种建模元素之间的映射关系。

(2)软件架构分析、设计与测试

架构分析的内容可分为结构分析、功能分析和非功能分析。软件架构分析的目的是在系统被实际构造之前预测其质量属性。目前存在的方法有基于场景的架构分析方法SAAM[41]及其3个扩展,其中一个是基于复杂场景的SAAMCS[42],另两个是对可重用性扩展的ESAAMI[43]和SAAMER[44];架构折中分析方法ATAM[45];基于场景的架构再工程SBAR[46];架构层次的软件可维护性预测ALPSM[47];软件架构评估模型SAEM[48]等。

软件架构设计指生成一个满足用户需求的软件架构的过程[49]。主要的设计方法有从工件描述中提取架构描述的工件驱动(artifact-driven)方法、从用例导出架构抽象的用例驱动(use-case-driven)方法、从模式导出架构抽象的模式驱动(pattern-driven)方法、从领域模型导出架构抽象的域驱动(domain-driven)方法,以及从设计过程中获得架构质量属性需求的属性驱动设计(attribute-driven design)方法等。

软件架构测试着重于仿真系统模型、解决架构层的主要问题。由于测试的抽象层次不同、架构测试策略可以分为单元、子系统、集成、验收测试等阶段的测试策略。在架构集成测试阶段提出了多种技术,其中包括Debra等人提出的一组针对架构的测试覆盖准则,如组件覆盖准则等[50];基于霍尔公理的组件设计正确性验证技术[51];基于CHAM(CHemical Abstract Machine)的架构动态语义验证技术等[52]。

(3)软件架构发现、演化与复用

软件架构发现解决如何从已经存在的系统中提取软件架构的问题,属于逆向工程。Waters等人提出了一种迭代式架构发现过程,即由不同的人员对系统进行描述,然后对这些描述进行分类并融合,发现并解除冲突,将架构新属性加入已有的架构模型中,并重复该过程直至架构描述充分[53]。

软件架构的演化即由于系统需求、技术、环境、分布等因素的变化而最终导致软件架构的变动。软件系统在运行时刻的架构变化称为架构动态性,而将架构的静态修改称为架构扩展。架构扩展与架构动态性都是架构适应性和演化性的研究范畴。Darwin和C2直接支持结构动态性,CHAM、Wright、Rapide支持语义动态性。在C2中定义有专门支持架构修改的描述语言AML,而Darwin对架构的修改则采用相应的脚本语言,CHAM通过多值演算实现系统架构的变换,Wright通过顺序通信进程CSP描述组件的交互语义[36]。

软件架构复用属于设计重用,比代码重用更抽象。架构模式就是架构复用的一个研究成果。

(4)基于软件架构的开发模型

软件开发模型是跨越整个软件生存周期的系统开发、运行、维护所实施的全部工作和任务的结构框架,给出了软件开发活动各阶段之间的关系。目前,常见的软件开发模型大致可分为三种类型:①以软件需求完全确定为前提的瀑布模型。②在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型,如螺旋模型等。③以形式化开发方法为基础的变换模型。为了更好地支持软件开发,Bass等人提出了基于架构的软件开发过程[21]。

(5)软件架构风格与模式

人们在软件开发实践中总结出了许多软件架构风格。架构风格(架构模式)是针对给定场景中经常出现的问题提供的一般性可重用方案,它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件架构风格的研究和实践促进了对设计的复用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。

David Garlan和Mary Shaw等人总结出若干被广泛接受的架构风格,并将其分成五种主要的类型[54]:

1)数据流风格:批处理序列;管道–过滤器。

2)调用/返回风格:主程序/子程序;面向对象;层次化结构。

3)独立组件风格:进程通信;事件系统。

4)虚拟机风格:解释器;基于规则的系统。

5)仓库风格:数据库系统;超文本系统;黑板系统。

之后仍有扩充,如出现了C2风格、GenVoca风格、REST风格等。此外,针对不同的系统类型又提出若干种架构风格,如分布式系统、交互式系统和适应性系统的架构风格等[55]。

(6)软件产品线架构

软件产品线表示着一组具有公共的系统需求集的软件系统,它们都是根据基本的用户需求对标准的产品线架构进行定制,将可重用组件与系***有的部分集成而得到的[48]。在这种开发生产中,基于同一个软件架构,可以创建具有不同功能的多个系统。在软件产品族之间共享架构和一组可重用的组件,可以降低开发和维护成本。由美国国防部支持的两个典型项目—关于基于特定领域软件架构的软件开发方法的研究项目(DSSA)与关于过程驱动、特定领域和基于重用的软件开发方法的研究项目(STARS),分别从软件架构和软件重用两个方面推动了软件产品线的研究和发展。

软件产品线架构的发展是依托着特定领域软件架构(Domain Specific Software Architecture,DSSA)的研究深入而进行的[43]。尽管业界对 DSSA尚无统一的定义,但各种观点中DSSA都必须具备以下4个特征:①一个严格定义的问题域/解域;②具有普遍性,使其可以用于领域中某个特定应用的开发;③对整个领域的适度抽象;④具备该领域固定的、典型的在开发过程中可复用的元素。目前已有一些较好的DSSA应用,如IBM/Aerospace/ MIT/UCI开发的适用于航空电子领域的软件架构,北京大学杨芙清院士牵头实现的支持组件复用的青鸟Ⅲ型系统等[49]。

(7)软件架构支持工具

在软件架构支持工具中,支持架构分析的工具包含支持静态分析的工具、支持类型检查的工具、支持架构层次依赖分析的工具、支持架构动态特性仿真的工具、支持架构性能仿真的工具等;然而支持架构设计的工具还很不成熟,相关研究成果较少,难以进行实用化比较。著名的软件架构支持工具包括卡内基–梅隆大学研发的Acme,其以Acme架构语言为基础,提供了Acme工具开发人员库(Acmelib),用于表示和操作Acme的设计,并提供了一个具有图形化用户界面的软件架构开发环境AcmeStudio;支持C2架构风格的ArchStudio3、UniCon、Aesop等架构支持环境;支持主动连接件的Tracer工具等[49]。



【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。