[发明专利]一种基于插值的模型检测路径缩减方法、计算机有效
申请号: | 201710896756.2 | 申请日: | 2017-09-28 |
公开(公告)号: | CN107844415B | 公开(公告)日: | 2021-02-05 |
发明(设计)人: | 田聪;段钊;段振华 | 申请(专利权)人: | 西安电子科技大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安长和专利代理有限公司 61227 | 代理人: | 黄伟洪;何畏 |
地址: | 710071 陕西省*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 模型 检测 路径 缩减 方法 计算机 | ||
本发明属于计算机应用技术领域,公开了一种基于插值的模型检测路径缩减方法、计算机,读入C程序,对C程序进行语法语义分析,并从抽象语法树中提取出控制流自动机CFG;给CFG添加safety(S)插值和error(E)插值,扩展CFG;在根据CFG生成ARG的过程中,在每一个状态,判断safety插值和error插值是否被当前路径公式蕴含。本发明通过计算S插值和E插值,提高了检测的效率,使得模型检测算法可以更好地应用于大规模的程序;S插值避免不必要的探索,大大地减少ARG的状态数;E插值可以运用于快速地判断程序中是否存在真反例路径,加快了程序的验证,提高了效率;裁剪CFG中无用结点和边,缩小了遍历状态空间。
技术领域
本发明属于计算机应用技术领域,尤其涉及一种基于插值的模型检测路径缩减方法、计算机。
背景技术
随着科技的快速发展和工业需求的不断提高,各种软硬件设计的的复杂度也日益增加,对于可靠性和安全性的要求也不断提高。系统的可靠性,安全性和正确性已经受到了科学界和工业界的广泛关注。形式化验证和测试是解决该问题的主要方法。形式化验证方法始于20世纪60年代末的Floyd、Hoare和Manna等在程序规范和验证方面的研究。形式化验证方法分为两大类:基于定理证明和基于模型。20世纪80年代初提出的模型检测(ModelChecking)属于基于模型的形式化验证方法,思想相对简单和自动化程度高,可以广泛用于硬件电路系统和网络协议系统的验证。模型检测就是先把系统建模为有限状态转移系统,并用时态逻辑描述特验证的规范,在有限状态转移系统上进行穷尽搜索,确定规范是否被满足,若没有满足,给出反例指出为什么没有满足。模型检测面临状态爆炸问题,所谓状态爆炸问题即系统状态数随着状态规模的增加呈指数级增加。所以该领域的研究人员使用各种方法缩减搜索的状态空间,基于反例引导的抽象模型检测是常用的技术。基于反例路径的抽象细化(Counterexample-Guided Abstraction Refinement,CEGAR)技术的过程如下:给定一个模型和性质,首先通过抽象的方法生成一个抽象模型。抽象模型包含的行为可能会多于原始模型,但是,抽象模型的结构和描述都比原始模型简单,所以可以缓解状态空间爆炸问题。然后调用模型检测器,检测公式是否在抽象模型中有效。如果有效,则程序终止;否则,会给出反例路径,然后进行重构(reconstruction)过程,即在原始模型中,如果成功找到一条路径对应于反例路径,则程序结束;否则,反例路径为虚假反例路径,下一个迭代过程开始,重新生成抽象模型,进行验证。重复此过程,直到返回有效或者无效,或者状态空间爆炸造成程序停止。动态符号执行技术是一种符号执行与具体执行相结合的测试手段。符号执行是指在不执行程序的前提下,用符号值表示程序变量的值,然后模拟程序执行来进行相关分析。首先,对待分析代码构建控制流图(Control Flow Graph,CFG),它是编译器内部用有向图表示一个程序过程的抽象数据结构。在CFG上从入口节点开始模拟执行,在遇到分支节点时,使用约束求解器判定哪条分支可行,并根据预先设计的路径调度策略实现对该过程所有路径的遍历分析,最后输出每条可执行路径的分析结果。动态符号执行是以具体数值作为输入,同时启动代码模拟执行器,并从当前路径的分支语句的谓词中搜集所有符号约束。然后根据策略反转约束中的一个分支,构造一条新的可行的路径约束,并用约束求解器求解出一个可行的新的具体输入,接着符号执行引擎对新输入值进行新一轮的分析。通过使用这种输入迭代产生新输入的方法,理论上所有可行的路径都可以被计算并分析一遍。动态符号执行技术的主要瓶颈是路径爆炸问题,即随着程序中分支数的增多,路径呈指数级增加。插值是缓解路径爆炸问题的有效方法,主要是一种搜索剪枝的思想,通过利用不可行路径给行节点标记插值,插值是指一定不会到达被标记为错误行的条件约束。对于分支节点,若该节点的每个分支都被探索过,那么在该节点标记的插值为全插值,否则为半插值。在动态符号执行中,若从开始节点到当前节点的路径约束满足当前节点的全插值,则该路径可被归并,即不被探索,从而有效缓解了路径爆炸问题。对于大规模系统,抽象模型在进行验证时细化次数过多。细化的次数越多,占用的时间就越多。每次细化后,都要重新构建抽象模型,重复遍历的许多路径,降低了验证效率。而且验证模型时,产生的状态数随系统的规模和复杂性增大而增大,会引起状态空间爆炸问题,从而消耗大量的内存和时间,导致验证崩溃,因此,在验证的过程中,找到一种方法,可以减少遍历的路径和细化的次数,快速地对程序进行验证,从而降低状态数,使之可以对大规模的程序进行验证,已经成为一个亟待解决的问题。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710896756.2/2.html,转载请声明来源钻瓜专利网。