一种针对复杂易变数据结构的程序验证方法技术

技术编号:39316465 阅读:10 留言:0更新日期:2023-11-12 15:59
本发明专利技术公开了一种针对复杂易变数据结构的程序验证方法,基于改进的形状图逻辑完成程序验证,改良分离逻辑得到纯符号表示的形状图逻辑,再添加与符号断言等价的图形化表示,可以用图形、符号断言混合的形状图表示形状图逻辑断言,最后添加与符号断言等价的形状描述表示方法。不需要复杂的分离逻辑断言,仅使用一阶逻辑,学习门槛较低,降低了验证的复杂度,提高了验证的效率。高了验证的效率。高了验证的效率。

【技术实现步骤摘要】
一种针对复杂易变数据结构的程序验证方法


[0001]本专利技术涉及程序验证
,具体涉及一种针对复杂易变数据结构的程序验证方法。

技术介绍

[0002]对不含指针的程序的形式化描述与验证,使用一阶逻辑的霍尔逻辑推理规则就能很好胜任:用一阶逻辑断言描述程序变量的性质作为先决条件,使用推理规则得到语句执行后的断言作为后置条件,后置条件如果蕴涵用户期望的执行语句后的程序变量的性质,则完成了程序的验证。推理规则针对一般化的赋值语句、分支语句、循环语句、函数调用语句等都有相应的操作语义。
[0003]对含指针操作的易变数据结构程序的形式化验证,霍尔逻辑推理规则中针对赋值语句的操作语义不再适用,除非能判断程序中的别名。将地址到值的映射解释为谓词,可以使用一阶逻辑描述含指针的程序状态,但得到的断言的复杂程度随验证程序的复杂度增加而爆炸性增长,验证困难,可读性差。因此分离逻辑被设计出来,通过引入捆绑逻辑的资源语义和将资源考虑在内的连词和蕴涵形式,描述视为资源的计算机内的存储空间的分离性,以解决别名判断问题。分离逻辑是目前描述与验证含指针操作的程序状态的主要方法。用户在程序的关键点(如函数入口、函数出口、循环等)用分离逻辑断言描述程序状态,然后使用分离逻辑的操作语义,对程序逐句做相应逻辑演算,检查用户各处断言的一致性。
[0004]但分离逻辑在使用上也存在一定的问题,分离逻辑本身的学习门槛更高,使用更为困难。受限于分离逻辑地址与值的映射关系和拥有该地址的资源是绑定的,用分离逻辑断言描述含复杂易变数据结构的程序状态时是需要独特的技巧的,熟练阅读和书写分离逻辑断言需要经过专门训练才能达到。由于分离逻辑的复杂性,容易造成用户心中所想表达的自然语言的语义与用分离逻辑的断言所描述的语义不一致,容易产生错误、且难以发现。

技术实现思路

