【技术实现步骤摘要】
一种针对复杂易变数据结构的程序验证方法
[0001]本专利技术涉及程序验证
,具体涉及一种针对复杂易变数据结构的程序验证方法。
技术介绍
[0002]对不含指针的程序的形式化描述与验证,使用一阶逻辑的霍尔逻辑推理规则就能很好胜任:用一阶逻辑断言描述程序变量的性质作为先决条件,使用推理规则得到语句执行后的断言作为后置条件,后置条件如果蕴涵用户期望的执行语句后的程序变量的性质,则完成了程序的验证。推理规则针对一般化的赋值语句、分支语句、循环语句、函数调用语句等都有相应的操作语义。
[0003]对含指针操作的易变数据结构程序的形式化验证,霍尔逻辑推理规则中针对赋值语句的操作语义不再适用,除非能判断程序中的别名。将地址到值的映射解释为谓词,可以使用一阶逻辑描述含指针的程序状态,但得到的断言的复杂程度随验证程序的复杂度增加而爆炸性增长,验证困难,可读性差。因此分离逻辑被设计出来,通过引入捆绑逻辑的资源语义和将资源考虑在内的连词和蕴涵形式,描述视为资源的计算机内的存储空间的分离性,以解决别名判断问题。分离逻辑是目前描述与验证含指针操作的程序状态的主要方法。用户在程序的关键点(如函数入口、函数出口、循环等)用分离逻辑断言描述程序状态,然后使用分离逻辑的操作语义,对程序逐句做相应逻辑演算,检查用户各处断言的一致性。
[0004]但分离逻辑在使用上也存在一定的问题,分离逻辑本身的学习门槛更高,使用更为困难。受限于分离逻辑地址与值的映射关系和拥有该地址的资源是绑定的,用分离逻辑断言描述含复杂易变数据结构的程序状态时 ...
【技术保护点】
【技术特征摘要】
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...
【专利技术属性】
技术研发人员:杨大润,杜准,王浩,纪金龙,
申请(专利权)人:安徽中科国创高可信软件有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。