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

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

Info

Publication number
CN112764788A
CN112764788A CN202110073391.XA CN202110073391A CN112764788A CN 112764788 A CN112764788 A CN 112764788A CN 202110073391 A CN202110073391 A CN 202110073391A CN 112764788 A CN112764788 A CN 112764788A
Authority
CN
China
Prior art keywords
conversion function
statement
data stream
variable
basic components
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110073391.XA
Other languages
English (en)
Other versions
CN112764788B (zh
Inventor
蒋炎岩
赵泽林
许畅
马晓星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202110073391.XA priority Critical patent/CN112764788B/zh
Priority to PCT/CN2021/081558 priority patent/WO2022156056A1/zh
Publication of CN112764788A publication Critical patent/CN112764788A/zh
Priority to LU500618A priority patent/LU500618B1/en
Application granted granted Critical
Publication of CN112764788B publication Critical patent/CN112764788B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

基于程序源码切片重组的软件动态更新热补丁合成方法
技术领域
本发明涉及软件动态更新技术领域,具体而言涉及一种基于程序源码切片重组的软件动态更新热补丁合成方法和系统。
背景技术
相比于离线更新的先停机再重启的更新策略,软件动态更新的核心思想是在旧版本程序运行时刻,对其进行版本更新。软件动态更新的特点包括:
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)能够定义软件动态更新场景下的对象状态转换的“正确性”,即生成的对象状态转换函数应该符合的标准。
2)能够自动分析新旧版本程序代码,提取出构造转换函数的基本构件和数据流切片,进而利用它们自动合成对象状态转换函数,帮助开发者,答复减轻人工负担;
3)能够自动运行测试用例来验证生成的对象状态转换函数是否正确,帮助开发者快速发现正确的目标。
附图说明
图1是本发明的基于程序源码切片重组的软件动态更新热补丁合成方法的流程图。
图2是具体实施例中步骤一的原理示意图。
图3是具体实施例中步骤二和三的流程图。
具体实施方式
现在结合附图对本发明作进一步详细的说明。
需要注意的是,发明中所引用的如“上”、“下”、“左”、“右”、“前”、“后”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
结合图1,本发明提及一种基于程序源码切片重组的软件动态更新热补丁合成方法,所述合成方法包括以下步骤:
S1,通过静态程序分析新、旧版本程序的源码和/或二进制代码,提取一定量动态更新对应的基本构件和数据流切片;所述基本构件是组成对象状态转换函数的基本单位,由变量占位符、占位符的类型信息,以及包括Java关键字、类名、方法名和操作符在内的其他元素组成;所述数据流切片是指在一个方法体内,声明或使用了相同变量的若干程序语句序列。
S2,枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列。
S3,在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。
本发明主要包含四个步骤:
步骤一、通过静态程序分析新、旧版本程序的源码和(或)二进制代码,提取大量的动态更新潜在的基本构件和数据流切片;
步骤二、枚举基本构件的组合,并根据其数据流关系自动生成潜在的转换函数;
步骤三,在测试用例上运行转换函数,并把测试报告报告给开发者,同时输出正确的转换函数。
所述的步骤一中,基本构件是组成转换函数的基本单位,是由变量占位符(□)、占位符的类型信息和其他元素(Java关键字、类名、方法名、操作符等)组成。例如,□1.M(□2,□3)表示一个方法调用的基本构件,其包含三个变量占位符(C类型的□1,整数类型的□2,字符串类型的□3)和一个方法名(M),其中□2,□3是方法M接受的参数。假设方法M的返回值类型是布尔类型(boolean),且已存在C类型变量V1,整数类型变量V2,和字符串类型变量V3,那么三个占位符都可以被填充。而填充后的基本构件可以生成一个新的布尔类型变量V4:boolean V4=V1.M(V2,V3)。
基本构件的来源包括两个部分:一是新旧两个版本程序源码中的每一行代码,包括了条件语句和循环语句,都可以抽取为基本构件;二是该程序所依赖的第三方库(包括JDK标准库)中的API方法。基本构件包含如下类型:
1)实例值域访问构件、静态值域访问构件;
2)实例方法访问构件、静态方法访问构件;
3)构造函数构件;
4)源码语句构件。
所述步骤一中,静态程序分析组件,自动分析新旧版本程序的源码和字节码信息,从中获取基本构件。在分析源码信息时,把一行语句中的变量和常量都替换为占位符,同时保留对应的类型信息,抽取为源码语句构件,并且保留在源码中的位置信息。同时把类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,把定义中所需的调用实例和参数都替换为占位符。在分析字节码信息时,只把类中声明的方法、构造函数和值域,抽取为1)、2)、3)类基本构件,把声明中所需的调用实例和参数都替换为占位符。在抽取基本构件后,对于相同构件进行合并,提高步骤三中函数合成的效率。
所述步骤一中,数据流切片是指在一个方法体内,声明或使用了相同变量的若干程序语句序列。本发明从一个方法体中最后一条声明或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句:1)初始化一个变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,并继续检查下一条语句。分析所得的数据流切片用步骤一中获得的对应基本构件进行表示,同时对相同数据流切片进行合并,提高步骤二函数合成的效率。
图2所示为步骤一内容,主要功能是分析程序,抽取基本构件,为后续合成转换函数做准备。步骤一的输入和输出为如表1所示,源码是实现目标程序的源码,而二进制代码则指编译后的目标程序和依赖的三方库。静态程序分析组件首先解析源码中每个代码行的信息,把其中的所有变量和常量替换为占位符,同时保留对应的类型信息。从源码中,可以获取所有类型的基本构件。静态程序分析组件接着解析字节码信息,从中获取除源码语句构件之外的其他类型基本构件。在获取基本构件的过程中,静态程序分析组件可以根据基本构件的组成信息,即“占位符位置和类型信息+保留的关键字”来排除相同的基本构件,减少总体数量。
表1步骤一的输入输出
Figure BDA0002904631710000051
数据流分析组件从一个方法体中最后一条创建或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句,具体为:1)初始化一个相关变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,并继续检查下一条语句。数据流分析组件在得到一个数据流切片后,会把其中语句对应的基本构件按照顺序保存下来,同时排除相同的数据流切片,减少总体数量。
所述步骤二中,合成转换函数是指,利用步骤一中的基本构件和数据流切片,找到一个从已知类型到目标类型的转换操作序列:1)初始时,把旧版本目标类型视为已知类型,初始化空的转换函数集合;2)对转换函数集合中的每个转换函数计算与数据流切片的相似度,并排序;3)选择最好的转换函数,如果它已经生成了目标类型的变量,则需要对其测试验证,否则从它的已知类型出发,选出所有可用的基本构件,即基本构件中的每个变量占位符可被已知变量填充;4)把填满后的基本构件放在3)中的转换函数尾部,组成新的转换函数,并放入转换函数集合,回到2)。
所述步骤三中,测试验证是指利用开发者提供的测试用例,检测经过转换获得的目标类型的状态是否符合软件动态更新场景下的对象状态转换的正确性。本发明先在新版本程序上运行测试用例,并在开发者设置的点处获取新版本的对象状态。在测试验证阶段比较该对象状态中目标类型的状态是否与转换后的状态相等。如果相等,则说明针对该目标类型的这次转换是正确的。如果待测转换函数通过所有测试用例的验证,则说明该转换函数是正确的。
图3所示为步骤二和三内容,主要功能是为一个目标类型生成转换函数,同时利用测试用例验证判断正确的转换函数。表2所示为步骤二、三的输入输出。由于两个步骤的复杂性,具体实施内容分为4个部分阐述。
a)选择可用构件
对于一个基本构件,如果其不包含占位符(如静态值域访问构件),或者所有占位符可以被已存在且类型匹配的变量填充,则该基本构件是当前可用的。已存在的变量包括了旧版本目标类型的一个对象实例(O)和当前转换函数中已生成的变量。在初次进入步骤三时,初始化一个空的转换函数,已存在的变量只有O。在选择可用构件时,遍历每个基本构件,找出当前可用的并放入可用构件集合。
表2步骤二、三的输入输出
Figure BDA0002904631710000061
b)生成新的转换函数
对于一个可用构件,程序合成组件首先创建一个当前转换函数的副本,然后把填充好的可用构件放在转换函数副本的尾部,从而创建了一个新的转换函数。每个新的转换函数都被放入到一个集合中。在初次进入步骤三时,由于当前转换函数为空,每次创建的新转换函数本质上只包含了一个被填充的基本构件。
c)选择最优转换函数
步骤二需要对已生成的所有转换函数进行排序,从而选择最优的一个,进入下一轮的生成。转换函数和数据流切片都是由基本构件组成,因此可以计算它们间的相似度。对于一个转换函数,计算它与每个数据流切片的相似度,然后选择最大值当做它的相似度。相似度最大的转换函数,传入下一轮循环。
d)验证转换函数
在选择了最优转换函数后,需要判断是否对其进行验证,以及判断是否通过验证。对于一个转换函数,如果它已生成的某个变量与目标类型一致,则需要对其进行验证。验证的标准是该目标类型变量在转换后是否符合状态一致的正确性。如果不需要对其验证,则进入“选择可用构件”步骤,否则进行验证。
为了验证转换函数,开发者需要准备一个测试集合,其包含的测试用例能够完备地测试目标类的不同对象状态。在测试转换函数前,本发明会在新版本程序上运行测试用例,在开发者指定的时刻利用对象序列化技术,把目标类的对象状态写入文件。
在测试一个转换函数时,本发明先在旧版本程序上运行一个测试用例,然后在开发者指定的时刻调用该转换函数。由于当前转换函数是针对目标类型的,运行后可以获取一个转换后的目标类型状态,然后对比该状态和对应的序列化文件中的目标类型状态。如果两个状态不同,则没有通过验证,跳转到“选择可用构件”步骤。如果两个状态相同,则该转换函数在此测试用例上通过验证。如果该转换函数在所有测试用例上都能通过验证,则发现目标类型的正确转换函数。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。

Claims (9)

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中,所述枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数的过程包括以下步骤:
S21,初始时,将旧版本目标类型视为已知类型,初始化空的转换函数集合;
S22,对转换函数集合中的每个转换函数计算与数据流切片的相似度,并排序;
S23,选择相似度最高的转换函数,如果它已经生成了目标类型的变量,则对其进行测试验证,如果验证通过,输出转换函数,结束流程;否则进入步骤S24;
S24,从它的已知类型出发,选出所有可用的基本构件,可用的基本构件是指基本构件中的每个变量占位符均与某个已知变量类型匹配;
S25,将使用已知变量填满后的基本构件放在步骤S23中选择的转换函数尾部,组成新的转换函数,并放入转换函数集合,转入步骤S22。
7.根据权利要求6所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S22中,所述对转换函数集合中的每个转换函数计算与数据流切片的相似度是指:
对于一个转换函数,计算它与每个数据流切片的相似度,选择最大值作为该转换函数的相似度。
8.根据权利要求1所述的基于程序源码切片重组的软件动态更新热补丁合成方法,其特征在于,步骤S3中,所述在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数的过程包括以下步骤:
S31,在新版本程序上运行测试用例,并在开发者设置的更新点处获取新版本的对象状态;
S32,在测试验证阶段比较该对象状态中目标类型的状态是否与转换后的状态相等,如果相等,判定针对该目标类型的这次转换是正确的,如果待测转换函数通过所有测试用例的验证,则判断待测转换函数是正确的。
9.一种基于权利要求1-8任意一项中所述方法的基于程序源码切片重组的软件动态更新热补丁合成系统,其特征在于,所述合成系统包括静态程序分析组件、数据流分析组件、转换函数生成模块和测试模块;
所述静态程序分析组件用于解析源码中每个代码行的信息,将其中的所有变量和常量替换为占位符,同时保留对应的类型信息,以从源码中获取所有类型的基本构件,再解析字节码信息,从中获取除源码语句构件之外的其他类型基本构件;其中,在获取基本构件的过程中,静态程序分析组件根据基本构件的组成信息,即“占位符位置和类型信息+保留的关键字”来排除相同的基本构件;
所述数据流分析组件用于从一个方法体中最后一条创建或使用了目标类型变量的语句出发,逆向遍历检查方法体内所有语句:1)初始化一个相关变量集合;2)检查一条语句时,如果该语句创建或使用的某个变量存在于变量集合中,则把该语句使用的所有变量放入变量集合,并继续检查下一条语句;其中,数据流分析组件在得到一个数据流切片后,将其中语句对应的基本构件按照顺序保存下来,同时排除相同的数据流切片;
所述转换函数生成模块用于枚举提出得到的基本构件的组合,并根据其数据流关系自动生成对应的转换函数,所述转换函数为从已知类型到目标类型的转换操作序列;
所述测试模块用于在测试用例上运行生成的转换函数,将测试报告报告给开发者,同时输出正确的转换函数。
CN202110073391.XA 2021-01-19 2021-01-19 基于程序源码切片重组的软件动态更新热补丁合成方法 Active CN112764788B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202110073391.XA CN112764788B (zh) 2021-01-19 2021-01-19 基于程序源码切片重组的软件动态更新热补丁合成方法
PCT/CN2021/081558 WO2022156056A1 (zh) 2021-01-19 2021-03-18 基于程序源码切片重组的软件动态更新热补丁合成方法
LU500618A LU500618B1 (en) 2021-01-19 2021-09-03 Hotfix Synthesis Method for Dynamic Software Updating Based on Recombination of Program Source Code Slices

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110073391.XA CN112764788B (zh) 2021-01-19 2021-01-19 基于程序源码切片重组的软件动态更新热补丁合成方法