[0005]针对上述现有技术存在的问题,本专利技术在分离逻辑和形状图逻辑的基础上,提出了一种新的针对操作复杂易变数据结构程序进行形式化描述和验证的方法:
[0006]基于分离逻辑构建形状图逻辑;
[0007]加入与符号断言等价的图形化表示,加强形状图逻辑的输出表达能力,使得形状图逻辑断言可以用图形和符号断言混合的形状图表示;
[0008]加入与符号断言等价的形状描述表示,加强形状图逻辑的输入表达能力,使得形状图逻辑断言可以基于一阶逻辑表示。
[0009]本专利技术提供的一种针对复杂易变数据结构的程序验证方法,技术方案如下:
[0010]基于改进的形状图逻辑完成程序验证,在所述改进的形状图逻辑下,所述程序验证方法,包括如下步骤:
[0011]获取待验证程序及用户对待验证程序添加的形状描述,所述形状描述依据形状描
述方法得到,所述形状描述方法提供与符号断言等价的基于一阶逻辑符号语言同时描述程序点的程序状态和享有的空间资源的方法;
[0012]依据形状图逻辑断言、形状图逻辑操作语义,将用户添加的形状描述转换为形状图,同时依据程序语句的操作语义获取每个程序点的形状图;所述形状图逻辑断言基于节点图与纯断言作为元素、一阶逻辑运算符作为连接构成形状图,所述节点图与符号断言等价用于描述地址到地址的映射及所有拥有的空间资源,所述纯断言为仅含一阶逻辑符号的形状图逻辑断言用于描述程序状态下堆栈空间上的数据满足的性质;
[0013]依据形状图蕴涵算法,对各个程序点的形状图逻辑断言进行验证,所述改进的形状图蕴涵算法基于形状图生成树断言进行程序验证。
[0014]本专利技术的一种针对复杂易变数据结构的程序验证方法,具备如下有益效果:
[0015]1)形状描述通过对指针相关的语法附加容易理解、贴合直觉的语义,不使用分离合取等分离逻辑的连接符、仅使用一阶逻辑的符号描述程序状态;
[0016]2)不需要复杂的分离逻辑断言,仅使用一阶逻辑,学习门槛较低,对堆栈状态的描述更简洁、符合直觉;
[0017]3)形状图的图形元素与堆栈空间的一一映射,能更直观地表现出堆栈状态,为检查内存泄漏提供了一种简单的方法。
附图说明
[0018]图1是验证操作复杂易变数据结构程序的处理流程示意图;
[0019]图2是形状图、形状描述和程序符号断言之间的相互关系示意图;
[0020]图3是本申请实施例中的一种针对复杂易变数据结构的程序验证方法的流程示意图;
[0021]图4是本申请实施例中形状图组件结构示意图。
具体实施方式
[0022]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0023]术语解释:
[0024]一阶逻辑:一阶逻辑(First

order logic)也叫谓词逻辑,是允许量化陈述的公式,是用于数学、哲学、语言学及计算机科学中的一种形式系统。
[0025]捆绑逻辑:捆绑逻辑(Bunched logic)提供用于推理资源组合的原语,这有助于计算机和其他系统的组合分析。
[0026]霍尔逻辑:霍尔逻辑(Hoare logic)是一种形式系统,具有一组逻辑规则,用于对计算机程序的正确性进行严格推理。
[0027]分离逻辑:分离逻辑(Separation logic)是一种捆绑逻辑,它拓展了霍尔逻辑,是一种有助于对操纵指针数据结构、和并发的程序进行推理的方法。
[0028]易变数据结构:是指由动态存储分配所构成的含指针操作的数据结构,如链表、二叉树等。
[0029]形状图逻辑:是霍尔逻辑的一种扩展,它直接将形状图作为程序中指针断言集的
程序逻辑。
[0030]参见图1,图1给出了验证操作复杂易变数据结构程序的处理流程示意图。用户为待验证的程序源代码添加形状描述,验证器根据形状描述生成形状图,并结合程序代码生成验证条件,依据操作语义进行推理证明,确认各程序点的状态(程序断言)满足(蕴含)用户的期望(性质断言)。
[0031]基于分离逻辑学习和使用门槛高的缺点,本申请实施例基于形状图逻辑的形状描述所构成的形式系统将一阶逻辑断言进行了拓展,以满足对操作复杂易变数据结构程序的形式化描述和验证,本申请实施例中:
[0032]1)提供了一种形状图模型,描述计算机堆栈地址与数据关系;
[0033]2)提供了一种形状图逻辑,给出形状图模型的形式化、符号化和图形化描述方法;
[0034]3)提供了一种形状描述,拓展形状图逻辑,使验证者能使用一阶逻辑的符号描述形状图模型;
[0035]4)提供了一种对复杂形状的递归谓词变换为更易验证形式的方法;
[0036]5)提供了一种仅依靠一阶逻辑定理证明器的形状图逻辑的蕴涵证明算法。
[0037]6)提供了一种形状图逻辑的操作语义。
[0038]基于上述,本申请的技术方案实现:形状描述等价的形状图逻辑断言在形状图逻辑内,满足将形状描述直接视为一阶逻辑的断言,使得形状描述能用熟悉的一阶逻辑描本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种针对复杂易变数据结构的程序验证方法,其特征在于,基于改进的形状图逻辑完成程序验证,在所述改进的形状图逻辑下,所述程序验证方法,包括如下步骤:获取待验证程序及用户对待验证程序添加的形状描述,所述形状描述依据形状描述方法得到,所述形状描述方法提供与符号断言等价的基于一阶逻辑符号语言同时描述程序点的程序状态和享有的空间资源的方法;依据形状图逻辑断言、形状图逻辑操作语义,将用户添加的形状描述转换为形状图,同时依据程序语句的操作语义获取每个程序点的形状图;所述形状图逻辑断言基于节点图与纯断言作为元素、一阶逻辑运算符作为连接构成形状图,所述节点图与符号断言等价用于描述地址到地址的映射及所有拥有的空间资源,所述纯断言为仅含一阶逻辑符号的形状图逻辑断言用于描述程序状态下堆栈空间上的数据满足的性质;依据形状图蕴涵算法,对各个程序点的形状图逻辑断言进行验证,所述改进的形状图蕴涵算法基于形状图生成树断言进行程序验证。2.根据权利要求1所述的一种针对复杂易变数据结构的程序验证方法,其特征在于,所述形状图逻辑包括:形状图逻辑的语法;(1)符号断言公式的语法:(2)寻址运算符:E∷=

