当前位置: 首页 > 专利查询>南京大学专利>正文

基于程序源码切片重组的软件动态更新热补丁合成方法技术

技术编号:28372715 阅读:16 留言:0更新日期:2021-05-07 23:59
本发明专利技术公开了一种基于程序源码切片重组的软件动态更新热补丁合成方法,包括:通过静态程序分析新、旧版本程序的源码和/或二进制代码,提取一定量动态更新相关的基本构件和数据流切片;枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数;在测试用例上运行生成的转换函数,输出正确的转换函数。本发明专利技术能够自动分析新旧版本程序代码,提取出构造转换函数的基本构件和数据流切片,进而利用他们自动合成对象状态转换函数,帮助开发者,大幅减轻人工负担。

【技术实现步骤摘要】
基于程序源码切片重组的软件动态更新热补丁合成方法
本专利技术涉及软件动态更新
,具体而言涉及一种基于程序源码切片重组的软件动态更新热补丁合成方法和系统。
技术介绍
相比于离线更新的先停机再重启的更新策略,软件动态更新的核心思想是在旧版本程序运行时刻,对其进行版本更新。软件动态更新的特点包括:1)动态地监测更新请求,并在收到请求后,短暂暂停旧版本程序的运行;2)在更新时刻,对已加载进内存的代码替换为新版本,同时利用对象状态转换函数,转换内存中已创建的与新版本程序不兼容的对象状态。在开发者发出更新请求前,需要准备好对象状态转换函数。而底层的支撑系统,则利用该对象状态转换函数,对部分对象进行转换,使其与新版本程序兼容,进而使得更新后的程序能够正确的继续执行。在代码涉及的数据结构发生变化时,目前仍缺少一种可靠的生成对象状态转换函数的方法,是因为现有技术仅能利用预定义的简单规则进行尝试组合,只能处理如初级类型间转换、常量赋值等,无法应对现实的软件涉及的复杂更新,如数据表示方法、数据结构的改变。
技术实现思路
本专利技术针对现有技术中的不足,提供一种基于程序源码切片重组的软件动态更新热补丁合成方法和系统,能够自动分析新旧版本程序代码,提取出构造转换函数的基本构件和数据流切片,进而利用它们自动合成对象状态转换函数,帮助开发者,答复减轻人工负担。为实现上述目的,本专利技术采用以下技术方案:一种基于程序源码切片重组的软件动态更新热补丁合成方法,所述合成方法包括以下步骤:S1,通过静态程序分析新、旧版本程序的源码和/或二进制代码,提取一定量动态更新对应的基本构件和数据流切片;所述基本构件是组成对象状态转换函数的基本单位,由变量占位符、占位符的类型信息,以及包括Java关键字、类名、方法名和操作符在内的其他元素组成;所述数据流切片是指在一个方法体内,声明或使用了相同变量的若干程序语句序列;S2,枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列;S3,在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。为优化上述技术方案,采取的具体措施还包括:进一步地,步骤S1中,所述基本构件的来源包括两个部分:一是将新旧两个版本程序源码中的每一行代码包括的条件语句和循环语句抽取为基本构件;二是对应程序所依赖的第三方库中的API方法所包含的访问构件;所述基本构件包含4种类别:1)实例值域访问构件、静态值域访问构件;2)实例方法访问构件、静态方法访问构件;3)构造函数构件;4)源码语句构件。进一步地,步骤S1中,提取一定量动态更新对应的基本构件的过程包括以下步骤:S101,分析源码信息,将一行语句中的变量和常量都替换为占位符,同时保留对应的类型信息,抽取为源码语句构件,并且保留在源码中的位置信息;将类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,将定义中所需的调用实例和参数都替换为占位符;S102,分析字节码信息,将类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,将声明中所需的调用实例和参数都替换为占位符;S103,对于相同构件进行合并,提取得到最终的动态更新对应的基本构件。进一步地,步骤S1中,提取一定量动态更新对应的数据流切片的过程包括以下步骤:S111,从一个方法体中最后一条声明或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句:1)初始化一个变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,再继续检查下一条语句;S112,采用步骤S1中获得的对应基本构件表示分析所得的数据流切片,同时对相同数据流切片进行合并。进一步地,步骤S112中,所述采用步骤S1中获得的对应基本构件表示分析所得的数据流切片是指:在得到一个数据流切片后,将其中语句对应的基本构件按照顺序保存下来。进一步地,步骤S2中,所述枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数的过程包括以下步骤:S21,初始时,将旧版本目标类型视为已知类型,初始化空的转换函数集合;S22,对转换函数集合中的每个转换函数计算与数据流切片的相似度,并排序;S23,选择相似度最高的转换函数,如果它已经生成了目标类型的变量,则对其进行测试验证,如果验证通过,输出转换函数,结束流程;否则进入步骤S24;S24,从它的已知类型出发,选出所有可用的基本构件,可用的基本构件是指基本构件中的每个变量占位符均与某个已知变量类型匹配;S25,将使用已知变量填满后的基本构件放在步骤S23中选择的转换函数尾部,组成新的转换函数,并放入转换函数集合,转入步骤S22。进一步地,步骤S22中,所述对转换函数集合中的每个转换函数计算与数据流切片的相似度是指:对于一个转换函数,计算它与每个数据流切片的相似度,选择最大值作为该转换函数的相似度。进一步地,步骤S3中,所述在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数的过程包括以下步骤:S31,在新版本程序上运行测试用例,并在开发者设置的更新点处获取新版本的对象状态;S32,在测试验证阶段比较该对象状态中目标类型的状态是否与转换后的状态相等,如果相等,判定针对该目标类型的这次转换是正确的,如果待测转换函数通过所有测试用例的验证,则判断待测转换函数是正确的。基于前述方法,本专利技术提出一种基于程序源码切片重组的软件动态更新热补丁合成系统,所述合成系统包括静态程序分析组件、数据流分析组件、转换函数生成模块和测试模块;所述静态程序分析组件用于解析源码中每个代码行的信息,将其中的所有变量和常量替换为占位符,同时保留对应的类型信息,以从源码中获取所有类型的基本构件,再解析字节码信息,从中获取除源码语句构件之外的其他类型基本构件;其中,在获取基本构件的过程中,静态程序分析组件根据基本构件的组成信息,即“占位符位置和类型信息+保留的关键字”来排除相同的基本构件;所述数据流分析组件用于从一个方法体中最后一条创建或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句:1)初始化一个相关变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,并继续检查下一条语句;其中,数据流分析组件在得到一个数据流切片后,将其中语句对应的基本构件按照顺序保存下来,同时排除相同的数据流切片;所述转换函数生成模块用于枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列;所述测试模块用于在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。本专利技术的有益效果是:本文档来自技高网...

