形式架构定义语言(ADL)

server/2024/10/21 19:04:16/

简介

形式规范

多年来,学术界一直在试图通过使用与测试截然不同且更加主动的方法来确保程序语义的正确执行:形式化方法。研究者们认为这种方法通过更加精确、无二义性的描述来达到让程序绝对地按照设计者的思想执行的目的。这种思想早期体现在Floyd在1967年提出的程序的部分正确性的证明上。在后来的几十年中,这种思想不断发展,人们开始不单单注重静态的模型似的形式化语义,动态可执行的并发语义也随之出现。

ADL

形式架构定义语言(Architecture Description Language, ADL)是一种用于描述软件系统的架构的正式语言。ADL 的主要目的是通过提供一种标准化的方式来描述软件系统的结构、组件及其交互,从而帮助设计者和开发者更好地理解和管理复杂的软件系统。ADL 通常用于系统架构设计、分析和验证,尤其是在大型和复杂系统中。

使用形式架构定义语言(ADL)对架构进行描述可以辅助对高层设计进行规范和分析。例如,架构模型可以用来分析证明死锁的存在,或用来决定安全的信息是否流入到不安全的模块中去。架构模型也在软件生产线的建设中起着重要作用。

ADL 的典型元素

  1. 组件(Component)

    • 定义:系统的基本构建块,可以是软件模块、服务、数据库等。
    • 属性:组件可以有属性,如名称、类型、版本等。
    • 接口:组件对外提供的接口,定义了组件可以接收和发送的消息或数据。
  2. 连接件(Connector)

    • 定义:描述组件之间的交互机制,如消息传递、数据流等。
    • 属性:连接器可以有属性,如类型、协议等。
    • 行为:连接器可以定义其行为,如同步或异步通信、事务管理等。
  3. 架构配置(Arch Configuration)

    • 定义:描述系统中组件和连接器的实例化和组装方式。
    • 属性:配置可以有属性,如名称、版本等。
    • 关系:配置定义了组件之间的关系和连接器的使用。

两类ADL

目前存在的ADL在对架构与具体实现的处理方式上主要可以被分为两大类。

第一类的ADL 只定义抽象,而与具体的实现语言的结合过于松散,致使软件在分析、实现、理解与系统进化出现严重的问题。一些ADL往往附带一些自动生成代码的工具,这些生成的代码可以连接起独立开发的组件。然而,这些ADL却没有提供任何使这些组件遵循系统架构限制的保证,相反的是,它们依赖于组件的开发者来遵循规范。另外一些ADL只能作为纯建模和分析工具;它们不提供任何工具来生成代码,仅仅要求程序员在没有任何自动化工具的辅助下生成代码。因此在实现中反映架构相当困难。最重要的一个问题就是这些系统都无法保证通讯完整性原则(Communication Integrity),从而尽管架构被用来分析和建模,但并无任何方法知道实现中是否已经完全遵循架构的设计。

与第一类的ADL完全相反,第二类以ArchJava为代表的ADL用强大的 类型系统(type system)来保证实现对架构限制的遵守,如ArchJava将架构与实现统一在一种语言中,使用语言级别的类型检查(type checking)来强制执行。目前存在的ADL中,唯一可以保证通讯完整性的只有ArchJava语言。然而ArchJava并不是单纯的描述语言,它牵涉了更多的实现细节,因此无法提供给架构设计师使用进行最初的系统架构分析和设计,因为在设计阶段,细节代码并不存在。

组件及组件接口的形式化描述

以JML为例,Java Modeling Language 是美国 Iowa State University (ISU) 计算机系程序设计语言与形 式化方法实验室为 Java 语言所设计的行为接口规范语言 (BISL)。它采用了类似于 Java 的语法结构,从而使其更容易被 Java 程序员所接受。