|*E;其中,E为非断言表达式,{E}指空间资源为单堆有且仅有地址E,*E指获取堆栈空间上地址E保存的值;(3)程序状态为s和空间资源为r的模型M语义蕴涵形状图逻辑断g记为(3)程序状态为s和空间资源为r的模型M语义蕴涵形状图逻辑断g记为或M1∪M2表示M1⊥
M2表示表示则符号断言语义如下:等价于等价于等价于r={E};等价于和成立;等价于和成立;等价于若成立,则成立;等价于若成立,则成立且成立且3.根据权利要求1所述的一种针对复杂易变数据结构的程序验证方法,其特征在于,所述形状描述方法包括:形状描述的语法和语义;形状描述的语法包括:其中e为任意项,在形状图逻辑上表示恒同变换,在形状描述中表示e中所有出现的寻址运算均不要求空间资源,也不算作三种路径表达式;形状描述的基本语义包括:p为纯断言,则p作为形状描述对应的形状图逻辑断言记为蕴涵p;p为简单形状描述时,p中出现的进行过寻址运算的地址在的空间资源中,的空间资源的地址均在p中进行过寻址运算;简单形状描述中没有明确等式的寻址运算的地址均认为不等;满足形状描述基本语义的详细语义,包括:
为谓词或函数的定义,e[x/v]表示符号系统层面的操作,将项e中的符号x替换为项v;p为不含寻址运算的断言;p为不含寻址运算的断言;p为简单形状描述,{r
i
|1≤i≤k}为p的路径等价类划分的代表元素的集合,表示对{r
i
|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;|1≤i≤k}全部元素的单堆的分离合取;i类型为指针;i类型不为指针;i类型为指针,i

