当前位置: 首页 > 专利查询>南京大学专利>正文

一种历史缺陷用例赋能的SMT求解器缺陷检测方法技术

技术编号:37719702 阅读:25 留言:0更新日期:2023-06-02 00:18
本发明专利技术提供了一种历史缺陷用例赋能的SMT求解器缺陷检测方法,主要步骤:1)从求解器的缺陷追踪系统中自动化收集历史缺陷用例;2)提取历史缺陷用例中逻辑公式的骨架结构(即公式中逻辑连接词构成的逻辑结构)以及原子公式;3)对所提取出的原子公式抽象化并进行关联规则学习;4)在关联规则的指导下使用原子公式对已提取出的骨架结构进行实例化,以得到可用于求解器测试的逻辑公式,对多个求解器进行差分测试。本发明专利技术解决了求解器缺陷检测中有效的测试输入难以生成的局限,基于历史缺陷用例构造新的揭错能力强的测试用例的方法为求解器缺陷检测提供了一套全新的解决方案。陷检测提供了一套全新的解决方案。陷检测提供了一套全新的解决方案。

【技术实现步骤摘要】
一种历史缺陷用例赋能的SMT求解器缺陷检测方法


[0001]本专利技术涉及软件缺陷检测领域,特别是SMT求解器的缺陷检测,是一种历史缺陷用例赋能的SMT求解器缺陷检测方法。

技术介绍

[0002]SMT(Satisfiability Modulo Theories,可满足性模理论)求解器是一种是自动化的推理工具,用于根据指定的理论来确定一阶逻辑公式的可满足性。一些较为流行的SMT求解器包括Z3、CVC4、Yices和MathSAT。SMT求解器作为一种重要的基础软件,被广泛的用于各种应用中,如计算机硬件和软件的验证、符号执行、测试用例生成、程序自动修复等等。然而,作为规模庞大的复杂软件系统,SMT求解器自身也存在缺陷。隐藏在求解器中的缺陷不可避免地会影响下游应用软件的效果。因此,有效的发现隐藏在SMT求解器中的缺陷是至关重要的。近期研究者提出了一系列求解器自动化测试技术,通过构造具有多样性的测试公式,并利用蜕变测试或者差分测试技术对SMT求解器的正确性进行验证。现有方法主要通过种子输入的变异等方式生成具有多样性的测试输入。然而,多样性的输入并不意味揭错能力强,因此仅关注测试输入的多样性可能对测试技术的效果影响有限,从而限制了测试工具检测SMT求解器中缺陷的能力。为此,本专利技术提出了一种历史缺陷用例赋能的SMT求解器缺陷检测方法以解决现有局限。本专利技术使用SMT求解器的大量历史缺陷用例中表达式作为基础,提取具有强揭错能力的骨架信息,通过挖掘关联规则来指导构造新的用于测试求解器的表达式,能更加有效的检测SMT求解器中的缺陷。

技术实现思路

[0003]本专利技术在于提供一种历史缺陷用例赋能的SMT求解器缺陷检测方法,解决SMT求解器测试中缺少具备有效揭错能力的测试输入的关键问题。使用不同SMT求解器缺陷追踪系统中记录的历史缺陷,提取关键逻辑结构和原子公式,挖掘原子公式间的关联规则,在规则的指导下实例化不同的逻辑结构,生成有效的测试输入,以暴露求解器中的缺陷,进而提升SMT求解器的可靠性与质量。
[0004]为了有效检测求解器的缺陷,本专利技术公开了一种历史缺陷用例赋能的SMT求解器缺陷检测方法,具体包括下列步骤:
[0005]步骤1,收集求解器的缺陷追踪系统中记录的历史缺陷用例;
[0006]步骤2,提取历史缺陷用例中的核心逻辑结构,并以所有原子公式作为项集,利用关联规则学习算法挖掘原子公式间的关联规则;
[0007]步骤3,在关联规则的指导下,用历史缺陷用例中的原子公式对所提取的逻辑结构进行实例化,合成有效的SMT求解器测试输入;
[0008]步骤4,使用不同的SMT求解器解算所生成的测试输入,记录所得到的输出;
[0009]步骤5,不同SMT求解器对相同测试输入得到的不一致的结果以及求解器产生的崩溃或内存错误均视为潜在的缺陷。
[0010]步骤1中,在收集求解器的缺陷用例时,主要考虑收集Z3和cvc5等常用的开源SMT求解器,它们经过了研究者和用户广泛地测试和使用。例如,从Z3的缺陷追踪系统中可以收集了近3000个缺陷用例。成熟的求解器中往往包含更加丰富的缺陷用例,这有助于本方法的实施。
[0011]步骤2中,对于一阶逻辑公式,本方法将公式中的逻辑联结词以及量词所构成的序列视为其关键结构。根据SMT求解器标准输入SMT