Publications (2)

Publication Number Publication Date
CN112764788A true CN112764788A (zh) 2021-05-07
CN112764788B CN112764788B (zh) 2023-06-16

Family

ID=75703404

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110073391.XA Active CN112764788B (zh) 2021-01-19 2021-01-19 基于程序源码切片重组的软件动态更新热补丁合成方法

Country Status (3)

Country Link
CN (1) CN112764788B (zh)
LU (1) LU500618B1 (zh)
WO (1) WO2022156056A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114610320B (zh) * 2022-03-21 2024-06-21 浙江大学 一种基于llvm的变量类型信息修复与比较方法及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657855B1 (en) * 2007-05-25 2010-02-02 Xilinx, Inc. Efficient timing graph update for dynamic netlist changes
CN104572445A (zh) * 2014-12-17 2015-04-29 南京大学 用于检测Web服务组合中BPEL流程数据竞争的方法
CN105528231A (zh) * 2016-01-21 2016-04-27 华中科技大学 一种基于中间辅助函数的软件动态升级方法及系统
US20160162277A1 (en) * 2014-12-05 2016-06-09 Johannes Fenzl Remote update of software components
CN106991183A (zh) * 2017-03-27 2017-07-28 福建数林信息科技有限公司 一种商业智能etl的封装方法及系统
CN107358347A (zh) * 2017-07-05 2017-11-17 西安电子科技大学 基于工业大数据的装备集群健康状态评估方法
CN111221559A (zh) * 2019-11-05 2020-06-02 北京达佳互联信息技术有限公司 应用更新方法、装置、存储介质、终端及服务器
CN111506493A (zh) * 2019-12-31 2020-08-07 中国石油大学(华东) 一种基于程序切片的缺陷自动修复的修复位置确定方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7251812B1 (en) * 2001-10-31 2007-07-31 Microsoft Corporation Dynamic software update
CN100492290C (zh) * 2007-11-22 2009-05-27 上海交通大学 软件动态演化中构件运行时状态的获取和转换方法
CN111045670B (zh) * 2019-12-13 2021-07-13 中国科学院信息工程研究所 一种二进制代码与源代码间复用关系的识别方法与装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657855B1 (en) * 2007-05-25 2010-02-02 Xilinx, Inc. Efficient timing graph update for dynamic netlist changes
US20160162277A1 (en) * 2014-12-05 2016-06-09 Johannes Fenzl Remote update of software components
CN104572445A (zh) * 2014-12-17 2015-04-29 南京大学 用于检测Web服务组合中BPEL流程数据竞争的方法
CN105528231A (zh) * 2016-01-21 2016-04-27 华中科技大学 一种基于中间辅助函数的软件动态升级方法及系统
CN106991183A (zh) * 2017-03-27 2017-07-28 福建数林信息科技有限公司 一种商业智能etl的封装方法及系统
CN107358347A (zh) * 2017-07-05 2017-11-17 西安电子科技大学 基于工业大数据的装备集群健康状态评估方法
CN111221559A (zh) * 2019-11-05 2020-06-02 北京达佳互联信息技术有限公司 应用更新方法、装置、存储介质、终端及服务器
CN111506493A (zh) * 2019-12-31 2020-08-07 中国石油大学(华东) 一种基于程序切片的缺陷自动修复的修复位置确定方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
谢国珍: "一种基于断言的软件动态更新技术", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 08, pages 138 - 96 *
郑晓梅等: "面向动态加载的Android恶意行为动静态检测方法", 《计算机应用与软件》, vol. 36, no. 12, pages 285 - 291 *

