CN116301985A - 代码扫描方法、装置、计算机设备及存储介质 - Google Patents
代码扫描方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116301985A CN116301985A CN202310239591.7A CN202310239591A CN116301985A CN 116301985 A CN116301985 A CN 116301985A CN 202310239591 A CN202310239591 A CN 202310239591A CN 116301985 A CN116301985 A CN 116301985A
- Authority
- CN
- China
- Prior art keywords
- code
- branch
- scanning
- scanned
- platform end
- 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
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000012986 modification Methods 0.000 claims abstract description 16
- 230000004048 modification Effects 0.000 claims abstract description 16
- 238000011161 development Methods 0.000 abstract description 21
- 238000007726 management method Methods 0.000 abstract description 9
- 238000004458 analytical method Methods 0.000 abstract description 5
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000010354 integration Effects 0.000 description 10
- SDIXRDNYIMOKSG-UHFFFAOYSA-L disodium methyl arsenate Chemical compound [Na+].[Na+].C[As]([O-])([O-])=O SDIXRDNYIMOKSG-UHFFFAOYSA-L 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及信息技术领域,公开了一种代码扫描方法、装置、计算机设备及存储介质,其方法通过获取待集成代码,待集成代码包括一个主干和多个待扫描分支;判断待扫描分支是否为已有分支;若待扫描分支为已有分支,则获取待扫描分支与主干存在差异的差异文件代码;若差异文件代码满足预设增量扫描条件,则将差异文件代码发送到扫描平台端,以使扫描平台端对差异文件代码进行扫描,生成待扫描分支的第一代码扫描结果;接收扫描平台端返回的第一代码扫描结果。本发明的代码扫描方法通过对满足条件的差异文件代码进行增量扫描,节省了代码扫描的时间,提高了开发效率,有助于开发人员及时发现代码问题以进行分析、修改和管理。
Description
技术领域
本发明涉及信息技术领域,尤其涉及一种代码扫描方法、装置、计算机设备及存储介质。
背景技术
在应用程序开发过程中,会将同一个项目的代码分成不同的分支来进行开发,并对代码版本进行管理。代码版本的管理涉及代码扫描,代码扫描工具可以让开发人员编写更干净、更安全的代码,对于由不同的编写语言和框架写成的代码进行分析,按业界通用的代码规则进行审查,找出有问题的惯例用法、算法优化点及内存泄露点,同时提供清晰的解决方案,最后实现问题的跟踪、修改和管理闭环。
现有的扫描工具中,findbugs和checkstyle等扫描工具是在线下扫描的,不利于实时管理和修正;sonar(SonarQube)开源框架是使用最多的线上扫描平台,通过代码持续集成,可以自动触发代码扫描,实现代码线上检测。但sonar是对项目的全量代码进行整体扫描,对于比较大的项目,需要扫描半个小时才能得到扫描结果,大大影响了开发效率。虽然近期的sonar开源组件实现了支持部分文件扫描的功能,但是基于开发语言的多样性及复杂程度,只实现了C++部分,还不能支持Java及Vue部分。此外,DevOps开发管理平台整合了Gitlab、Jenkins、Harbor和Jmeter等组件来实现增量扫描,但只是组合了findbugs、checkstyle等零散的扫描工具。
项目开发过程中的代码在扫描合格后才能进行操作,但有些是提交代码转测试用的,有些是合并主干用的,全量扫描的时间太长,影响了开发人员的工作效率。当前的代码扫描还是以全量扫描为主,增量扫描的程度有限,不利于管理和维护。
发明内容
基于此,有必要针对上述技术问题,提供一种代码扫描方法、装置、计算机设备及存储介质,以解决代码全量扫描时间太长、影响开发效率的问题。
一种代码扫描方法,包括:
获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
判断所述待扫描分支是否为已有分支;
若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
接收所述扫描平台端返回的所述第一代码扫描结果。
一种代码扫描装置,包括:
待集成代码获取模块,用于获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
已有分支判断模块,用于判断所述待扫描分支是否为已有分支;
差异文件代码获取模块,用于若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
差异文件代码扫描模块,用于若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
代码扫描结果接收模块,用于接收所述扫描平台端返回的所述第一代码扫描结果。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述代码扫描方法。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述代码扫描方法。
上述代码扫描方法、装置、计算机设备及存储介质,其方法通过获取待集成代码,待集成代码包括一个主干和多个待扫描分支;判断待扫描分支是否为已有分支;若待扫描分支为已有分支,则获取待扫描分支与主干存在差异的差异文件代码;若差异文件代码满足预设增量扫描条件,则将差异文件代码发送到扫描平台端,以使扫描平台端对差异文件代码进行扫描,生成待扫描分支的第一代码扫描结果;接收扫描平台端返回的第一代码扫描结果。本发明的代码扫描方法在持续集成代码的过程中植入定制化脚本,基于定制化脚本对代码的解析识别出待扫描分支与主干的差异文件代码,通过对满足预设增量扫描条件的差异文件代码进行增量扫描,节省了代码扫描的时间,提高了开发效率,有助于开发人员及时发现代码问题以进行分析、修改和管理。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中代码扫描方法的一流程示意图;
图2是本发明一实施例中代码扫描装置的一结构示意图;
图3是本发明一实施例中计算机设备的一示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一实施例中,如图1所示,提供一种代码扫描方法,包括如下步骤S10-S50。
S10、获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支。
可理解地,代码扫描系统由分布式版本控制平台端(Git,简称git端)和扫描平台端(SonarQube,简称sonar端)组成,开发人员编写代码并在git端提交代码后,调用sonar端进行代码扫描,根据扫描结果进行展示或发送通知信息。通过git端对项目代码进行分布式管理,实现多个开发人员同时开发同一个项目,每个项目包括一个主干和多个分支。在实际开发工作中是不允许开发人员直接在主干上修改代码进行开发的,避免导致整个项目崩溃。而是由每个开发人员在本地环境根据不同的开发目的创建分支,通过对分支的代码编写或修改进行开发,分支完成后提交到git端服务器作为待扫描分支,再将多个扫描后的分支集成到主干,即将分支代码集成到主干代码。通过sonar端可以发现语法特征错误、边界行为特征错误和经验特征错误等代码问题。软件项目开发采用持续集成(ContinuousIntegration,简称CI)的方式,即频繁地将多个开发人员编写的分支代码集成到主干代码中,可以是每天集成一次,也可以是每天集成多次。CI的工作流程包括开发、提交代码、静态代码扫描、编译、测试和发布,代码扫描有助于开发人员发现待集成代码的错误并进行修改,在软件产品快速迭代的同时还能保持高质量。
待集成代码是各个开发人员提交到git端的新版本代码,包括主干的主干代码和多个待扫描分支的分支代码。主干是从项目开始到结束开发过程的代码库文件,包括上一个旧版本的代码。而分支是从主干里面切分复制出来的,分支往往代表的是当前版本即将要更新的代码,例如新功能或新界面。一旦待扫描分支经过扫描出现了代码问题,可以直接在分支处理,不会影响到主干版本,避免代码冲突。主干代码作为项目的基础,最终分支代码的合并和集成是以主干代码为基准进行的。
S20、判断所述待扫描分支是否为已有分支。
可理解地,代码扫描涉及到上一个旧版本的代码(集成时主干的代码)和当前版本即将要更新的代码(集成时待扫描分支的代码)。待扫描分支可以是在主干上未出现过的新增分支,也可以是在主干的已有分支基础上进行内容的增加、删除和修改后得到的分支。本实施例中,在git端预先植入自定义Shell脚本,自定义Shell脚本用于执行对待扫描分支的条件判断,若判断结果为需要全量扫描,则将待扫描分支的全量代码发送到sonar端;若判断结果为需要增量扫描,则将待扫描分支的差异文件代码发送到sonar端。Shell脚本与Windows中的批处理相似,是将各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,以便于设置或者管理。每一个分支都有对应的分支名称,通过建立分支名称目录可以实现项目的分布式管理。接收各个开发人员提交的待集成代码后,通过自定义Shell脚本对待集成代码中的每个待扫描分支进行逻辑判断,具体为通过待扫描分支名称确定待扫描分支为已有分支,或者,待扫描分支为新增分支。
S30、若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码。
可理解地,差异文件代码指的是同一个待扫描分支名称在上一个旧版本中对应的代码文件与在当前提交的待集成代码中对应的代码文件之间的差异代码。若待扫描分支为已有分支,则表明待集成代码中的当前待扫描分支是在主干的已有分支基础上进行内容的增加、删除和修改后得到的分支。当前待扫描分支中包括与上一个旧版本中对应的分支内容相同的重复文件代码,以及与上一个旧版本中对应的分支内容不同的差异文件代码。由于主干代码中包括上一个旧版本的代码,所以通过git端的操作可以直接获取待扫描分支与主干存在差异的差异文件代码。本实施例中,通过命令“git diff--name-only master”获取待扫描分支与主干的差异文件代码。其中,“git diff--name-only master”是git端的预设指令,用于获取上一次和当前的两次提交之间的差异文件。例如,通过“git diff--name-only HEAD~10HEAD~5”命令,可以查看持续集成过程中的第10次最新提交和第5次最新提交之间的差异文件。
S40、若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果。
可理解地,增量扫描是指sonar端只对待扫描分支中的差异文件代码进行扫描的过程。第一代码扫描结果指的是对差异文件代码进行增量扫描的扫描结果。若待扫描分支为已有分支,则在上一个旧版本的集成过程中,sonar端已经对待扫描分支中的重复文件代码进行了扫描,并保存有重复文件代码对应的扫描结果。获取差异文件代码之后,还可以查看具体的文件操作信息,例如文件层面的删除文件操作以及代码层面的删除代码、增加代码和修改替换代码操作。预设增量扫描条件是预先设置的基于开发人员对差异文件代码的文件操作信息而确定是否对差异文件代码进行增量扫描的条件,例如当差异文件代码的文件操作信息为删除代码、增加代码和修改替换代码修改替换代码时,则sonar端只对差异文件代码进行扫描。本实施例中,通过将差异文件代码发送到扫描平台端,通过扫描指令“-Dsonar.inclusions="${list%?}"\”和“-Dsonar.buildString="||${1}||${toemail}||||${branchRef}"”使扫描平台端对差异文件代码进行增量扫描,生成当前待扫描分支的第一代码扫描结果。
S50、接收所述扫描平台端返回的所述第一代码扫描结果。
可理解地,第一代码扫描结果记录了当前待扫描分支的差异文件代码中增量扫描后的代码问题,除了接收扫描平台端返回的第一代码扫描结果,还需要接收扫描平台端返回的对于新增分支和不满足预设增量扫描条件的差异文件代码的扫描结果。提取接收到的扫描结果中的代码问题,根据预设的度量指标对所有待扫描分支的代码问题进行统计分析,根据分析结果生成代码扫描报告进行显示,并发送告警通知信息。
本实施例通过获取待集成代码,待集成代码包括一个主干和多个待扫描分支;判断待扫描分支是否为已有分支;若待扫描分支为已有分支,则获取待扫描分支与主干存在差异的差异文件代码;若差异文件代码满足预设增量扫描条件,则将差异文件代码发送到扫描平台端,以使扫描平台端对差异文件代码进行扫描,生成待扫描分支的第一代码扫描结果;接收扫描平台端返回的第一代码扫描结果。本实施例的代码扫描方法在持续集成代码的过程中植入定制化脚本,基于定制化脚本对代码的解析识别出分支代码与主干代码的差异文件代码,通过对满足预设增量扫描条件的差异文件代码进行增量扫描,节省了代码扫描的时间,提高了开发效率,有助于开发人员及时发现代码问题以进行分析、修改和管理。
可选的,步骤S20中,即所述判断所述待扫描分支是否为已有分支,包括:
S201、向所述扫描平台端发送分支名称获取请求,所述扫描平台端包含所述待集成代码的上一版本的多个已有分支名称;
S202、接收所述扫描平台端返回的与所述分支名称获取请求对应的所述已有分支名称;
S203、获取每个所述待扫描分支的待扫描分支名称,判断所述待扫描分支名称是否与所述已有分支名称相同;
S204、若相同,则判定所述待扫描分支为已有分支;
S205、若不相同,则判定所述待扫描分支为新增分支。
可理解地,当前待扫描分支为git端接收到的开发人员最新提交的多个分支,包括每个当前待扫描分支的代码和对应的待扫描分支名称。sonar端在对上一个旧版本的待扫描分支进行代码扫描时,录入了上一版本的待集成代码的全部分支名称生成已有分支名称目录。在一实施例中,为了判断每个当前待扫描分支是否为已有分支,向sonar端发送请求,请求获取上一版本的已有分支名称目录。获取每个当前待扫描分支的待扫描分支名称,遍历已有分支名称目录中的已有分支名称进行比对,若当前待扫描分支的待扫描分支名称与任意一个已有分支名称相同,则当前待扫描分支为已有分支;若当前待扫描分支的待扫描分支名称与全部的已有分支名称都不相同,则当前待扫描分支为新增分支。
本实施例通过将当前待扫描分支的待扫描分支名称与上一版本的已有分支名称对比,快速识别当前待扫描分支中的已有分支和新增分支,以便于对已有分支和新增分支采取不同的扫描策略。
可选的,步骤S205中,即所述判定所述待扫描分支为新增分支之后,还包括:
S2051、将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第二代码扫描结果;
S2052、接收所述扫描平台端返回的所述第二代码扫描结果。
可理解地,由于新增分支在上一版本的待集成代码中不存在,因此sonar端在对上一版本的待扫描分支进行代码扫描时,即没有录入对应的待扫描分支名称,也没有扫描对应的代码问题,因此需要进行全量扫描。第二代码扫描结果指的是对新增分支进行全量扫描的扫描结果。新增分支必然存在一个对应的源分支,源分支是新增分支的代码来源,源分支可以是上一版本的待扫描分支,也可以是上一版本的主干。判定当前待扫描分支为新增分支之后,将新增分支的全量代码发送到扫描平台端。通过扫描平台端提取新增分支对应的源分支信息,源分支信息包括源分支的代码和源分支的已有分支名称,根据源分支信息建立新增分支的分支名称,并对新增分支的全量代码进行扫描,生成第二代码扫描结果。
本实施例在判定当前待扫描分支为新增分支之后,通过sonar端对新增分支采取全量扫描策略,保证了扫描结果的完整性和准确性。
可选的,步骤S30中,即所述获取所述待扫描分支与所述主干存在差异的差异文件代码之后,还包括:
S301、从所述差异文件代码提取文件操作信息;
S302、若所述文件操作信息包括文件修改操作信息和/或配置文件修改信息,则判定所述差异文件代码不满足所述预设增量扫描条件。
可理解地,一个分支是由多个开发文件组成的,获取差异文件代码之后,还可以查看具体的文件操作信息,文件操作信息指的是使已有分支产生差异文件代码的文件层面的操作信息,例如删除文件、增加文件或在gitlab-ci.yml文件中改动至少一个字。当文件操作信息包括文件修改操作信息时,表明待扫描分支在上一版本的已有分支的文件基础上删除、增加文件,此时,为了保证分支的稳定性,避免代码冲突,需要对当前待扫描分支进行全量扫描。此外,在git端提交待集成代码时,每一个待扫描分支的根目录中包含一个“.gitlab-ci.yml”配置文件,“.gitlab-ci.yml”配置文件指定了CI的触发条件、工作内容和工作流程等配置信息。当文件操作信息包括配置文件修改信息时,表明修改了“.gitlab-ci.yml”配置文件中的字符,为了保证代码持续集成的稳定性,需要对当前待扫描分支进行全量扫描。因此,当差异文件代码对应的文件操作信息中出现文件修改操作信息和/或配置文件修改信息时,则差异文件代码不满足预设增量扫描条件。
本实施例对于已有分支的差异文件代码,考虑了不满足预设增量扫描条件的情况,而不是对所有已有分支都采取增量扫描策略,通过扫描策略的细化进一步保证了扫描结果的完整性和准确性。
可选的,步骤S302中,即所述判定所述差异文件代码不满足所述预设增量扫描条件之后,还包括:
S3021、将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第三代码扫描结果;
S3022、接收所述扫描平台端返回的所述第三代码扫描结果。
可理解地,第二代码扫描结果指的是对不满足预设增量扫描条件的已有分支进行全量扫描的扫描结果。虽然已有分支在上一版本的待集成代码中也存在,sonar端在对上一版本的待扫描分支进行代码扫描时,录入了对应的待扫描分支名称且扫描出了对应的代码问题,但是对于不满足预设增量扫描条件的已有分支仍然需要进行全量扫描。将已有分支的全量代码发送到扫描平台端,通过扫描平台端对全量代码进行扫描,更新已有分支的代码问题并生成第三代码扫描结果。
本实施例在判定当前待扫描分支为已有分支且不满足预设增量扫描条件之后,通过sonar端对已有分支采取全量扫描策略,及时更新代码问题,保证了扫描结果的准确性。
可选的,步骤S50中,即所述接收所述扫描平台端返回的所述第三代码扫描结果之后,还包括:
S501、获取所述待集成代码中多个所述待扫描分支的代码扫描结果集合,所述代码扫描结果集合包括所述第一代码扫描结果、所述第二代码扫描结果和/或所述第三代码扫描结果;
S502、获取所述代码扫描结果集合中的代码问题类型和每个所述代码问题类型所对应的代码问题数量;
S503、获取每个所述代码问题类型所对应的预设质量阈值;
S504、若所述代码问题类型所对应的代码问题数量大于预设质量阈值,则生成所述代码问题类型的告警信息;
S505、对多个所述代码问题类型的告警信息进行汇总,生成告警通知信息;
S506、将所述告警通知信息发送到预设通知接收人员。
可理解地,代码扫描结果集合是由待集成代码中的每个分支代码的扫描结果构成的集合。代码扫描结果是以分支代码为维度的,为了清楚地显示代码问题,需要根据代码问题类型和代码问题数量的维度对代码扫描结果进行整理。代码问题类型是指代码问题的度量指标种类,例如bug、异味和漏洞等,代码问题数量是指与代码问题对应的数量。预设质量阈值是预先设置的用于对每种代码问题类型对应的代码问题数量触发告警的临界值,例如当bug超过1个或异味超过2个时则触发告警。告警通知信息是用于报告代码问题达到阈值的通知信息,预设通知接收人员是预先设定的与项目开发关联的告警通知信息接收人员。例如,在代码扫描结束后,将扫描出的代码问题填充入定制的邮件模板生成告警通知邮件,发送到项目开发人员、组长以及代码质量管理员。
在一实施例中,基于自定义Shell脚本对每个待扫描分支进行条件判断,若判断结果为需要全量扫描,则将待扫描分支的全量代码发送到sonar端;若判断结果为需要增量扫描,则将待扫描分支的差异文件代码发送到sonar端。通过sonar端对每个待扫描分支采取对应的全量扫描策略或者增量扫描策略,生成对应的第一代码扫描结果、第二代码扫描结果或第三代码扫描结果。在全部的多个待扫描分支扫描完成之后,根据多个待扫描分支的代码扫描结果生成代码扫描结果集合,对代码扫描结果集合中的代码问题按照代码问题类型和代码问题数量的维度进行整理,对每个代码问题类型进行预设质量阈值判断,对多个代码问题类型的告警信息统计汇总,生成告警通知信息。告警通知信息包括bug、新bug、异味、新异味、漏洞、新漏洞及其它信息,其中,bug指的是项目从开始到当前待集成版本经过历次代码扫描的bug数量总和,新bug指的是当前待集成版本代码扫描后新出现的bug数量。然后,通过指令“-Dsonar.buildString="||${1}||${toemail}||||${branchRef}"”中的“toemail”参数值来定制邮件,通过“buildString”参数值确定预设通知接收人员的邮箱地址发送邮件。例如当需要发送项目开发小组的群邮件时,根据项目编号请求服务器的“/api/v4/projects/%s/members/all?private_token=%s&per_page=100”接口获取git端对应的项目开发小组的成员信息,以及成员的邮箱地址。开发人员接收到告警通知信息之后,可以及时进入sonar端分析具体的代码问题,制定解决措施修改代码并解决问题,代码质量管理员也可以通过告警通知信息了解代码质量及修改的进度。
本实施例将多个分支代码的扫描结果形成代码扫描结果集合,对代码扫描结果集合中的代码问题按照代码问题类型和代码问题数量的维度进行整理,通过预设质量阈值进行质量判断并发送告警通知信息。通过整理汇总使得代码问题可以一目了然地显示,同时及时通知项目开发人员,有助于及时发现问题并快速解决问题,提高了代码扫描的及时性和有效性,保证了开发的效率。
可选的,步骤S40中,即所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果,包括:
S401、通过所述扫描平台端对所述差异文件代码进行扫描,获得差异文件代码问题;
S402、通过所述扫描平台端获取与所述待扫描分支的源分支对应的源分支已有代码问题;
S403、通过所述扫描平台端对所述差异文件代码问题和所述源分支已有代码问题进行统计,生成所述第一代码扫描结果。
可理解地,第一代码扫描结果指的是对预设增量扫描条件的已有分支中差异文件代码进行增量扫描的扫描结果。若待扫描分支为已有分支,则在上一版本的集成过程中,sonar端已经对已有分支中的重复文件代码进行了扫描,并保存有重复文件代码对应的扫描结果,因此只需要对已有分支中的差异文件代码进行增量扫描,根据增量扫描的结果更新已有分支的扫描结果。在上一版本的扫描结果整理过程中,已有分支的代码问题类型和代码问题数量会统计在已有分支对应源分支的代码问题中,因此可以基于源分支的代码问题对已有分支的代码问题进行更新,实现对待扫描分支中重复文件代码的代码问题和差异文件代码的代码问题的合并。
在一实施例中,通过指令“-Dsonar.buildString="||${1}||${toemail}||||${branchRef}"”中的“branchRef”参数值来获取当前待扫描分支对应的源分支的版本号,进而获取源分支在sonar端的代码问题,在源分支代码问题的基础上建立当前待扫描分支的基本代码问题快照。当通过扫描平台端对差异文件代码进行增量扫描,获得差异文件代码问题后,直接基本代码问题快照的基础上对代码问题的类型和数量进行增加或减少,快速生成第一代码扫描结果。即只统计从源分支创建时间起修改过的文件,将新扫描出现的差异文件代码问题进行累加,实现源分支的代码问题数累计到当前待扫描分支中的功能。
本实施例在判定当前待扫描分支为已有分支且满足预设增量扫描条件之后,通过sonar端对差异文件代码采取增量扫描策略,基于源分支的代码问题快速更新当前待扫描分支的代码扫描结果,减少了开发人员的扫描等待时间,提高了开发效率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种代码扫描装置,该代码扫描装置与上述实施例中代码扫描方法一一对应。如图2所示,该代码扫描装置包括待集成代码获取模块10、已有分支判断模块20、差异文件代码获取模块30、差异文件代码扫描模块40和代码扫描结果接收模块50。各功能模块详细说明如下:
待集成代码获取模块10,用于获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
已有分支判断模块20,用于判断所述待扫描分支是否为已有分支;
差异文件代码获取模块30,用于若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
差异文件代码扫描模块40,用于若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
代码扫描结果接收模块50,用于接收所述扫描平台端返回的所述第一代码扫描结果。
可选的,已有分支判断模块20包括:
分支名称获取请求发送单元,用于向所述扫描平台端发送分支名称获取请求,所述扫描平台端包含所述待集成代码的上一版本的多个已有分支名称;
已有分支名称获取单元,用于接收所述扫描平台端返回的与所述分支名称获取请求对应的所述已有分支名称;
待扫描分支名称判断单元,用于获取每个所述待扫描分支的待扫描分支名称,判断所述待扫描分支名称是否与所述已有分支名称相同;
已有分支判定单元,用于若相同,则判定所述待扫描分支为已有分支;
新增分支判定单元,用于若不相同,则判定所述待扫描分支为新增分支。
可选的,已有分支判断模块20还包括:
新增分支全量扫描单元,用于将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第二代码扫描结果;
第二代码扫描结果接收单元,用于接收所述扫描平台端返回的所述第二代码扫描结果。
可选的,差异文件代码获取模块30包括:
文件操作信息提取单元,用于从所述差异文件代码提取文件操作信息;
预设增量扫描条件判定单元,用于若所述文件操作信息包括文件修改操作信息和/或配置文件修改信息,则判定所述差异文件代码不满足所述预设增量扫描条件。
可选的,差异文件代码获取模块30还包括:
已有分支全量扫描单元,用于将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第三代码扫描结果;
第三代码扫描结果接收单元,用于接收所述扫描平台端返回的所述第三代码扫描结果。
可选的,代码扫描结果接收模块50包括:
代码扫描结果集合获取单元,用于获取所述待集成代码中多个所述待扫描分支的代码扫描结果集合,所述代码扫描结果集合包括所述第一代码扫描结果、所述第二代码扫描结果和/或所述第三代码扫描结果;
代码问题数量获取单元,用于获取所述代码扫描结果集合中的代码问题类型和每个所述代码问题类型所对应的代码问题数量;
预设质量阈值获取单元,用于获取每个所述代码问题类型所对应的预设质量阈值;
告警信息生成单元,用于若所述代码问题类型所对应的代码问题数量大于预设质量阈值,则生成所述代码问题类型的告警信息;
告警通知信息生成单元,用于对多个所述代码问题类型的告警信息进行汇总,生成告警通知信息;
告警通知信息发送单元,用于将所述告警通知信息发送到预设通知接收人员。
可选的,差异文件代码扫描模块40包括:
差异文件代码问题获取单元,用于通过所述扫描平台端对所述差异文件代码进行扫描,获得差异文件代码问题;
源分支已有代码问题获取单元,用于通过所述扫描平台端获取与所述待扫描分支的源分支对应的源分支已有代码问题;
第一代码扫描结果生成单元,用于通过所述扫描平台端对所述差异文件代码问题和所述源分支已有代码问题进行统计,生成所述第一代码扫描结果。
关于代码扫描装置的具体限定可以参见上文中对于代码扫描方法的限定,在此不再赘述。上述代码扫描装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括可读存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该计算机设备的网络接口用于与外部服务器通过网络连接通信。该计算机可读指令被处理器执行时以实现一种代码扫描方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现以下步骤:
获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
判断所述待扫描分支是否为已有分支;
若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
接收所述扫描平台端返回的所述第一代码扫描结果。
在一个实施例中,提供了一个或多个存储有计算机可读指令的计算机可读存储介质,本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。可读存储介质上存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时实现以下步骤:
获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
判断所述待扫描分支是否为已有分支;
若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
接收所述扫描平台端返回的所述第一代码扫描结果。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种代码扫描方法,其特征在于,包括:
获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
判断所述待扫描分支是否为已有分支;
若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
接收所述扫描平台端返回的所述第一代码扫描结果。
2.如权利要求1所述的代码扫描方法,其特征在于,所述判断所述待扫描分支是否为已有分支,包括:
向所述扫描平台端发送分支名称获取请求,所述扫描平台端包含所述待集成代码的上一版本的多个已有分支名称;
接收所述扫描平台端返回的与所述分支名称获取请求对应的所述已有分支名称;
获取每个所述待扫描分支的待扫描分支名称,判断所述待扫描分支名称是否与所述已有分支名称相同;
若相同,则判定所述待扫描分支为已有分支;
若不相同,则判定所述待扫描分支为新增分支。
3.如权利要求2所述的代码扫描方法,其特征在于,所述判定所述待扫描分支为新增分支之后,包括:
将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第二代码扫描结果;
接收所述扫描平台端返回的所述第二代码扫描结果。
4.如权利要求3所述的代码扫描方法,其特征在于,所述获取所述待扫描分支与所述主干存在差异的差异文件代码之后,包括:
从所述差异文件代码提取文件操作信息;
若所述文件操作信息包括文件修改操作信息和/或配置文件修改信息,则判定所述差异文件代码不满足所述预设增量扫描条件。
5.如权利要求4所述的代码扫描方法,其特征在于,所述判定所述差异文件代码不满足所述预设增量扫描条件之后,包括:
将所述待扫描分支的全量代码发送到所述扫描平台端,以使所述扫描平台端对所述全量代码进行扫描,生成所述待扫描分支的第三代码扫描结果;
接收所述扫描平台端返回的所述第三代码扫描结果。
6.如权利要求5所述的代码扫描方法,其特征在于,所述接收所述扫描平台端返回的所述第三代码扫描结果之后,包括:
获取所述待集成代码中多个所述待扫描分支的代码扫描结果集合,所述代码扫描结果集合包括所述第一代码扫描结果、所述第二代码扫描结果和/或所述第三代码扫描结果;
获取所述代码扫描结果集合中的代码问题类型和每个所述代码问题类型所对应的代码问题数量;
获取每个所述代码问题类型所对应的预设质量阈值;
若所述代码问题类型所对应的代码问题数量大于预设质量阈值,则生成所述代码问题类型的告警信息;
对多个所述代码问题类型的告警信息进行汇总,生成告警通知信息;
将所述告警通知信息发送到预设通知接收人员。
7.如权利要求1所述的代码扫描方法,其特征在于,所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果,包括:
通过所述扫描平台端对所述差异文件代码进行扫描,获得差异文件代码问题;
通过所述扫描平台端获取与所述待扫描分支的源分支对应的源分支已有代码问题;
通过所述扫描平台端对所述差异文件代码问题和所述源分支已有代码问题进行统计,生成所述第一代码扫描结果。
8.一种代码扫描装置,其特征在于,包括:
待集成代码获取模块,用于获取待集成代码,所述待集成代码包括一个主干和多个待扫描分支;
已有分支判断模块,用于判断所述待扫描分支是否为已有分支;
差异文件代码获取模块,用于若所述待扫描分支为已有分支,则获取所述待扫描分支与所述主干存在差异的差异文件代码;
差异文件代码扫描模块,用于若所述差异文件代码满足预设增量扫描条件,则将所述差异文件代码发送到扫描平台端,以使所述扫描平台端对所述差异文件代码进行扫描,生成所述待扫描分支的第一代码扫描结果;
代码扫描结果接收模块,用于接收所述扫描平台端返回的所述第一代码扫描结果。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时实现如权利要求1至7中任一项所述代码扫描方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,其特征在于,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至7中任一项所述代码扫描方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310239591.7A CN116301985A (zh) | 2023-03-03 | 2023-03-03 | 代码扫描方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310239591.7A CN116301985A (zh) | 2023-03-03 | 2023-03-03 | 代码扫描方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116301985A true CN116301985A (zh) | 2023-06-23 |
Family
ID=86800890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310239591.7A Pending CN116301985A (zh) | 2023-03-03 | 2023-03-03 | 代码扫描方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116301985A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483423A (zh) * | 2023-06-25 | 2023-07-25 | 杭州谐云科技有限公司 | 一种基于遗传算法的增量代码扫描方法和系统 |
-
2023
- 2023-03-03 CN CN202310239591.7A patent/CN116301985A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116483423A (zh) * | 2023-06-25 | 2023-07-25 | 杭州谐云科技有限公司 | 一种基于遗传算法的增量代码扫描方法和系统 |
CN116483423B (zh) * | 2023-06-25 | 2023-09-05 | 杭州谐云科技有限公司 | 一种基于遗传算法的增量代码扫描方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992409B (zh) | 测试用例生成方法、装置、计算机设备和存储介质 | |
KR101999409B1 (ko) | 예시에 의한 데이터 포매팅 기법 | |
CN108459962B (zh) | 代码规范性检测方法、装置、终端设备及存储介质 | |
CN110941546A (zh) | Web页面用例的自动化测试方法、装置、设备及存储介质 | |
CN108628748B (zh) | 自动化测试管理方法和自动化测试管理系统 | |
CN113127347B (zh) | 一种接口测试方法、装置、设备及可读存储介质 | |
CN110688300A (zh) | 兼容性测试方法、装置、设备及存储介质 | |
CN110956269A (zh) | 数据模型的生成方法、装置、设备以及计算机存储介质 | |
CN116301985A (zh) | 代码扫描方法、装置、计算机设备及存储介质 | |
CN112256318A (zh) | 一种用于依赖产品的构建方法及设备 | |
US11422917B2 (en) | Deriving software application dependency trees for white-box testing | |
CN110716866A (zh) | 代码质量扫描方法、装置、计算机设备及存储介质 | |
CN111221721B (zh) | 一种单元测试案例自动化录制和执行方法及装置 | |
CN113377669A (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
CN112256365B (zh) | 一种自动化管理多语言版本的方法及终端 | |
CN113641628A (zh) | 数据质量检测方法、装置、设备及存储介质 | |
CN113238901A (zh) | 多设备的自动化测试方法及装置、存储介质、计算机设备 | |
CN113220586A (zh) | 一种自动化的接口压力测试执行方法、装置和系统 | |
CN112416781A (zh) | 跨系统接口确定方法、装置、计算机设备和存储介质 | |
CN112527265A (zh) | 一种日志自动注入的方法和计算机设备 | |
CN117472367B (zh) | 异构资源智能识别及接入方法、装置、设备以及存储介质 | |
CN112733516B (zh) | 快讯处理方法、装置、设备及存储介质 | |
US20240054232A1 (en) | Build process security framework | |
CN116860591A (zh) | 测试脚本生成方法及装置 | |
CN117093495A (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 |