CN111552476A - 一种代码静态检查的方法与设备 - Google Patents
一种代码静态检查的方法与设备 Download PDFInfo
- Publication number
- CN111552476A CN111552476A CN202010333073.8A CN202010333073A CN111552476A CN 111552476 A CN111552476 A CN 111552476A CN 202010333073 A CN202010333073 A CN 202010333073A CN 111552476 A CN111552476 A CN 111552476A
- Authority
- CN
- China
- Prior art keywords
- file
- name
- lnt
- source code
- project
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007689 inspection Methods 0.000 title claims abstract description 103
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000003068 static effect Effects 0.000 title claims abstract description 24
- 238000001914 filtration Methods 0.000 claims description 41
- 238000013507 mapping Methods 0.000 claims description 30
- 230000007717 exclusion Effects 0.000 claims description 16
- 230000008030 elimination Effects 0.000 claims description 12
- 238000003379 elimination reaction Methods 0.000 claims description 12
- 238000001514 detection method Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000007547 defect Effects 0.000 description 3
- 238000012216 screening Methods 0.000 description 2
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种代码静态检查的方法与设备,涉及计算机软件编程技术领域,本发明采用自定义检查过滤条件+自动化检查的方式,自动批量生成适用于PC‑Lint的参数,方便的进行单个源代码文件检查,高效过滤检查结果中的无效内容,能够有效缩短检查时间。本发明不仅可进行单个源代码文件检查还可进行增量检查。同时,本发明可调用PC‑Lint进行多线程并发执行,进一步缩短了检查时间,促进编码人员进行代码静态检查的积极性,进而提高软件质量。
Description
技术领域
本发明涉及计算机软件编程技术领域,具体涉及一种代码静态检查的方法与设备。
背景技术
软件质量是提升客户体验的根本所在,而代码静态检查是保证代码质量的前提,通过代码静态检查,提前发现问题、修改问题,为软件质量保证奠定基石。
PC-Lint是Gimpel Software公司推出LINT系列产品之一,运行于PC平台,是对C和C++源程序进行错误检查的软件包。它的基本工作原理是进行源代码分析、值跟踪、类型检查,并进行比一般的C/C++编译器更深入的语义分析工作,从而规避可能的软件缺陷。
PC-Lint虽然功能强大,但是缺点也比较明显:
(1)一个大型软件工程检查一次的执行时间太长;
(2)不能方便的进行单个源代码文件检查;
(3)检查结果中误报和无效内容太多,修改麻烦,且有的问题不能通过修改原有配置文件进行过滤或屏蔽;
(4)后一次检查与上一次检查的结果不能自动进行对比分析,不能进行增量检查;
上述问题严重影响编码人员进行代码静态检查的积极性,进而影响软件质量的提升。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种代码静态检查的方法与设备,能够有效缩短检查时间。
为达到以上目的,本发明采取的技术方案是:一种代码静态检查的方法,包括以下步骤:
在配置文件中增加自定义的检查过滤条件;
获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
根据工程名到源码文件列表的映射生成lnt文件;
通过命令行调用PC-Lint,根据lnt文件执行检测。
在上述技术方案的基础上,在配置文件中增加自定义的检查过滤条件,具体包括以下步骤:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
在上述技术方案的基础上,获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射,具体包括以下步骤:
输入参数包括待测的目录名、源码文件名和/或工程名,还包括对应的具体路径;
根据自定义的检查过滤条件,判断是否需要排除待测的目录名、源码文件名或工程名;
若需要排除,终止检查;若不需要排除,生成工程名到源码文件列表的映射。
在上述技术方案的基础上,根据工程名到源码文件列表的映射生成lnt文件,具体包括以下步骤:
生成通用自定义配置;
解析工程文件中的源文件包含目录,对每个源文件包含目录生成对应的-i参数写入到lnt文件;对***包含目录生成对应的-i参数写入到lnt文件;
解析工程文件中的库包含目录,对每个库包含目录生成对应的+libdir参数写入到lnt文件;
将工程名对应的源文件列表写入到lnt文件最后,lnt文件生成完毕。
在上述技术方案的基础上,通过命令行调用PC-Lint,根据lnt文件执行检测,具体包括以下步骤:
启动多线程,每个线程通过命令行调用PC-Lint,检测一个源文件;
等待全部线程执行完毕,生成PC-Lint的检查结果;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
将最终检查结果以工程为单位保存在独立的文件中。
在上述技术方案的基础上,通过命令行调用PC-Lint,根据lnt文件执行检测,具体还包括以下步骤:
输入参数指明检查类型为增量检查时,指定一个基线检查结果目录;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
从基线检查结果目录读取基线检查结果文件,按工程名、文件名、错误信息进行三级索引,形成基线索引结果;
将最终检查结果根据工程名、文件名、错误信息与基线索引结果进行匹配,过滤掉匹配的信息,将未过滤掉的结果作为最终的增量检查结果;
将最终的增量检查结果以工程为单位保存在独立的文件中。
本发明还提供一种代码静态检查的设备,包括:
配置模块,其用于:在配置文件中增加自定义的检查过滤条件;
映射生成模块,其用于:获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
lnt文件生成模块,其用于:根据工程名到源码文件列表的映射生成lnt文件;
检查模块,其用于:通过命令行调用PC-Lint,根据lnt文件执行检测。
在上述技术方案的基础上,所述配置模块具体用于:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
在上述技术方案的基础上,所述映射生成模块具体用于:
输入参数包括待测的目录名、源码文件名和/或工程名,还包括对应的具体路径;
根据自定义的检查过滤条件,判断是否需要排除待测的目录名、源码文件名或工程名;
若需要排除,终止检查;若不需要排除,生成工程名到源码文件列表的映射。
在上述技术方案的基础上,所述lnt文件生成模块具体用于:
生成通用自定义配置;
解析工程文件中的源文件包含目录,对每个源文件包含目录生成对应的-i参数写入到lnt文件;对***包含目录生成对应的-i参数写入到lnt文件;
解析工程文件中的库包含目录,对每个库包含目录生成对应的+libdir参数写入到lnt文件;
将工程名对应的源文件列表写入到lnt文件最后,lnt文件生成完毕。
与现有技术相比,本发明的优点在于:
本发明采用自定义检查过滤条件+自动化检查的方式,自动批量生成适用于PC-Lint的参数,方便的进行单个源代码文件检查,高效过滤检查结果中的无效内容,能够有效缩短检查时间。本发明不仅可进行单个源代码文件检查还可进行增量检查。同时,本发明可调用PC-Lint进行多线程并发执行,进一步缩短了检查时间,促进编码人员进行代码静态检查的积极性,进而提高软件质量。
附图说明
图1为本发明实施例的代码静态检查的方法的流程示意图;
图2为本发明实施例的检查一个源码文件的流程示意图;
图3为本发明实施例的检查一个工程的流程示意图;
图4为本发明实施例的检查一个目录的流程示意图;
图5为本发明实施例的生成lnt文件的流程示意图;
图6为本发明实施例的自定义生成的lnt文件的示例;
图7为本发明实施例的全量检查的处理流程示意图;
图8为本发明实施例的增量检查的处理流程示意图;
图9为本发明实施例的增量检查应用场景的流程示意图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细说明。
参见图1所示,本发明实施例提供一种代码静态检查的方法,包括以下步骤:
S1、在配置文件中增加自定义的检查过滤条件;
S2、获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
S3、根据工程名到源码文件列表的映射生成lnt文件;
S4、通过命令行调用PC-Lint,根据lnt文件执行检测。
本发明实施例采用自定义检查过滤条件+自动化检查的方式,自动批量生成适用于PC-Lint的参数,方便的进行单个源代码文件检查,高效过滤检查结果中的无效内容,能够有效缩短检查时间。
优选的,自定义的检查过滤条件体现在配置文件中,所有配置文件中,一行的开头如果以“;”开始则表示是注释文本。在配置文件中增加自定义的检查过滤条件,具体包括以下步骤:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
(1)增设源代码排除条件。配置文件exclude_src.txt用来自定义检查需要排除的源代码文件,内容示例:
;;不需要检查的代码,如第三方库,自动生成的代码等
stdsoap2.cpp
stdsoap2.h
每行表示一个不需要检查的代码文件名。
这里面的内容包括:第三方库的代码,工具自动生成的代码,历史遗留代码,其他特殊代码等,这对一个开发项目或开发部门的人来说,都是统一的,简化了在PC-Lint中进行设置的繁琐流程。
(2)增设目录排除条件。配置文件exclude_dir.txt用来自定义检查需要排除的整个目录中的源码或工程文件,内容示例:
;;不需要检查的目录,如第三方库,自动生成的代码目录等
a/b/c/d
一个目录可以包含几个或几十个源码文件、几个或几十个工程文件,目录下还有子目录,对整个目录进行排除,目录及子目录下的所有代码和工程不再进行检查,在PC-Lint中无法设置排除,使用本配置文件可以方便地进行排除,节省检查时间。
(3)增设工程排除条件。配置文件exclude_project.txt用来自定义检查需要排除的工程文件,内容示例:
;;不需要检查的工程,如第三方库,自动生成的代码等
sysinfo_stlp.vcproj
miniunz.vcproj
msmp_potsadapter_stlp.vcproj
msmp_cliadapter_stlp.vcproj
msmp_otnadapter_stlp.vcproj
msmp_product_f1kadapter_stlp.vcproj
msmp_product_otnadapter_stlp.vcproj
msmp_product_potsadapter_stlp.vcproj
unmnbi_pb_proto_stlp.vcproj
一个工程文件可以包含若干个目录的源码文件。在整个项目进行代码静态检查时,通常有很多第三方库以及工具自动生成的代码,它们是比较稳定的,不需要进行检查和修改,但是在PC-Lint中无法设置排除,使用本配置文件可以方便地进行排除,节省检查时间。
(4)增设结果过滤条件。配置文件filter.txt用来自定义检查结果中需要进行过滤的关键字或错误码,内容示例:
;;注意:下述关键字以整行为单位,如果pclint检查结果中包含关键字则认为是误报,过滤掉。关键字严格区分大小写,请直接拷贝过来
boost::serialization::singleton
boost::enable_shared_from_this
_foreach_col
_foreach_cur
_foreach_end
_foreach_continue
'BOOST_FOREACH
is non-trivial
;;下列数字表示需过滤掉的错误ID
26;写注释
611;写注释
PC-Lint的误报内容非常多,特别是针对第三方库(第三方库的代码是不会修改的)、宏的使用等;还有很多问题是不需要修改的。如果将这些结果展现给使用者,很容易造成内容干扰、信息混淆,通过这个配置,将检查结果中的误报以及不需要修改的内容过滤掉,呈现给用户的信息大大减少,能够直击重点问题。
进一步的,对本发明实施例的自动化检查的方法进行说明。要做到自动化检查,必须要使用PC-Lint的命令行版本进行检查,根据自定义配置文件生成相应的检查条件,并生成PC-Lint接受的参数,生成的参数保存在工程名对应的后缀为.lnt的文件中,然后由命令行程序调用执行。
其命令行调用示意包括:
1、"C:\*\lint-nt.exe"
2、-i"C:\*customize\lnt"
3、-i"C:\*\PC-lint\9.0\lnt"
4、-b-u"C:\*\pc-lint\*customize\std.lnt"env-vc9.lnt-vm-t4+linebuf+linebuf+linebuf
5、--uD:\*\*code_project\*code_project.lntD:\*\code_dir\msmpsavedb.cpp
说明:第1行为PC-Lint命令行版本的可执行程序lint-nt.exe,使用绝对路径。
第2行为使用者自定义的lnt文件,包含对所有项目、工程检查的默认配置参数;
第3行为包含PC-Lint自带的lnt目录,使用其中的所有lnt文件作为默认检查配置;
第4行表示使用自定义的std.lnt文件;
第5行表示使用自定义配置文件生成的lnt文件检查后面的源码文件msmpsavedb.cpp。
命令行执行结束后,即可生成msmpsavedb.cpp的检查结果。
此种调用方法可以非常方便的对单个源码文件进行静态检查。
优选的,参见图2所示,检查一个源码文件的流程包括:
101、本场景下,***运行时,输入参数表示检查一个源码文件,会指定源码文件名及具体路径;
102、根据配置文件“exclude_src.txt”先判断此文件是否被排除检查,如果需要排除则终止本流程;
103、如果不需要排除,则根据路径可以找到源码所在的工程,输出工程名到源码文件的映射,供后续其他流程使用。
优选的,参见图3所示,检查一个工程的流程包括:
201、本场景下,***运行时,输入参数表示检查一个工程,会指定工程名及具体路径;
202、根据配置文件“exclude_project.txt”先判断此工程是否被排除检查,如果需要排除则终止本流程;
203、如果不需要排除,则解析工程文件,将工程中包含的源码文件全部取出,并根据配置文件“exclude_src.txt”进行排除;
204、处理完后剩下的源码文件即为待检查的源码文件,如果剩下的为空则终止本流程,如果不为空则输出工程名到源码文件的映射,供后续其他流程使用。
优选的,参见图4所示,检查一个目录的流程包括:
301、本场景下,***运行时,输入参数表示检查一个目录,会指定目录名及具体路径;
302、根据配置文件“exclude_dir.txt”先判断此目录是否被排除检查,如果需要排除则终止本流程;
303、如果不需要排除,则递归获取根目录下的所有工程文件,再根据配置文件“exclude_project.txt”对工程进行排除;再解析工程文件获取工程所包含的所有源码文件,根据配置文件“exclude_src.txt”进行排除;
304、输出工程名到源码文件的映射,供后续其他流程使用。
作为优选的实施方式,参见图5所示,生成自定义lnt文件器的流程包括:
401、上述步骤输出的工程名到源码文件的映射,为本流程的输入数据。根据工程名到源码文件列表的映射生成lnt文件,如果有多个工程,则下述步骤循环执行多次:
402、生成通用自定义配置,如“-si4-sp4-D_CPPRTTI”等;
403、解析工程文件中的源文件包含目录,每源文件个包含目录生成一个-i参数;针对***包含目录也生成相应的-i参数
404、解析工程文件中的库包含目录,每个库包含目录生成一个+libdir参数
405、将工程名对应的源文件列表写入到lnt文件最后面,lnt文件生成完毕,一个完整的lnt文件示例参见图6所示。
作为优选的实施方式,参见图7所示,进行一次全量检查的处理流程包括:
501、进行代码静态检查***初始化;
502、读取上述介绍的各配置文件并执行初始化流程;
503、进行***输入参数处理;
504、根据图2、图3、图4的流程,生成工程名到源码文件列表的映射;
505、循环以工程为单位启动检查线程进行并发处理;
506、调用图5的lnt文件生成器生成lnt文件;
507、进行多线程处理:通过前面所述自动化检查方法,通过命令行调用PC-Lint,每个线程检测一个源文件;
508、等待全部线程执行完毕,即生成PC-Lint的检查结果;分析检查结果,根据配置脚本“filter.txt”,过滤掉“PC-Lint的检查结果”中误报及无用的结果,形成最终检查结果,最终检查结果以工程为单位保存在独立的文件中。
509、***运行结束。
本流程中,通过综合应用自定义配置脚本方便的进行定制化检查;通过自主开发自定义lnt文件生成器,实现定制化检查条件转换为PC-Lint能识别的配置;通过对多个工程实行多线程并发处理,提高了检查效率;通过对单个工程的多个源码文件进一步实行多线程并发检查,进一步提高了检查效率,不仅缩短了一个工程的检查时间,也大大缩短了总体检查时间;通过对检查结果进行自定义过滤,使得最终检查结果更有价值,促进了开发人员进行代码静态检查的积极性,间接促进软件开发质量的提高。
作为优选的实施方式,参见图8所示,进行一次增量检查的处理流程包括:
601、进行增量检查前,需要有一次全量检查结果作为基线检查结果,图7所述流程最终生成的结果即可作为基线检查结果。
602、进行代码静态检查***初始化,读取上述介绍的各配置文件并执行初始化流程;
603、进行***输入参数处理,***输入参数指明检查类型为“增量检查”,并会指定一个基线检查结果目录;
604、根据图2、图3、图4的流程,生成工程名到源码文件列表的映射;
605、循环以工程为单位启动检查线程进行并发处理;
606、调用图5的lnt文件生成器生成lnt文件;
607、进行多线程处理:通过前面所述自动化检查方法,通过命令行调用PC-Lint,每个线程检测一个源文件;
608、等待全部线程执行完毕,即生成PC-Lint的检查结果;
609、分析检查结果:先进行第一轮结果筛选,根据配置脚本“filter.txt”,过滤掉“PC-Lint的检查结果”中误报及无用的结果;
610、从基线检查结果目录读取基线检查结果文件,按工程名、文件名、(错误分类、错误ID、错误信息)进行三级索引,再进行第二轮结果筛选,按工程名、文件名、(错误分类、错误ID、错误信息)在上述三级索引中进行匹配,如果匹配到了则说明是上次已经存在的结果,过滤掉,这样未过滤掉的就是最终的增量检查结果,将增量检查结果以工程为单位保存在独立的文件中。
611、将本次的增量结果更新到基线检查结果文件,形成下一次增量检查的基线。
612、***运行结束。
使用者只处理增量检查结果即可,大大减少了信息量,有助于促进开发人员进行代码静态检查的积极性,间接促进软件开发质量的提高。
作为优选的实施方式,开发项目初始化时,有一个基线源码库存放于版本管理器上。从版本管理器将基线源码下载到本地进行开发,只关注新增或修改代码产生的静态检查问题。
参见图9所示,增量检查应用场景流程包括:
701、首先对项目基线源码库进行全量检查,发布基线检查结果到服务器A;
702、在基线源码库的基础上进行编码开发,同时从服务器A下载基线检查结果到本地;
703、对所开发的代码进行增量检查,执行图7所述的增量检查流程即可;
704、得到增量检查结果,只需修改新增代码引入的新问题,屏蔽了之前遗留问题对现有项目的影响,促进开发人员进行代码静态检查的积极性,间接促进软件开发质量的提高。
本发明实施例还提供一种代码静态检查的设备,包括:
配置模块,其用于:在配置文件中增加自定义的检查过滤条件;
映射生成模块,其用于:获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
lnt文件生成模块,其用于:根据工程名到源码文件列表的映射生成lnt文件;
检查模块,其用于:通过命令行调用PC-Lint,根据lnt文件执行检测。
作为优选的实施方式,所述配置模块具体用于:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
优选的,所述映射生成模块具体用于:
输入参数包括待测的目录名、源码文件名或工程名,还包括对应的具体路径;
根据自定义的检查过滤条件,判断是否需要排除待测的目录名、源码文件名或工程名;
若需要排除,终止检查;若不需要排除,生成工程名到源码文件列表的映射。
优选的,所述lnt文件生成模块具体用于:
生成通用自定义配置;
解析工程文件中的源文件包含目录,对每个源文件包含目录生成对应的-i参数写入到lnt文件;对***包含目录生成对应的-i参数写入到lnt文件;
解析工程文件中的库包含目录,对每个库包含目录生成对应的+libdir参数写入到lnt文件;
将工程名对应的源文件列表写入到lnt文件最后,lnt文件生成完毕。
作为优选的实施方式,所述检查模块具体用于:
启动多线程,每个线程通过命令行调用PC-Lint,检测一个源文件;
等待全部线程执行完毕,生成PC-Lint的检查结果;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
将最终检查结果以工程为单位保存在独立的文件中。
进一步的,所述检查模块具体还用于:
输入参数指明检查类型为增量检查时,指定一个基线检查结果目录;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
从基线检查结果目录读取基线检查结果文件,按工程名、文件名、错误信息进行三级索引,形成基线索引结果;
将最终检查结果根据工程名、文件名、错误信息与基线索引结果进行匹配,过滤掉匹配的信息,将未过滤掉的结果作为最终的增量检查结果;
将最终的增量检查结果以工程为单位保存在独立的文件中。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种代码静态检查的方法,其特征在于,包括以下步骤:
在配置文件中增加自定义的检查过滤条件;
获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
根据工程名到源码文件列表的映射生成lnt文件;
通过命令行调用PC-Lint,根据lnt文件执行检测。
2.如权利要求1所述的方法,其特征在于,在配置文件中增加自定义的检查过滤条件,具体包括以下步骤:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
3.如权利要求2所述的方法,其特征在于,获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射,具体包括以下步骤:
输入参数包括待测的目录名、源码文件名和/或工程名,还包括对应的具体路径;
根据自定义的检查过滤条件,判断是否需要排除待测的目录名、源码文件名或工程名;
若需要排除,终止检查;若不需要排除,生成工程名到源码文件列表的映射。
4.如权利要求3所述的方法,其特征在于,根据工程名到源码文件列表的映射生成lnt文件,具体包括以下步骤:
生成通用自定义配置;
解析工程文件中的源文件包含目录,对每个源文件包含目录生成对应的-i参数写入到lnt文件;对***包含目录生成对应的-i参数写入到lnt文件;
解析工程文件中的库包含目录,对每个库包含目录生成对应的+libdir参数写入到lnt文件;
将工程名对应的源文件列表写入到lnt文件最后,lnt文件生成完毕。
5.如权利要求4所述的方法,其特征在于,通过命令行调用PC-Lint,根据lnt文件执行检测,具体包括以下步骤:
启动多线程,每个线程通过命令行调用PC-Lint,检测一个源文件;
等待全部线程执行完毕,生成PC-Lint的检查结果;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
将最终检查结果以工程为单位保存在独立的文件中。
6.如权利要求5所述的方法,其特征在于,通过命令行调用PC-Lint,根据lnt文件执行检测,具体还包括以下步骤:
输入参数指明检查类型为增量检查时,指定一个基线检查结果目录;
分析生成PC-Lint的检查结果,根据配置文件中的结果过滤条件,过滤掉PC-Lint的检查结果中误报及无用的结果,形成最终检查结果;
从基线检查结果目录读取基线检查结果文件,按工程名、文件名、错误信息进行三级索引,形成基线索引结果;
将最终检查结果根据工程名、文件名、错误信息与基线索引结果进行匹配,过滤掉匹配的信息,将未过滤掉的结果作为最终的增量检查结果;
将最终的增量检查结果以工程为单位保存在独立的文件中。
7.一种代码静态检查的设备,其特征在于,包括:
配置模块,其用于:在配置文件中增加自定义的检查过滤条件;
映射生成模块,其用于:获取输入参数,根据输入参数和配置文件,确定待检测的源码文件,生成工程名到源码文件列表的映射;
lnt文件生成模块,其用于:根据工程名到源码文件列表的映射生成lnt文件;
检查模块,其用于:通过命令行调用PC-Lint,根据lnt文件执行检测。
8.如权利要求7所述的设备,其特征在于,所述配置模块具体用于:
增设源代码排除条件,用于自定义检查需要排除的源代码文件;
增设目录排除条件,用于自定义检查需要排除的整个目录中的源码或工程文件;
增设工程排除条件,用于自定义检查需要排除的工程文件;
增设结果过滤条件,用于自定义检查结果中需要进行过滤的关键字或错误码。
9.如权利要求8所述的设备,其特征在于,所述映射生成模块具体用于:
输入参数包括待测的目录名、源码文件名和/或工程名,还包括对应的具体路径;
根据自定义的检查过滤条件,判断是否需要排除待测的目录名、源码文件名或工程名;
若需要排除,终止检查;若不需要排除,生成工程名到源码文件列表的映射。
10.如权利要求9所述的设备,其特征在于,所述lnt文件生成模块具体用于:
生成通用自定义配置;
解析工程文件中的源文件包含目录,对每个源文件包含目录生成对应的-i参数写入到lnt文件;对***包含目录生成对应的-i参数写入到lnt文件;
解析工程文件中的库包含目录,对每个库包含目录生成对应的+libdir参数写入到lnt文件;
将工程名对应的源文件列表写入到lnt文件最后,lnt文件生成完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010333073.8A CN111552476A (zh) | 2020-04-24 | 2020-04-24 | 一种代码静态检查的方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010333073.8A CN111552476A (zh) | 2020-04-24 | 2020-04-24 | 一种代码静态检查的方法与设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111552476A true CN111552476A (zh) | 2020-08-18 |
Family
ID=72003913
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010333073.8A Pending CN111552476A (zh) | 2020-04-24 | 2020-04-24 | 一种代码静态检查的方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111552476A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112346967A (zh) * | 2020-10-20 | 2021-02-09 | 四川长虹电器股份有限公司 | 基于云平台的pc-lint云服务***、计算机设备及存储介质 |
CN112631894A (zh) * | 2020-12-02 | 2021-04-09 | 北京健康之家科技有限公司 | 代码检测方法、装置、存储介质及计算机设备 |
CN114189512A (zh) * | 2021-12-14 | 2022-03-15 | 南京欧珀软件科技有限公司 | 基线代码的下载方法、装置、终端设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942143A (zh) * | 2014-04-09 | 2014-07-23 | 烽火通信科技股份有限公司 | 一种基于版本库比较的PC-Lint代码检查结果筛选方法 |
CN104156307A (zh) * | 2014-07-03 | 2014-11-19 | 安徽景行信息科技有限公司 | 一种浏览器兼容性检测方法和*** |
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN105404584A (zh) * | 2015-11-25 | 2016-03-16 | 广州博冠信息科技有限公司 | Lpc静态代码检查方法、装置和*** |
US20160085659A1 (en) * | 2014-09-18 | 2016-03-24 | Andreas Simon Schmitt | Base Line for Code Analysis |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
-
2020
- 2020-04-24 CN CN202010333073.8A patent/CN111552476A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN103942143A (zh) * | 2014-04-09 | 2014-07-23 | 烽火通信科技股份有限公司 | 一种基于版本库比较的PC-Lint代码检查结果筛选方法 |
CN104156307A (zh) * | 2014-07-03 | 2014-11-19 | 安徽景行信息科技有限公司 | 一种浏览器兼容性检测方法和*** |
US20160085659A1 (en) * | 2014-09-18 | 2016-03-24 | Andreas Simon Schmitt | Base Line for Code Analysis |
CN105404584A (zh) * | 2015-11-25 | 2016-03-16 | 广州博冠信息科技有限公司 | Lpc静态代码检查方法、装置和*** |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
Non-Patent Citations (5)
Title |
---|
O0风马牛0O: "软件质量之道:PCLint之二", 《HTTPS://BLOG.CSDN.NET/FENG_MA_NIU/ARTICLE/DETAILS/41156835》 * |
刘磊等: "基于缺陷模式的静态分析技术在自主可控平台的应用", 《科学家》 * |
姜文等: "基于持续集成的PC-Lint静态检查", 《计算机技术与发展》 * |
石磊玉: "《日臻完善 软件调试与优化典型应用》", 31 January 2010 * |
黄浩华等: "静动态结合的恶意Android应用自动检测技术", 《信息安全学报》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112346967A (zh) * | 2020-10-20 | 2021-02-09 | 四川长虹电器股份有限公司 | 基于云平台的pc-lint云服务***、计算机设备及存储介质 |
CN112631894A (zh) * | 2020-12-02 | 2021-04-09 | 北京健康之家科技有限公司 | 代码检测方法、装置、存储介质及计算机设备 |
CN114189512A (zh) * | 2021-12-14 | 2022-03-15 | 南京欧珀软件科技有限公司 | 基线代码的下载方法、装置、终端设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8627290B2 (en) | Test case pattern matching | |
CN111552476A (zh) | 一种代码静态检查的方法与设备 | |
US9274923B2 (en) | System and method for stack crawl testing and caching | |
US20110161938A1 (en) | Including defect content in source code and producing quality reports from the same | |
Prähofer et al. | Static code analysis of IEC 61131-3 programs: Comprehensive tool support and experiences from large-scale industrial application | |
US7644394B2 (en) | Object-oriented creation breakpoints | |
US20140096113A1 (en) | Policy evaluation based upon dynmamic observation, static analysis and code change history | |
US7536678B2 (en) | System and method for determining the possibility of adverse effect arising from a code change in a computer program | |
JPH0844590A (ja) | ソフトウエアシステムの選択テスト装置及びその方法 | |
Cingolani et al. | BigDataScript: a scripting language for data pipelines | |
JP2010067188A (ja) | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム | |
WO2021216081A1 (en) | Runtime application monitoring without modifying application program code | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN112965695A (zh) | 前端代码接入检测方法、装置、设备及存储介质 | |
JP2010140408A (ja) | ソースコード変換装置 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测***、存储设备 | |
CN116501378B (zh) | 一种逆向工程还原源代码的实现方法、装置和电子设备 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
US8448154B2 (en) | Method, apparatus and software for processing software for use in a multithreaded processing environment | |
CN114625633A (zh) | 用于接口测试的方法、***和存储介质 | |
US8935663B2 (en) | Identifying deprecated external routines invoked by a software application implementing subtype polymorphism | |
CN112162921A (zh) | 一种工业自动化测试与控制*** | |
Mariani et al. | MASH: tool integration made easy | |
CN113296834B (zh) | 一种基于逆向工程的安卓闭源服务类型信息提取方法 | |
CN112148581A (zh) | 代码规范检查方法、装置、***及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200818 |