论文部分内容阅读
软件发展的历史表明,影响软件技术发展的主要要素为计算平台、人的思维模式以及问题域,而以上要素在软件开发活动中又被抽象为平台空间、认知空间以及问题空间。因此从本质上,软件技术的发展是人们对三个空间的认识不断深化,而且促进他们相互之间演化的过程。而当前随着因特网的迅速发展,同时具有计算和组网能力设备的小型化、微型化和嵌入化使得网络无处不在,人们对三个空间的认识发生重大变化,从而推动针对因特网环境下新型软件技术的研究。目前,杨芙清、梅宏、吕建等针对因特网开放、动态、难控的网络环境提出网构软件的概念;IBM的Kephart和Chess等针对软件之间的协同、自我管理(包括调整、维护等)等问题提出自治计算的概念。但无论是网构软件、自治计算或者还是其他针对因特网的软件模型,均面临软件运行环境易变带来的挑战—动态演化,即软件系统要能在开放、动态、难控的环境下,针对外部环境的变化而变化,并通过自我调整达到外部期望的过程。当前软件的动态演化也已成为软件工程中研究的热点,成为实现动态、开放、灵活多变系统的关键技术,本文也对动态演化进行深入地研究。本文首先从因特网环境下软件动态演化的需求出发,提出的软件动态演化区分原则,分析软件动态演化的研究现状,并从软件如何支持动态演化、怎样动态演化以及演化后正确性和一致性方面进行系统地阐述,并重点讨论了软件动态演化的建模、系统框架等问题。进而在对现有软件动态演化的分析和总结的基础上,提出一种新型的软件动态演化概念模型,为下一步软件动态演化的研究提供指导。软件演化中的行为一致性、相容性以及系统完整性约束,长期以来是动态演化中研究的热点,而现有形式化理论一般只针对演化的某一方面,难以对动态演化的性质提供完整的分析和验证,并且对环境及环境变化的描述较少。因此本文在Milner的Bigraph理论基础上,提出基于Bigraph的建模方法,并论证动态演化的相关特性。与以往基于Petri Net、π演算以及进程代数不同,综合Bigraph能融合π演算和移动Ambient演算的优点,同时引入环境上下文参与系统的迁移,使系统的描述更为直观和精确,适合对动态演化的形式化建模,并由于利用Bigraph可模拟其他演算,因此也可充分利用以前的研究成果。实例表明,基于Bigraph提出的软件建模机制,可为软件动态演化的形式化方法提供坚实的基础。软件动态演化机制是动态演化中的关键问题之一。本文基于设计模式中的命令模式,依据方法调用与方法执行分离的原则,采用集中调度控制所有方法执行的方式,在反射的基础上设计出一种灵活的软件在线演化机制(FOEM)。该机制的设计原理是把系统中所有的方法调用封装成命令请求,加入主动队列,而在具体调度时检查内部配置配置文件,根据配置的具体对象类型、方法名称以及相关动作,动态增加或者替换该方法调用,从而达到在线变更软件系统行为的目标。实验表明该机制灵活多变,且具有普遍的适用性,能满足大多数动态演化软件的需求。但该机制并不适合涉及多个对象的复杂演化流程,因此本文从面向服务的计算模型中得到启发,提出面向服务对象的”伪面向服务”动态演化机制(SOSA),并利用服务对象注册表解耦直接对象引用,从而在运行中动态解释服务对象的调用,进而完成复杂的演化逻辑变更。该机制把SOA方式引入程序设计内部,与外部的服务调用统一风格,便于局部/远端对象的无缝迁移以及服务流程的动态组合,可灵活实现软件的动态演化。系统框架是动态演化软件能否被快速开发和广泛部署的关键指标。本文基于对象动态替换机制,设计实现一种适合嵌入式环境的动态演化框架。该框架利用面向对象模型中,对象的内存布局只与类中的变量以及虚函数相关,当这两部分保持不变时,新对象的内存映像将保持与原始对象一致,故当新对象替换原始对象后(完全取代原始对象的地址空间),系统调用对应地址的指令时,其实是对新对象的调用,从而“透明”地切换至新对象,利用对象的更新完成系统演化需求。针对当前动态演化主要从宏观层面研究动态演化软件的形式化、模型以及框架,且主要侧重功能性需求,而对非功能性需求的研究较少或采用定性的方法,本文对动态演化过程中的非功能性需求,特别是性能与可靠性进行定量的研究。提出基于体系结构模型的动态组件分派方法,满足系统动态演化过程中的性能需求,并证明该组件分派问题为NP问题,给出相应的启发式算法。对于可靠性,本文提出基于分布式体系结构模型的逆序组件分派算法满足动态演化过程的系统可靠性需求。通过实验表明,本文提出的相关算法适合于满足在实时抉择条件下动态演化的相关非功能性需求,为动态演化的演化决策提供指导思路。综上,通过对动态演化软件的形式化、演化机制、系统框架等问题的研究,建立了软件动态演化的全局研究视图,提出了若干适用于动态演化的关键技术和算法,这些为动态演化软件广泛的研究和部署提供了理论基础和实际的指导意义。