Also Published As

Publication number Publication date
LU500618B1 (en) 2022-03-03
WO2022156056A1 (zh) 2022-07-28
CN112764788B (zh) 2023-06-16

Similar Documents

Publication Publication Date Title
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
US7707553B2 (en) Computer method and system for automatically creating tests for checking software
US6901579B1 (en) Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code
CN110609693A (zh) 基于数据标准化的代码更新方法、装置及终端设备
US7743368B2 (en) Method and apparatus for providing class hierarchy information for function devirtualization
CN107678748B (zh) 一种源代码文件编译方法及装置
US20070061641A1 (en) Apparatus and method for generating test driver
US6675377B1 (en) Program conversion apparatus
Tassi Deriving proved equality tests in Coq-elpi: Stronger induction principles for containers in Coq
CN101980546B (zh) 智能网平台、业务执行方法和分析业务异常的方法
CN111752841A (zh) 单测模拟方法、装置、设备与计算机可读存储介质
CN112764788B (zh) 基于程序源码切片重组的软件动态更新热补丁合成方法
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
CN108897588B (zh) 一种用于模块间通信的路由方法和路由装置
CN111580409B (zh) 面向实时嵌入式系统的故障仿真测试方法
CN116820996A (zh) 基于人工智能的集成测试用例自动生成方法和装置
Fritzson et al. Metamodelica–a symbolic-numeric modelica language and comparison to julia
CN113918473B (zh) 一种基于Swagger文档的RESTful APIs组合测试方法
CN113282495B (zh) 一种基于轨迹监控的Java软件故障定位方法
CN115292178A (zh) 测试数据搜索方法、装置、存储介质以及终端
CN115098355A (zh) 基于历史数据驱动的jvm测试程序生成方法
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
CN113434430A (zh) 一种sql查询语句性能检测方法和装置
CN114489653A (zh) 基于编译器的数据处理方法、装置以及可读存储介质
CN112363700A (zh) 智能合约的协同创建方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant