基于增量SMT问题求解的软件断言验证方法、系统及设备

文档序号:37127708发布日期:2024-02-22 21:42阅读:28来源:国知局
基于增量SMT问题求解的软件断言验证方法、系统及设备

本发明涉及计算机软件验证,尤其涉及一种基于增量smt问题求解的软件断言验证方法、系统及设备。


背景技术:

1、在软件验证过程中,通常需要验证大量的断言。这些断言作为编程中的关键检查点,用于确保软件在各种情况下都能正常、准确地运行。为了验证断言,需要将每一个断言相关的软件执行路径编码成为位向量smt公式,然后使用位向量smt求解器来进行求解。然而,位向量smt问题的求解复杂度非常高,当软件需要验证的断言数量较多时,求解时间的限制将是一个显著的挑战。由于多个断言往往源自同一软件程序,它们的smt公式中通常有大量共享的部分,因此使用smt增量求解技术是提高时间效率的一个有效途径。

2、然而,在位向量smt问题的增量求解问题上,需要多次调用sat求解器来得到每一次查询的解,因此整体求解性能依赖于sat求解的效率。如果sat求解的效率不高,将极大影响位向量smt问题的增量求解效率。


技术实现思路

1、鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于增量smt问题求解的软件断言验证方法、系统及设备。

2、本发明的一个方面,提供了一种基于增量smt问题求解的软件断言验证方法,所述方法包括:

3、获取待验证的软件源代码,按照代码执行路径将软件源代码中待验证的各个代码断言转化为相应的位向量smt公式,得到位向量smt公式集合;

4、从位向量smt公式集合中选取一个基础位向量smt公式,根据位向量smt公式集合各个位向量smt公式所包括表达式之间的相似关系,将位向量smt公式集合中其他位向量smt公式相对于基础位向量smt公式扩展出的增量表达式部分划分为多层上下文;

5、对当前待求解的目标位向量smt公式进行公式化简,并将化简后的目标位向量smt公式转化为目标cnf合取范式;

6、采用预设的简化后的sat求解算法对目标cnf合取范式进行预求解,并在预求解过程中记录目标cnf合取范式中属于目标上下文的子句中所包括变量的变量标号,目标上下文为目标位向量smt公式中相较于上一次求解的位向量smt公式的增量部分的上下文;

7、若预求解失败,则根据记录的目标上下文的子句中所包括变量的变量标号将包含相应变量标号的各个子句作为冗余子句进行删除;

8、采用预设的完整的sat求解算法对目标cnf合取范式进行求解。

9、可选地,所述采用预设的简化后的sat求解算法对目标cnf合取范式进行预求解,包括:

10、为目标位向量smt公式包括的每一层上下文分别设置一个作用域变量li,在为第i层上下文设置作用域变量li时,以第i层上下文所对应的作用域变量的标号为基准对目标cnf合取范式中属于第i层上下文的各个子句所涉及的新建变量的变量标号进行递增设置,对于属于第i层上下文的每一个子句c,将其转化为li∪c,并将目标位向量smt公式包括的各层上下文所对应的作用域变量作为求解算法的假设;

11、采用预设的简化后的sat求解算法对转化后的cnf子句和假设进行预求解。

12、可选地,所述在预求解过程中记录目标cnf合取范式中属于目标上下文的子句中所包括变量的变量标号,包括:

13、识别目标位向量smt公式包括的各个目标上下文;

14、在为目标上下文设置作用域变量时,记录目标上下文对应作用域变量的标号以及目标cnf合取范式中属于目标上下文的各个子句所涉及变量的变量标号最大值;

15、将每一目标上下文对应作用域变量的标号和相应的变量标号最大值作为一对数据组合添加到预设的冗余变量数组。

16、可选地,所述根据记录的目标上下文的子句中所包括变量的变量标号将包含相应变量标号的各个子句作为冗余子句进行删除,包括:

17、对于任意一个子句,若子句中包括变量标号属于所述冗余变量数组中任一数据组合对应数据范围之间的变量,则将该子句作为冗余子句进行删除。

18、可选地,每一作用域变量对应的上下文由预设的push语句和pop语句进行限定。

19、可选地,所述为目标位向量smt公式包括的每一层上下文分别设置一个作用域变量li包括:

20、设置作用域变量数组scope_lit={l1,l2,…,lk}进行用于对目标位向量smt公式中每一层上下文对应的作用域变量进行记录,k为目标位向量smt公式中的包括的上下文的层数,当输入push语句时,向该数组添加一个新的作用域变量,当执行pop语句时,将与所述pop语句间隔最近的push语句对应的作用域变量从scope_lit数组中删除。

21、可选地,所述按照代码执行路径将软件源代码中待验证的各个代码断言转化为相应的位向量smt公式包括:

22、将软件源代码转化成静态单变量赋值ssa形式的代码,按照代码执行路径将待验证的各个代码断言分别转化为相应的位向量smt公式。

23、可选地,所述对当前待求解的目标位向量smt公式进行公式化简包括:

24、识别所述位向量smt公式中存在的位向量运算,根据识别出的各类位向量运算满足的运算规则对所述位向量smt公式进行化简。

25、第二方面,本发明还提供了一种基于增量smt问题求解的软件断言验证系统,所述系统包括:

26、第一转换模块,用于获取待验证的软件源代码,按照代码执行路径将软件源代码中待验证的各个代码断言转化为相应的位向量smt公式,得到位向量smt公式集合;

27、配置模块,用于从位向量smt公式集合中选取一个基础位向量smt公式,根据位向量smt公式集合各个位向量smt公式所包括表达式之间的相似关系,将位向量smt公式集合中其他位向量smt公式相对于基础位向量smt公式扩展出的增量表达式部分划分为多层上下文;

28、第二转换模块,用于对当前待求解的目标位向量smt公式进行公式化简,并将化简后的目标位向量smt公式转化为目标cnf合取范式;

29、sat预求解模块,用于采用预设的简化后的sat求解算法对目标cnf合取范式进行预求解,并在预求解过程中记录目标cnf合取范式中属于目标上下文的子句中所包括变量的变量标号,目标上下文为目标位向量smt公式中相较于上一次求解的位向量smt公式的增量部分的上下文;

30、处理模块,用于在预求解失败时,根据记录的目标上下文的子句中所包括变量的变量标号将包含相应变量标号的各个子句作为冗余子句进行删除;

31、sat求解模块,用于采用预设的完整的sat求解算法对目标cnf合取范式进行求解。

32、第三方面,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上基于增量smt问题求解的软件断言验证方法的步骤。

33、第四方面,本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上基于增量smt问题求解的软件断言验证方法的步骤。

34、本发明实施例提供的基于增量smt问题求解的软件断言验证方法、系统及设备,使用的位向量smt增量求解技术,能够有效利用各个断言所对应的位向量smt公式之间存在大量共享表达式的特性,可以有效地使用多次断言验证所积累的推导信息,提高软件断言验证效率,此外,本发明通过sat预求解技术和冗余子句删除技术,能够有效避免不必要的复杂求解过程,快速求解大量简单的可满足性实例,并避免信息积累过程中产生的冗余信息,进一步提高软件断言验证的效率。

35、上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1