[发明专利]一种基于共享不可行路径池的代码并行验证方法和装置在审
申请号: | 202010344638.2 | 申请日: | 2020-04-27 |
公开(公告)号: | CN111444112A | 公开(公告)日: | 2020-07-24 |
发明(设计)人: | 卜磊;闾乐成;谢准一;郭育鲲;赵建华;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/41 |
代理公司: | 江苏银创律师事务所 32242 | 代理人: | 孙计良 |
地址: | 210001 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 共享 可行 路径 代码 并行 验证 方法 装置 | ||
1.一种基于共享不可行路径池的代码并行验证方法,其特征在于,包括如下步骤:
S1:获取用户输入的源代码和验证目标,所述验证目标为用户所输入的源代码中指定位置在所指定的步数内是否可达;
S2:将用户输入的源代码转换成流程控制状态图,并初始化并行任务池T为空,共享不可行路径池I为空以及所述并行任务池T的最大路径数K;
S3:根据流程控制状态图和验证目标构建SAT约束编码G;
S4:将所述共享不可行路径池I中的各个路径片段取反编码后与所述SAT约束编码G输入至SAT求解器进行求解;若SAT求解器有解,则将SAT求解器所求的解对应至程序路径生成相应的潜在程序路径加入至所述并行任务池T,并将该组解取反加入所述SAT约束编码G以避免重复路径;若SAT求解器无解,则说明用户所输入的源代码指定位置在所指定的步数内不可达,结束代码验证;
S5:持续步骤S4直到所述并行任务池T中的潜在程序路径数达到最大路径数K;
S6:根据并行任务池T的最大路径数K构建包含K个线程的线程组,然后将所述并行任务池T中的每个潜在程序路径分别输入至线程组的各个线程中,由对应的线程进行SMT求解;所述SMT求解包括如下步骤:
S61:根据所输入的潜在程序路径和所述流程控制状态图构建SMT约束编码W;
S62:将所构建的SMT约束编码W输入至SMT约束求解器;若SMT约束求解器不可解,则抽取其中不可满足的最小集合X,根据最小集合X生成对应的不可行程序路径片段,将该不可行程序路径片段放入所述共享不可行路径池I中;若SMT约束求解器可解,则说明该潜在程序路径为能够到达用户所输入代码指定位置的可达路径,结束代码验证;
S7:转步骤S4进行迭代。
2.如权利要求1所述的基于共享不可行路径池的代码并行验证方法,其特征在于,所述步骤S6还包括不可行路径剪枝步骤;
所述不可行路径剪枝步骤,用于:检测共享不可行路径池I中的不可行程序路径片段是否得到更新,若存在更新,则判断当前潜在程序路径是否包含新增的不可行程序路径片段;若当前潜在程序路径包含新增的不可行程序路径片段,则结束该潜在程序路径所对应的SMT求解线程。
3.如权利要求2所述的基于共享不可行路径池的代码并行验证方法,其特征在于,检测共享不可行路径池I中的不可行程序路径片段是否得到更新采用版本号的方法,具体如下:共享不可行路径池I设有版本号,每个潜在程序路径也设有版本号;共享不可行路径池I的版本号在步骤S2中初始化为0;步骤S4中,每次将潜在程序路径加入至所述并行任务池T时,该潜在程序路径的版本号为所述共享不可行路径池I的版本号;步骤S62中,将不可行程序路径片段放入共享不可行路径池I时,递增共享不可行路径池I的版本号;检测共享不可行路径池I中的不可行程序路径片段是否得到更新则判断当前潜在程序路径的版本号是否与当前共享不可行路径池I的版本号是否相同即可。
4.如权利要求2所述的基于共享不可行路径池的代码并行验证方法,其特征在于,判断当前潜在程序路径是否包含新增的不可行程序路径片段采用如下方法:获取所述共享不可行路径池I中新增的不可行程序路径片段,将其取反编码后与当前潜在程序路径对应的SAT编码输入SAT求解器,若此时SAT求解器无解,则表示当前潜在程序路径包含新增的不可行程序路径片段。
5.如权利要求2所述的基于共享不可行路径池的代码并行验证方法,其特征在于,所述不可行路径剪枝步骤被配置于独立的线程中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010344638.2/1.html,转载请声明来源钻瓜专利网。