一种针对泛型编程的对象敏感指针分析方法及装置制造方法及图纸

技术编号:36517005 阅读:11 留言:0更新日期:2023-02-01 15:49
本申请是关于一种针对泛型编程的对象敏感指针分析方法及装置,具体涉及计算机视觉技术领域。所述方法包括:获取待分析的目标程序代码;在所述目标程序代码中的泛型编程语句中,将类型变量映射至实例化位置,并将所述类型变量与所述实例化位置的映射放入所述泛型编程语句的上下文;基于所述泛型编程语句的上下文,对所述目标程序代码进行上下文敏感指针分析,以获得所述目标程序代码中各个指针之间的指向关系。上述方案将泛型实例化位置与类型变量之间的映射关系放入上下文中进行上下文敏感指针分析从而得到各个指针之间的指向关系,提高了针对泛型编程的上下文敏感指针分析的准确性。的准确性。的准确性。

【技术实现步骤摘要】
一种针对泛型编程的对象敏感指针分析方法及装置


[0001]本申请涉及软件测试
,具体涉及一种针对泛型编程的指针分析方法及装置。

技术介绍

[0002]程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
[0003]指针分析是程序静态分析中的一种,回答了程序中的指针指向哪个内存的问题。一方面,以Java语言为例,Java语言中的指针分析指的是一个指针指向程序中的哪个对象(Object)的问题,通常指针分析是一个可能性分析,分析的结果通常是一个指针可能指向哪些对象。而另一方面,泛型编程被广泛采纳入现代编程方式中,使用泛型可以使用类型变量作为参数来定义类和方法,然后通过赋予它们特定的实际类型来实例化这些类或者方法。
[0004]而现有技术中并未有针对泛型编程的指针分析方法,导致常规的指针分析方式对泛型编程得到的代码的分析效果较差。

技术实现思路

[0005]本申请提供了一种针对泛型编程的对象敏感指针分析方法、装置、计算机设备及存储介质,提高了对泛型编程的上下文敏感指针分析的准确性,该技术方案如下。
[0006]一方面,提供了一种针对泛型编程的对象敏感指针分析方法,所述方法包括:
[0007]获取待分析的目标程序代码;
[0008]根据所述目标程序代码中的泛型编程语句中的类型变量,将所述类型变量映射至实例化位置,并将所述类型变量与所述实例化位置的映射放入所述泛型编程语句的上下文;
[0009]基于所述泛型编程语句的上下文,对所述目标程序代码进行上下文敏感指针分析,以获得所述目标程序代码中各个指针之间的指向关系。
[0010]又一方面,提供了一种针对泛型编程的对象敏感指针分析装置,所述装置包括:
[0011]程序代码获取模块,用于获取待分析的目标程序代码;
[0012]变量映射模块,用于在所述目标程序代码中的泛型编程语句中,将类型变量映射至实例化位置,并将所述类型变量与所述实例化位置的映射放入所述泛型编程语句的上下文;
[0013]指针分析模块,用于基于所述泛型编程语句的上下文,对所述目标程序代码进行上下文敏感指针分析,以获得所述目标程序代码中各个指针之间的指向关系。
[0014]在一种可能的实现方式中,所述变量映射模块,用于在所述目标程序代码中的泛型编程语句中,根据所述泛型编程语句的类型,将所述类型变量映射至实例化位置。
[0015]在一种可能的实现方式中,所述变量映射模块,包括:
[0016]第一映射单元,用于当所述泛型编程语句类型为NEW语句时,根据对象更新函数,对所述目标程序代码中的泛型编程语句中的类型变量进行处理,以将所述类型变量映射至所述实例化位置;
[0017]所述对象更新函数用于根据所述NEW语句中的实例化类型,对所述类型变量进行映射,以确定所述类型变量的实例化位置。
[0018]在一种可能的实现方式中,所述第一映射单元,用于当检测到NEW语句中以类型变量将对象实例化时,查找所述类型变量的映射的初始化点,并将所述初始化点确定为类型变量的实例化位置。
[0019]在一种可能的实现方式中,所述变量映射模块,还包括:
[0020]第二映射单元,用于当所述泛型编程语句类型为CALL语句时,根据对象追加函数,对所述目标程序代码中的泛型编程语句中的类型变量进行处理,以将所述类型变量映射至实例化位置;
[0021]所述对象追加函数用于根据所述CALL语句中的调用类型,对所述类型变量进行映射,以确定所述类型变量的实例化位置。
[0022]在一种可能的实现方式中,所述变量映射模块,用于当所述CALL语句中的调用类型为具体类型的泛型调用时,将所述类型变量与CALL语句中的调用对象的映射关系,确定为所述类型变量与所述实例化位置的映射关系。
[0023]在一种可能的实现方式中,所述变量映射模块,用于当所述CALL语句中的调用类型为类型变量的泛型调用时,将所述类型变量与实际实例化站点的映射关系,确定为所述类型变量与所述实例化位置的映射关系;
[0024]所述实际实例化站点包括所述CALL语句中目标方法的接收对象,以及所述目标方法的方法调用器。
[0025]再一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述的针对泛型编程的对象敏感指针分析方法。
[0026]又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述的针对泛型编程的对象敏感指针分析方法。
[0027]再一方面,提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质中读取所述计算机指令,处理器执行所述计算机指令,使得所述计算机设备执行上述针对泛型编程的对象敏感指针分析方法。
[0028]本申请提供的技术方案可以包括以下有益效果:
[0029]在对泛型编程得到的目标程序代码进行指针分析时,可以先获取到目标程序代码中的泛型编程语句中的类型变量,从而确定出类型变量对应的实例化位置,再将类型变量与实例化位置之间的映射关系放入泛型编程语句所对应的上下文,再进行上下文敏感指针分析,从而得到目标程序代码中各个指针之间的指向关系。上述方案在泛型编程得到的目标程序代码中,先通过对泛型编程语句中的类型变量进行分析,得到泛型实例化位置,且使
用具体类型实例化泛型的位置是关键的上下文元素,因此将泛型实例化位置与类型变量之间的映射关系放入上下文中进行上下文敏感指针分析从而得到各个指针之间的指向关系,提高了针对泛型编程的上下文敏感指针分析的准确性。
附图说明
[0030]为了更清楚地说明本申请具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0031]图1是根据一示例性实施例示出的一种软件分析系统的结构示意图。
[0032]图2示出了一种软件程序代码示意图。
[0033]图3示出了一种泛型编程代码示意图。
[0034]图4是根据一示例性实施例示出的一种针对泛型编程的对象敏感指针分析方法的流程图。
[0035]图5是根据一示例性实施例示出的一种针对泛型编程的对象敏感指针分析方法的流程图。
[0036]图6示出了一种显式类型与缺失类型实例化示意图。
[0037]图7示出了五个类型的标记语句示意图。...

