软件动态演化中构件运行时状态的获取和转换方法

文档序号:6613387阅读:109来源:国知局
专利名称:软件动态演化中构件运行时状态的获取和转换方法
技术领域
本发明涉及一种电信技术领域的方法,具体是一种软件动态演化中构件运行 时状态的获取和转换方法。
技术背景应用型的软件系统包括航天支撑系统、在线服务系统、医学应用中的生命支 持系统等,需要系统提供24/7/365的可用性,系统中断意味着要付出高昂的代价 甚至危及生命,系统软件必须具有运行时动态演化的能力。其通常包括许多相互 交互的构件,这些构件各自为一个独立的组合或配置单元,包含由契约指定的接 口和显式环境依赖,拥有明确且良定义的任务,软件构件可以独立配置,并且由 第三方来进行整合,由于高度模块化的设计,基于构件的软件非常适于运行时演 化。然而,构件动态取代仍然是个复杂的任务,主要归因于在不同版本之间,构 件的内部实现和运行状态都可能发生改变,要保持运行时系统的一致性,包含在 活跃构件中的状态必须被转换到构件新版本中。目前大多数与构件化软件动态演 化相关的工作都重点关注新版本构件模块的加载和替换操作,而往往把状态转换 逻辑的实现这一动态演化中最为重要的问题留给应用程序员,或是完全忽略。经对现有技术文献的检索发现,Michael Hicks等在《ACM Transactions on Programming Languages and Systems》(ACM程序语言与系统学报)2005年第27 巻第6期第1049到1096页上发表的"Dynamic Software Updating"(动态软件更 新)文章中提到对软件动态演化中的状态转换提供工具支持,能够为变量名不发 生改变的变量生成转换代码。其不足之处在于,受限于某一特定的语言和环境 (Michael Hicks的方法主要为类C语言提供升级支持),且仅仅为用户提供转换 实现的简单框架,没有对状态本身的转换提供智能化的支持,并且也没有提供一 般可用的方法。因此,为提供有益支持而从根本上解决该问题,本发明专门针对 软件动态演化中构件运行时状态的获取和转换问题提供方法,以增加软件动态演 化自动支持的级别。 发明内容本发明针对现有技术存在的不足,提供了一种软件动态演化中构件运行时状 态的获取和转换方法,使其通过直接分析并获取构件旧版本的运行时状态信息, 进行导出和分解,构件新版本生成对应的转换函数导入状态信息,并在构件初始 化时具体实现状态的转换。本发明是通过如下技术方案实现的,本发明包括以下步骤步骤一,通过代码构造解析器解析构件新版本和旧版本的实现源代码、构件 规约以及成员类之间的业务逻辑,分别建立构件内部结构的逻辑表示模型,并解 析构件外部接口的定义和实现方法信息;所述逻辑表示模型为有向图结构表示,包含类、属性、操作之间的交互和联系。所述构件外部接口的定义和实现方法信息,是指构件作为一个整体实现要向 外部用户提供显式调用接口时所必须满足的约束以及契约。步骤二,通过状态管理器中的比较函数比较新版本和旧版本的逻辑表示模 型,识别两个版本中相对应的成员变量和语法结构,返回版本间的相关性详细描 述,结合构件间交互与通信信息,确定当前待演化的构件旧版本中应被获取并转 换到新版本的待转换构件状态信息;所述构件间交互与通信信息,是指由构件运行平台中构件管理模块根据构件 的合成、交互和通信机制,所分析得到的运行时构件依赖和交互的信息。由于本 发明所提供的方法只关注软件系统动态演化时构件运行时状态的获取和转换,因 此将此构件间交互与通信信息视为由外部提供。所述构件状态信息,如果待演化构件当前并未处于运行态,则所需确定的构 件状态信息完全位于组成该构件的类成员变量中,包括变量的类型和值;如果待 演化构件处于运行态,则所需确定的构件状态信息包括组成该构件的类成员变量 的类型和值,以及指向已打开文件、其他构件对象或外部函数库的引用。所述待演化构件处于运行态,为一时间维度上的概念,是指在应用执行过程 中,可判定的动态演化等价点,即应用系统受影响的部分能够到达某个一致状态, 构件新旧版本可等价转换,在该动态演化等价点上,新构件版本能合理并安全地 继续执行1日构件版本留下的任务。 所述已打开文件,是指在应用执行过程中,需访问的可操作文件。所述其他构件对象,是指在应用执行过程中,待演化构件中的实例对象直接 或间接引用到的构件实例对象。所述外部函数库,是指在应用执行过程中,源代码不可直接访问,只能通过 函数接口进行交互的预定义函数所在的位置。所述确定当前待演化的构件旧版本中应被获取并转换到新版本的构件状态 信息的方法,具体如下第一步,根据旧版本和新版本的逻辑表示模型,由状态管理器中的比较函数 比较对应关系,识别在两个构件版本中有相应含义的类成员变量,并检测构件新 版本中已知的重构,形成版本间相关性详细描述;第二步,分析旧版本和新版本间相关性详细描述信息,推导构件新旧版本中 变量、类、属性和操作之间的对应关系;第三步,根据分析结果,确定两个构件版本中需要进行运行时状态信息提取 和转换的成员变量和接口引用信息。步骤三,依据步骤二中分析和确定所得到的结果,结合步骤一中所得到的构 件外部接口的定义和实现方法信息,修改构件新版本的逻辑表示模型,增加接口 方法,从旧版本中导出并保存构件旧版本的运行时状态信息;步骤四,修改构件新版本的逻辑表示模型,结合步骤一中所得到的构件外部 接口的定义和实现方法信息,以及步骤二中得到的待转换构件状态信息,增加接 口方法,由构件新版本导入并转换所获取的状态信息;所述由构件新版本导入并转换所获取的状态信息的方法,具体如下第一步,判断待转换构件状态信息,如果存在值需保持一致的成员变量,增 加状态映射函数,由该函数读取并导入相应的类成员变量的变量值,并将该变量 值映射到构件新版本中对应的类成员变量;第二步,判断待转换构件状态信息,如果存在类型已发生改变的类成员变量, 增加类型转换函数,由该函数读取并导入相应类成员变量的类型值,进行类型转 换,并映射到构件新版本中对应的类成员变量;第三步,判断待转换构件状态信息,如果存在方法调用和接口引用信息,需 要保持指向已打开文件、其他构件对象或外部函数库的引用信息,增加引用重定
向函数,由该函数读取并导入该引用信息,并传递给构件新版本中对应的接口, 经由重定向操作,使构件新版本中的对应接口复制构件旧版本中原有的指向已打 开文件、其他构件对象或外部函数库的引用。步骤五,基于已修改的构件新版本逻辑表示模型,重新生成构件新版本的源 代码,具体实现从旧构件版本导出、导入并转换状态信息到新构件版本的功能。与现有技术相比,本发明具有以下优点和积极效果(1)自动化特征本发 明实现了构件运行时状态的相关分析、确定、获取和转换步骤,所需要的人为干 预步骤仅仅是需由程序员提供构件新旧版本的实现,具备运行时构件状态自动获 取和转换的能力;(2)易用性和高效性构件化软件系统的维护开发人员在构建 动态演化支持系统时,只需简单增加方法的外部接口 ,就可直接使用本发明方法, 高效地实现软件动态演化中构件运行时状态的获取和转换;(3)可扩展性本发 明适用于面向构件的编程范型,通过简单增加分布性和移动性特征,就可以推广 扩展到分布式环境和移动计算系统。


