章四 软件体系结构的形式化描述
一、软件体系结构的形式化描述的方法
1、随着软件系统规模和复杂性的不断增大,软件设计的核心已从“算法+数据结构=程序”的传统计算模式转向系统的总体结构,即软件体系结构的设计和规范。
着眼于软件系统的全局组织形式,在更高层次上把握系统各组件之间的内在联系,并且从全局的、整体的角度去理解和分析整个系统的行为和特性,有助于解决当前开发复杂的大型软件所存在的困难。
一个系统的软件体系结构通常可以用方框和线条图描述。这种方框和线条图可以对系统进行结构化。
软件体系结构提高了系统的抽象级别,使开发人员可以对系统进行推理。
一个系统的体系结构所提供的模型,其目的不在于系统的实现细节,而是要提高系统构件的独立性,使各种事件本地化。
2、体系结构的两个重要方面:体系结构的交互和体系结构的风格
(1)体系结构的交互
体系结构的一个关键问题是系统的组成。当一个系统被分解成多个构件时,它们必须可以重构成一个完整的系统的结构。
一个重要的组成类是基于离散行为的构件交互。
交互可以是非常简单的。
交互可以是非常复杂的。
每个构件都可以初始化通信、产生消息和响应其它构件的消息,并且需要考虑缓冲、可靠性和构件之间传递信息的认证问题。
同时,在一个给定的系统中,交互的特定模式通过不同但类似的系统总是会重现的。
不同的构件不断使用相同的交互行为而组成一个功能系统。
(2)体系结构的风格
软件体系结构的另一个重要方面是充分利用系统共性设计的扩展部分。
开发人员使用在所工作的领域里,最有效的特定模式和习惯用语。这些模式和习惯用语约束着设计空间,允许开发者忽略与系统无关的复杂方面。这样,开发者就可以进行最有效的选择,并且可以更容易地确定最好的解决方案。这些特定的模式和习惯用语就称为体系结构的风格。
如果一种体系结构的风格可以保证持有一个属性集合,那么它就可以具有通用体系结构所允许的更强大的分析能力。
3、软件体系结构描述存在的问题
许多软件体系结构是从体系结构的设计开始的,特别是大型的软件系统必须先进行体系结构的设计,且好的体系结构的设计是决定一个软件系统的关键因素。
通常使用非形式化的方框和线条图描述体系结构的配置,仅仅提供了诸如实际计算、接口和交互等极小量的信息。
开发者试图为体系结构提供更加精确描述的一个途径,是使用诸如对象或者共享的通讯机制等实现结构。
缺乏对一个层次中交互的抽象定义,意味着很难分析对一个体系结构的整体行为的描述,必须从底层基础中的许多细节中提取抽象的行为,只有这样才可以全面地考虑系统的行为。
如果对构件交互的描述是非形式化的,那么在其它系统中重用高层设计是很困难的。
有时,一个特定的符号可以支持一种风格。这些符号包括:从构件组成系统的方式或者指定一个构件或者连接器。
对于单一的风格,开放人员在结合支持体系结构级的符号和工具上取得了一定的进展。
但是风格在体系结构级上的实现缺乏精确的特征描述,这意味着与其它风格的交互变得困难。
通常,只有风格的建立者对风格有着深刻的理解。
缺乏对风格的形式化基础还限制了对风格的分析,而且不能肯定一个系统的实现是否对应于一个非形式化的体系结构的描述。
4、软件体系结构描述的部分解决方案
第一种解决方案是把现存的形式化方法应用到体系结构的设计中;
第二种方案是开发体系结构描述语言,用于代替非形式化的方框和线条图。
体系结构描述语言(Architecture Description Language,ADL)。
ADL根据结构配置方式分:
(1)隐式配置语言(Implicit Configuration Language)、
(2)嵌入式配置语言(Inline Configuration Languages)、
(3)显示配置语言(Explicit Configuration Languages)。
根据各ADL的研究范围,分为:
(1)研究软件体系结构配置结构的描述语言;
(2)研究软件体系结构实例的描述语言;
(3)研究软件体系结构风格的描述语言。
根据ADL与实现细节的关系,可分为:
(1)实现无关语言(Implementation Independent Languages);
(2)实现相关语言(Implementation Constraining Languages)。
5、体系结构描述的形式化基础——形式化与ADL的结合
两种各有优缺点。形式化方法提供了强有力的分析能力、抽象和与实现的细节无关性,但是形式化方法不能直接提供基本的体系结构的抽象和结构。ADL为构件和连接器定义了一系列符号,可以应用于实际的复杂系统的描述。
6、体系结构描述和分析的要求
(1)体系结构配置的描述
(2)体系结构风格的描述
(3)属性分析
(4)在实际问题中的应用
7、WRIGHT体系结构描述语言
(1)实现与交互
在系统设计级上,模块间的“实现”关系是指一个特定的模块在其它模块提供的功能上定义。
模块间的“交互”关系是指模块之间的通讯,系统描述成一系列计算组件和组件间的连接。
交互关系通常用Client/Server、管道过滤器组织或事件广播通讯等术语描述。
基于“实现”关系和基于“交互”关系的系统描述有三点不同:
(1.1)系统的推理方式;
(1.2)抽象要求;
(1.3)一致性检查。
(2)体系结构描述的WRIGHT模型
(3)体系结构描述的推理
8、软件体系结构的形式化语义基础——CSP语义学简介
(1)CSP模型:字母表、迹和拒绝集
CSP是基于字母表、迹和拒绝集的概念。从形式上看,CSP进程可以用一个3元组(A,F,D)表示,A表示字母表Alphabet,F表示失败Failures,D表示偏差Divergences。
进程的字母表是进程所参与的事件的集合。
进程的失败是迹与拒绝集组成的对。
每个迹表示事件的有限序列,每个拒绝集是一个事件集。
进程的迹是进程所允许的事件序列。
事件的拒绝集可以用进程的失败对表示。
一个失败是一个迹与一个事件集。
CSP进程的最后一个元素是偏差。
(2)细化
CSP进程描述了行为的模式,如果进程匹配某个行为模式,那么就可以用该行为替换原有的行为。
(3)符号和“;”操作符
9、软件体系结构的形式化描述的验证
一致性问题
(1)端口/计算一致性
(2)无死锁连接器
(3)无死锁角色
(4)单一激发器
(5)参数替换
(6)范围测试
(7)兼容性
(8)风格约束
(9)风格的一致性
(10)连接的完备性
二、软件体系结构的设计空间及规则
1、软件体系结构的设计开始于对事务所要满足的一系列属性和行为的特定描述。
当设计者能够向用户描述一个构件的集合、构件之间的联系以及使用模式的时候,该设计任务就完成了。
2、软件构件和框架的重用
体系结构的设计将蕴含在构件之间的依赖关系和框架的实现中,这对软件的重用至关重要。
3、设计空间的概念
4、扩展的设计空间
5、以体系为中心的软件开发