CN111414302A - 用于持续集成过程中的静态代码质量分析方法及计算设备 - Google Patents

用于持续集成过程中的静态代码质量分析方法及计算设备 Download PDF

Info

Publication number
CN111414302A
CN111414302A CN202010127984.5A CN202010127984A CN111414302A CN 111414302 A CN111414302 A CN 111414302A CN 202010127984 A CN202010127984 A CN 202010127984A CN 111414302 A CN111414302 A CN 111414302A
Authority
CN
China
Prior art keywords
code
branch
quality analysis
scanned
developer
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
Application number
CN202010127984.5A
Other languages
English (en)
Inventor
张俊
梁美英
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Chezhijia Data Information Technology Co ltd
Original Assignee
Tianjin Chezhijia Data Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianjin Chezhijia Data Information Technology Co ltd filed Critical Tianjin Chezhijia Data Information Technology Co ltd
Priority to CN202010127984.5A priority Critical patent/CN111414302A/zh
Publication of CN111414302A publication Critical patent/CN111414302A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging

Abstract

本发明公开了一种用于持续集成过程中的静态代码质量分析方法,在计算设备中执行,该方法包括以下步骤:当开发者将分支代码推送至代码仓库时,获取该分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列;对于扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析,并存储质量分析结果;将分支代码的质量分析结果即时反馈给相应的开发者。本发明一并公开了相应的计算设备。

Description

