CN114238078A - 一种基于高阶函数的程序间依赖关系抽取方法 - Google Patents
一种基于高阶函数的程序间依赖关系抽取方法 Download PDFInfo
- Publication number
- CN114238078A CN114238078A CN202111392045.4A CN202111392045A CN114238078A CN 114238078 A CN114238078 A CN 114238078A CN 202111392045 A CN202111392045 A CN 202111392045A CN 114238078 A CN114238078 A CN 114238078A
- Authority
- CN
- China
- Prior art keywords
- function
- variable
- dependency relationship
- statement
- parameter
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于高阶函数的程序间依赖关系抽取方法,首先对程序进行预处理,构建程序的过程调用图,对过程调用图中的节点进行遍历,确定子过程的分析顺序;获取各个被调用子过程内的语句和变量间的依赖关系,用高阶函数的形式保存摘要信息;根据生成的高阶函数式函数摘要,在过程调用点处对函数摘要的函数参数进行相应值或者函数代入,获取过程间由于过程调用和参数传递产生的依赖关系。本发明通过高阶函数特性获取过程内的依赖关系,生成高阶函数形式表示的函数摘要,可方便过程间调用时在调用点处按需完成函数摘要中高阶函数参数的代入,快速获取形参与实参之间的依赖关系,有效提升了程序间依赖关系的抽取效率。
Description
技术领域
本发明涉及函数式编程和程序分析技术领域,具体而言涉及一种基于高阶函数的程序间依赖关系抽取方法。
背景技术
随着软件规模的不断增大,软件中程序语句之间的依赖关系变得更加复杂,且这些依赖关系可能是间接的、动态多变的。目前主流的程序依赖关系抽取方法大多是基于依赖图的图可达性算法,这类方法虽然能够将依赖关系在图上直观地表现出来,但是随着软件规模的扩大,依赖图的构建复杂度也呈几何级增长。
传统的过程间依赖关系分析主要关注的问题是如何快速获取函数调用过程中形参和实参之间的依赖关系,所采取的方法大多数是基于函数摘要的方法,但生成的函数摘要信息是具体值,不具有良好的可扩展性和灵活性,经常需要进行二次分析,才能完成依赖关系的抽取。
发明内容
本发明针对现有技术中的不足,基于函数式编程中的高阶函数特性提供一种具有良好扩展性和灵活性的程序间依赖关系抽取方法,避免进行二次分析,提高依赖关系抽取效率,能够解决传统方法函数摘要扩展性差的问题。
为实现上述目的,本发明采用以下技术方案:
本发明实施例提出了一种基于高阶函数的程序间依赖关系抽取方法,所述抽取方法包括以下步骤:
S1,对程序进行预处理,构建程序的过程调用图,对过程调用图中的节点进行遍历,确定子过程的分析顺序;
S2,获取各个被调用子过程内的语句和变量间的依赖关系,用高阶函数的形式保存各个被调用子过程的高阶函数摘要信息;
S3,根据步骤S2生成的各个被调用子过程的高阶函数形式的函数摘要,在过程调用点处对函数摘要的函数参数进行相应值或者函数代入,获取过程间由于过程调用和参数传递产生的依赖关系。
进一步地,在步骤S1中,按照逆拓扑排序的顺序遍历过程调用图。
进一步地,在步骤S2中,获取各个被调用子过程内的语句和变量间的依赖关系的过程包括以下子步骤:
S21,按序选取其中一个待分析过程,记为P,初始化待分析过程P的依赖关系,将语句依赖集初始化为空,根据变量的类型对变量依赖集进行初始化处理;
S22,根据CFG图获取过程P中其中一条语句i的控制依赖关系CDi,语句i的控制依赖关系包括CFG图上与节点i有边直接或间接连接的节点j的控制依赖与数据依赖的并集;CDi=S(i),S(i)表示与语句i有控制依赖关系的语句集合;
S23,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a);
S24,重复步骤S22和S23,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,并将完整的过程内语句间和变量间依赖关系以高阶函数的形式存储,生成过程P的高阶函数形式的函数摘要。
进一步地,步骤S21中,根据变量的类型对变量依赖集进行初始化处理的过程包括以下步骤:
针对全局变量或形式参数,分别将其变量依赖集初始化为函数参数变量glom或funn,其中参数glom对应第m个定义的全局变量,funn对应过程fun的第n个形参,并在调用点处对函数参数glom或funn代入相应的摘要信息;
针对形式参数或全局变量以外的变量,将变量依赖集初始化为空。
进一步地,在步骤S23中,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a)的过程包括以下步骤:
S231,判断语句i是否为赋值或内存修改语句,如果是,更新该语句i中所定义变量a的变量依赖集为该语句i的语句依赖集,获取语句i的数据依赖关系DDi,(a),转入步骤S232;否则,直接进入步骤S232;
S232,判断语句i是否为过程调用语句,如果是,将DDi,(a)以高阶函数形式表示为λx.R(x),x为形参或全局变量对应的初始化函数参数,在过程调用点处对函数参数进行相应值或者函数代入,结束当前流程;否则,直接结束当前流程。
进一步地,针对含有多个引用变量a,b,c...p的语句i,按照各变量的赋值或内存修改表达式更新变量a,b,c...p的数据依赖关系,用高阶函数方式来表示存在多变量时的数据依赖信息:
DDi,(a||b||c,...||p)=λxλyλz...λu.R(x)∪R(y)∪R(z)∪...∪R(u)
式中,i,(a||b||c,...||p)表示语句i中变量a到变量p中的其中一个变量;x,y,z,…u为形式参数或全局变量对应的初始化函数参数;R(x),R(y),...R(u)中的x,y,...u表示函数参数对应的函数摘要。
进一步地,步骤S24中,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,除了用高阶函数表示的依赖项之外,其他没有形参或全局变量函数参数的依赖项通过迭代不会再更新。
进一步地,步骤S3中,获取过程间由于过程调用和参数传递产生的依赖关系的过程包括以下步骤:
S31,获取被调用过程的控制依赖关系,生成过程间控制依赖关系的集合;
S32,将形参按照调用类型分类,分别按照各自的类型获取参数传递和全局变量引起的数据依赖关系,在调用点处根据形参和实参的对应关系,将生成的高阶函数式函数摘要中的函数参数进行相应代入;
S33,利用步骤S31和步骤S32,迭代地更新程序中每个语句和变量的依赖关系集,使之达到定值,生成完整的过程间语句和变量的依赖关系。
进一步地,步骤S32中,将形参按照调用类型分类的过程包括以下步骤:
如果获取的依赖信息中不仅包含形参函数参数本身,还包括其他参数,则说明该形参是按结果或按值结果调用类型,否则为按值调用类型。
进一步地,针对按值调用的形参类型,从高阶函数形式的函数摘要信息中获取在调用点处的依赖关系;针对按结果调用或按值-结果调用的形参类型,通过高阶函数形式的函数摘要信息获取带有函数参数的形参的依赖关系,使用实参的依赖关系来对形参依赖关系信息中的函数参数进行值或函数代入,获取形参的完整依赖关系。
本发明的有益效果是:
1、本发明通过高阶函数特性获取过程内的依赖关系,生成高阶函数形式表示的函数摘要,可方便过程间调用时在调用点处按需完成函数摘要中高阶函数参数的代入,快速获取形参与实参之间的依赖关系,有效提升了程序间依赖关系的抽取效率。
2、本发明的高阶函数式函数摘要不会像普通的函数摘要一样随着过程调用的层数增加而愈加复杂,反而随着分析的深入,确定的参数越来越多,函数摘要中的函数参数会更加清晰,在过程调用点处使用相应的值或函数对高阶函数式函数摘要中的高阶函数参数进行代入操作,能够根据缺少的参数及其依赖关系寻找相应的过程摘要。
3、本发明利用高阶函数特性可以实现通过部分的参数到达对某函数的调用目的,从而得到一个部分应用函数,这种性质有利于提高程序执行的效率。
4、本发明在参数未全部确定的情况下,函数摘要依然能以函数的形式进行传递,以不同的顺序对程序进行分析并不会影响/中断/暂停函数摘要的生成。
附图说明
图1为本发明实施例的基于高阶函数的程序间依赖关系抽取方法的框架流程图。
图2为本发明实施例的程序间依赖关系抽取方法的具体细节流程图。
具体实施方式
现在结合附图对本发明作进一步详细的说明。
需要注意的是,发明中所引用的如“上”、“下”、“左”、“右”、“前”、“后”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
图1为本发明实施例的基于高阶函数的程序间依赖关系抽取方法的流程图。本实施例可适用于基于高阶函数的程序间依赖关系抽取方法,该抽取方法包括以下步骤:
S1,对程序进行预处理,构建程序的过程调用图,对过程调用图中的节点进行遍历,确定子过程的分析顺序。
S2,获取各个被调用子过程内的语句和变量间的依赖关系,用高阶函数的形式保存各个被调用子过程的高阶函数摘要信息。
S3,根据步骤S2生成的各个被调用子过程的高阶函数形式的函数摘要,在过程调用点处对函数摘要的函数参数进行相应值或者函数代入,获取过程间由于过程调用和参数传递产生的依赖关系。
高阶函数也是函数式编程中的一个重要特征,在函数式编程中,函数与其他数据类型的地位是平等的,既可以作为参数传递给其他函数,也可以作为其他函数的返回值,此外,高阶函数还有部分应用的特性,在有多个参数的函数中,可以通过这一特性简化函数,便于后续分析。
一、程序预处理
构建程序的过程调用图,按照逆拓扑排序的顺序遍历过程调用图,确定子过程的分析顺序。
本实施例中选取的程序代码如表1所示。
表1示例代码
本实施例中,子过程的分析顺序为fac->main。
二、获取各个被调用子过程内的语句和变量间的依赖关系
参见图2,步骤S2中,获取各个被调用子过程内的语句和变量间的依赖关系的过程包括以下子步骤:
S21,按序选取其中一个待分析过程,记为P,初始化待分析过程P的依赖关系,将语句依赖集初始化为空,根据变量的类型对变量依赖集进行初始化处理。
S22,根据CFG图获取过程P中其中一条语句i的控制依赖关系CDi,语句i的控制依赖关系包括CFG图上与节点i有边直接或间接连接的节点j的控制依赖与数据依赖的并集;CDi=S(i),S(i)表示与语句i有控制依赖关系的语句集合。
S23,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a)。
S24,重复步骤S22和S23,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,并将完整的过程内语句间和变量间依赖关系以高阶函数的形式存储,生成过程P的高阶函数形式的函数摘要。
优选的,步骤S21中,根据变量的类型对变量依赖集进行初始化处理的过程包括以下步骤:
针对全局变量或形式参数,分别将其变量依赖集初始化为函数参数变量glom或funn,其中参数glom对应第m个定义的全局变量,funn对应过程fun的第n个形参,并在调用点处对函数参数glom或funn代入相应的摘要信息。
针对形式参数或全局变量以外的变量,将变量依赖集初始化为空。
本实施例在步骤S23中,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a)的过程包括以下步骤:
S231,判断语句i是否为赋值或内存修改语句,如果是,更新该语句i中所定义变量a的变量依赖集为该语句i的语句依赖集,获取语句i的数据依赖关系DDi,(a),转入步骤S232;否则,直接进入步骤S232。
S232,判断语句i是否为过程调用语句,如果是,将DDi,(a)以高阶函数形式表示为λx.R(x),x为形参或全局变量对应的初始化函数参数,在过程调用点处对函数参数进行相应值或者函数代入,结束当前流程;否则,直接结束当前流程。
优选的,针对含有多个引用变量a,b,c...p的语句i,按照各变量的赋值或内存修改表达式更新变量a,b,c...p的数据依赖关系,用高阶函数方式来表示存在多变量时的数据依赖信息:
DDi,(a||b||c,...||p)=λxλyλz...λu.R(x)∪R(y)∪R(z)∪...∪R(u)
式中,i,(a||b||c,...||p)表示语句i中变量a到变量p中的其中一个变量;x,y,z,…u为形式参数或全局变量对应的初始化函数参数;R(x),R(y),...R(u)中的x,y,...u表示函数参数对应的函数摘要。
本实施例步骤S24中,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,除了用高阶函数表示的依赖项之外,其他没有形参或全局变量函数参数的依赖项通过迭代不会再更新。
例如,本实施例中语句依赖集将初始化为空,变量依赖集将根据变量的类型分初初始化,针对全局变量或形式参数,分别将其变量依赖集初始化为函数参数变量glom或funn,其中参数glom对应第m个定义的全局变量,funn对应过程fun的第n个形参,以便后续生成高阶函数式的函数摘要,并在调用点处对函数参数glom或funn代入相应的摘要信息(可以是值或函数),针对形式参数或全局变量以外的变量,将变量依赖集初始化为空。
对过程fac获取依赖关系,针对形参x,可以判断出x是fac过程的第1个参数,则将形参的变量依赖集初始化为函数参数变量fac1。
根据CFG图获取语句i的控制依赖关系,即CDi。语句i的控制依赖关系包括CFG图上与节点i有边直接或间接连接的节点j的控制依赖与数据依赖的并集。
语句依赖集表示形式为CDi=S(i),其中,S(i)表示与语句i有控制依赖关系的语句的集合。
本实施例中,语句6的控制依赖关系可以表示为CD6={3}。
根据步骤S23获取语句i中变量a的数据依赖关系即DDi,(a)。这里将DDi,(a)以高阶函数形式表示为λx.R(x),其中x一般为形参或全局变量对应的初始化函数参数类似步骤S21中funn或glom,在后续调用点处可以将对应的函数摘要可以是值或函数代入至函数参数中,类似于:DDi,(a)=λy.R(sum(y)),其中,sum(y)表示形参对应的实参y的函数摘要信息可以是一个函数,过程fac对应的高阶函数式函数摘要中的函数参数为fac1,即DD6,(x)=λfac1.R(fac1)。
针对赋值语句或内存修改相关语句i,更新该语句i中所定义变量a的变量依赖集为该语句i的语句依赖集;针对赋值语句或内存修改相关语句以外的语句,跳过该步骤。
针对含有多个引用变量a,b,c...p的语句i,按照各变量的赋值或内存修改表达式更新变量a,b,c...p的数据依赖关系,用高阶函数方式来表示存在多变量时的数据依赖信息,例如:DDi,(a||b||c,...||p)=λxλyλz...λu.R(x)∪R(y)∪R(z)∪...∪R(u),其中“i,(a||b||c,...||p)”表示语句i中变量a到变量p中的其中一个变量,x,y,z,…u一般为形参或全局变量对应的初始化函数参数,类似于步骤S22中的funn或glom,R(x),R(y),...R(u)中的x,y,...u表示函数参数对应的函数摘要,可以是一个函数。
根据步骤S22和步骤S23迭代地更新过程P中每个语句和变量的依赖关系,使之达到定值,将完整的过程内语句和变量依赖关系以高阶函数的形式存储,生成高阶函数形式的函数摘要。其中,达到定值的条件指除了用高阶函数表示的依赖项之外,其他没有形参或全局变量函数参数的依赖项通过迭代不会再更新。
经过迭代,变量x的依赖关系达到定值,即DD6,(x)=λfac1.{3}∪{6}∪fac1,将其保存为fac过程的函数摘要,方便在调用fac过程时进行相应代入。
三、获取过程间由于过程调用和参数传递产生的依赖关系
在步骤S3中,获取过程间由于过程调用和参数传递产生的依赖关系的过程包括以下步骤:
S31,获取被调用过程的控制依赖关系,生成过程间控制依赖关系的集合。
S32,将形参按照调用类型分类,分别按照各自的类型获取参数传递和全局变量引起的数据依赖关系,在调用点处根据形参和实参的对应关系,将生成的高阶函数式函数摘要中的函数参数进行相应代入。
S33,利用步骤S31和步骤S32,迭代地更新程序中每个语句和变量的依赖关系集,使之达到定值,生成完整的过程间语句和变量的依赖关系。
本实施例在步骤S32中,将形参按照调用类型分类的过程包括以下步骤:
如果获取的依赖信息中不仅包含形参函数参数本身,还包括其他参数,则说明该形参是按结果或按值结果调用类型,否则为按值调用类型。
优选的,针对按值调用的形参类型,从高阶函数形式的函数摘要信息中获取在调用点处的依赖关系;针对按结果调用或按值-结果调用的形参类型,通过高阶函数形式的函数摘要信息获取带有函数参数的形参的依赖关系,使用实参的依赖关系来对形参依赖关系信息中的函数参数进行值或函数代入,获取形参的完整依赖关系。
例如,本实施例中,由于对形参x获取的依赖关系中只包括形参函数参数,不包括其他参数,所以该形参是按值调用类型。
再将全局变量视为按值结果调用,将返回值视为按结果调用;针对按值调用的形参类型,可直接从步骤S24中所述的高阶函数形式的函数摘要信息中获取在调用点处的依赖关系;针对按结果调用或按值-结果调用的形参类型,通过高阶函数形式的函数摘要信息可以直接获取到形参的依赖关系,带有函数参数,然后使用实参的依赖关系来对形参依赖关系信息中的函数参数进行值或函数代入,获取形参的完整依赖关系。
按照高阶函数形式的函数摘要信息,在调用点第16行实参变量a的数据依赖关系为:DD16,(a)=λy.{11,13,14,15,16}∪y,其中实参a对应的形参x的高阶函数参数为fac1,因此将DD16,(a)中的变量y用对应的函数参数的摘要DD6,(x)代入,即DD16,(a)=λfac1.{11,13,14,15,16}∪DD6,(x),其中DD6,(x)=λfac1.{3}∪{6}∪fac1,再根据高阶函数参数对应的关系继续代入其他过程的函数摘要信息是一个函数,本例中仍可以继续迭代,但函数参数fac1对应的函数摘要仍是DD6,(x)。
根据步骤S31和步骤S32迭代地更新程序中每个语句和变量的依赖关系,使之达到定值,获取到完整的过程间语句和变量的依赖关系。对main函数进行过程间依赖关系分析的结果为:变量a:{3,6,11,13,14,15,16}变量b:{3,4,6,11,12,13,14,15,16}变量c:{14}。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (10)
1.一种基于高阶函数的程序间依赖关系抽取方法,其特征在于,所述抽取方法包括以下步骤:
S1,对程序进行预处理,构建程序的过程调用图,对过程调用图中的节点进行遍历,确定子过程的分析顺序;
S2,获取各个被调用子过程内的语句和变量间的依赖关系,用高阶函数的形式保存各个被调用子过程的高阶函数摘要信息;
S3,根据步骤S2生成的各个被调用子过程的高阶函数形式的函数摘要,在过程调用点处对函数摘要的函数参数进行相应值或者函数代入,获取过程间由于过程调用和参数传递产生的依赖关系。
2.根据权利要求1所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,在步骤S1中,按照逆拓扑排序的顺序遍历过程调用图。
3.根据权利要求1所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S2中,获取各个被调用子过程内的语句和变量间的依赖关系的过程包括以下子步骤:
S21,按序选取其中一个待分析过程,记为P,初始化待分析过程P的依赖关系,将语句依赖集初始化为空,根据变量的类型对变量依赖集进行初始化处理;
S22,根据CFG图获取过程P中其中一条语句i的控制依赖关系CDi,语句i的控制依赖关系包括CFG图上与节点i有边直接或间接连接的节点j的控制依赖与数据依赖的并集;CDi=S(i),S(i)表示与语句i有控制依赖关系的语句集合;
S23,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a);
S24,重复步骤S22和S23,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,并将完整的过程内语句间和变量间依赖关系以高阶函数的形式存储,生成过程P的高阶函数形式的函数摘要;
S25,重复步骤S21至S24,直至生成所有待分析过程的高阶函数形式的函数摘要。
4.根据权利要求3所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S21中,根据变量的类型对变量依赖集进行初始化处理的过程包括以下步骤:
针对全局变量或形式参数,分别将其变量依赖集初始化为函数参数变量glom或funn,其中参数glom对应第m个定义的全局变量,funn对应过程fun的第n个形参,并在调用点处对函数参数glom或funn代入相应的摘要信息;
针对形式参数或全局变量以外的变量,将变量依赖集初始化为空。
5.根据权利要求3所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S23中,针对步骤S22中语句i中的某个变量a,获取其数据依赖关系DDi,(a)的过程包括以下步骤:
S231,判断语句i是否为赋值或内存修改语句,如果是,更新该语句i中所定义变量a的变量依赖集为该语句i的语句依赖集,获取语句i的数据依赖关系DDi,(a),转入步骤S232;否则,直接进入步骤S232;
S232,判断语句i是否为过程调用语句,如果是,将DDi,(a)以高阶函数形式表示为λx.R(x),x为形参或全局变量对应的初始化函数参数,在过程调用点处对函数参数进行相应值或者函数代入,结束当前流程;否则,直接结束当前流程。
6.根据权利要求5所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,针对含有多个引用变量a,b,c...p的语句i,按照各变量的赋值或内存修改表达式更新变量a,b,c...p的数据依赖关系,用高阶函数方式来表示存在多变量时的数据依赖信息:
DDi,(a||b||c,...||p)=λxλyλz...λu.R(x)∪R(y)∪R(z)∪...∪R(u)
式中,i,(a||b||c,...||p)表示语句i中变量a到变量p中的其中一个变量;x,y,z,…u为形式参数或全局变量对应的初始化函数参数;R(x),R(y),...R(u)中的x,y,...u表示函数参数对应的(高阶)函数摘要。
7.根据权利要求3所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S24中,迭代更新过程P中每个语句和变量的依赖关系,使之达到定值,除了用高阶函数表示的依赖项之外,其他没有形参或全局变量函数参数的依赖项通过迭代不会再更新。
8.根据权利要求1所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S3中,获取过程间由于过程调用和参数传递产生的依赖关系的过程包括以下步骤:
S31,获取被调用过程的控制依赖关系,生成过程间控制依赖关系的集合;
S32,将形参按照调用类型分类,分别按照各自的类型获取参数传递和全局变量引起的数据依赖关系,在调用点处根据形参和实参的对应关系,将生成的高阶函数式函数摘要中的函数参数进行相应代入;
S33,利用步骤S31和步骤S32,迭代地更新程序中每个语句和变量的依赖关系集,使之达到定值,生成完整的过程间语句和变量的依赖关系。
9.根据权利要求8所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,步骤S32中,将形参按照调用类型分类的过程包括以下步骤:
如果获取的依赖信息中不仅包含形参函数参数本身,还包括其他参数,则说明该形参是按结果或按值结果调用类型,否则为按值调用类型。
10.根据权利要求9所述的基于高阶函数的程序间依赖关系抽取方法,其特征在于,针对按值调用的形参类型,从高阶函数形式的函数摘要信息中获取在调用点处的依赖关系;针对按结果调用或按值-结果调用的形参类型,通过高阶函数形式的函数摘要信息获取带有函数参数的形参的依赖关系,使用实参的依赖关系来对形参依赖关系信息中的函数参数进行值或函数代入,获取形参的完整依赖关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111392045.4A CN114238078A (zh) | 2021-11-23 | 2021-11-23 | 一种基于高阶函数的程序间依赖关系抽取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111392045.4A CN114238078A (zh) | 2021-11-23 | 2021-11-23 | 一种基于高阶函数的程序间依赖关系抽取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114238078A true CN114238078A (zh) | 2022-03-25 |
Family
ID=80750489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111392045.4A Pending CN114238078A (zh) | 2021-11-23 | 2021-11-23 | 一种基于高阶函数的程序间依赖关系抽取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114238078A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115794120A (zh) * | 2023-02-06 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的动态程序依赖簇检测方法 |
CN115794592A (zh) * | 2023-02-10 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
-
2021
- 2021-11-23 CN CN202111392045.4A patent/CN114238078A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115794120A (zh) * | 2023-02-06 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的动态程序依赖簇检测方法 |
CN115794592A (zh) * | 2023-02-10 | 2023-03-14 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
CN115794592B (zh) * | 2023-02-10 | 2023-07-04 | 南京邮电大学 | 一种基于高阶函数的数据竞争检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Baresel et al. | Fitness function design to improve evolutionary structural testing | |
US8307326B2 (en) | Method and apparatus for supporting application enhancement | |
US8793674B2 (en) | Computer-guided holistic optimization of MapReduce applications | |
US10394694B2 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
US8108826B2 (en) | Code-coverage guided prioritized test generation | |
CN114238078A (zh) | 一种基于高阶函数的程序间依赖关系抽取方法 | |
Alshraideh et al. | A multiple-population genetic algorithm for branch coverage test data generation | |
US20080028380A1 (en) | Localized, incremental single static assignment update | |
US10956417B2 (en) | Dynamic operation scheduling for distributed data processing | |
US8732676B1 (en) | System and method for generating unit test based on recorded execution paths | |
CN112559367B (zh) | 基于系统调用依赖图的内核模糊测试用例生成方法 | |
CN112288249A (zh) | 业务流程执行方法、装置、计算机设备和介质 | |
US20200183658A1 (en) | Identification and visualization of associations among code generated from a model and sources that affect code generation | |
Wang et al. | On the use of time series and search based software engineering for refactoring recommendation | |
JP6888737B2 (ja) | 学習装置、学習方法、及びプログラム | |
Ma et al. | Stochastic approximations for finite-state Markov chains | |
CN109144498B (zh) | 一种面向对象实例化任务的api自动推荐方法及装置 | |
CN117707612A (zh) | 代码的处理方法、装置及电子设备 | |
JP5244750B2 (ja) | テストケース生成装置およびその方法 | |
JP2002527816A (ja) | プログラム最適化装置および方法 | |
Mattson et al. | A non-deterministic approach to concept selection using s-Pareto frontiers | |
CN114780443A (zh) | 微服务应用自动化测试方法、装置、电子设备及存储介质 | |
CN114791865A (zh) | 一种基于关系图的配置项自洽性检测方法、系统和介质 | |
Santhanam et al. | On utilizing qualitative preferences in web service composition: a cp-net based approach | |
CN112231175B (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 |