JML允许对类的不变式(Invariant),前置谓词(pre-condition)与后置谓词(post-condition)进行规范。每一规范语句由布尔类型的Java表达式所组成,并以注释形式(//@ /*@....@*/)出现在Java程序中。@ 符号是为了使得JML解释器能够识别。

一段简单的JML代码如下所示:

/*@ public normal_behavior
@ requires P;
@ ensures Q;
@*/

这段代码为类中一个声明为公共的方法进行了规范:此方法执行前必须满足条件P,结束后必须保证布尔表达式Q成立。同时,此方法必须正常结束,无异常抛出。

一个使用 JML 进行形式规范说明的实例

连接件的形式化描述

JCMPL 是一种仅定义抽象的新型的架构定义语言,其最大特点就在于在显示指定架构中组件存在及其关系的同时,能够最大程度地支持组件独立开发及最终的第三方集成。在连接组件中未知接口时,JCMPL 使用通配符 * 来表达这个接口。

JCMP工具在编译JCMPL生成目标Java代码的时候,遵循了triple-C模式,即组件间使用软件连接器(software connector)进行通信的传递,而并非通常的直接Client-Server调用关系。

在基于triple-C模式的实现中,软件连接件(Software Connector)被用来实现架构中的组件间的连接。作为组件集成适配器以及方法调用的代理,Connector负责被连接的组件端口中的方法匹配和方法间的数据传输。由于Connector所处在这样一个特殊的位置,所有接口方法及数据对其都是透明的,这也产生了对数据进行智能分析以及自动化进行组件匹配的可能性。作者根据Connector的这一特性,开发了JCMP/Match试图对连接在一起的组件端口中的方法进行自动匹配,找出最有可能的需求-供应方法对。

架构配置

架构配置是构件和连接件的结构性组合,定架构配置描述了系统中所有构件和连接件的组织和布局方式。"义了系统的整体架构
配置可以包括对构件和连接件的实例化、部署以及它们之间的连接关系。它确保系统按照既定的架构原则和模式组装和运行。


http://www.ppmy.cn/server/133697.html

相关文章

京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?

京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?云主机就是云服务器的意思,是京东云给自家云服务器取的名字,阿里云叫云服务器ECS,腾讯云叫云服务器CVM,京东云服务器叫云主机,京…

Lua脚本的原子性

Lua脚本之所以被认为是原子性的,主要源于Redis的内部实现机制和Lua脚本的执行方式。以下是对Lua脚本原子性的详细解释: 一、Redis的单线程模型 Redis是一个基于内存、可基于Key-Value等多种数据结构的存储系统,它使用单线程模型来处理客户端的请求。这意味着在任何给定的时…

代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和

代码随想录day6| 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和 242.有效的字母异位词思路步骤 349. 两个数组的交集思路步骤 202. 快乐数思路步骤 1. 两数之和思路步骤 242.有效的字母异位词 思路 使用暴力解法时间复杂度为O(n^2)这道题需要判断…

【机器学习基础】全连接层

1. 定义: 每一个节点都跟其后面所有的神经元相连两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部也就是跟传统的神经网络神经元的连接方式是一样的 2. 作用: 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、…

IP- guard产品版本升级指引详解

一、IP-guard服务器升级步骤 1、下载升级包(IPgUpgrade版本号.zip) 到IP-guard服务器 2、解压升级包,右键以管理员身份运行 (1)“升级包”解压 (2)右键以管理员身份运行“升级包” ࿰

第十五届蓝桥杯Java大学b组(解)

1.报数游戏 思路: 第1-10个: 20 24 40 48 60 72 80 96 100 120 第11-20个:140 144 160 168 180 192 200 216 220 240 第21-30个:260 264 280 288 300 312 320 336 340 360 第31-40个:380 384 400 408 420 432 440 …

Spring Boot实现的电影评论系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理电影评论网站的相关信息成为必然。开发合适…

深度解析 Redis 存储结构及其高效性背后的机制

目录 1. Redis 存储结构存储结构存储转换 2. 字典实现数据结构冲突处理负载因子 3. 扩容扩容步骤影响与优化 4. 缩容缩容步骤优化策略 5. 渐进式 Rehash**渐进式 Rehash 的工作原理**Rehash 规则优势 6. SCAN 命令SCAN 的实现原理遍历顺序避免重复和遗漏使用场景 7. 过期&#…