图l为本发明工作流程图;图2为本发明确定构件状态信息的工作流程图;图3为本发明构件状态信息导入和转换的工作流程图。
具体实施方式
下面结合附图给出本发明实施例的详细说明和
具体实施例方式本实施例以本 发明所述及技术方案为前提进行实施,给出详细的实施方式和过程,但本发明的 保护范围不限于以下实施例。本实施例涉及的构件旧版本(Component—vl )和构件新版本 (Component—v2),都基于Java技术实现,每个构件的实现主要包含一些Java 类(JavaClass),也包含用于为终端用户提供某些功能所必须的其他资源,包括 HTML文件、帮助文档、图标。因此,在运行时,构件实例即为对象的一个集合。 每个构件都包含一个默认的代码构造解析器(Code Parser),用于辅助生成构件 的逻辑表示元模型(MataModel)。在软件运行中,每一个构件都对应着一个构 件容器(Container),包含关于构件的各种信息,如构件标识、构件类型、所能 提供的服务接口、交互信息、通信机制、状态管理,构件状态的获取和转换操作 具体由构件容器中的状态管理器(State Manager)进行管理,构件状态比较和分 析方法实现都包含于该状态管理器中。如图1所示,本实施例包括以下步骤 (1 )基于Java元模型的表示方法,通过代码构造解析器的主方法codeParser() 分别解析构件旧版本Component—vl和新版本Component—v2的实现源代码、构 件规约以及成员类之间的业务逻辑。代码构造解析器解析得到分别与新旧版本构 件内部结构逻辑表示相对应的Java元模型,Java元模型为有向图结构表示,Java 元模型包含类、属性(包括变量属性、对象类型和返回类型)、操作(包括方法 调用、接口引用)之间的交互和联系。另外,代码构造解析器还分别解析得到新 旧版本的构件接口的定义和实现方法信息,构件接口的定义和实现方法信息包含 构件作为一个整体实现要向外部用户提供显式调用接口时所必须满足的约束 (Pre-conditions、 Post-conditions)以及契约;(2) 如图2所示,通过状态管理器中的比较函数Compare()比较构件旧版本 Component_vl和新版本Component—v2的逻辑表示的Java元模型之间的对应关 系,识别两个构件版本中有相应含义的类实例变量,有相应含义的类实例变量是 指联系类信息,为Component—v2中的类实例变量的名字和类型相同于 Component—vl中的某个类实例变量,并检测新构件的重构信息,重构信息是指 差别类信息,为新版本Component—v2中类、属性、操作之间的交互和联系发生 的改变。最后,以XML文件形式,保存上述所得到的构件之间的对应关系和重 构信息;(3) 如图2所示,对于步骤(2)所得到的XML文件进行相关性分析,通 过DOM解析器解析该XML文件,得到构件旧版本Component_vl和新版本 Component—v2中成员变量、类、属性和操作之间的对应关系,并建立对应关系 表结构,该对应关系表结构显式指明在新版本Component—v2中的某个类实例变 量的属性与旧版本Component—vl中的类实例变量完全相同,或是名字相同但变 量类型发生了改变,或者该类实例变量已被删除,同时,该对应关系表结构还给 出旧版本Component—vl中可能的方法调用和接口引用信息,并指明在新版本 Component—v2是否有对应的弓I用。(4) 如图2所示,推导并分析步骤(3)中对应关系表结构所包含的语义信
息,确定需进行状态信息提取和转换的待转换构件状态信息,旧版本 Component—vl中包含的3类待转换构件状态信息,包括a) 需保持一致的类实例变量,即与旧版本ComponenLvl中的类实例变量 的属性完全相同的类实例变量,且其变量值在新版本C0mp0nent_V2中需要保证 运行时一致性;b) 类型己发生改变的实例变量,即旧版本Component—vl中的类实例变量 在新版本Component—v2中有与其相对应的类实例变量,但新版本Component—v2 中变量的类型已经发生了改变;c) 方法调用和接口引用信息,包括在旧版本Comp0nent_vl中指向己打开 可操作文件的引用接口,对其他构件实例对象进行的直接或间接方法调用,以及 对外部预定义函数库进行调用的函数接口。所述方法调用和接口引用信息与软件系统的运行时相关,并不能完全通过静 态推导,而是需要进行动态获取,由构件运行平台中的构件管理器根据旧版本 Component—vl构件的合成、交互和通信机制,分析得到的构件运行时依赖和交 互信息。(5) 根据在步骤(4)中所确定的待转换状态信息,结合步骤(1)中所得 到的新版本Component—v2构件的接口定义和实现方法信息,修改新版本 Component—v2的逻辑表示Java元模型,增加接口方法getState(),从旧版本 Component—vl中导出所有类型的待转换状态信息,并分别进行保存。(6) 如图3所示,判断待转换构件状态信息,如果存在需保持一致的类实 例变量,则在步骤(5)的基础上进一步修改新版本Component—v2的逻辑表示 Java元模型,增加状态值映射函数valueTransfer(),由该函数读取通过接口方法 getState()导出的旧版本Component—vl中需保持一致的实例变量的属性和变量 值,并将在新版本Component—v2被初始化时将该变量值赋给新版本 Component_v2中对应的同名类实例变量。(7) 如图3所示,判断待转换构件状态信息,如果存在类型已发生改变的 实例变量,则在步骤(5)的基础上进一步修改新版本Component—v2的逻辑表 示Java元模型,增加类型转换函数typeTransfer(),由该函数读取通过接口方法 getState()导出的在新版本Component—v2中变量类型已发生改变的实例变量信
息,进行类型转换,并将在新版本Component—v2被初始化时使旧版本 Component—vl中的原有类型的变量属性转换成新的类型。类型转换函数 typeTransfer被构造后可重用,并可进行递归调用,即先调用typeTransferl,然 后再调用typeTransfer2 ,据此形成新的类型转换函数typeTransfer'(typeTransferl^typeTransfer2),可预定义常用的类型转换函数,并由用户在 使用过程中定制。(8) 如图3所示,判断待转换构件状态信息,如果存在方法调用和接口引 用信息,则在步骤(5)的基础上进一步修改新版本Component—v2的逻辑表示 Java元模型,增加引用重定向函数refRedirect(),由该函数读取通过接口方法 getState()导出的在旧版本Component—vl中所包含的运行时外部调用和引用信 息,经由重定向操作,将在新版本Component_v2被初始化时使新版本 Component—v2中的对应接口复制旧版本Component_vl中原有的指向己打开可 操作文件的引用接口,对其他构件实例对象进行的直接或间接方法调用,以及对 外部预定义函数库进行调用的函数接口 。(9) 根据已修改的新版本Component—v2逻辑表示Java元模型,结合构件 新版本Component一v2的原有代码实现,生成新的新版本Component一v2构件源 代码,此时的新版本Component_v2构件已经具体实现从旧版本Component—vl 中导出构件运行时状态信息,并进行导入和转换操作。将新的新版本 Component—v2部署到构件运行时平台,并在合适的软件演化时机进行初始化, 实现了构件运行时状态的获取和转换。与现有技术相比,本实施例能够在软件构件有新版本实现时,仅由软件维护 人员提供构件新版本和旧版本的Java实现,无需其他干预,本实施例所述方法 就能实现运行时构件状态信息的获取和转换,可以省去在获取和转换构件状态信 息时所需要的停止软件运行、静态获取状态信息、软件重启等所需要的停机时间 并避免软件的运行时中断。同时,本实施例中由所述运行时构件状态获取和转换 方法生成的构件运行时状态的导入、导出和转换方法实现,避免由维护人员手动 判断状态信息并生成状态获取和转换方法所导致的时间消耗和可能造成的错误。 通过增加分布协同和环境依赖特性,也实际上可用于实现分布和移动环境下的软 件构件运行时状态获取和转换。
权利要求
1.一种软件动态演化中构件运行时状态的获取和转换方法,其特征在于,包括以下步骤步骤一,通过代码构造解析器解析构件新版本和旧版本的实现源代码、构件规约以及成员类之间的业务逻辑,分别建立构件内部结构的逻辑表示模型,并解析构件外部接口的定义和实现方法信息;步骤二,通过状态管理器中的比较函数比较新版本和旧版本的逻辑表示模型,识别两个版本中相对应的成员变量和语法结构,返回版本间的相关性详细描述,结合构件间交互与通信信息,确定当前待演化的构件旧版本中应被获取并转换到新版本的待转换构件状态信息;步骤三,依据步骤二中分析和确定所得到的结果,结合步骤一中所得到的构件外部接口的定义和实现方法信息,修改构件新版本的逻辑表示模型,增加接口方法,从旧版本中导出并保存构件旧版本的运行时状态信息;步骤四,修改构件新版本的逻辑表示模型,结合步骤一中所得到的构件外部接口的定义和实现方法信息,以及步骤二中得到的待转换构件状态信息,增加接口方法,由构件新版本导入并转换所获取的状态信息;步骤五,基于已修改的构件新版本逻辑表示模型,重新生成构件新版本的源代码,具体实现从旧构件版本导出、导入并转换状态信息到新构件版本的功能。
2. 根据权利要求1所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,步骤二中,所述逻辑表示模型为有向图结构表示,包含类、属性、 操作之间的交互和联系;所述构件外部接口的定义和实现方法信息,是指构件作为一个整体实现要向 外部用户提供显式调用接口时所必须满足的约束以及契约。
3. 根据权利要求1所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,步骤二中,所述确定当前待演化的构件旧版本中应被获取并转换 到新版本的构件状态信息的方法,具体如下第一步,根据旧版本和新版本的逻辑表示模型,由状态管理器中的比较函数 比较对应关系,识别在两个构件版本中有相应含义的类成员变量,并检测构件新 版本中已知的重构,形成版本间相关性详细描述;第二步,分析旧版本和新版本间相关性详细描述信息,推导构件新旧版本中 变量、类、属性和操作之间的对应关系;第三步,根据分析结果,确定两个构件版本中需要进行运行时状态信息提取 和转换的成员变量和接口引用信息。
4. 根据权利要求1所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,歩骤二中,所述构件间交互与通信信息,是指由构件运行平台中 构件管理模块根据构件的合成、交互和通信机制,所分析得到的运行时构件依赖 和交互的信息。
5. 根据权利要求1所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,步骤二中,所述构件状态信息,如果待演化构件当前并未处于运 行态,则所需确定的构件状态信息完全位于组成该构件的类成员变量中,包括变 量的类型和值;如果待演化构件处于运行态,则所需确定的构件状态信息包括组 成该构件的类成员变量的类型和值,以及指向己打开文件、其他构件对象或外部 函数库的引用。
6. 根据权利要求5所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,所述已打开文件,是指在应用执行过程中,需访问的可操作文件。
7. 根据权利要求5所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,所述其他构件对象,是指在应用执行过程中,待演化构件中的实 例对象直接或间接引用到的构件实例对象。
8. 根据权利要求5所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,所述外部函数库,是指在应用执行过程中,源代码不可直接访问, 只能通过函数接口进行交互的预定义函数所在的位置。
9. 根据权利要求5所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,所述待演化构件处于运行态,为一时间维度上的概念,是指在应 用执行过程中,可判定的动态演化等价点,即应用系统受影响的部分能够到达某 个一致状态,构件新旧版本可等价转换,在该动态演化等价点上,新构件版本能 合理并安全地继续执行1日构件版本留下的任务。
10. 根据权利要求1所述的软件动态演化中构件运行时状态的获取和转换方 法,其特征是,步骤四中,所述由构件新版本导入并转换所获取的状态信息的方 法,具体如下第一步,判断待转换构件状态信息,如果存在值需保持一致的成员变量,增 加状态映射函数,由该函数读取并导入相应的类成员变量的变量值,并将该变量 值映射到构件新版本中对应的类成员变量;第二步,判断待转换构件状态信息,如果存在类型己发生改变的类成员变量, 增加类型转换函数,由该函数读取并导入相应类成员变量的类型值,进行类型转 换,并映射到构件新版本中对应的类成员变量;第三步,判断待转换构件状态信息,如果存在方法调用和接口引用信息,需 要保持指向已打开文件、其他构件对象或外部函数库的引用信息,增加引用重定 向函数,由该函数读取并导入该引用信息,并传递给构件新版本中对应的接口, 经由重定向操作,使构件新版本中的对应接口复制构件旧版本中原有的指向己打 开文件、其他构件对象或外部函数库的引用。
全文摘要
一种软件维护技术领域的软件动态演化中构件运行时状态的获取和转换方法,包括如下步骤解析构件新旧版本的实现源代码、构件规约和内部业务逻辑,分别建立构件内部结构逻辑表示模型;比较两个逻辑表示模型,识别相对应的成员变量和语法结构,返回版本间的相关性详细描述,确定应被获取并转换到新版本的构件状态信息;修改构件新版本的逻辑表示模型,增加接口方法从旧版本中导出并保存其运行时状态信息,并增加接口方法导入并转换状态信息;基于已修改的构件新版本逻辑表示模型,重新生成构件新版本的源代码。本发明方法能够有效获取并转换构件运行时的状态信息,实现动态演化支持系统中的状态转换功能。
文档编号G06F9/44GK101162428SQ200710170768
公开日2008年4月16日 申请日期2007年11月22日 优先权日2007年11月22日
发明者伍建焜, 仕 张, 徐小辉, 王德俊, 黄林鹏 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1