基于知识库特征匹配的代码规则检查方法及系统
文献发布时间:2023-06-19 13:26:15
技术领域
本发明涉及代码规则检查方法,具体地,涉及一种基于知识库特征匹配的代码规则检查方法及系统。
背景技术
代码规则检查的功能是检查程序代码编写是否符合标准规范,代码逻辑是否正确,代码结构的合理性等方面。代码规则检查可以提早发现程序中的逻辑漏洞、编写不规范等问题,提高软件可靠性。代码规则检查项一般包括变量命名检查、变量类型检查、程序逻辑、语法检查等。
目前,实现代码规则检查的工具有很多,采用的技术方法大同小异。但它们都存在一个共同的缺点就是无法将已有的缺陷代码案例积累应用到规则检查中去,并且自定义规则的添加繁琐。现有的代码规则检查工具存在如下缺点:
1、分析效率不高,分析时间随代码量增大而急速增加;
2、代码分析和检测规则耦合在一起,当需要增加新的规则时代码分析部分一般需要重新编写;
3、无法将已有代码缺陷案例积累快速应用到规则检查中。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于知识库特征匹配的代码规则检查方法及系统。
根据本发明提供的基于知识库特征匹配的代码规则检查方法,包括如下步骤:
S1:建立以缺陷代码规则为基础的代码知识库,所述代码知识库中的每一条缺陷代码规则具有规则描述和对应的规则特征值;
S2:分析待检测源代码,生成源代码的语法分析树,所述语法分析树用于所述源代码的代码语法结构分析以及对应规则特征值的提取和匹配;
S3:根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配,获取对应的缺陷代码规则,以实现所述源代码的缺陷检测。
优选地,所述步骤S1中,所述代码知识库包括收集到的所有缺陷代码规则以及根据缺陷代码的语法结构提取的规则特征值;
所述代码知识库的实现形式包括数据库文件。
优选地,在步骤S2中,所述特征值为采用源代码的语法分析树中的代码语法结构提取的特征值,每种不同的代码语法结构具有不同的特征值。
优选地,在所述步骤S3中,根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配时采用取最大相似度的匹配方法。
优选地,在步骤S2中采用antlr分析工具分析源代码,生成源代码的语法分析树。
优选地,所述代码知识库还还包括每一条缺陷代码规则的属性,所述属性包括案例内容、案例摘要、案例关键词、案例分类、纠正措施以及建议。
优选地,所述规则特征值为指每一条缺陷代码规则对应的抽象值,使得缺陷代码规则与规则特征值一一对应,用于体现缺陷代码规则和缺陷代码是否匹配。
根据本发明提供的基于知识库特征匹配的代码规则检查系统,,包括如下模块:
知识库建立模块,用于建立以缺陷代码规则为基础的代码知识库,所述代码知识库中的每一条缺陷代码规则具有规则描述和对应的规则特征值;
源代码分析模块,用于分析待检测源代码,生成源代码的语法分析树,所述语法分析树用于所述源代码的代码语法结构分析以及对应规则特征值的提取和匹配;
特征值批评模块,用于根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配,获取对应的缺陷代码规则,以实现所述源代码的缺陷检测。
与现有技术相比,本发明具有如下的有益效果:
本发明采用语法分析树转化为规则特征值匹配代码规则的方法,具有误判率小,准确性高等优点,同时使用知识库的方式进行代码规则的匹配无需在新增或修改规则时对软件进行修改或重构。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例中基于知识库特征匹配的代码规则检查方法的步骤流程图;
图2为本发明实施例中基于知识库特征匹配的代码规则检查系统的模块示意图;
图3为本发明实施例中一语法结构进行特征值生成的示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
图1为本发明实施例中基于知识库特征匹配的代码规则检查方法的步骤流程图,如图1所示,本发明提供的基于知识库特征匹配的代码规则检查方法,包括如下步骤:
S1:建立以缺陷代码规则为基础的代码知识库,所述代码知识库中的每一条缺陷代码规则具有规则描述和对应的规则特征值;
在本发明实施例,所述步骤S1中,所述代码知识库包括收集到的所有缺陷代码规则以及根据缺陷代码的语法结构提取的规则特征值;
所述代码知识库的实现形式包括数据库文件。
所述代码知识库还还包括每一条缺陷代码规则的属性,所述属性包括案例内容、案例摘要、案例关键词、案例分类、纠正措施以及建议。
所述规则特征值为指每一条缺陷代码规则对应的抽象值,使得缺陷代码规则与规则特征值一一对应,用于体现缺陷代码规则和缺陷代码是否匹配。
在所述步骤S1中,缺陷代码规则的更新和添加仅需更新知识库内容即可,软件部分无需重新编写,可以重复使用。
如图1所示,在首先建立代码知识库时,使用典型问题案例集对案例构建分类检索数据库,并针对重点分析的C/C++语言的案例按照模板进行信息提取。典型案例包含的基本信息包括标题、摘要、关键字、概述、机理分析等多个部分,提取并分类索引相关信息,构建典型问题案例文档表示的知识库和知识图谱的基本信息,将典型案例导入到数据库中保存。
S2:分析待检测源代码,生成源代码的语法分析树,所述语法分析树用于所述源代码的代码语法结构分析以及对应规则特征值的提取和匹配;
在本发明实施例中,在步骤S2中,所述特征值为采用源代码的语法分析树中的代码语法结构提取的特征值,每种不同的代码语法结构具有不同的特征值。如图3所示,图3中为一个典型的算术计算等式,假设常数的特征值为1,‘+’的特征值为2,‘=’为3,那么‘a+b=c’的特征值为‘12131’。
在步骤S2中采用antlr分析工具分析源代码,生成源代码的语法分析树。直接从代源码的语法结构进行分析归类,然后再细化进行规则检查。
本发明实施例中对源程序进行静态分析,获取待检测程序的语法树,直接从语法树层次对代码进行归类,提取规则特征值,使用语法树提取的规则特征进行检测可以提高检测效率,规避文本类误判。
S3:根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配,获取对应的缺陷代码规则,以实现所述源代码的缺陷检测。
在本发明实施例中,在所述步骤S3中,根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配时采用取最大相似度的匹配方法。
所述步骤S3中,使用源代码的语法结构的规则特征值来匹配缺陷代码规则,使用语法结构特征值的方法进行规则检查可以提高检查速度,并规避某些命名上引起的误判。
在所述步骤S3中,获取源代码的规则特征值之后,从知识库中检索是否有相匹配的缺陷代码规则。
在本发明实施例中,代码知识库定制完成后,便可以在源代码分析得到的语法树基础上对源代码进行规则检查,得到程序静态检查结果,然后对静态检查结果进一步的过滤和筛选。
图2为本发明实施例中基于知识库特征匹配的代码规则检查系统的模块示意图,如图2所示,本发明提供的基于知识库特征匹配的代码规则检查系统,包括如下模块
知识库建立模块,用于建立以缺陷代码规则为基础的代码知识库,所述代码知识库中的每一条缺陷代码规则具有规则描述和对应的规则特征值;
源代码分析模块,用于分析待检测源代码,生成源代码的语法分析树,所述语法分析树用于所述源代码的代码语法结构分析以及对应规则特征值的提取和匹配;
特征值批评模块,用于根据所述代码知识库中的规则特征值与所述语法分析树提出的规则特征值进行匹配,获取对应的缺陷代码规则,以实现所述源代码的缺陷检测。
本发明实施例中针对已有缺陷代码案例库积累并需要将其转化为代码规则检查中的规则的情形,提供一种基于知识库特征匹配的代码规则检查方法,使用积累的缺陷代码案例构建典型故障代码知识库,并面向特定编程语言进行缺陷问题代码的规则特征值提取。同时对待检测源代码进行信息提取,获取源代码的语法分析树,提取语法结构特征值。对代码的语法结构特征值和知识库中的语法规则特征值进行匹配,找出可能存在的代码规则问题。本发明采用语法分析树转化为特征值匹配代码规则的方法,具有误判率小,准确性高等优点同时使用知识库的方式进行代码规则的匹配无需在新增或修改规则时对软件进行修改或重构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
- 基于知识库特征匹配的代码规则检查方法及系统
- 基于关联规则的FPGA/IP核代码规则检查方法