【技术保护点】

【技术特征摘要】
1.一种针对泛型编程的对象敏感指针分析方法,其特征在于,所述方法包括:获取待分析的目标程序代码;在所述目标程序代码中的泛型编程语句中,将类型变量映射至实例化位置,并将所述类型变量与所述实例化位置的映射放入所述泛型编程语句的上下文;基于所述泛型编程语句的上下文,对所述目标程序代码进行上下文敏感指针分析,以获得所述目标程序代码中各个指针之间的指向关系。2.根据权利要求1所述的方法,其特征在于,所述在所述目标程序代码中的泛型编程语句中,将类型变量映射至实例化位置,包括:在所述目标程序代码中的泛型编程语句中,根据所述泛型编程语句的类型,将所述类型变量映射至实例化位置。3.根据权利要求2所述的方法,其特征在于,所述根据所述泛型编程语句的类型,将所述类型变量映射至实例化位置,包括:当所述泛型编程语句类型为NEW语句时,根据对象更新函数,对所述目标程序代码中的泛型编程语句中的类型变量进行处理,以将所述类型变量映射至所述实例化位置;所述对象更新函数用于根据所述NEW语句中的实例化类型,对所述类型变量进行映射,以确定所述类型变量的实例化位置。4.根据权利要求3所述的方法,其特征在于,所述根据对象更新函数,对所述目标程序代码中的泛型编程语句中的类型变量进行处理,以将所述类型变量映射至所述实例化位置,包括:当检测到NEW语句中以类型变量将对象实例化时,查找所述类型变量的映射的初始化点,并将所述初始化点确定为类型变量的实例化位置。5.根据权利要求2所述的方法,其特征在于,所述根据所述泛型编程语句的类型,将所述类型变量映射至实例化位置,包括:当所述泛型编程语句类型为CALL语句时,根据对象追加函数,对所述目标程序代码中的泛型编程语句中的类型变量进行处理,以将所述类型变量映射至实例化位置;所述对象追加函数用于根据所述CALL语句中的调用类型,对所述类型变量进行映射...

【专利技术属性】
技术研发人员:李昊峰高琳李炼
申请(专利权)人:北京中科天齐信息技术有限公司
类型:发明
国别省市:

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

1