【技术保护点】
1.一种基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,所述合成方法包括以下步骤:/nS1,通过静态程序分析新、旧版本程序的源码和/或二进制代码,提取一定量动态更新对应的基本构件和数据流切片;所述基本构件是组成对象状态转换函数的基本单位,由变量占位符、占位符的类型信息,以及包括Java关键字、类名、方法名和操作符在内的其他元素组成;所述数据流切片是指在一个方法体内,声明或使用了相同变量的若干程序语句序列;/nS2,枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列;/nS3,在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。/n

【技术特征摘要】
1.一种基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,所述合成方法包括以下步骤:
S1,通过静态程序分析新、旧版本程序的源码和/或二进制代码,提取一定量动态更新对应的基本构件和数据流切片;所述基本构件是组成对象状态转换函数的基本单位,由变量占位符、占位符的类型信息,以及包括Java关键字、类名、方法名和操作符在内的其他元素组成;所述数据流切片是指在一个方法体内,声明或使用了相同变量的若干程序语句序列;
S2,枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列;
S3,在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。


2.根据权利要求1所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S1中,所述基本构件的来源包括两个部分:一是将新旧两个版本程序源码中的每一行代码包括的条件语句和循环语句抽取为基本构件;二是对应程序所依赖的第三方库中的API方法所包含的访问构件;
所述基本构件包含4种类别:1)实例值域访问构件、静态值域访问构件;2)实例方法访问构件、静态方法访问构件;3)构造函数构件;4)源码语句构件。


3.根据权利要求2所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S1中,提取一定量动态更新对应的基本构件的过程包括以下步骤:
S101,分析源码信息,将一行语句中的变量和常量都替换为占位符,同时保留对应的类型信息,抽取为源码语句构件,并且保留在源码中的位置信息;将类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,将定义中所需的调用实例和参数都替换为占位符;
S102,分析字节码信息,将类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,将声明中所需的调用实例和参数都替换为占位符;
S103,对于相同构件进行合并,提取得到最终的动态更新对应的基本构件。


4.根据权利要求1所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S1中,提取一定量动态更新对应的数据流切片的过程包括以下步骤:
S111,从一个方法体中最后一条声明或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句:1)初始化一个变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,再继续检查下一条语句;
S112,采用步骤S1中获得的对应基本构件表示分析所得的数据流切片,同时对相同数据流切片进行合并。


5.根据权利要求1所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S112中,所述采用步骤S1中获得的对应基本构件表示分析所得的数据流切片是指:在得到一个数据流切片后,将其中语句对应的基本构件按照顺序保存下来。


6.根据权利要求1所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S2...

【专利技术属性】
技术研发人员:蒋炎岩赵泽林许畅马晓星
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1