CN115269444B - 代码静态检测方法、装置及服务器 - Google Patents
代码静态检测方法、装置及服务器 Download PDFInfo
- Publication number
- CN115269444B CN115269444B CN202211205304.2A CN202211205304A CN115269444B CN 115269444 B CN115269444 B CN 115269444B CN 202211205304 A CN202211205304 A CN 202211205304A CN 115269444 B CN115269444 B CN 115269444B
- Authority
- CN
- China
- Prior art keywords
- code
- scanning
- difference
- detected
- static
- 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.)
- Active
Links
Images
Classifications
-
- 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)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种代码静态检测方法、装置及服务器,涉及计算机应用的技术领域,该方法包括:响应针对于待检测代码的检测操作,获取待检测代码的源代码;基于源代码获取代码提交记录;根据代码提交记录提取待检测代码的差异日志;基于差异日志生成差异文件列表;使用预先设置的静态扫描工具对差异文件列表进行扫描,得到扫描结果;统计扫描结果,生成待检测代码的静态检测结果。本发明提供的代码静态检测方法、装置及服务器,在扫描结果中只包含本次修改的代码的扫描结果,没有历史代码进行干扰,可以使开发者更加专注优化,进而修改本次代码检测中可能出现的问题,有助于提前发现可能存在的问题,提升项目质量。
Description
技术领域
本发明涉及计算机应用的技术领域,尤其是涉及一种代码静态检测方法、装置及服务器。
背景技术
代码静态检查也称为代码静态分析,是指不运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等检查程序的正确性,并找出代码中隐藏的错误和缺陷,比如,参数不匹配、有歧义的嵌套语句、错误的递归、非法计算、可能出现的空指针引用等等。
目前,常用的各种静态代码检测工具插件都是针对的全量的代码进行检测,检查结果也是显示整个项目的代码缺陷,这种方式在实际的软件开发流程中,由于显示内容太多,不利于开发者关注本次提交内容扫描结果,并且,对全量代码扫描的时间过长,开发者会耗费大量时间等扫描结果,影响研发效率。
发明内容
有鉴于此,本发明的目的在于提供一种代码静态检测方法、装置及服务器,以缓解上述技术问题。
第一方面,本发明实施例提供了一种代码静态检测方法,该方法包括:响应针对于待检测代码的检测操作,获取所述待检测代码的源代码,其中,所述待检测代码为目标项目最新版本对应的代码;基于所述源代码获取所述目标项目的代码提交记录;其中,所述代码提交记录用于表征所述目标项目的代码的修改历史;根据所述代码提交记录提取所述待检测代码的差异日志;基于所述差异日志生成差异文件列表;其中,所述差异文件列表包括所述待检测代码的代码变动的行信息;使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果;统计所述扫描结果,生成所述待检测代码的静态检测结果。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,上述获取所述待检测代码的源代码的步骤,包括:获取所述目标项目的代码文件存储地址;从所述代码文件存储地址中读取所述目标项目最新版本对应的源代码。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,上述代码提交记录包括至少一条针对于所述目标项目的代码的修改记录;且每条所述修改记录按照预设的记录格式呈现修改信息,所述修改信息至少包括以下内容:代码的版本标识、代码提交者信息、提交时间、代码的行信息和代码;根据所述代码提交记录提取所述待检测代码的差异日志的步骤,包括:按照所述提交时间,从所述代码提交记录中提取最新的两次修改记录;比较最新的所述两次修改记录的差异,生成包含差异信息的差异日志;其中,所述差异信息包括至少一种所述修改信息的差异。
结合第一方面的第二种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,上述基于所述差异日志生成差异文件列表的步骤,包括:从所述差异日志中提取包含所述代码的行信息的差异信息;将包含所述代码的行信息的差异信息记录到所述差异文件列表。
结合第一方面的第二种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,上述预先设置的静态扫描工具包括以下扫描工具至少之一:Sonar扫描工具、PMD扫描工具和Findbugs扫描工具;上述使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果的步骤,包括:按照预先设置的扫描模式,使用所述静态扫描工具对所述差异文件列表进行扫描,得到每个所述静态扫描工具对应的扫描结果,其中,所述扫描模式包括并行扫描或者依次扫描。
结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,上述统计所述扫描结果,生成所述待检测代码的静态检测结果的步骤,包括:对于每个所述静态扫描工具对应的扫描结果,获取所述扫描结果的详细信息;如果所述详细信息显示所述扫描结果为空;则继续获取下一个所述静态扫描工具对应的扫描结果;如果所述详细信息显示所述扫描结果不为空,则在所述详细信息中提取代码的行信息;判断提取的所述代码的行信息是否是所述差异文件列表中包括的所述待检测代码的代码变动的行信息;如果是,则保持所述扫描结果;如果否,则删除所述扫描结果。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,上述方法还包括:汇总所述静态检测结果;向所述待检测代码的代码提交者反馈汇总的所述静态检测结果。
第二方面,本发明实施例还提供一种代码静态检测装置,该装置包括:第一获取模块,用于响应针对于待检测代码的检测操作,获取所述待检测代码的源代码,其中,所述待检测代码为目标项目最新版本对应的代码;第二获取模块,用于基于所述源代码获取所述目标项目的代码提交记录;其中,所述代码提交记录用于表征所述目标项目的代码的修改历史;提取模块,用于根据所述代码提交记录提取所述待检测代码的差异日志;生成模块,用于基于所述差异日志生成差异文件列表;其中,所述差异文件列表包括所述待检测代码的代码变动的行信息;扫描模块,用于使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果;统计模块,用于统计所述扫描结果,生成所述待检测代码的静态检测结果。
第三方面,本发明实施例还提供一种服务器,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的方法的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面所述的方法的步骤。
本发明实施例带来了以下有益效果:
本发明实施例提供的代码静态检测方法、装置及服务器,能够响应针对于待检测代码的检测操作,获取待检测代码的源代码;基于该源代码获取目标项目的代码提交记录;并根据代码提交记录提取待检测代码的差异日志;基于所述差异日志生成差异文件列表;进而使用预先设置的静态扫描工具对差异文件列表进行扫描,得到扫描结果;统计扫描结果,生成待检测代码的静态检测结果,由于上述差异文件列表包括待检测代码的代码变动的行信息,因此,在对差异文件列表进行扫描时,实际是针对待检测代码的变动代码进行的扫描,即,针对本次待检测代码修改的地方进行静态检测,因此扫描结果中只包含本次修改的代码的扫描结果,没有历史代码进行干扰,可以使开发者更加专注优化,进而修改本次代码检测中可能出现的问题,有助于提前发现可能存在的问题,提升项目质量。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种代码静态检测方法的流程图;
图2为本发明实施例提供的代码静态检测流程图;
图3为本发明实施例提供的一种代码静态检测装置的结构示意图;
图4为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,常用的各种静态代码检测工具插件都是针对的全量的代码进行检测,检查结果也是显示整个项目的代码缺陷,这种方式在实际的软件开发流程中会有如下问题:
(1)因为包含历史代码扫描结果,导致显示内容太多,不利于开发者关注本次提交内容扫描结果。
(2)因为是对全量代码的扫描,使得扫描时间过长,开发者会耗费大量时间等扫描结果,影响研发效率。
(3)由于当前开发者可能并不熟悉历史代码逻辑,根据扫描结果修改历史代码可能会造成其他问题。
基于此,本发明实施例提供的一种代码静态检测方法、装置及服务器,可以有效缓解上述技术问题。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种代码静态检测方法进行详细介绍。
在一种可能的实施方式中,本发明实施例提供了一种代码静态检测方法,该方法应用于服务器,例如,可以是设置在金融科技行业的服务器,用于进行代码静态检测等等,以便于在程序开发过程中,执行本发明实施例提供的代码静态检测方法,并能形成智能系统,在程序开发过程中对代码进行有效的静态检测。
具体地,如图1所示的一种代码静态检测方法的流程图,该方法包括以下步骤:
步骤S102,响应针对于待检测代码的检测操作,获取待检测代码的源代码;
其中,待检测代码为目标项目最新版本对应的代码;
具体实现时,上述针对于待检测代码的检测操作,通常是由代码提交者发起的用于对代码提交者提交的待检测代码进行静态检测的操作,例如,代码提交者可以在客户端提交代码,并通过客户端向服务器发送检测操作,此时,服务器可以响应该操作,进而去获取待检测代码的源代码。
步骤S104,基于源代码获取目标项目的代码提交记录;
其中,代码提交记录用于表征目标项目的代码的修改历史;例如,对于目标项目,开发人员进行了几次修改,每次修改的提交时间,每次修改都修改了什么内容,以及,修改的代码位于整个代码文件的行数,以及修改之后的代码等等,都可以保存在该代码提交记录中,因此,在下述步骤S106中,可以根据代码提交记录提取到待检测代码的差异日志,且,该差异日志记载有本次待检测代码相对于上一次代码有哪些修改内容。
步骤S106,根据代码提交记录提取待检测代码的差异日志;
步骤S108,基于差异日志生成差异文件列表;
其中,差异文件列表包括上述待检测代码的代码变动的行信息;
步骤S110,使用预先设置的静态扫描工具对差异文件列表进行扫描,得到扫描结果;
具体地,上述差异日志通常包括有本次待检测代码变动的所有信息,而本发明实施例提供的代码静态检测方法是对代码本身的变动进行的静态检测,因此,在上述步骤S108中,需要提取包括代码变动的行信息,然后生成差异文件列表,以便于在步骤S110中,对差异文件列表进行扫描。
步骤S112,统计扫描结果,生成待检测代码的静态检测结果。
本发明实施例提供的代码静态检测方法,能够响应针对于待检测代码的检测操作,获取待检测代码的源代码;基于该源代码获取目标项目的代码提交记录;并根据代码提交记录提取待检测代码的差异日志;基于所述差异日志生成差异文件列表;进而使用预先设置的静态扫描工具对差异文件列表进行扫描,得到扫描结果;统计扫描结果,生成待检测代码的静态检测结果,由于上述差异文件列表包括待检测代码的代码变动的行信息,因此,在对差异文件列表进行扫描时,实际是针对待检测代码的变动代码进行的扫描,即,针对本次待检测代码修改的地方进行静态检测,因此扫描结果中只包含本次修改的代码的扫描结果,没有历史代码进行干扰,可以使开发者更加专注优化,进而修改本次代码检测中可能出现的问题,有助于提前发现可能存在的问题,提升项目质量。
在实际使用时,对于一个项目的开发,通常会有专门的存储地址去保存代码,因此,上述步骤S102中,在获取待检测代码的源代码时,可以先获取目标项目的代码文件存储地址;然后从代码文件存储地址中读取目标项目最新版本对应的源代码。
具体实现时,对于代码文件,通常有专门的工具来进行存储和管理,例如git工具等,git作为一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。因此,通常用于存储代码文件,并且,git工具会随着时间的推移跟踪提交记录,让开发人员可以跟踪代码的进度和历史。因此,以git工具为例,在获取待检测代码的源代码时,可以先获取目标项目的git地址,即,代码文件存储地址,并选择对应的分支,然后通过git clone 命令获取到最新版本对应的源代码。
进一步,本发明实施例中的代码提交记录通常包括至少一条针对于目标项目的代码的修改记录;且每条修改记录按照预设的记录格式呈现修改信息,通常,修改信息至少包括以下内容:代码的版本标识、代码提交者信息、提交时间、代码的行信息和代码。
代码开发人员可以查看上述代码提交记录,并获知每一次代码修改对应的修改信息,而对于上述修改信息的记录格式,还可以进一步生成对应的显示格式,例如,对于每个修改记录,在进行显示时,可以按照如下格式进行显示:代码的版本标识| 代码提交作者 |提交时间 | 代码位于文件中的行数 | 实际代码,以便于开发人员进行查看。
进一步,基于上述代码提交记录,上述步骤S106中,在提取待检测代码的差异日志时,可以按照提交时间,从代码提交记录中提取最新的两次修改记录;其中,最新一次的修改记录,即为待检测代码对应的修改记录,通过比较最新的两次修改记录的差异,可以生成包含差异信息的差异日志;其中,差异信息包括至少一种修改信息的差异,此时的差异信息即为本次待检测代码与上一次代码修改是的差异,并且,由于代码提交记录记载的每条修改记录的修改信息有多种,因此,上述差异信息通常也包括多个差异信息,除代码本身的修改之外,通常还会包含其他的差异,如,不同的代码提交者提交的修改信息,且,不同的提交时间等等,都可以作为差异信息记录到差异日志中,而本发明实施例中,由于是对代码进行的静态检测,因此,需要从差异日志中提取到代码本身的差异,或者代码变动的信息,如哪一行的代码进行了修改等等。
因此,上述步骤S108中,生成差异文件列表时,可以从差异日志中提取包含代码的行信息的差异信息;然后将包含代码的行信息的差异信息记录到差异文件列表。
为了便于理解,同样以git工具为例,通过git clone 命令获取到最新版本对应的源代码之后,可以进一步使用git log 命令获取到该目标项目的代码提交记录,并根据log的时间,即上述提交时间,分析出最新的两次修改记录,然后提取最新两次修改记录的代码的版本标识,如,commit ID,再进一步使用git diff命令,提取差异日志,例如,git diffcommit1 commit2命令,得到两次提交的代码的差异日志,其中,commit1和commit2分别表示最新两次修改记录的代码的版本标识,且,其中一个为待检测代码的版本标识。进一步,得到上述差异日志之后,可以分析差异日志,以便于从差异日志中提取包含代码的行信息的差异信息,并将包含代码的行信息的差异信息记录到差异文件列表,以便于执行上述步骤S110的过程,使用预先设置的静态扫描工具对差异文件列表进行扫描。
具体实现时,本发明实施例中,预先设置的静态扫描工具包括以下扫描工具至少之一:Sonar扫描工具、PMD扫描工具和Findbugs扫描工具;在使用静态扫描工具对差异文件列表进行扫描时,可以按照预先设置的扫描模式,使用静态扫描工具对差异文件列表进行扫描,得到每个静态扫描工具对应的扫描结果,其中,扫描模式包括并行扫描或者依次扫描。
以静态扫描工具包括Sonar扫描工具、PMD扫描工具和Findbugs扫描工具三种为例,进行说明,在扫描时,可以同时使用三种扫描工具进行并行扫描,或者,按照预设的扫描顺序,依次使用三种扫描工具进行扫描,并行扫描的扫描模式,可以节省一定的扫描时间,提高检测效率,而依次扫描则有助于开发人员查看每一次扫描的扫描结果,具体的扫描模式可以根据实际使用情况进行设置,本发明实施例对此不进行限制。
进一步,对于每个静态扫描工具对应的扫描结果,均可以获取扫描结果的详细信息;如果详细信息显示扫描结果为空;则继续获取下一个静态扫描工具对应的扫描结果;如果详细信息显示扫描结果不为空,则在详细信息中提取代码的行信息;然后进一步判断提取的代码的行信息是否是差异文件列表中包括的待检测代码的代码变动的行信息;如果是,则说明此静态扫描工具扫描到待检测代码中有缺陷,需要进行修改,因此,可以保持该扫描结果;如果否,则删除扫描结果。
为了便于理解,分别对Sonar扫描工具、PMD扫描工具和Findbugs扫描工具进行说明:
(1)Sonar扫描工具:
Sonar扫描工具为一种静态代码检查工具,如,SonarQube,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。
通过Sonar扫描工具扫描上述差异文件列表,得到扫描结果,调用sonar api接口,获取扫描结果的详细信息,如果扫描结果为空,则跳过,说明此次扫描待检测代码没有发现缺陷,如果扫描不为空,则需要分析扫描结果,具体地,分析扫描结果的相关代码行信息,如果代码行为本次待检测代码提交的变动行,即,上述差异文件列表中包括的待检测代码的代码变动的行信息,则保存该扫描结果,否则过滤该扫描结果。
(2)PMD扫描工具:
PMD扫描工具是一款采用BSD协议发布的Java 程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。
具体地,扫描时,可以通过PMD扫描工具的-filelist参数扫描指定的差异文件列表,得到扫描结果,然后通过output参数将扫描结果的日志保存到指定的文件中,获取扫描结果的详细信息,如果扫描结果为空,则跳过,说明此次扫描待检测代码没有发现缺陷,如果扫描不为空,则需进一步分析扫描结果的日志,具体地,分析扫描结果的相关代码行信息,如果代码行为本次代码提交变动行,即,上述差异文件列表中包括的待检测代码的代码变动的行信息,则保存该扫描结果,否则过滤该扫描结果。
(3)Findbugs扫描工具:
Findbugs扫描工具是基于bug patterns概念,查找字节码文件中潜在的bug,主要检查字节码文件中的bug patterns,如nullpoint空指针检查、没有合理关闭资源、字符串相同判断错等。
具体扫描时,可以通过Findbugs扫描工具的fileset配置扫描指定的差异文件列表,通过outputFile设置指定的扫描结果的保存位置,得到扫描结果后,通过读取结果文件,获取扫描结果的详细信息,如果扫描结果为空,则跳过,说明此次扫描待检测代码没有发现缺陷;如果扫描不为空,则需进一步分析扫描结果的日志,具体分析扫描结果的相关代码行信息,如果代码行为本次代码提交变动行,即,上述差异文件列表中包括的待检测代码的代码变动的行信息,则保存该扫描结果,否则过滤该扫描结果。
进一步,对于上述得到的每个扫描工具的静态检测结果,可以汇总静态检测结果;然后向待检测代码的代码提交者反馈汇总的静态检测结果。例如,将保存的扫描结果确定为本次精确到行级别的增量代码的静态检测结果,汇总到同一个文本文件中,通过邮件发送给代码提交者,代码提交者可以根据扫描结果修改相应代码。
进一步,为了便于理解,在图1的基础上,图2还示出了一种代码静态检测流程图,以git工具保存代码提交记录为例进行说明,如图2所示,包括以下过程:
步骤S202,获取待检测代码的源代码;
具体地,可以根据目标项目的git地址,选择对应的分支,通过git clone 命令,获取到最新的源代码;
步骤S204,使用git log 命令获取代码提交记录,并根据log的时间,分析出最近两次的代码的版本标识commit ID;
即图2中的commit1和commit1,其中,假设commit1为本次待检测代码的版本标识。
步骤S206,使用git diff commit1 commit2,得到两次提交的差异日志,分析差异日志,得到差异文件列表,同时保存差异文件列表。
步骤S208,使用Sonar扫描工具、PMD扫描工具和Findbugs扫描工具按照预先设置的扫描模式对差异文件列表进行扫描,得到每个静态扫描工具对应的扫描结果。
步骤S210,统计扫描结果,生成待检测代码的静态检测结果。
步骤S212,对静态检测结果进行查看;
即图2中的git commit log对应的步骤,对于上述静态检测结果,还可以直接通过git commit log命令来进行查看。
综上,本发明实施例提供的代码静态检测方法,具有以下有益效果:从开发人员的角度来看:扫描时间更快,开发人员提交代码后,因为是只针对本次修改的代码进行扫描,扫描时间大大缩短,提升开发者使用体验。扫描结果简化,只显示本次修改代码扫描结果,无历史代码扫描结果干扰,让开发者更加专注优化,修改本次代码修改中可能出现的问题。从运维人员角度看:减少了扫描机器,扫描资源占用,扫描时间减少,扫描效率更高,可以使用更少的机器资源实现更多项目的扫描,从而减少相关机器资源的维护。从测试人员角度看:通过关注本次项目代码改动的扫描结果,能好的开发有针对性的测试案例、脚本,提前发现可能存在的问题,提升项目质量。
进一步,在上述实施例的基础上,本发明实施例还进一步提供了一种代码静态检测装置,如图3所示的一种代码静态检测装置的结构示意图,该装置包括:
第一获取模块30,用于响应针对于待检测代码的检测操作,获取所述待检测代码的源代码,其中,所述待检测代码为目标项目最新版本对应的代码;
第二获取模块32,用于基于所述源代码获取所述目标项目的代码提交记录;其中,所述代码提交记录用于表征所述目标项目的代码的修改历史;
提取模块34,用于根据所述代码提交记录提取所述待检测代码的差异日志;
生成模块36,用于基于所述差异日志生成差异文件列表;其中,所述差异文件列表包括所述待检测代码的代码变动的行信息;
扫描模块38,用于使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果;
统计模块39,用于统计所述扫描结果,生成所述待检测代码的静态检测结果。
进一步,上述第一获取模块30,还用于:
获取所述目标项目的代码文件存储地址;从所述代码文件存储地址中读取所述目标项目最新版本对应的源代码。
进一步,上述代码提交记录包括至少一条针对于所述目标项目的代码的修改记录;且每条所述修改记录按照预设的记录格式呈现修改信息,所述修改信息至少包括以下内容:代码的版本标识、代码提交者信息、提交时间、代码的行信息和代码;
上述提取模块34还用于:
按照所述提交时间,从所述代码提交记录中提取最新的两次修改记录;比较最新的所述两次修改记录的差异,生成包含差异信息的差异日志;其中,所述差异信息包括至少一种所述修改信息的差异。
进一步,上述生成模块36,还用于:从所述差异日志中提取包含所述代码的行信息的差异信息;将包含所述代码的行信息的差异信息记录到所述差异文件列表。
进一步,上述预先设置的静态扫描工具包括以下扫描工具至少之一:Sonar扫描工具、PMD扫描工具和Findbugs扫描工具;
上述扫描模块38,还用于:按照预先设置的扫描模式,使用所述静态扫描工具对所述差异文件列表进行扫描,得到每个所述静态扫描工具对应的扫描结果,其中,所述扫描模式包括并行扫描或者依次扫描。
进一步,上述统计模块39,还用于:
对于每个所述静态扫描工具对应的扫描结果,获取所述扫描结果的详细信息;如果所述详细信息显示所述扫描结果为空;则继续获取下一个所述静态扫描工具对应的扫描结果;如果所述详细信息显示所述扫描结果不为空,则在所述详细信息中提取代码的行信息;判断提取的所述代码的行信息是否是所述差异文件列表中包括的所述待检测代码的代码变动的行信息;如果是,则保持所述扫描结果;如果否,则删除所述扫描结果。
进一步,上述装置还用于:汇总所述静态检测结果;向所述待检测代码的代码提交者反馈汇总的所述静态检测结果。
本发明实施例提供的代码静态检测装置,与上述实施例提供的代码静态检测方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
进一步,本发明实施例还提供了一种服务器,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法的步骤。
进一步,本发明实施例还提供了一种服务器的结构示意图,如图4所示,为该服务器的结构示意图,其中,该服务器包括处理器41和存储器40,该存储器40存储有能够被该处理器41执行的计算机可执行指令,该处理器41执行该计算机可执行指令以实现上述方法。
在图4示出的实施方式中,该服务器还包括总线42和通信接口43,其中,处理器41、通信接口43和存储器40通过总线42连接。
其中,存储器40可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线42可以是ISA(IndustryStandard Architecture,工业标准体系结构)总线、PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线42可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器41可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器41中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器41可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器41读取存储器中的信息,结合其硬件完成前述方法。
本发明实施例所提供的代码静态检测方法、装置及服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (8)
1.一种代码静态检测方法,其特征在于,所述方法包括:
响应针对于待检测代码的检测操作,获取所述待检测代码的源代码,其中,所述待检测代码为目标项目最新版本对应的代码;
基于所述源代码获取所述目标项目的代码提交记录;其中,所述代码提交记录用于表征所述目标项目的代码的修改历史;
根据所述代码提交记录提取所述待检测代码的差异日志;
基于所述差异日志生成差异文件列表;其中,所述差异文件列表包括所述待检测代码的代码变动的行信息;
使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果;
统计所述扫描结果,生成所述待检测代码的静态检测结果;
其中,所述代码提交记录包括至少一条针对于所述目标项目的代码的修改记录;且每条所述修改记录按照预设的记录格式呈现修改信息,所述修改信息至少包括以下内容:代码的版本标识、代码提交者信息、提交时间、代码的行信息和代码;
根据所述代码提交记录提取所述待检测代码的差异日志的步骤,包括:
按照所述提交时间,从所述代码提交记录中提取最新的两次修改记录;
比较最新的所述两次修改记录的差异,生成包含差异信息的差异日志;其中,所述差异信息包括至少一种所述修改信息的差异;
其中,所述预先设置的静态扫描工具包括以下扫描工具至少之一:Sonar扫描工具、PMD扫描工具和Findbugs扫描工具;
使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果的步骤,包括:
按照预先设置的扫描模式,使用所述静态扫描工具对所述差异文件列表进行扫描,得到每个所述静态扫描工具对应的扫描结果,其中,所述扫描模式包括并行扫描或者依次扫描。
2.根据权利要求1所述的方法,其特征在于,获取所述待检测代码的源代码的步骤,包括:
获取所述目标项目的代码文件存储地址;
从所述代码文件存储地址中读取所述目标项目最新版本对应的源代码。
3.根据权利要求1所述的方法,其特征在于,基于所述差异日志生成差异文件列表的步骤,包括:
从所述差异日志中提取包含所述代码的行信息的差异信息;
将包含所述代码的行信息的差异信息记录到所述差异文件列表。
4.根据权利要求1所述的方法,其特征在于,统计所述扫描结果,生成所述待检测代码的静态检测结果的步骤,包括:
对于每个所述静态扫描工具对应的扫描结果,获取所述扫描结果的详细信息;
如果所述详细信息显示所述扫描结果为空;则继续获取下一个所述静态扫描工具对应的扫描结果;
如果所述详细信息显示所述扫描结果不为空,则在所述详细信息中提取代码的行信息;
判断提取的所述代码的行信息是否是所述差异文件列表中包括的所述待检测代码的代码变动的行信息;
如果是,则保持所述扫描结果;如果否,则删除所述扫描结果。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
汇总所述静态检测结果;
向所述待检测代码的代码提交者反馈汇总的所述静态检测结果。
6.一种代码静态检测装置,其特征在于,所述装置包括:
第一获取模块,用于响应针对于待检测代码的检测操作,获取所述待检测代码的源代码,其中,所述待检测代码为目标项目最新版本对应的代码;
第二获取模块,用于基于所述源代码获取所述目标项目的代码提交记录;其中,所述代码提交记录用于表征所述目标项目的代码的修改历史;
提取模块,用于根据所述代码提交记录提取所述待检测代码的差异日志;
生成模块,用于基于所述差异日志生成差异文件列表;其中,所述差异文件列表包括所述待检测代码的代码变动的行信息;
扫描模块,用于使用预先设置的静态扫描工具对所述差异文件列表进行扫描,得到扫描结果;
统计模块,用于统计所述扫描结果,生成所述待检测代码的静态检测结果;
其中,所述代码提交记录包括至少一条针对于所述目标项目的代码的修改记录;且每条所述修改记录按照预设的记录格式呈现修改信息,所述修改信息至少包括以下内容:代码的版本标识、代码提交者信息、提交时间、代码的行信息和代码;
所述提取模块,还用于:
按照所述提交时间,从所述代码提交记录中提取最新的两次修改记录;
比较最新的所述两次修改记录的差异,生成包含差异信息的差异日志;其中,所述差异信息包括至少一种所述修改信息的差异;
其中,所述预先设置的静态扫描工具包括以下扫描工具至少之一:Sonar扫描工具、PMD扫描工具和Findbugs扫描工具;
所述扫描模块还用于:
按照预先设置的扫描模式,使用所述静态扫描工具对所述差异文件列表进行扫描,得到每个所述静态扫描工具对应的扫描结果,其中,所述扫描模式包括并行扫描或者依次扫描。
7.一种服务器,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述权利要求1-5任一项所述的方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述权利要求1-5任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211205304.2A CN115269444B (zh) | 2022-09-30 | 2022-09-30 | 代码静态检测方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211205304.2A CN115269444B (zh) | 2022-09-30 | 2022-09-30 | 代码静态检测方法、装置及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115269444A CN115269444A (zh) | 2022-11-01 |
CN115269444B true CN115269444B (zh) | 2023-02-03 |
Family
ID=83758070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211205304.2A Active CN115269444B (zh) | 2022-09-30 | 2022-09-30 | 代码静态检测方法、装置及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115269444B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573564B (zh) * | 2024-01-15 | 2024-03-26 | 智业软件股份有限公司 | 一种基于gitlab代码提交日志自动识别差异的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319854A (zh) * | 2017-12-29 | 2018-07-24 | 上海瑞家信息技术有限公司 | 一种增量代码静态扫描方法、设备及计算机可读存储介质 |
CN112463620A (zh) * | 2020-12-03 | 2021-03-09 | 广州品唯软件有限公司 | 安卓软件集成测试中的覆盖率测试方法、装置 |
CN114610286A (zh) * | 2022-03-21 | 2022-06-10 | 平安普惠企业管理有限公司 | 开发文档的生成方法、装置、计算机设备及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000250696A (ja) * | 1999-03-02 | 2000-09-14 | Internatl Business Mach Corp <Ibm> | 異種キーボード間のデータ変換方法 |
CN108304327B (zh) * | 2018-02-02 | 2021-01-19 | 平安证券股份有限公司 | 静态代码扫描结果处理方法和装置 |
CN108536472A (zh) * | 2018-03-13 | 2018-09-14 | 中国银行股份有限公司 | 一种代码的规范性检查方法及装置 |
CN109032629A (zh) * | 2018-06-28 | 2018-12-18 | 北京达佳互联信息技术有限公司 | 一种代码更新方法及装置 |
CN109359028B (zh) * | 2018-08-22 | 2024-05-03 | 平安科技(深圳)有限公司 | 代码质量监控方法、装置、计算机设备及存储介质 |
CN109144548A (zh) * | 2018-08-27 | 2019-01-04 | 杭州安恒信息技术股份有限公司 | 一种基于git实现的多组件软件升级方法、装置及服务器 |
CN109871319A (zh) * | 2019-01-18 | 2019-06-11 | 深圳壹账通智能科技有限公司 | 项目代码扫描方法、装置、计算机设备及存储介质 |
CN112860261A (zh) * | 2019-11-28 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 静态代码检查方法、装置、计算机设备及可读存储介质 |
US11537392B2 (en) * | 2021-01-04 | 2022-12-27 | Capital One Services, Llc | Dynamic review of software updates after pull requests |
CN113742736A (zh) * | 2021-09-22 | 2021-12-03 | 中国银行股份有限公司 | 一种增量代码安全扫描方法和装置 |
-
2022
- 2022-09-30 CN CN202211205304.2A patent/CN115269444B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319854A (zh) * | 2017-12-29 | 2018-07-24 | 上海瑞家信息技术有限公司 | 一种增量代码静态扫描方法、设备及计算机可读存储介质 |
CN112463620A (zh) * | 2020-12-03 | 2021-03-09 | 广州品唯软件有限公司 | 安卓软件集成测试中的覆盖率测试方法、装置 |
CN114610286A (zh) * | 2022-03-21 | 2022-06-10 | 平安普惠企业管理有限公司 | 开发文档的生成方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
Android自定义Lint增量代码检查工具;佚名;《https://juejin.cn/post/6844903849036103688》;20190522;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN115269444A (zh) | 2022-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115269444B (zh) | 代码静态检测方法、装置及服务器 | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
Mitropoulos et al. | Time present and time past: analyzing the evolution of JavaScript code in the wild | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
CN115729817A (zh) | 测试用例库的生成及优化方法、装置、电子设备和存储介质 | |
CN111736865A (zh) | 一种数据库升级方法及系统 | |
US20160314061A1 (en) | Software Defect Detection Identifying Location of Diverging Paths | |
CN110928793B (zh) | 一种正则表达式检测方法、装置及计算机可读存储介质 | |
CN112084108A (zh) | 一种测试脚本生成方法、装置及相关组件 | |
US11880470B2 (en) | System and method for vulnerability detection in computer code | |
CN115098401A (zh) | 一种html报告验证方法、装置、电子设备及存储介质 | |
CN115309661A (zh) | 一种应用测试方法、装置、电子设备及可读存储介质 | |
CN113868137A (zh) | 埋点数据的处理方法、装置、系统和服务器 | |
CN114625633A (zh) | 用于接口测试的方法、系统和存储介质 | |
CN113918370A (zh) | 类别确定方法、装置、电子设备和存储介质 | |
CN110825650B (zh) | 单元测试覆盖精度检测方法及装置 | |
CN111338956A (zh) | 一种自动化的压测方法、装置、设备和存储介质 | |
CN116303104B (zh) | 自动化流程缺陷筛查管理方法、系统和可读存储介质 | |
He et al. | A coverage and slicing dependencies analysis for seeking software security defects | |
US20210357300A1 (en) | Method and system for classification and ranking of delta arms | |
CN116483703A (zh) | 分支合并检测方法、装置、电子设备及存储介质 | |
CN116483377A (zh) | 一种代码检测方法、装置、电子设备及存储介质 | |
CN111427769A (zh) | 一种代码质量检测方法、设备、服务器及可读存储介质 | |
CN112000362A (zh) | 统计Java源文件代码行数的方法及系统 | |
CN115357893A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |