本公开涉及计算机技术领域,提供了一种程序的终止性判断方法、系统、设备及介质,所述方法包括:获取程序代码后,进行语法解析,基于语法节点构建抽象语法树;在抽象语法树中,基于表达式或语句的依赖关系,在语法节点间构建单向边;对于语法为循环含义的语法节点A,在语法节点A与其循环体中的子语法节点间建立回边;进而得到有向抽象语法树图;将有向的抽象语法树编码为特征图,输入图注意力网络,输出第一向量;将特征图的邻接矩阵输入卷积神经网络,输出第二向量;对两个向量加权求和并归一化,得出非终止概率估计结果。该方法能够有效识别程序中的循环结构,提升对终止性的判断准确度。
背景技术
在计算机科学中,终止性分析技术是用于确定程序在任何输入下都能够在有限步骤内完成执行的技术。这项技术对于确保程序的可靠性和安全性至关重要,因为它可以预防程序进入无限循环,从而避免系统资源的无限消耗和潜在的系统崩溃。
人工检测终止性错误的代价却十分高昂。虽然传统的终止性验证方法尝试提供求解器可解释的严格保证,但它们都面临着形式化符号方法所特有的限制。近年来,随着深度学习理论的日益完善,神经网络已被用于程序终止性分析领域。这些方法的目标不是提供可供求解器解释的严格保证,而是尝试使用神经网络来提供对程序是否终止的估计,以帮助程序员调试漏洞。
尽管目前的神经网络方法在终止性分析的估计上取得了很大进展,然而,面对复杂循环,类似方法的图结构描述能力是有限的,这导致模型在一些情况下预测精度较低。原因是无向图表示及其编码方法不能有效反映循环程序的结构特征和语法节点顺序。
实现思路