用于持续集成过程中的静态代码质量分析方法及计算设备
技术领域
本发明涉及代码质量检测技术领域,尤其涉及一种用于持续集成过程中的静态代码质量分析方法及计算设备。
背景技术
持续集成是一种软件开发实践,即团队开发成员尽可能早、尽可能快地将各自开发的代码集成起来,每次集成都通过自动化的构建(包括静态代码扫描、编译、自动化测试、发布等)来验证,从而尽早地发现集成错误。
软件静态代码扫描是软件质量检测的一部分,其指的是当开发者完成源代码后,对源代码进行扫描,找出代码中存在的语义缺陷、安全漏洞等问题。统计显示,在整个软件开发生命周期中,30%~70%的代码逻辑设计缺陷和编码缺陷是可以通过静态代码扫描来发现和修复的。
在软件开发过程中,团队开发成员通常采用Git(分布式版本控制系统)来管理项目代码,每个项目包括master、develop等多个分支。开发者在本地环境进行分支代码的编写,然后将代码的变动部分推送至远程Git服务器,以便将更新后的代码同步给团队其他成员。
如果开发者将分支代码推送至Git服务器后,能够即时收到本次更新的代码的质量分析结果,将有利于开发者及时对代码问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。
发明内容
为此,本发明提供一种用于持续集成过程中的静态代码质量分析方法及计算设备,以力图解决或至少缓解上面存在的问题。
根据本发明的第一个方面,提供一种用于持续集成过程中的静态代码分析方法,在计算设备中执行,包括步骤:当开发者将分支代码推送至代码仓库时,获取所述分支代码所属的项目分支信息,将所述项目分支信息作为待扫描任务加入扫描队列;对于所述扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析,并存储质量分析结果;将分支代码的质量分析结果即时反馈给相应的开发者。
可选地,在根据本发明的静态代码分析方法中,项目分支信息包括:项目名称、分支名称、开发者名称、开发者联系方式、项目地址、项目版本号中的至少一种。
可选地,在根据本发明的静态代码分析方法中,将所述项目分支信息作为待扫描任务加入扫描队列的步骤包括:判断所述分支代码所在的分支是否位于分支白名单中,若否,则将相应的项目分支信息作为待扫描任务加入扫描队列。
可选地,在根据本发明的静态代码分析方法中,对于所述扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析的步骤包括:当所述扫描队列中的待扫描任务的数量小于等于预设的最大并发数量时,创建多个进程,每个进程对应于一个待扫描任务,所述多个进程并行地对相应的分支代码进行质量分析;当所述扫描队列中的待扫描任务的数量大于所述最大并发数量时,创建最大并发数量个进程,所述最大并发数量个进程按照待扫描任务被加入扫描队列的顺序,并行地对待扫描任务所对应的分支代码进行质量分析。
可选地,在根据本发明的静态代码分析方法中,对待扫描任务所对应的分支代码进行质量分析的步骤包括:确定所述分支代码的语言类型;根据所述语言类型,将所述待扫描任务的项目分支信息组装成扫描命令;执行所述扫描命令,根据所述语言类型所对应的分析规则来对所述分支代码进行质量分析。
可选地,在根据本发明的静态代码分析方法中,根据所述分支代码所在的项目文件夹的特征来确定所述分支代码的语言类型。
可选地,在根据本发明的静态代码分析方法中,确定所述分支代码的语言类型的步骤包括:若分支代码所在的项目文件夹中存在名称为pom.xml的文件,则分支代码的语言类型为Java;若分支代码所在的项目文件夹中,后缀名为.cs的文件的比例大于第一阈值,则分支代码的语言类型为C#;若分支代码所在的项目文件夹中,后缀名为.py的文件的比例大于第二阈值,则分支代码的语言类型为Python;若分支代码所在的项目文件夹中存在名为package.json的文件,则分支代码的语言类型为JavaScript。
可选地,在根据本发明的静态代码分析方法中,质量分析结果包括一个或多个代码质量问题,所述将分支代码的质量分析结果即时反馈给相应的开发者的步骤包括:将本次质量分析结果中的代码质量问题按照问题类型进行合并,生成本次待办问题;以及将本次待办问题通过即时消息系统推送至开发者。
可选地,在根据本发明的静态代码分析方法中,在所述存储质量分析结果的步骤之后,还包括步骤:排查往期待办问题是否在本次推送的分支代码中已被修复,其中,所述往期待办问题为本次质量分析之前存在的代码质量问题;以及将已被修复的代码质量问题从往期待办问题集合中移除。
可选地,在根据本发明的静态代码分析方法中,还包括步骤:若本次质量分析失败,则将分析失败的消息和失败原因即时反馈给开发者。
根据本发明的第二个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如上所述的用于持续集成过程中的静态代码质量分析方法。
根据本发明的第三个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的用于持续集成过程中的静态代码质量分析方法。
根据本发明的技术方案,当开发者将分支代码推送至代码仓库后,自动获取分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列。对扫描队列中的每一个待扫描任务进行扫描,即对相应的分支代码进行质量分析,并将质量分析结果即时反馈给相应的开发者。这样,开发者能够及时获知自己推送的代码中的问题,引导开发者及时对问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。
进一步地,本发明在监测到开发者将分支代码推送到代码仓库后,将相应的项目分支信息加入扫描队列中,这样可以将开发者推送代码和实际代码质量分析过程解耦,使推送代码的过程无需关注质量分析过程配置的细节,降低项目的接入成本。
进一步地,本发明采用多个进程来对扫描队列中的待扫描任务进行并行的扫描和质量分析,进程的数量可以根据扫描队列中的待扫描任务的数量进行实时弹性伸缩。当某一时间段内开发者推送代码的频率较高时,进程的数量相应增加,提高待扫描任务的处理效率,从而使开发者能够很快地接收到代码质量的反馈。
进一步地,本发明提供了增量问题筛选机制,在每次完成质量分析时,从项目的所有代码问题中筛选出本次扫描到的代码质量问题,并将代码质量问题按照问题类型进行合并,生成本次待办问题,将本次待办问题通过即时消息系统推送至开发者,从而使开发者及时关注到本次推送的代码中的问题,引导开发者对问题进行排查和修复。
进一步地,本发明该提供了代码质量问题的跟踪闭环。在每次完成代码质量分析后,排查往期待办问题是否在本次推送的分支代码中已被修复,如果有已经修复的就更新往期待办问题集合,当待办问题中的所有问题都已修正后,就关闭待办问题,并通过即时消息系统通知开发者。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的用于持续集成过程中的静态代码质量分析系统100的示意图;
图2示出了根据本发明一个实施例的计算设备200的示意图;
图3示出了根据本发明一个实施例的用于持续集成过程中的静态代码质量分析方法300的流程图;
图4示出了根据本发明一个实施例的质量分析结果的展示界面的示意图;
图5示出了点击图4中的链接跳转至的页面的示意图;
图6示出了点击图5中的链接所跳转至的页面的示意图;以及
图7示出了根据本发明一个实施例的静态代码质量分析过程400的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了在持续集成过程中,当开发者将其更新的分支代码推送至代码仓库后,能够即时获知分支代码的质量情况,本发明提供一种用于持续集成过程中的静态代码质量分析方案。该方案能够使开发者及时获知自己推送的代码中的问题,引导开发者及时对问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。
图1示出了根据本发明一个实施例的用于持续集成过程中的静态代码质量分析系统100的示意图。如图1所示,系统100包括代码仓库服务器110、计算设备200、静态代码分析服务器120和数据存储装置130。应当指出,图1所示的系统100仅是示例性的,在实践中,系统100可以包括不同数量的代码仓库服务器、计算设备、静态代码分析服务器和数据存储装置,本发明对系统100所包括的码仓库服务器、计算设备、静态代码分析服务器和数据存储装置的数量不做限制。
代码仓库服务器110用于管理代码。代码仓库例如可以实现为GitLab,相应地,代码仓库服务器110为开发者团队部署的用于管理团队代码的服务器。在代码仓库中,管理员(root)可以创建一个或多个组(group),为组设置开发者成员(members),每个组中可以创建一个或多个项目(project),每个项目可以创建一个或多个分支(branch)。在持续集成开发项目中,各个开发者通常负责开发项目的一部分,即,一个开发者通常负责开发某一个或某几个特定分支的代码。
除了各个项目的代码之外,代码仓库中还存储有组、项目、分支以及开发者信息。这些信息包括但不限于:组名称、项目名称、项目的URL地址、分支名称、开发者名称、开发者联系方式、分支代码推送信息(包括推送时间、完成推送的开发者、项目版本号等)等。
如图1所示,开发者拥有一个或多个终端设备,终端设备例如可以是桌面计算机、笔记本计算机等个人配置的计算机,也可以是手机、平板电脑、智能可穿戴设备等移动终端,但不限于此。
开发者可以在其终端设备上编写相应分支的代码,并将更新后的分支代码推送(push)至代码仓库服务器110。这样,项目中的其他开发者可以从代码仓库服务器110拉取(pull)更新后的代码,从而同步项目进度。
在本发明的实施例中,当开发者将分支代码推送至代码仓库服务器110后,计算设备200将对开发者本次推送的代码进行质量分析,并将代码质量分析结果通过邮件、即时消息系统等渠道反馈给开发者。开发者可以在其终端设备中通过相应的应用(App)来收取并阅读邮件、即时消息等,从而获知本次推送的代码的质量分析结果。
需要说明的是,用于编写分支代码的终端设备与用于接收代码质量分析结果的终端设备可以是同一个设备,也可以是不同的设备。例如,如图1所示,开发者可以通过终端设备1来编写分支代码,并通过终端设备1上安装的邮箱应用、即时消息应用等来接收代码质量分析结果。又例如,开发者可以通过终端设备1来编写分支代码,通过终端设备2上安装的邮箱应用、即时消息应用等来接收代码质量分析结果。
在本发明的实施例中,计算设备200是具有通信和计算能力的设备,其可以实现为服务器、工作站等,也可以实现为桌面计算机、笔记本计算机等配置的个人计算机,在一些情况中,计算设备200还可以实现为手机、平板电脑、智能可穿戴设备、物联网设备等终端设备。
计算设备200用于在开发者将分支代码推送至代码仓库服务器110时,对分支代码进行质量分析,并将质量分析结果即时反馈给相应的开发者。如图1所示,计算设备200包括项目信息获取模块227、代码扫描模块228和增量问题发现和推送模块229。
项目信息获取模块227适于在开发者将分支代码推送至代码仓库时,获取分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列。
具体地,代码仓库服务器110处部署有与代码推送事件(git push事件)挂钩的钩子(webhook),并配置有钩子所调用的链接地址,该链接地址即为项目信息获取模块227的地址。项目信息获取模块227实现为一个代码文件,其中记载有一段代码。当代码仓库服务器110接收到代码推送事件时,该钩子被触发,将访问链接地址中记载的地址,即访问项目信息获取模块227。随后,计算设备200执行项目信息获取模块227中记载的代码,执行该代码的结果就是获取开发者推送的分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列。
代码扫描模块228适于对扫描队列中的待扫描任务进行扫描,以分析相应分支代码的质量。即,对于扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析,并存储质量分析结果。
具体地,代码扫描模块228可以启动一个或多个进程,通过调用静态代码分析模块(例如Sonar-scanner等)来进行分支代码的质量分析。当分析完成后,将质量分析结果发送至静态代码分析服务器120(例如SonarQube服务器等),静态代码分析服务器120将质量分析结果存储至数据存储装置130。
静态代码分析服务器120处部署有与质量分析结果存储事件挂钩的钩子(webhook),并配置有钩子所调用的链接地址,该链接地址即为增量问题发现和推送模块228的地址。增量问题发现和推送模块229实现为一个代码文件,其中记载有一段代码。当静态代码分析服务器将质量分析结果存储至数据存储装置130后,将访问链接地址中记载的地址,即访问增量问题发现和推送模块229。随后,计算设备200执行增量问题发现和推送模块229中记载的代码,从数据存储装置130中获取本次推送的分支代码的质量分析结果,并将获取到的质量分析结果即时反馈给相应的开发者。
根据本发明的技术方案,当开发者将分支代码推送至代码仓库后,计算设备200会自动获取分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列。对扫描队列中的每一个待扫描任务进行扫描,即对相应的分支代码进行质量分析,并将质量分析结果即时反馈给相应的开发者。这样,开发者能够及时获知自己推送的代码中的问题,引导开发者及时对问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。
需要说明的是,尽管在图1所示的实施例中,项目信息获取模块227、代码扫描模块228、增量问题发现和推送模块229部署于同一个计算设备200中,但本领域技术人员可以理解,这三个模块也可以部署于不同的计算设备中,不同的计算设备间通过网络通信连接。另外,在一些实施例中,代码仓库服务器110、计算设备200、静态代码分析服务器120也可以是同一个设备。
图2示出了根据本发明一个实施例的计算设备200的示意图。需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的用于持续集成过程中的静态代码质量分析方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的持续集成过程中的静态代码质量分析方法的计算设备可以对图2所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器204读取。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上由一个或多个处理器204利用程序数据224执行指令。操作系统220例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用222包括用于实现各种用户期望的功能的程序指令,应用222例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用222被安装到计算设备200中时,可以向操作系统220添加驱动模块。
在计算设备200启动运行时,处理器204会从存储器206中读取操作系统220的程序指令并执行。应用222运行在操作系统220之上,利用操作系统220以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用222时,应用222会加载至存储器206中,处理器204从存储器206中读取并执行应用222的程序指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备142包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
在根据本发明的计算设备200中,应用222包括用于执行本发明的静态代码分析方法300的指令,该指令包括项目信息获取模块227、代码扫描模块228、增量问题发现和推送模块229,可以指示处理器104执行本发明的用于持续集成过程中的静态代码质量分析方法,自动对开发者推送的分支代码进行质量分析,并将分析结果即时反馈给开发者,使开发者能够及时获知自己推送的代码中的问题,引导开发者及时对问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。
图3示出了根据本发明一个实施例的用于持续集成过程中的静态代码质量分析方法300的流程图。方法300在计算设备(例如前述计算设备200)中执行,用于自动对开发者推送的分支代码进行质量分析,并将分析结果即时反馈给开发者。如图3所示,方法300始于步骤S310。
在步骤S310中,当开发者将分支代码推送至代码仓库时,获取分支代码所属的项目分支信息,将项目分支信息作为待扫描任务加入扫描队列。
步骤S310由项目信息获取模块227执行。当开发者通过git push命令将其更新的分支代码推送至代码仓库时,部署于代码仓库服务器110中的钩子捕获本次git push推送事件,调用项目信息获取模块227,从代码仓库中获取该分支代码所属的项目分支信息。
根据一种实施例,项目分支信息包括项目名称、分支名称、开发者联系方式、开发者名称、项目地址、项目版本号中的至少一种。各项信息的含义如下:
项目名称:开发者推送的分支代码所属的项目的名称;
分支名称:开发者推送的分支的名称;
开发者联系方式:代码仓库中配置的开发者的邮箱地址、即时通讯账号等,用于接收代码质量分析结果;
开发者名称:代码仓库中配置的开发者的姓名;
项目地址:项目的URL地址;
项目版本号:开发者将代码推送至代码仓库服务器110后,相应的项目在服务器110上的最新版本号。
应当指出,以上仅列出了部分项目分支信息,本领域技术人员可以理解,在实践中,加入扫描队列的项目分支信息可以是以上信息中的一种或多种,也可以增加其他的信息,本发明对项目分支信息的具体构成不做限制。
从代码仓库中获取到分支代码所属的项目分支信息后,将项目分支信息作为待扫描任务加入扫描队列,即,每一组项目分支信息用于标识一个待扫描任务。
根据一种实施例,采用分支白名单来记录不需要进行静态代码扫描的分支,例如测试分支、文档分支等。判断分支代码所在的分支是否位于分支白名单中,若否,则将相应的项目分支信息作为待扫描任务加入扫描队列;若是,则表明该分支代码无需进行质量分析,即无需将相应的项目分支信息作为待扫描任务加入扫描队列。这样可以避免对分支白名单中的分支进行静态代码扫描,从而提高代码质量分析的效率。
本领域技术人员可以理解,扫描队列是一种动态的数据存储结构,扫描队列中存储的是待扫描任务,当扫描任务出队时,该扫描任务才被执行,扫描队列中无法存储待扫描任务的扫描状态,即无法存储待扫描任务是否成功完成扫描。根据一种实施例,采用扫描记录表来存储各个待扫描任务的扫描状态。在将项目分支信息加入扫描队列后,将该项目分支信息持久化存储至项目扫描记录表中,并标记该任务的状态为待扫描。
在步骤S310中,一旦开发者将分支代码推送至代码仓库,项目信息获取模块227即将该分支代码的项目分支信息加入扫描队列,以便后续对该分支代码进行静态代码扫描,分析其质量。对于开发者来说,不需要关注静态代码扫描如何配置,开发者创建的任何项目分支均在静态代码扫描的监测范围内。
在步骤S320中,对于扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析,并存储质量分析结果。
步骤S320由代码扫描模块228执行。
根据一种实施例,采用多个进程来并行处理扫描队列中的待扫描任务。具体地,当扫描队列中的待扫描任务的数量小于等于预设的最大并发数量时,创建多个进程,每个进程对应于一个待扫描任务,多个进程并行地对相应的分支代码进行质量分析。当扫描队列中的待扫描任务的数量大于最大并发数量时,创建最大并发数量个进程,最大并发数量个进程按照待扫描任务被加入扫描队列的顺序,并行地对待扫描任务所对应的分支代码进行质量分析。每当有进程空闲后,空闲的进程将继续获取位于扫描队列队首的项目分支信息,对相应的分支代码进行扫描。
例如,设置最大并发数量为4。若扫描队列中有3个待扫描任务,则创建3个进程,每个进程用于处理一个待扫描任务,对相应的分支代码进行质量分析。若扫描队列中有6个待扫描任务,分别记为待扫描任务1~6,则按照最大并发数量创建进程,即创建4个进程,这4个进程分别处理扫描队列的前4个待扫描任务,即处理待扫描任务1~4。当有进程完成扫描,得出相应分支代码的质量分析结果后,获取当前位于扫描队列队首的待扫描任务,继续对该待扫描任务进行扫描。例如,进程2首先完成对待扫描任务2的处理分析,随后其继续处理待扫描任务5。随后若再有进程空闲,则空闲的进程继续处理待扫描任务6。
通过采用多个进程来并行对扫描队列中的待扫描任务,并且根据扫描队列中的待扫描任务的数量来弹性调整进程的数量,可以大大提升扫描队列的处理效率。在采用了上述方法后,处理1000个待扫描任务的时间由10小时缩短至30分钟。
根据一种实施例,每一个进程按照以下步骤S322~S326来对待扫描任务所对应的分支代码进行质量分析:
在步骤S322中,确定分支代码的语言类型。
根据一种实施例,根据分支代码所在的项目文件夹的特征来确定分支代码的语言类型。
例如,若分支代码所在的项目文件夹中存在名称为pom.xml的文件,则分支代码的语言类型为Java;若分支代码所在的项目文件夹中,后缀名为.cs的文件的比例大于第一阈值,则分支代码的语言类型为C#;若分支代码所在的项目文件夹中,后缀名为.py的文件的比例大于第二阈值,则分支代码的语言类型为Python;若分支代码所在的项目文件夹中存在名为package.json的文件,则分支代码的语言类型为JavaScript;等等。
上述实施例中的第一阈值、第二阈值的取值可以由本领域技术人员自行设置,本发明对此不做限制。在一个实施例中,可以将第一阈值、第二阈值均设置为50%。
随后,在步骤S324中,根据语言类型,将待扫描任务的项目分支信息组装成扫描命令。
根据一种实施例,扫描命令是用于调用静态代码分析模块的命令,扫描命令中需要指明项目名称、项目目录位置、静态代码分析服务的URL地址等参数。在静态代码分析模块中,不同语言类型对应的扫描命令的格式不同,因此在步骤S324中,需要根据语言类型来动态组装扫描命令。
例如,静态代码分析模块可以是Sonar-scanner客户端,步骤S320中的进程可以调用Sonar-scanner来进行代码质量分析。不同语言类型所对应的Sonar-scanner扫描命令的格式不同。以下以Java、JavaScript、Python为例,来说明对应的扫描命令的格式。
Java项目的扫描命令如下:
mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.5.0.1254:sonar
-Dsonar.host.url=http://sonar.corpautohome.com.cn
-Dsonar.login=0a719a4d87f808437bc45611724e67f8bc43db70
-Dsonar.projectName=dealercloud.api.autohome.com.cn.arvr____master____JAVA____.
-Dsonar.projectKey=dealercloud.api.autohome.com.cn.arvr_959_JAVA_10448
'-Dsonar.coverage.exclusions=**/src/test/**,**/*Test.java,**/domain/**/*.java,**/contract/
**/*.java,**/*In.java,**/*Out.java,**/model/**/*.java,**/config/*.java'
'-Dsonar.exclusions=**jquery**,**Gen**.java,**.html,**.js,**.*css,**.xml,**.jsp,**.vue'
'-Dsonar.cpd.exclusions=**/src/test/**,**/*Test.java,**/domain/**/*.java,**/contract/**/*.
java,**/*In.java,**/*Out.java,**/model/**/*.java,**/config/*.java,**/*.js,**/dto/**/*.java,
**/**/*.js,**.html,**/**.html,**/**/**.html,**/*Mapper.java,**/Models/*'
-Dsonar.analysis.git_project_id=346
-Dsonar.analysis.git_branch_id=959
-Dsonar.analysis.git_commit_sha=6cc7d8285779257614358407802091b8ceab0e32
-Dsonar.analysis.commit_employee=wangyunpeng
-Dsonar.analysis.is_IncrementCodeQuality_consuming=0
-Dsonar.analysis.project_keyfile_id=10448-P test-e dependency:list
-DoutputFile=/data/jenkins/workspace/SonarQube_Dealer_Git@3/mvn_dependecy.txt
-DappendOutput=true
JavaScript(前端)项目的扫描命令如下:
sonar-scanner
-Dsonar.host.url=http://sonar.corpautohome.com.cn
-Dsonar.login=0a719a4d87f808437bc45611724e67f8bc43db70
-Dsonar.projectKey=web-resource_1385_JS_10184
$'-Dsonar.projectName=web-resource____develop____JS____./M/2018\351\231\220\346\227\266\347\211\271\346\203\240-VUE\345\215\207\347\272\247\347\211\210/tuangou-vue'-Dsonar.sources=./src
'-Dsonar.exclusions=**.*css,**.html,**.xml,**.jsp'
-Dsonar.eslint.eslintenabled=true
-Dsonar.eslint.eslintpath=/data/node-v8.8.1-linux-x64/bin/eslint
-Dsonar.eslint.eslintconfigpath=/data/node-v8.8.1-linux-x64/.eslintrc.es6.json
-Dsonar.analysis.git_project_id=563
-Dsonar.analysis.git_branch_id=1385
-Dsonar.analysis.git_commit_sha=5b5e09f9cda4a466bc4a86511d5106fb0e6c1858
-Dsonar.analysis.commit_employee=zhangguofeng
-Dsonar.analysis.is_IncrementCodeQuality_consuming=0
-Dsonar.analysis.project_keyfile_id=10184
Python项目的扫描命令如下:
sonar-scanner
-Dsonar.host.url=http://10.168.96.69:9000
-Dsonar.login=0a719a4d87f808437bc45611724e67f8bc43db70
-Dsonar.projectKey=dealerqa_basedata_job_1137_PYTHON_10200
-Dsonar.projectName=dealerqa_basedata_job____master____PYTHON____./
-Dsonar.sources=.
-Dsonar.projectVersion=1.0
'-Dsonar.exclusions=**venv**,**/Lib/**,**.html,**.js,**/dao/**,**.html,**.xml,**.jsp,**.css,**.vue'
'-Dsonar.cpd.exclusions=**/models/**,**/dao/**'
'-Dsonar.inclusions=**.py'
-Dsonar.analysis.git_project_id=443
-Dsonar.analysis.git_branch_id=1137
-Dsonar.analysis.git_commit_sha=9a7c4ef2650d618e491deed7fee8cae0669e7181
-Dsonar.analysis.commit_employee=zhangjun1102
-Dsonar.analysis.is_IncrementCodeQuality_consuming=0
-Dsonar.analysis.project_keyfile_id=10200
随后,在步骤S326中,执行扫描命令,根据语言类型所对应的分析规则来对分支代码进行质量分析。
根据一种实施例,执行扫描命令后,将调用静态代码分析模块。静态代码分析模块(SonarQube中的scanner扫描器,记为Sonar-scanner)根据扫描命令中配置的sonar.projectName(项目名称,需要说明的是,SonarQube中的项目与Git中的项目含义不同,SonarQube中的项目实际上指的是Git项目中的一个分支)、sonar.analysis.git_project_id(Git项目标识)、sonar.analysis.git_branch_id(Git分支标识)等参数,从Git代码仓库中获取对应的分支代码。随后,获取预先配置的语言类型的分析规则,来对分支代码进行质量分析,扫描出分支代码的质量问题。
如果扫描成功,即本次质量分析成功,则通过扫描命令中配置的sonar.host.url和sonar.login(token)参数,将质量分析结果推送至静态代码分析服务端,即推送至图1中所示的静态代码分析服务器120。随后,静态代码分析服务器120将本次质量分析结果存储至数据存储装置130。
如果扫描失败,即本次质量分析失败,则将分析失败的消息和失败原因即时反馈给开发者。具体地,根据项目分支信息中记载的开发者联系方式,将分析失败的消息和失败原因发送给开发者,并且将扫描记录表中的相应待扫描任务的状态修改为扫描失败,以供后续排查处理。失败原因例如可以是分支代码编译失败、单元测试失败等,但不限于此。
静态代码分析服务器120处部署有与质量分析结果存储事件挂钩的钩子(webhook),并配置有钩子所调用的链接地址,该链接地址即为增量问题发现和推送模块228的地址。当静态代码分析服务器120将质量分析结果存储至数据存储装置130后,将访问链接地址中记载的地址,即访问增量问题发现和推送模块229。随后,增量问题发现和推送模块229执行下述步骤S330,从数据存储装置130中获取本次推送的分支代码的质量分析结果,并将获取到的质量分析结果即时反馈给相应的开发者。
在步骤S330中,将分支代码的质量分析结果即时反馈给相应的开发者。具体地,根据项目分支信息中记载的开发者联系方式,例如通过邮件、即时消息等渠道将质量分析结果即时反馈给相应的开发者。
根据一种实施例,在步骤S330中,从数据存储装置130中获取本次推送的分支代码的质量分析结果,质量分析结果包括一个或多个代码质量问题。将本次质量分析结果中的代码质量问题按照问题类型进行合并,生成本次待办问题,并将本次待办问题通过即时消息系统推送至开发者。代码质量问题的问题类型例如包括Bug、漏洞、坏味道、重复块、注释比例不合理等,但不限于此。
图4示出了根据本发明一个实施例的采用即时消息系统来向开发者反馈质量分析结果的示意图。当开发者将其编写的分支代码推送至代码仓库后,计算设备200将自动分析该代码的质量,并将质量分析结果通过即时消息系统反馈给开发者。相应地,如图4所示,开发者将在其终端设备的即时消息应用中收到一条记载有本次代码质量分析结果的即时消息,该即时消息中记载有代码所在的项目和分支、项目语言类型、该代码中出现的不同类型的代码质量问题的数量、以及代码质量问题的详细信息的链接等信息。如图4所示,本次代码的质量问题包括4个坏味道和3个重复块。开发者点击图4中的链接,将跳转至图5所示的页面。
图5所示的页面中记载了代码质量问题的详情,包括问题的严重级别、本次增加的问题的数量、扫描时间、问题状态以及各个问题的代码链接。当点击图5中的某一个问题的链接后,将跳转至有问题的代码行。例如,点击图5中第一个坏味道的链接“2270485”,将跳转至图6所示的页面,图6中示出了该坏味道(bad-practice)所对应的代码行。
根据一种实施例,步骤S330还包括:排查往期待办问题是否在本次推送的分支代码中已被修复,其中,往期待办问题为本次质量分析之前存在的代码质量问题;以及将已被修复的代码质量问题从往期待办问题集合中移除。
增量问题发现和推送模块229从数据存储装置130中获取本次推送的分支代码的质量分析结果,找出本次新增的代码质量问题。此外,排查往期待办问题中是否有在本次推送的分支代码中被修复的,如果有已修复的就更新往期待办问题集合,随后,可以将往期待办问题通过即时消息系统推送至相应的开发者。
本发明的技术方案能够及时响应于开发者的代码推送,将代码质量情况快速反馈给开发者,开发者无需关注具体静态代码扫描的配置和实现,非常容易应用。其静态代码质量结果在项目质量管理中,具备重要的参考价值,同时推动项目的技术债的减少。
以某个Java项目为例,同一时间,开发者A和开发者B分别在项目project A的master和develop分支推送了新的代码,经过本发明技术方案的一系列处理,项目的master分支扫描成功,得到了质量分析结果,通知开发者A本次推送代码新增的坏味道、bug和漏洞等具体的代码问题,以及本次修复的问题;develop分支由于单元测试报错,没有扫描成功,开发者B接收到项目project A的develop分支扫描失败的消息和具体失败原因。
图7示出了根据本发明一个实施例的静态代码质量分析过程400的示意图。过程400始于步骤S402。
在步骤S402中,开发者推送分支代码至Gitlab服务器。代码推送事件触发项目信息获取模块227,在步骤S404中,项目信息获取模块227获取该代码的项目分支信息。
随后,在步骤S406中,判断该分支代码所在的分支是否为应扫描分支,若是,则执行步骤S408;若否,则结束。
在步骤S408中,将分支代码的项目分支信息作为待扫描任务加入扫描队列。并且,在步骤S410中,设置扫描记录表,用于持久化存储项目分支信息及其扫描状态(是否被扫描,以及扫描是否成功)。
在步骤S412中,取出位于扫描队列队首的待扫描任务,以便对其进行扫描。在步骤S414中,判断当前是否存在可用进程(即空闲进程),若是,则执行步骤S416,复用现有的可用进程来执行待扫描任务,对相应的分支代码进行质量分析;若否,则执行步骤S418,创建新进程(如果当前进程数量小于最大并发数量的话),由该新进程来执行待扫描任务,对相应的分支代码进行质量分析。
在步骤S420中,进程首先判断分支代码的语言类型,随后在步骤S422中,根据语言类型来将相应的项目分支信息动态组装成扫描命令,执行扫描命令,根据语言类型所对应的分析规则来分析分支代码的质量。
在步骤S424中,判断是否扫描成功,即是否成功完成代码质量分析。若是,则执行步骤S428,将质量分析结果上传至SonarQube服务器,以便服务器将质量分析结果存储至数据存储装置,并在步骤S430中,将扫描记录表中的相应待扫描任务的状态修改为扫描成功。若否,则执行步骤S426,将扫描失败的原因通过即时消息系统推送给开发者,随后结束。
在步骤S432中,调用增量问题发现接口,随后在步骤S436中,判断往期待办问题是否在本次推送的代码中被修复。若是,则执行步骤S440,将已修复的问题移出往期待办问题集合;若否,则执行步骤S438,不更新往期待办问题集合。
在步骤S434中,将本次推送的分支代码的质量分析结果通过即时消息系统推送至开发者。推送的内容除了包括本次的质量分析结果(即按照问题类型合并后的待办问题)之外,还可以包括往期待办问题。
本发明的技术方案可以在开发者将分支代码推送至代码仓库后,自动收到本次推送代码的质量分析结果,使开发者能够及时获知自己推送的代码中的问题,引导开发者及时对问题进行排查和修复,从而大大提高整个持续集成过程的质量和效率。并且,对于开发者来说,不需要关注静态代码扫描如何配置,开发者创建的任何项目分支均在静态代码扫描的监测范围内。相对于现有技术,本方案的用户体验、易用性、可维护性均得到大幅提升。
以下列举两种现有技术,以对比说明本方案的技术效果:在现有技术一中,开发者推送代码后,配置Git push钩子调用Jenkins,通过Sonar-scanner把项目静态代码问题同步到SonarQube,再通过邮箱将问题发送给开发者。该方案在项目较多时,需要手动配置项目钩子和sonar扫描脚本,接入成本很大,当大规模应用时配置管理成本投入过高。另外,SonarQube只能扫描单个分支的数据,不能全面监控项目过程质量。第三、SonarQube的问题发送邮箱有时不准确,不能把问题全部反馈至代码推送者,导致问题发送不出来,无法得到解决。
在现有技术二中,SonarQube的Gitlab-plugin配合gitlab-ci完成每次commit代码检测,在SonarQube服务端配置GitLab地址和UserToken,在Git中通过GitLab CI Runner调用Pipeline Stage检测项目代码,同样是通过sonar-scanner把项目代码问题同步到SonarQube,再通过邮箱将问题发送出来。该方案的主要缺点是在每个项目下都必须有自己的sonar-project.properties配置SonarQube的地址和token以及项目的信息,同时也还需要.gitlab-ci.yml配置sonar脚本,在新增项目以及项目数量上去后,手动配置以及维护问题凸显。同时静态代码扫描过程和Pipeline高度耦合,维护成本很大。
A11、一种计算设备,包括:
至少一个处理器和存储有程序指令的存储器;
当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。
A12、一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的用于持续集成过程中的静态代码质量分析方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种用于持续集成过程中的静态代码质量分析方法,在计算设备中执行,包括步骤:
当开发者将分支代码推送至代码仓库时,获取所述分支代码所属的项目分支信息,将所述项目分支信息作为待扫描任务加入扫描队列;
对于所述扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析,并存储质量分析结果;
将分支代码的质量分析结果即时反馈给相应的开发者。
2.如权利要求1所述的方法,其中,所述项目分支信息包括:项目名称、分支名称、开发者联系方式、开发者名称、项目地址、项目版本号中的至少一种。
3.如权利要求1或2所述的方法,其中,所述将所述项目分支信息作为待扫描任务加入扫描队列的步骤包括:
判断所述分支代码所在的分支是否位于分支白名单中,若否,则将相应的项目分支信息作为待扫描任务加入扫描队列。
4.如权利要求1-3中任一项所述的方法,其中,所述对于所述扫描队列中的每一个待扫描任务,对该待扫描任务所对应的分支代码进行质量分析的步骤包括:
当所述扫描队列中的待扫描任务的数量小于等于预设的最大并发数量时,创建多个进程,每个进程对应于一个待扫描任务,所述多个进程并行地对相应的分支代码进行质量分析;
当所述扫描队列中的待扫描任务的数量大于所述最大并发数量时,创建最大并发数量个进程,所述最大并发数量个进程按照待扫描任务被加入扫描队列的顺序,并行地对待扫描任务所对应的分支代码进行质量分析。
5.如权利要求1-4中任一项所述的方法,其中,所述对待扫描任务所对应的分支代码进行质量分析的步骤包括:
确定所述分支代码的语言类型;
根据所述语言类型,将所述待扫描任务的项目分支信息组装成扫描命令;
执行所述扫描命令,根据所述语言类型所对应的分析规则来对所述分支代码进行质量分析。
6.如权利要求5所述的方法,其中,根据所述分支代码所在的项目文件夹的特征来确定所述分支代码的语言类型。
7.如权利要求5或6所述的方法,其中,所述确定所述分支代码的语言类型的步骤包括:
若分支代码所在的项目文件夹中存在名称为pom.xml的文件,则分支代码的语言类型为Java;
若分支代码所在的项目文件夹中,后缀名为.cs的文件的比例大于第一阈值,则分支代码的语言类型为C#;
若分支代码所在的项目文件夹中,后缀名为.py的文件的比例大于第二阈值,则分支代码的语言类型为Python;
若分支代码所在的项目文件夹中存在名为package.json的文件,则分支代码的语言类型为JavaScript。
8.如权利要求1-7中任一项所述的方法,其中,所述质量分析结果包括一个或多个代码质量问题,
所述将分支代码的质量分析结果即时反馈给相应的开发者的步骤包括:
将本次质量分析结果中的代码质量问题按照问题类型进行合并,生成本次待办问题;以及
将本次待办问题通过即时消息系统推送至开发者。
9.如权利要求1-8中任一项所述的方法,其中,在所述存储质量分析结果的步骤之后,还包括步骤:
排查往期待办问题是否在本次推送的分支代码中已被修复,其中,所述往期待办问题为本次质量分析之前存在的代码质量问题;以及
将已被修复的代码质量问题从往期待办问题集合中移除。
10.如权利要求1-9中任一项所述的方法,还包括步骤:若本次质量分析失败,则将分析失败的消息和失败原因即时反馈给开发者。
CN202010127984.5A 2020-02-28 2020-02-28 用于持续集成过程中的静态代码质量分析方法及计算设备 Pending CN111414302A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010127984.5A CN111414302A (zh) 2020-02-28 2020-02-28 用于持续集成过程中的静态代码质量分析方法及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010127984.5A CN111414302A (zh) 2020-02-28 2020-02-28 用于持续集成过程中的静态代码质量分析方法及计算设备

Publications (1)

Publication Number Publication Date
CN111414302A true CN111414302A (zh) 2020-07-14

Family

ID=71494251

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010127984.5A Pending CN111414302A (zh) 2020-02-28 2020-02-28 用于持续集成过程中的静态代码质量分析方法及计算设备

Country Status (1)

Country Link
CN (1) CN111414302A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111930632A (zh) * 2020-08-19 2020-11-13 山东健康医疗大数据有限公司 一种前端代码检测质量的方法
CN112114859A (zh) * 2020-09-17 2020-12-22 云账户技术(天津)有限公司 一种文件处理方法、装置及存储介质
CN112256580A (zh) * 2020-10-23 2021-01-22 济南浪潮数据技术有限公司 一种代码扫描方法、装置、设备及存储介质
CN113032286A (zh) * 2021-05-24 2021-06-25 连连(杭州)信息技术有限公司 一种代码质量的扫描方法、装置及存储介质
CN113126998A (zh) * 2021-04-21 2021-07-16 北京字节跳动网络技术有限公司 一种增量源码获取方法、装置、电子设备及存储介质
CN113609004A (zh) * 2021-07-17 2021-11-05 深圳开源互联网安全技术有限公司 一种静态代码检测方法和系统
CN115061702A (zh) * 2022-08-19 2022-09-16 荣耀终端有限公司 一种ide管理方法及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110307954A1 (en) * 2010-06-11 2011-12-15 M86 Security, Inc. System and method for improving coverage for web code
CN104423960A (zh) * 2013-09-10 2015-03-18 阿里巴巴集团控股有限公司 一种项目持续集成的方法及系统
CN109542769A (zh) * 2018-10-25 2019-03-29 武汉精立电子技术有限公司 一种持续集成的自动化测试方法
CN109684215A (zh) * 2018-12-25 2019-04-26 中国科学院电子学研究所苏州研究院 一种自动化软件系统质量检查和快速迭代方法
CN110018958A (zh) * 2019-03-12 2019-07-16 深圳壹账通智能科技有限公司 代码缺陷扫描方法、装置、计算机设备和存储介质
CN110674035A (zh) * 2019-09-12 2020-01-10 上海麦克风文化传媒有限公司 一种自动化代码扫描方法、系统、装置及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110307954A1 (en) * 2010-06-11 2011-12-15 M86 Security, Inc. System and method for improving coverage for web code
CN104423960A (zh) * 2013-09-10 2015-03-18 阿里巴巴集团控股有限公司 一种项目持续集成的方法及系统
CN109542769A (zh) * 2018-10-25 2019-03-29 武汉精立电子技术有限公司 一种持续集成的自动化测试方法
CN109684215A (zh) * 2018-12-25 2019-04-26 中国科学院电子学研究所苏州研究院 一种自动化软件系统质量检查和快速迭代方法
CN110018958A (zh) * 2019-03-12 2019-07-16 深圳壹账通智能科技有限公司 代码缺陷扫描方法、装置、计算机设备和存储介质
CN110674035A (zh) * 2019-09-12 2020-01-10 上海麦克风文化传媒有限公司 一种自动化代码扫描方法、系统、装置及存储介质

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111930632A (zh) * 2020-08-19 2020-11-13 山东健康医疗大数据有限公司 一种前端代码检测质量的方法
CN112114859A (zh) * 2020-09-17 2020-12-22 云账户技术(天津)有限公司 一种文件处理方法、装置及存储介质
CN112256580A (zh) * 2020-10-23 2021-01-22 济南浪潮数据技术有限公司 一种代码扫描方法、装置、设备及存储介质
CN112256580B (zh) * 2020-10-23 2024-02-13 济南浪潮数据技术有限公司 一种代码扫描方法、装置、设备及存储介质
CN113126998A (zh) * 2021-04-21 2021-07-16 北京字节跳动网络技术有限公司 一种增量源码获取方法、装置、电子设备及存储介质
CN113126998B (zh) * 2021-04-21 2023-11-07 北京字节跳动网络技术有限公司 一种增量源码获取方法、装置、电子设备及存储介质
CN113032286A (zh) * 2021-05-24 2021-06-25 连连(杭州)信息技术有限公司 一种代码质量的扫描方法、装置及存储介质
CN113609004A (zh) * 2021-07-17 2021-11-05 深圳开源互联网安全技术有限公司 一种静态代码检测方法和系统
CN113609004B (zh) * 2021-07-17 2023-11-03 深圳开源互联网安全技术有限公司 一种静态代码检测方法和系统
CN115061702A (zh) * 2022-08-19 2022-09-16 荣耀终端有限公司 一种ide管理方法及电子设备

Similar Documents

Publication Publication Date Title
CN111414302A (zh) 用于持续集成过程中的静态代码质量分析方法及计算设备
US8984489B2 (en) Quality on submit process
US20080244565A1 (en) Dynamic software installation and configuration
US8504803B2 (en) System and method for creating and executing portable software
US8510718B2 (en) Platform verification portal
US9811325B2 (en) Systems and methods for dynamically replacing code objects for code pushdown
US8898178B2 (en) Solution monitoring system
US9552214B2 (en) Tool for automated extraction and loading of configuration settings
US20220344039A1 (en) Scalable and Traceable Healthcare Analytics Management
US20130339931A1 (en) Application trace replay and simulation systems and methods
US8549539B2 (en) Programmatic modification of a message flow during runtime
US9965257B2 (en) Automatic configuration of project system from project capabilities
US20200012970A1 (en) Machine-learning-facilitated conversion of database systems
CN112527382B (zh) 部署流水线引擎系统的方法、持续集成的方法及装置
US11636029B2 (en) Testing as a service
CN110543301A (zh) jenkins代码文件的生成方法及装置
CN110727575B (zh) 一种信息处理方法、系统、装置、以及存储介质
CN113342560A (zh) 一种故障处理方法、系统、电子设备及存储介质
WO2021021321A1 (en) Parallel cloned workflow execution
JP7211228B2 (ja) 解析装置、解析方法、及びプログラム
US20070198927A1 (en) Computer-implemented systems and methods for an automated application interface
US8522256B2 (en) Hosting non-messaging workflows in a messaging host
US11386209B2 (en) Static source code scanner
US20230385056A1 (en) Removing inactive code to facilitate code generation
US8387040B2 (en) Dynamic creation of client-side environment for problem analysis

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