论文部分内容阅读
作为控制软件复杂性、提高软件系统质量、支持软件开发和复用的重要手段之一,软件体系结构(software architecture)自提出以来,日益受到软件研究者和实践者的广泛关注,并发展成为软件工程的一个重要研究领域。通过对系统进行的组件式分解,软件体系结构实现了对软件系统构建初期面临功能关注点的有效分离。然而,软件体系结构面临的许多表示非功能需求和质量要求的关注点大都表现出横切特征,它们的实现横跨系统的多个组件,从而降低了软件的可重用性,造成系统在演进和维护上的极大困难。这种关注点被称为横切关注点(crosscutting concerns)。为了应对横切关注点引起的各种问题,面向方面的软件体系结构设计(Aspect-Oriented Software Architecture Design)将方面(aspects)机制引入到软件体系结构的设计中,用方面对横切关注点进行封装表示,通过方面的模块化处理,促进系统的可追踪性、可理解性和可维护性。当前,面向方面的软件体系结构设计已经成为软件工程领域中的一个研究热点。然而,软件体系结构中的诸如安全、业务规则、可用性、可靠性、可维护性等许多横切关注点呈现依赖于系统运行历史的特性。为了对这种历史敏感的横切关注点进行封装,方面需要带有状态。带有状态的方面称为状态方面(stateful aspects),它通过状态记录系统的执行历史,并根据所处的状态来决定是否执行相应的横切关注点行为。编织(weaving)是实现方面和系统其余模块组合的方式,一直以来都是面向方面领域一个基本和重要的课题。它不但需要根据方面所提供的信息,在系统中寻找恰当的织入位置,并确定方面行为与织入点行为之间的操作时序,还需要检测和处理编织中可能遇到的方面冲突。而状态的引入,使得状态方面的编织面临比常规方面编织更多复杂的问题。为了对系统面临的历史敏感横切关注点进行模块化封装,需要将状态方面引入到软件体系结构设计中。而当前的面向方面软件体系结构设计方法并没有提供支持该概念的表示机制,也没有提供有效的编织状态方面的方法。基于上述背景,本文在吸取当前面向方面的软件体系结构设计和状态方面编程等相关研究成果的基础上,对软件体系结构中状态方面的编织问题展开深入研究,形成了一套完整的形式化的编织方法,并开发了原型工具和通过实例对该方法进行了应用和验证。本文的主要研究内容包括:1.软件体系结构状态方面的形式化建模研究。为了在软件体系结构中实现对状态方面的表示,对基本系统的语义、支持状态的切点模型、通知模型以及状态方面的定义等展开研究。基本系统的语义描述系统执行的完整行为,切点模型描述状态方面对基本系统执行历史的关注,描述状态方面在何处编织(where),而通知模型描述状态方面所封装的横切关注点的行为(what)以及这些行为在何时(when)触发。2.状态方面编织的语义和策略研究。由于现有研究缺乏形式化的编织语义,也缺乏支持状态方面编织的方法,因此对软件体系结构状态方面的编织语义和策略展开研究。在语义方面,对方面编织运算的结构化操作语义SOS (structural operational semantics)和编织中语法层的方面交互问题进行了研究,并考查了编织运算的特性。在策略方面,对关联的确定方法、切点的判断算法和具体的编织算法进行了研究,并开发了原型工具和实例对其进行了实现和应用。3.状态方面编织的校验和分析研究。方面交互是方面编织中的一个重要问题,其检测和处理对于增强系统的安全性和可靠性有非常重要的意义。首先研究了系统属性层次上的语义方面交互的定义及其校验方法,然后研究了编织影响的分析和推理方法,并在原型工具上进行了实现和验证。本文工作的主要贡献体现在:1.将LTS引入系统执行语义的表示,并在对LTS适当扩展的基础上,建立了描述状态方面的切点模型和通知模型,从而解决了状态方面在软件体系结构中的表示问题,为软件体系结构状态方面的编织提供了依据。2.在对LTS的并发组合(‖)进行扩展的基础上,提出了组合运算(“∝”),并以此为基础建立了状态方面的关联点确定方法。与同类方法相比,该方法不需要引入额外的同步动作,从而避免了由此引起的组合状态数过多的问题。3.将状态方面的编织定义为在基本系统、切点和通知之间的组合运算(“(?)”),并建立了该运算的操作语义以及支持该语义的具体编织策略。这是一个形式化的语义,基于它可以开展对为编织前后系统行为的理解、分析和推理。4.针对传统方法无法分析状态方面的编织影响以及缺乏形式化分析方法所带来的难以推理的问题,提出了一种状态方面的编织影响分析方法。它引入LTS之间的弱模拟等价关系作为衡量状态方面编织对一个待分析模式的影响的标准,从而使得编织的分析和推理变得容易。