LIB v2.6中规定,逻辑公式中的逻辑联结词包括:and,or,impiles和not,量词有forall和exists。在提取缺陷用例的核心逻辑结构后,将它们保存以用于后面的测试输入生成。除此之外还要从缺陷用例中提取原子公式,并对每个缺陷用例中原子公式构成的集合使用Apriori算法进行关联规则学习,所获取的关联规则以及提取到的原子公式也将保存,并用于后续的测试用例生成中。
[0012]步骤3中,进行测试输入的生成时,会先随机选择一个在步骤2中所提取的核心逻辑结构,接下来选择原子公式填充进被选结构中。在这里,如果已被填充的原子公式符合某一关联规则,那么将按照该规则选择相应的原子公式,否则将随机地选择一个原子公式进行填充。重复上述这一过程直至完成对该逻辑结构的实例化,再将一个或者多个已填充完整的结构整合为一个测试输入。
[0013]步骤4和步骤5中,比较不同SMT求解器的求解结果,检查它们是否存在差异,从而发现求解器中的缺陷。这里,该方法能够检测的求解器中的缺陷主要包括以下三类:1)健全性缺陷:求解器对一个公式的可满足性产生了错误的判断;2)无效模型缺陷:求解器给出了正确的可满足性,但是提供了一个错误的模型,即无法使该公式满足的解;3)崩溃:SMT求解器发生assertion violation或其他的错误导致求解器不正常地终止。若发现任何一种可能的缺陷,则保存触发该缺陷的输入(包含测试用例及对应命令)以及相应的输出,以便后续审查。
[0014]本专利技术使用求解器缺陷跟踪器中的缺陷用例作为基础,提取缺陷用例中有价值的信息用于生成新的测试输入,其中包括缺陷用例中的核心逻辑结构,原子公式以及其中蕴含的关联规则。再以关联规则指导测试输入的生成,用所提取的原子公式对核心逻辑结构进行填充,完成实例化,用以测试SMT求解器,解决了SMT求解器测试技术中缺乏有效的揭错能力强的测试输入的关键问题。本专利技术可以进行自动化地收集和提取常用求解器缺陷跟踪器中的缺陷用例,执行过程简单高效,能有效检测求解器的缺陷,提升求解器的可靠性和质量。
[0015]有益效果:通过本方法可以有效检测出SMT求解器的缺陷,使用历史缺陷用例生成新的有效测试输入,有效应对了SMT求解器测试中缺少揭错能力强的测试输入这一关键挑战,为求解器的缺陷检测提供了一个全新的解决方案。
附图说明
[0016]下面结合附图和具体实施方式对本专利技术做更进一步的具体说明,本专利技术的上述或其他方面的优点将会变的更加清楚。
[0017]图1是历史缺陷用例赋能的SMT求解器缺陷检测方法流程图。
[0018]图2是利用历史缺陷用例生成新的测试输入的流程图。
[0019]图3是对不同SMT求解器进行差分验证并收集对应结果的流程图。
具体实施方式
[0020]为了使本专利技术的目的、技术方案和优点更加清楚明晰,本章结合附图对专利技术做更进一步的详细描述。
[0021]图1为本专利技术一种历史缺陷用例赋能的SMT求解器缺陷检测方法流程图。包括5个步骤,过程如下:
[0022]步骤1,收集求解器的缺陷跟踪器中的历史缺陷用例;
[0023]步骤2,提取所收集的历史缺陷用例中的关键信息,主要包括核心逻辑结构,并以所有原子公式作为项集,利用关联规则学习算法挖掘其中的关联规则;
[0024]步骤3,在关联规则的指导下,用历史缺陷用例中的原子公式对所提取的逻辑结构进行实例化,合成有效的SMT求解器测试输入;
[0025]步骤4,使用不同的SMT求解器解算所生成的测试输入,记录所得到的输出;
[0026]步骤5,不同SMT求解本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种历史缺陷用例赋能的SMT求解器缺陷检测方法,其特征在于收集并利用求解器中的历史缺陷用例,生成新的具有较强揭错能力的测试输入通过差分验证,以检测SMT求解器中的缺陷。这里差分验证的SMT求解器往往是使用不同实现的求解器,也可以使用同一种求解器对其应用不同的求解选项。也就是说,该方法支持多个求解器的验证,也可以支持单个求解器的自验证。该方法能够自动化地收集常用求解器的缺陷跟踪器中的缺陷用例,并利用它们检测出求解器的缺陷,有助于提高SMT求解器的正确性与可靠性。本方法主要包括下列步骤:1)收集求解器的历史缺陷用例:在收集SMT求解器缺陷跟踪器中的缺陷用例时,主要考虑Z3和cvc5等常用的开源SMT求解器,它们经过了研究者和用户广泛的测试和使用。例如,从Z3的缺陷跟踪器中可以收集了近3000个缺陷用例。为了便于自动化实现,在收集求解器历史缺陷用例时,本方法是针对Markdown围栏代码块语法中所展示的缺陷用例进行处理。2)提取历史缺陷用例中有价值的信息:对于一阶逻辑公式,本方法将公式中的逻辑联结词以及量词所构成的序列视为其关键结构。根据SMT求解器标准输入SMT

LIB v2.6中规定,逻辑公式中的逻辑联结词包括:and,or,impiles和not,量词有forall和exists。在提取缺陷用例的核心逻辑结构后,将它们保存以用于后面的测试输入生成。除此之外还要从缺陷用例中提取原子公式,并对每个缺陷用例中原子公式构成的集合使用Apriori算法进行关联规则学习,所获取的关联规则以及提取到的原子公式也将保存,并用于后续的测试用例生成中。3)利用历史缺陷用例中的信息生成有效的测试输入:进行测试输入的生成时,会先随机选择一个在步骤2中所提取的核心逻辑结构,接下来选择原子公式填充进被选结构中。在这里,如果已被填充的原子公式符合某一关联规则,那么将按照该规则选择相应的原子公式,否则将随机地选择一个原子公式进行填充。重复上述这一过程直至完成...

【专利技术属性】
技术研发人员:孙茂林杨已彪周毓明
申请(专利权)人:南京大学
类型:发明
国别省市:

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

1