为不与程序变量及已有虚拟变量同名的、新的虚拟变量;i类型不为指针;i类型不为指针;i类型不为指针;i类型不为指针;i类型不为指针;i类型不为指针;i类型不为指针;其中,三种路径表达式分别为具体路径表达式、虚拟路径表达式、抽象路径表达式,所述具体路径表达式为不含约束变元的路径表达式,所述虚拟路径表达式为包含指针类型的约束变元,且不含非指针类型的约束变元的路径表达式,所述抽象路径表达式为不是具体路径表达式也不是虚拟路径表达式的路径表达式;所述简单形状描述为:不含抽象路径表达式,是合取范式,且合取子式均为不含逻辑运算符、不含谓词和函数的原子命题或其否命题,且不含指针等式断言的否命题的一阶逻辑断言;具体形状描述为:不含抽象路径表达式的形状描述,且内部谓词和函数任意展开也不含抽象路径表达式的形状描述;所述路径等价类划分的获取方法,包括:对简单形状描述中所有指针表达式做并查集,对每一个指针等式断言,若等式两边的指针表达式在不同的集合,合并这两个集合,同时递
归地合并分别包含两个集合的元素经过相同映射分别得到的指针表达式的两个集合,最后得到所有指针表达式的指针等价类划分,其中去掉不含具体路径表达式的集合,剩下的集合就是所有路径表达式的路径等价类划分。4.根据权利要求3所述的一种针对复杂易变数据结构的程序验证方法,其特征在于,所述形状描述方法中,还包括:对谓词形参进行分类的方法;将谓词形参分类为值参数和地址参数,所述值参数分类为定值参数和动值参数,地址参数分为回归参数和递进参数,并将满足预设条件的地址参数记为插入参数,将满足预设条件的回归参数记为引用外部参数;其中:值参数和地址参数:值参数指在谓词形状描述等价的简单形状描述的析取中,每一个析取分支的路径等价类不包含的形参;不是值参数的形参为地址参数;定值参数和动值参数:若对某个谓词定义中、外的谓词表达式进行归约,若不管怎么归约,归约结果中,该谓词重复出现时,该谓词表达式中某个形参总是在其对应位置作为实参,称这样的值参数为定值参数;不能确定为定值参数的值参数为动值参数;回归参数和递进参数:对某个谓词A定义中、外的谓词表达式进行归约,若存在归约方式,使得归约结果中,某个谓词B的调用的重复归约中又出现了B的调用,且两次B的调用的同一地址参数的实参为A的某个地址参数x,称这样的地址参数x为回归参数;不是回归参数的地址参数为递进参数;插入参数:在谓词形状描述等价的简单形状描述的析取中,每一个析取分支的路径等价类中不是必需的一组地址参数;引用外部参数:在谓词定义中包含该回归参数寻址运算的原子命题可以利用提取为外部断言,提取后该参数变为定值参数的回归参数;(1)则谓词中的指针类型形参的分类方法包括:构造谓词A的一个调用表达式,每个实参各不相同,记待分析的指针类型形参对应实参为p;对断言中的谓词调用进行归约,归约后利用形状描述的等价变换转换为析取范式并替换指针类型的约束变元为虚拟变量;重复上面的步骤归约断言中每一个谓词调用,除非这个谓词调用满足如下其中一个条件:一、该谓词调用的实参均不为p的指针等价类中的元素,所述指针等价类获取方法为:依据该谓词调用所在析取分支可作为简单形状描述的合取子式的合取构造指针等价类划分;二、该谓词调用的是由该谓词的另一个调用归约得到的子表达式,且该谓词的这两次调用的同一位置的实参均为p的指针等价类中的元素;若p不在最终得到的断言的路径等价类中,则本次分析的指针类型形参为值参数,否则,若断言包含p作为实参之一的谓词调用,则本次分析的指针类型形参为回归参数,否则为递进参数;(2)谓词中的非指针类型形参即值参数的分类方法包括:构造谓词A的一个调用表达式,每个实参各不相同,本次分析的值参数对应实参为v;对断言中的谓词调用进行归约;重复上面的步骤,直到出现谓词A的调用且本次分析的值参数对应的实参不为v,或者
直到断言中的谓词调用均满足其中一个条件:一、该谓词调用的实参均不为v,二、该谓词调用的是由该谓词的另一个调用归约得到的子表达式,且该谓词的这两次调用的同一位置的实参均为v;若断言中所有谓词A的调用的本次分析的值参数对应的实参均为v,则本次分析的值参数为定值参数,否则为动值参数,所述值参数中,若对某个谓词定义中\except外的谓词表达式进行归约,若不管怎么归约,归约结果中,该谓词重复出现时,该谓词表达式中某个形参总是在其对应位置作为实参,称这样的值参数为定值参数;不能确定为定值参数的值参数为动值参数;(3)搜索分析回归参数中是否存在作为插入参数的回归参数,包括:利用形状描述的等价变换转换谓词的定义为析取范式并替换指针类型的约束变元为虚拟变量,对每个析取分支,对可作为简单形状描述的合取子式的合取构造路径等价类划分,然后依次检查每个回归参数能否作为插入参数;若该参数是某个析取分支的某个路径等价类中唯一的非虚拟变量元素,则该参数不能作为插入参数,否则该参数可以作为插入参数,并把该参数从所在路径等价类中删除;对每个回归参数重复上面的步骤,得到存在的一组插入参数;(4)对不是插入参数的回归参数进行检查,分析是否为引用外部参数,包括:利用形状描述的等价变换转换谓词的定义为析取范式,检查谓词定义中包含不是插入参数的回归参数的寻址运算的合取子式能否利用提取为外部断言,若能,则为引用外部参数;所述合取子式能利用提取为外部断言需要满足的要求包括:第一个要求是,这些合取子式不能包含定值参数和这些不是插入参数的回归参数以外的变量,也不能包含虚拟变量,对合取子式中调用表达式中插入参数的实参表达式中的变量忽略检查;第二个要求是,提取后这些不是插入参数的回归参数在新谓词中均变为定值参数;第三个要求是,每个析取分支都拥有的相同的合取子式,否则,要求谓词外部本身就有与这个合取子式相同的空间资源描述断言的分离合取或形状描述内的断言合取。5.根据权利要求3所述的一种针对复杂易变数据结构的程序验证方法,其特征在于,所述形状描述方法中,还包括预设内置谓词形状描述:\stack(point),\heap(point),用于说明point指向的存储空间在堆上还是栈上;\unknown(point,name),用于说明po...

【专利技术属性】
技术研发人员:杨大润杜准王浩纪金龙
申请(专利权)人:安徽中科国创高可信软件有限公司
类型:发明
国别省市:

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

1