CN108304327B - 静态代码扫描结果处理方法和装置 - Google Patents
静态代码扫描结果处理方法和装置 Download PDFInfo
- Publication number
- CN108304327B CN108304327B CN201810107376.0A CN201810107376A CN108304327B CN 108304327 B CN108304327 B CN 108304327B CN 201810107376 A CN201810107376 A CN 201810107376A CN 108304327 B CN108304327 B CN 108304327B
- Authority
- CN
- China
- Prior art keywords
- scanning
- defect
- software
- code
- task
- 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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (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
技术领域
本申请涉及计算机技术领域,特别是涉及一种静态代码扫描结果处理方法和装置。
背景技术
软件测试开发过程中,需要通过静态代码扫描来检查代码质量。其中,静态代码扫描指的是在不需要运行代码的情况下,通过文本分析和正则匹配等扫描代码,发现代码中存在的规范性和安全性问题,并输出代码的扫描结果的技术。常用的静态代码扫描工具有fortify、TscanCode等。
静态代码扫描工具每完成一次代码扫描,会输出一个扫描结果,扫描结果中包括若干条缺陷数据。软件开发人员和测试人员根据扫描结果,可以了解软件产品存在缺陷的情况。然而,传统的静态代码扫描工具功能较为单一,仅能够提供每个版本项目代码的扫描结果,缺乏对扫描结果的处理机制。目前需要软件开发人员或测试人员对包含大量缺陷数据的扫描结果进行人工处理,而人工的方式使得扫描结果处理效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高扫描结果处理效率的静态代码扫描结果处理方法和装置。
一种静态代码扫描结果处理方法,所述方法包括:获取多个软件标识对应的检测周期,按照所述检测周期检测相应软件标识对应的软件代码是否发生更新;当检测到检测周期对应的软件代码发生更新时,将所述软件代码标记为目标代码,利用所述目标代码分别生成对应的扫描任务;执行所述扫描任务,得到所述目标代码对应的第一扫描结果;获取上一次扫描所述目标代码得到的扫描结果,记作第二扫描结果,将所述第一扫描结果与所述第二扫描结果进行对比,得到对比结果;获取所述目标代码对应的缺陷数据页面,所述缺陷数据页面包括多条缺陷数据;根据所述对比结果对所述缺陷数据页面上的缺陷数据进行更新。
一种静态代码扫描结果处理装置,所述装置包括:更新检测模块,用于获取多个软件标识对应的检测周期,按照所述检测周期检测相应软件标识对应的软件代码是否发生更新;代码提取模块,用于当检测到检测周期对应的软件代码发生更新时,将所述软件代码标记为目标代码,利用所述目标代码分别生成对应的扫描任务;代码扫描模块,用于执行所述扫描任务,得到所述目标代码对应的第一扫描结果;结果处理模块,用于获取上一次扫描所述目标代码得到的扫描结果,记作第二扫描结果,将所述第一扫描结果与所述第二扫描结果进行对比,得到对比结果;获取所述目标代码对应的缺陷数据页面,所述缺陷数据页面包括多条缺陷数据;根据所述对比结果对所述缺陷数据页面上的缺陷数据进行更新。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项方法的步骤。
上述静态代码扫描结果处理方法、装置、计算机设备和存储介质,针对每个软件的软件代码设定对应的检测周期,每隔检测周期检测相应软件标识对应的软件代码是否发生更新,当检测到达到检测周期且发生更新的软件代码时,可以自动触发对该软件代码的扫描;仅对达到检测周期且发生更新的软件代码进行扫描,可以减少因扫描过于频繁或过多无效扫描,造成对服务器资源的占用。对软件代码相邻两次的扫描结果进行对比,根据扫描结果自动对相应缺陷数据页面上多个缺陷的缺陷数据进行更新,相对传统的需要开发人员或测试人员根据多个缺陷的修复情况人工对缺陷数据页面上的大量缺陷数据进行处理,可以准确发现多个缺陷被关联修复的情况以及对开发人员对缺陷的修复进行验证,从而可以提高缺陷数据页面上显示的缺陷数据的准确性,也可以提高提高缺陷数据页面更新的及时性,还可以极大地减少了开发人员和测试人员的工作负担,进而提升了软件开发效率。
附图说明
图1为一个实施例中静态代码扫描结果处理方法的应用场景图;
图1A为另一个实施例中静态代码扫描结果处理方法的应用框架图;
图2为一个实施例中静态代码扫描结果处理方法的流程示意图;
图3为一个实施例中静态代码扫描结果处理装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的静态代码扫描结果处理方法,可以应用于如图1所示的应用环境中。其中,开发终端102通过网络与服务器104通过网络进行通信。测试终端106通过网络与服务器104通过网络进行通信。其中,开发终端102为软件开发人员对应的终端,测试终端106为软件测试人员对应的终端。开发终端102与测试终端106分别可以是智能手机、平板电脑、台式计算机或笔记本电脑中的至少一种,但并不局限于此。服务器104可以用独立的服务器或多个服务器组成的服务器集群来实现。服务器104上运行了静态代码扫描工具,如fortify。
当服务器104为多个服务器组成的服务器集群时,服务器104包括第一服务器1042、第二服务器1044和第三服务器1046。其中,第一服务器1042、第二服务器1044与第三服务器1046又分别可以用独立的服务器或者用多个服务器组成的服务器集群来实现。例如,如图1A所示,第一服务器1042可以是独立的Git(一种分布式版本控制***)服务器。第二服务器1044可以是基于C/S架构(Client–server model,主从式架构)的服务器集群,包括主服务器和多个节点服务器。其中主服务器可以是Jenkins(一种软件持续集成工具)server服务器,节点服务器可以是Jenkins Slave服务器。节点服务器上运行了静态代码扫描工具。第三服务器1046可以是分布式服务器集群,包括数据库服务器、结果处理服务器和查询服务器。其中,当静态代码扫描工具为fortify时,数据库服务器可以是fortify数据库服务器,结果处理服务器可以是focus服务器,查询服务器可以是fortify web服务器。以下将以服务器104为服务器集群为例进行描述。
开发终端102在进行软件开发过程中,将软件代码上传至第一服务器1042。第二服务器1044按照预设的多个软件标识对应的检测周期对第一服务器1042上存储的相应软件代码是否发生更新进行检测,将发生更新的软件代码标记为目标代码。第二服务器1044在第一服务器1042中提取目标代码,利用提取到的每个目标代码生成对应的扫描任务,执行扫描任务,得到本次扫描目标代码对应的扫描结果,记作第一扫描结果。第二服务器1044将第一扫描结果发送至第三服务器1046。第三服务器1046中存储了上次扫描目标代码得到的扫描结果(以下称“第二扫描结果”),以及根据第二扫描结果生成的目标代码对应的缺陷数据页面。缺陷数据页面记录了多个缺陷及对应的缺陷数据。第三服务器1046将目标代码的第一扫描结果和第二扫描结果进行对比,识别第一扫描结果相对第二扫描结果是否存在新增缺陷或已修复缺陷,在缺陷数据页面上添加新增缺陷的缺陷数据,删除已修复缺陷的缺陷数据,从而对缺陷数据页面进行更新。开发终端102或测试终端106可以向服务器104发送查询请求。服务器104根据查询请求携带的软件标识获取对应更新后的缺陷数据页面,将缺陷数据页面返回至开发终端102或测试终端106。软件代码进行修改后形成新的版本,上述扫描过程对不同版本的软件代码的扫描结果进行对比,并根据对比结果相应缺陷数据页面上的缺陷数据进行更新,可以提高扫描结果处理的效率和准确率。
在一个实施例中,如图2所示,提供了一种静态代码扫描结果处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤202,获取多个软件标识对应的检测周期,按照检测周期检测相应软件标识对应的软件代码是否发生更新。
每个版本的软件在测试开发过程中,可能需要多次进行静态代码扫描,以检查软件代码的质量。为了描述方便,可以理解为同一版本软件具有多个不同版本的软件代码。对旧版本的软件代码进行修改得到新版本的软件代码。每个版本的软件代码具有对应的代码标识。开发人员在软件开发过程中,将不同版本的软件代码上传至第一服务器。第一服务器上运行分布式版本控制***,如Git。第一服务器利用分布式版本控制***对多个软件对应的软件标识和软件代码进行存储和管理。在另一个实施例中,为了节省存储空间,第一服务器在接收到同一款软件的新版本的软件代码时,将对应软件的旧版本的软件代码进行删除。
传统的静态代码扫描工具缺乏扫描时机的控制机制,由软件开发人员人工自主触发对软件代码的扫描,不同开发人员的扫描习惯不同,使得扫描频率差异较大,可能因扫描过于频繁造成一些无效扫描,如对已经扫描过的但未发生任何变化的软件代码重复扫描,进而造成服务器资源的占用。
为了解决上述问题,主服务器仅对达到检测周期且发生更新的软件代码进行扫描。具体的,主服务器上预先配置了多个检测任务。主服务器上运行了软件持续集成工具,如Jenkins。开发人员可以通过软件持续集成工具预先在主服务器针对每个软件设定对应的检测任务。每个检测任务具有对应的软件标识和检测周期。不同检测任务的检测周期可以不同。检测周期可以根据实际需求自由设置,如24小时。主服务器按照预设的检测周期执行相应的检测任务。具体的,主服务器每隔检测周期检测第一服务器中相应软件标识对应的相应软件代码是否发生更新,将检测周期内有更新的软件代码筛选出来,标记为目标代码。仅对达到检测周期且发生更新的软件代码进行扫描,可以减少因扫描过于频繁或过多无效扫描,造成对服务器资源的占用。
步骤204,当检测到检测周期对应的软件代码发生更新时,将软件代码标记为目标代码,利用目标代码分别生成对应的扫描任务。
步骤206,执行扫描任务,得到目标代码对应的第一扫描结果。
主服务器在第一服务器中提取目标代码,利用提取到的目标代码生成扫描任务。当提取到的目标代码有多个时,主服务器利用每个目标代码分别生成对应的扫描任务,将扫描任务分配至节点服务器。节点服务器上运行了静态代码扫描工具,如fortify。节点服务器利用静态代码扫描工具执行扫描任务,得到本次扫描目标代码对应的扫描结果,记作第一扫描结果。第一扫描结果包括新版本的目标代码对应的多个缺陷的缺陷数据。缺陷数据页面上多个缺陷的缺陷数据包括缺陷标识、缺陷描述和缺陷修复状态。缺陷是指软件代码中的一段错误代码。缺陷标识可以是错误代码在软件代码中对应的行号。
在另一个实施例中,主服务器获取目标代码的代码标识,利用代码标识生成对应的扫描任务,将扫描任务分配至节点服务器。节点服务器根据扫描任务中的代码标识在第一服务器中提取对应的目标代码,利用静态代码扫描工具对提取到的目标代码进行扫描,以执行相应的扫描任务,得到目标代码对应的第一扫描结果。
步骤208,获取上一次扫描目标代码得到的扫描结果,记作第二扫描结果,将第一扫描结果与第二扫描结果进行对比,得到对比结果。
步骤210,获取目标代码对应的缺陷数据页面,缺陷数据页面包括多条缺陷数据;根据对比结果对缺陷数据页面上的缺陷数据进行更新。
由于传统的静态代码扫描工具缺乏扫描结果的处理机制,需要开发人员人工对缺陷数据页面上的缺陷数据进行处理。具体的,当开发人员完成缺陷数据页面上某个缺陷的修复后,开发人员需要手动在缺陷数据页面上将该缺陷对应的缺陷修复状态由未修复变更为修复完成。但静态代码质量扫描工具扫描得到的缺陷与手动测试发现的缺陷不同,通常扫描得到的缺陷数量非常多,使得开发人员在完成某个缺陷的修复之后,难以保证对相应缺陷修复状态变更的及时性和准确性。值得注意的是,不同的缺陷之间可能存在较强的关联性,使得开发人员在完成一个缺陷的修复之后,与其相关联的一个或多个缺陷可能也间接的被修复。但是由于开发人员难以清楚的了解多个缺陷之间被关联修复的情况,只能按照缺陷数据页面上显示的大量缺陷逐个修复,增加了开发人员的代码修复负担,也降低了代码修复效率。
为了解决上述问题,对软件代码相邻两次的扫描结果进行对比,根据扫描结果自动对相应缺陷数据页面上的缺陷数据进行更新。具体的,节点服务器将第一扫描结果发送至数据库服务器。数据库服务器中存储了上次扫描该目标代码得到的第二扫描结果,以及根据第二扫描结果生成的目标代码对应的缺陷数据页面。缺陷数据页面记录了旧版本的目标代码对应的多个缺陷的缺陷数据。当对同一版本软件多次进行静态代码扫描时,按照扫描时间对多次扫描结果进行排序。其中,上一次扫描目标代码对应的扫描时间与最新一次扫描目标代码对应的扫描时间相邻。结果处理服务器将目标代码的第一扫描结果和第二扫描结果进行对比,将第一扫描结果相对第二扫描结果缺少的缺陷标记为已修复缺陷,将第一扫描结果相对第二扫描结果增加的缺陷标记为新增缺陷,将已修复缺陷的缺陷数据从缺陷数据页面中删除,将新增缺陷的缺陷数据添加至缺陷数据页面。例如,对一个软件的软件代码进行了三次扫描,其中,第一次扫描的扫描结果包括缺陷A1~A10;第二次扫描的扫描结果包括缺陷A1,A3,A11以及A5~A10,表示缺陷A2和A4被修复,结果处理服务器在根据第一次扫描的扫描结果生成的缺陷数据页面中添加缺陷A11,删除缺陷A2和A4,得到第二次扫描的扫描结果对应的缺陷数据页面,将该缺陷数据页面发送至开发终端或测试终端进行展示。
由于传统的静态代码扫描工具缺乏扫描结果的处理机制,需要测试人员人工对缺陷数据页面上的缺陷数据进行处理。具体的,测试人员对修复后的软件代码进行手动测试,以对开发人员对缺陷的修复结果进行验证,根据验证结果手动在缺陷数据页面上将该缺陷对应的缺陷修复状态由修复完成变更为修复成功或修复失败。测试人员对软件代码的修复是否有效进行人工验证,使得验证非常费时,由于开发人员需要根据测试人员的验证结果进行后续修复,进而降低缺陷修复效率。当缺陷数量比较多的时候,这种情况显得尤为凸出。
结果处理服务器将相邻两次的扫描结果进行对比还可以自动对开发人员对缺陷的修复结果进行验证。当一个缺陷验证失败时,表示该缺陷上次是因为被遗漏扫描而被误认为修复成功,该缺陷需要再次添加至缺陷数据页面,以正确提示开发人员需要修复的缺陷。例如,在上述举例中,假设的第三次扫描的扫描结果包括A2,A3,A11以及A5~A10,表示缺陷A1被修复,而缺陷A2上次实际修复失败被误删除,需要重新添加至缺陷数据页面,A4上次修复成功,结果处理服务器在第二次扫描的扫描结果对应的缺陷数据页面中将缺陷A1删除,将遗漏扫描的缺陷A2重新添加。
开发人员可以通过开发终端向查询服务器发送查询请求。测试人员也可以通过测试终端向查询服务器发送查询请求。查询请求携带的软件标识。查询服务器根据查询请求中的软件标识,在结果处理服务器查询对应更新后的缺陷数据页面,将查询到的缺陷数据页面返回至开发终端或测试终端进行展示。开发人员根据缺陷数据页面上的缺陷数据对软件代码进行修复。
本实施例中,针对每个软件的软件代码设定对应的检测周期,每隔检测周期检测相应软件标识对应的软件代码是否发生更新,当检测到达到检测周期且发生更新的软件代码时,可以自动触发对该软件代码的扫描;仅对达到检测周期且发生更新的软件代码进行扫描,可以减少因扫描过于频繁或过多无效扫描,造成对服务器资源的占用。对软件代码相邻两次的扫描结果进行对比,根据扫描结果自动对相应缺陷数据页面上多个缺陷的缺陷数据进行更新,相对传统的需要开发人员或测试人员根据多个缺陷的修复情况人工对缺陷数据页面上的大量缺陷数据进行处理,可以准确发现多个缺陷被关联修复的情况以及对开发人员对缺陷的修复进行验证,从而可以提高缺陷数据页面上显示的缺陷数据的准确性,也可以提高提高缺陷数据页面更新的及时性,还可以极大地减少了开发人员和测试人员的工作负担,进而提升了软件开发效率。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,扫描任务包括多个;执行扫描任务,得到目标代码对应的第一扫描结果的步骤,包括:计算多个扫描任务分别对应的代码量;对目标集群内多个节点服务器的负载进行监测;获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;根据总代码量,对多个扫描任务进行分组;将多组扫描任务分别分配至目标集群内相应节点服务器;接收节点服务器返回的目标代码对应的第一扫描结果。
主服务器将多个扫描任务分配至目标集群内多个节点服务器进行同步处理。目标集群是指主服务器所属的集群,可以理解为上述第二服务器。具体的,主服务器计算每个扫描任务对应软件代码的代码量。容易理解,代码量越多,表示需要的扫描时间越多。主服务器预存储了最优匹配文件,最优匹配文件记录了多个代码量区间和对应的负载区间。其中,负载区间包括CPU资源使用率区间、内存占用率区间和目标数据库存储空间区间的区间组合。例如,一个负载区间对应的区间组合可以是CPU资源使用率50%~60%,内存占用率40%~50%,目标数据库存储空间55%~70%,该负载区间对应的代码量区间可以是2400~2600行。需要说明的是,这里仅为了更清楚的描述方案,作为举例的各个数值的实际意义不必考究。
主服务器对多个节点服务器的负载进行监测,确定每个节点服务器对应的负载区间。主服务器根据每个节点服务器对应的负载区间,在最优匹配文件中查询对应的代码量区间,从而确定集群内多个主服务器分别可以处理的扫描任务的总代码量。
主服务器根据总代码量,对多个扫描任务进行分组。例如,假设生成三个扫描任务A、B和C,扫描任务A包括1000行代码,扫描任务B包括2000行代码,扫描任务C包括1500行代码。目标集群包括甲、乙、丙和丁四个节点服务器,其中,甲节点服务器的负载为CPU资源使用率52%,内存占用率47%,目标数据库存储空间60%。根据最优匹配文件确定甲节点服务器对应的代码量区间为2400~2600行,乙节点服务器对应的代码量区间为1900~2100行,则可以将扫描任务A和C确定为第一组,扫描任务B单独确定为第二组。
主服务器将多组扫描任务分别分配至目标集群内相应的节点服务器。例如,在上述举例中,将扫描任务A和C分配至甲节点服务器;将扫描任务B分配至乙节点服务器。用于生成扫描任务的软件代码的代码量可以反映对应扫描任务的任务量。丙和丁两个节点服务器未分得扫描任务,表示两个节点服务器当前时间负载较高,即当前正在处理的扫描任务的任务量较多。
本实施例中,对目标集群内多个节点服务器的负载进行监测,可以获取每个节点服务器当前时间正在处理的扫描任务的任务量。当一个节点服务器当前时间正在处理的扫描任务的任务量较多时,对应的负载较高,则不再分配新的扫描任务或分配任务量较少的扫描任务;而对于当前时间正在处理的扫描任务较少,对应负载较低的节点服务器,则可以分配任务量较多的扫描任务,该扫描任务可以是利用多个扫描任务组合而成的。将多个扫描任务分配至多个节点服务器进行同步处理,可以提高软件代码的扫描效率。
在一个实施例中,扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;执行扫描任务的步骤,包括:将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;处理状态包括待处理;获取数据库的空闲时间,在数据库的空闲时间内对第一文件进行筛选,筛选出处理状态为待处理的任务标识;将处理状态为待处理的任务标识记录至第二文件中;在第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;利用提取到的任务数据执行对应的扫描任务,当扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
当在检测周期内多个软件代码发生更新时,主服务器利用每个更新的软件代码生成一个对应的扫描任务。每个扫描任务具有对应的任务标识、任务数据和对应的处理状态。任务数据可以是软件代码,也可以仅是软件代码的代码标识。处理状态包括未处理、处理中和处理完成等。主服务器将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件。第一文件可以是临时生成的。主服务器上部署了数据库,第一文件也可以是主服务器预先存储至数据库的。
为了缓解服务器的资源消耗,主服务器在数据库的空闲时间对进行扫描任务的分配。因而,主服务器在进行扫描任务的分配之前,需要提前分析出数据库的空闲时间。具体的,主服务器运行监控脚本,通过监控脚本对预设时间段内数据库中的批处理任务执行状况和资源消耗状况进行监控,得到在预设时间段内批处理任务的执行时间和资源消耗时间。批处理任务包括多个软件标识对应的检测任务以及扫描任务的分配等。为了能够充分缓解数据库资源消耗的压力,可以将预设时间段设置为整个非工作时间的时间段或者部分非工作时间的时间段。例如,在检测任务进行之前的一个月内的晚上八点至凌晨五点的时间段等。主服务器将在预设时间段内资源消耗时间进行统计,得到资源消耗统计表。主服务器提取资源消耗统计表中的资源消耗时间与多个批处理任务的执行时间进行比对,筛选出能够避开多个批处理任务执行时间的资源消耗时间。由于批处理任务执行时会消耗较多的数据库资源,因此避开多个批处理任务执行时间的资源消耗时间,可以作为数据库的空闲时间。由于数据库的空闲时间是在预设时间段内的,预设时间段可以是非工作时间的时间段,因此通过上述方式得到的数据库的空闲时间可以视为数据库性能最优的空闲时间。
主服务器在数据库的空闲时间对第一文件进行筛选,筛选出处理状态为待处理的任务标识,将筛选出的任务标识记录至第二文件。第二文件可以是临时生成的,也可以是主服务器预先存储至数据库的。主服务器在数据库的空闲时间获取预先设置的任务标识的抓取条件,根据抓取条件在第二文件中抓取一个或多个任务标识。抓取条件可以包括软件标识、抓取顺序和抓取数量。通过设置抓取顺序实现有序抓取或者随机抓取。当抓取顺序为有序抓取时,可以根据任务标识进行抓取。通过设置抓取数量实现逐项抓取或者批量抓取。批量抓取可以减少任务数据抓取时间,进而可以提高扫描任务的处理效率。
根据抓取到的任务标识,主服务器在第一文件中抓取对应的任务数据,将任务数据对应的处理状态由待处理变更为处理中,将抓取到的扫描任务对应的任务数据发送至节点服务器进行扫描处理。在相应扫描任务执行完毕时,节点服务器向主服务器返回执行完毕的信息,主服务器对第一文件和第二文件分别进行更新。具体的,主服务器在第一文件中将相应任务数据对应的处理状态变更为处理成功。主服务器在第二文件中将处理状态变更为处理成功的任务标识进行删除,以保证第二文件中只记录处理状态为待处理的任务数据对应的任务标识,进而使得主服务器在利用上述方法进行任务数据抓取时,可以只从处理状态为待处理的任务数据中进行抓取,继而可以减少任务数据抓取时间,提高扫描任务的处理效率。
本实施例中,通过在第一文件中进行筛选,可以筛选出处理状态为待处理的任务标识。将待处理的任务标识记录至第二文件中。当需要执行扫描任务时,可以在第二文件中提取一个或多个任务标识,从而可以在第一文件中直接抓取到待处理的任务数据。避免了其他处理状态的任务数据所带来的干扰,能够有效减少任务数据的抓取时间,从而能够有效提高扫描任务的处理效率。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷等级;在得到目标代码对应的第一扫描结果的步骤之后,还包括:获取目标代码的代码量;根据多个缺陷的缺陷等级测算目标代码的修复任务量;根据代码量和修复任务量,确定下次扫描目标代码对应的检测周期。
主服务器根据软件代码的代码量和第一扫描结果,确定该软件代码的检测周期。具体的,主服务器获取一个软件代码的代码量。主服务器获取软件代码对应的第一扫描结果。第一扫描结果包括多个缺陷,每个缺陷具有对应的缺陷等级,根据每个缺陷的缺陷等级确定对应软件代码的修复任务量。主服务器预存储了多种代码量区间和修复任务量区间的组合,以及每种组合对应的检测周期。主服务器根据相应软件代码的代码量和修复任务量,确定该软件代码下次进行检测的检测周期。
本实施例中,根据不同软件代码的代码量,可以对扫描该软件代码进行需要占用的服务器资源进行测算;根据第一扫描结果可以预测需要修复的代码量,进而可以对开发人员修改缺陷需要的时间进行测算;根据测算结果可以生成多种代码量区间和修复任务量区间的组合,并确定每种组合对应的检测周期;使得检测周期的确定更加灵活,可以适应不同软件,可以在服务器资源占用和检测周期之间达到一种均衡。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷描述;第二扫描结果记录了多个缺陷的哈希值;将第一扫描结果与第二扫描结果进行对比,得到对比结果的步骤以及根据对比结果对缺陷数据页面上的缺陷数据进行更新的步骤,包括:根据每个缺陷对应的缺陷描述,分别生成每个缺陷对应的哈希值;对比第一扫描结果是否存在相对第二扫描结果发生变化的哈希值;当存在时,根据第一扫描结果相对第二扫描结果发生变化的哈希值对缺陷数据页面上的缺陷数据进行更新。
第一扫描结果记录了多个缺陷的缺陷描述。缺陷是指软件代码中的一段错误代码。缺陷描述包括缺陷位置。缺陷位置可以是软件代码中一个错误代码在该软件代码中的行号。经过开发人员对软件代码的修改,使得即使是相同的一行代码在不同版本的软件代码中对应的行号可能是不同的,也使得根据行号难以对新增缺陷和已修复缺陷进行准确识别。
为了解决上述问题,结果处理服务器根据缺陷位置获取该缺陷的相关信息,根据相关信息生成该缺陷的哈希值,将哈希值作为该缺陷的缺陷标识。具体的,结果处理服务器根据缺陷的缺陷位置,检测对应错误代码是否位于一个函数的作用域内。若是,结果处理服务器获取其所在函数的相关信息,如函数名或返回值类型等;否则,结果处理服务器获取该错误代码对应的关联代码的相关信息。其中,关联代码可以是软件代码中位于该错误代码之前的预设行数的代码,或位于该错误代码之后的预设行数的代码中的至少一种。结果处理服务器利用获取到的缺陷的相关信息,生成该缺陷对应的哈希值,将该哈希值作为相应缺陷的缺陷标识。容易理解,也可以采用其他方法获取缺陷的缺陷标识,如计算相关信息的MD5值,将该MD5值作为相应缺陷的缺陷标识,对此不作限制。以下将以哈希值作为缺陷标识进行描述。
在另一个实施例中,结果处理服务器对获取到的缺陷的相关信息中的干扰信息进行过滤。具体的,干扰信息包括注释、空格、行号或制表符等。结果处理服务器利用过滤后的相关信息,获取相应缺陷的缺陷标识。利用缺陷的相关信息获取缺陷的缺陷标识,可以准确判断一个缺陷与其他缺陷是否为相同缺陷,从而可以提高缺陷标识唯一标识一个缺陷的准确度。
结果处理服务器将计算得到的第一扫描结果对应每个缺陷的哈希值发送至数据库服务器进行存储。数据库服务器还存储了软件代码对应的第二扫描结果的多个缺陷的哈希值。结果处理服务器在数据库服务器中读取该软件代码对应第二扫描结果的多个缺陷的哈希值,对比第一扫描结果是否存在相对第二扫描结果发生变化的哈希值。若存在发生变化的哈希值,如新增或缺少的哈希值,则结果处理服务器根据第一扫描结果相对第二扫描结果发生变化的哈希值对缺陷数据页面上的缺陷数据进行更新。
本实施例中,根据每个缺陷对应的缺陷描述生成对应的哈希值,利用哈希值唯一标识一个缺陷,可以提高判断一个缺陷与其他缺陷是否为相同缺陷的准确度,从而可以提高根据对比结果对缺陷数据页面上的缺陷数据进行更新的准确性,避免错误更新造成对开发人员或测试人员的误导。
在一个实施例中,软件包括当前版本软件和历史版本软件;方法还包括:获取当前版本软件对应目标代码的多次扫描结果,根据当前版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积实际趋势图;获取历史版本软件对应目标代码的多次扫描结果,根据历史版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积预测趋势图;计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;根据偏差度生成当前版本软件的质量监测结果。
一款软件可以有多个版本。每个版本软件的软件生命周期包括多个时间节点。开发人员和测试人员可以在软件的整个软件生命周期不同时间节点采用上述方式对软件代码进行扫描,并将得到的多次扫描结果上报至第一服务器。扫描结果包括多个缺陷的缺陷数据。缺陷数据包括缺陷类型、缺陷描述和缺陷等级等。其中,缺陷类型包括***缺陷、性能缺陷和页面缺陷等。
根据当前版本软件的缺陷数据,结果处理服务器生成当前版本软件对应的缺陷累积实际趋势图。缺陷累积实际趋势图可以是以多个时间节点为横坐标,以不同时间节点的实际缺陷数量为纵坐标的折线图或柱状图等。容易理解,缺陷累积实际趋势图也可以是饼状图等,对此不作限定。结果处理服务器获取历史版本软件的缺陷数据,根据历史版本软件的缺陷数据生成当前版本软件对应的缺陷累积预测趋势图。当前版本软件对应的缺陷累积预测趋势图也可以是折线图,柱状图或饼状图等。
结果处理服务器将缺陷累积实际趋势图与缺陷累积预测趋势图进行叠加,计算缺陷数量重合的时间节点数量,根据重合的时间节点数量与统计的时间节点数量的比例,计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度。偏差度包括多个时间节点对应的偏差值,偏差值可以是实际缺陷数量与预测缺陷数量的偏差数量或偏差比例等。
在整个软件生命周期内,缺陷累积预测趋势图中前期多个时间节点的预测缺陷数量呈线性增长,后期多个时间节点的预测缺陷数量呈平稳状态,即不再注入或发现新的缺陷。缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度越大,例如,在软件生命周期的后期,对应的缺陷数量仍在增长,则表示最后发布的当前版本软件存在缺陷的风险越大,即软件质量差。结果处理服务器根据多个偏差值的大小以及出现偏差的时间,可以解析缺陷产生原因,如需求分析不全面等。结果处理服务器通过对比多个版本的软件的偏差度,可以判断当前版本软件的质量是否得到提升。结果处理服务器对当前版本软件的缺陷累积实际趋势图进行解析,可以确定多个缺陷的发生概率和缺陷集中区域,生成质量监测结果。质量监测结果包括多个缺陷的发生概率,缺陷集中区域,产生原因和质量提升的情况描述等。结果处理服务器将质量监测结果发送至查询服务器,开发终端或测试终端可以通过查询服务器了解软件的质量监测结果,可以更有针对性地提出遏制缺陷发生的措施,降低缺陷数量,利于改进软件开发。
本实施例中,根据当前版本软件的缺陷数据和历史版本软件的缺陷数据,可以分别生成当前版本软件对应的缺陷累积实际趋势图和缺陷累积预测趋势图;通过计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度,可以根据偏差度对当前版本软件的开发质量和测试质量进行监测。由于缺陷累积预测趋势图是根据历史版本软件在多个时间节点对应的实际缺陷数量生成的,可以很好的反应实际开发和测试等情况,从而可以提高软件质量监测的准确性。
在一个实施例中,当前版本软件对应的软件生命周期包括多个时间节点;根据历史版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积预测趋势图的步骤,包括:利用预设模型生成当前版本软件对应的缺陷累积理想趋势图;理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据调整因子,利用实际缺陷平均数量以及理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图。
结果处理服务器获取预设模型,利用预设模型生成缺陷累积理想趋势图。该缺陷累积理想趋势图可以适用于多种软件,包括当前版本软件。预设模型可以是Gompertz模型(一种软件质量分析模型)等。预设模型的表达式可以是Y=a*b^(c^T),其中,Y表示随时间T发现的软件缺陷总数,a表示在时间T之后可能发现的软件缺陷总数,即软件中所含的缺陷总数。a*b表示在时间T之前发现的软件缺陷数,c表示发现缺陷的增长速度。结果处理服务器获取多个样本软件对应的多次测试过程中发现的缺陷数据,根据样本软件的缺陷数据估算出三个参数a,b,c的值,从而得到拟合曲线函数,利用拟合曲线函数生成曲线图,将该曲线图作为缺陷累积理想趋势图。缺陷累积理想趋势图记录了多个时间节点的理想缺陷数量。理想缺陷数量是指在一个时间节点可能存在的缺陷的数量。
结果处理服务器根据多个历史版本软件的缺陷数据,计算历史版本软件在每个时间节点对应的实际缺陷数量的平均值,即实际缺陷平均数量。结果处理服务器预存储了多个时间节点分别对应的调整因子。调整因子为实际缺陷平均数量对相应时间节点的理想缺陷数量的调整权重,如30%等。结果处理服务器根据调整因子和实际缺陷平均数量,对理想缺陷数量进行调整。具体的,结果处理服务器将调整因子输入预设的调整模型,利用调整模型计算得到每个时间节点对应的预测缺陷数量。调整模型可以是:预测缺陷数量=实际缺陷平均数量*调整因子+理想缺陷数量*(1-调整因子)。结果处理服务器根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图。
本实施例中,根据历史版本软件的实际缺陷数量对缺陷累积理想趋势图进行调整,使生成的缺陷累积预测趋势图可以很好的反应软件代码的实际开发情况,从而可以提高软件质量监测的准确性。
在一个实施例中,如图3所示,提供了一种静态代码扫描结果处理装置,包括:更新检测模块302、代码提取模块304、代码扫描模块306和结果处理模块308,其中:更新检测模块302,用于获取多个软件标识对应的检测周期,按照检测周期检测相应软件标识对应的软件代码是否发生更新。
代码提取模块304,用于当检测到检测周期对应的软件代码发生更新时,将软件代码标记为目标代码,利用目标代码分别生成对应的扫描任务。
代码扫描模块306,用于执行扫描任务,得到目标代码对应的第一扫描结果。
结果处理模块308,用于获取上一次扫描目标代码得到的扫描结果,记作第二扫描结果,将第一扫描结果与第二扫描结果进行对比,得到对比结果;获取目标代码对应的缺陷数据页面,缺陷数据页面包括多条缺陷数据;根据对比结果对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,扫描任务包括多个;代码扫描模块306还用于计算多个扫描任务分别对应的代码量;对目标集群内多个节点服务器的负载进行监测;获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;根据总代码量,对多个扫描任务进行分组;将多组扫描任务分别分配至目标集群内相应节点服务器;接收节点服务器返回的目标代码对应的第一扫描结果。
在一个实施例中,扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;代码扫描模块306还用于将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;处理状态包括待处理;获取数据库的空闲时间,在数据库的空闲时间内对第一文件进行筛选,筛选出处理状态为待处理的任务标识;将处理状态为待处理的任务标识记录至第二文件中;在第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;利用提取到的任务数据执行对应的扫描任务,当扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷等级;该装置还包括周期配置模块310,用于获取目标代码的代码量;根据多个缺陷的缺陷等级测算目标代码的修复任务量;根据代码量和修复任务量,确定下次扫描目标代码对应的检测周期。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷描述;第二扫描结果记录了多个缺陷的哈希值;结果处理模块308还用于根据每个缺陷对应的缺陷描述,分别生成每个缺陷对应的哈希值;对比第一扫描结果是否存在相对第二扫描结果发生变化的哈希值;当存在时,根据第一扫描结果相对第二扫描结果发生变化的哈希值对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,软件包括当前版本软件和历史版本软件;该装置还包括软件质量监测模块312,用于获取当前版本软件对应目标代码的多次扫描结果,根据当前版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积实际趋势图;获取历史版本软件对应目标代码的多次扫描结果,根据历史版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积预测趋势图;计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;根据偏差度生成当前版本软件的质量监测结果。
在一个实施例中,当前版本软件对应的软件生命周期包括多个时间节点;软件质量监测模块312还用于利用预设模型生成当前版本软件对应的缺陷累积理想趋势图;理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据调整因子,利用实际缺陷平均数量以及理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图。
关于静态代码扫描结果处理装置的具体限定可以参见上文中对于静态代码扫描结果处理方法的限定,在此不再赘述。上述静态代码扫描结果处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储软件代码或扫描结果。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种静态代码扫描结果处理方法。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取多个软件标识对应的检测周期,按照检测周期检测相应软件标识对应的软件代码是否发生更新;当检测到检测周期对应的软件代码发生更新时,将软件代码标记为目标代码,利用目标代码分别生成对应的扫描任务;执行扫描任务,得到目标代码对应的第一扫描结果;获取上一次扫描目标代码得到的扫描结果,记作第二扫描结果,将第一扫描结果与第二扫描结果进行对比,得到对比结果;获取目标代码对应的缺陷数据页面,缺陷数据页面包括多条缺陷数据;根据对比结果对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,扫描任务包括多个;处理器执行计算机程序时还实现以下步骤:计算多个扫描任务分别对应的代码量;对目标集群内多个节点服务器的负载进行监测;获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;根据总代码量,对多个扫描任务进行分组;将多组扫描任务分别分配至目标集群内相应节点服务器;接收节点服务器返回的目标代码对应的第一扫描结果。
在一个实施例中,扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;处理器执行计算机程序时还实现以下步骤:将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;处理状态包括待处理;获取数据库的空闲时间,在数据库的空闲时间内对第一文件进行筛选,筛选出处理状态为待处理的任务标识;将处理状态为待处理的任务标识记录至第二文件中;在第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;利用提取到的任务数据执行对应的扫描任务,当扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷等级;处理器执行计算机程序时还实现以下步骤:获取目标代码的代码量;根据多个缺陷的缺陷等级测算目标代码的修复任务量;根据代码量和修复任务量,确定下次扫描目标代码对应的检测周期。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷描述;第二扫描结果记录了多个缺陷的哈希值;处理器执行计算机程序时还实现以下步骤:根据每个缺陷对应的缺陷描述,分别生成每个缺陷对应的哈希值;对比第一扫描结果是否存在相对第二扫描结果发生变化的哈希值;若存在,根据第一扫描结果相对第二扫描结果发生变化的哈希值对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,软件包括当前版本软件和历史版本软件;处理器执行计算机程序时还实现以下步骤:获取当前版本软件对应目标代码的多次扫描结果,根据当前版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积实际趋势图;获取历史版本软件对应目标代码的多次扫描结果,根据历史版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积预测趋势图;计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;根据偏差度生成当前版本软件的质量监测结果。
在一个实施例中,当前版本软件对应的软件生命周期包括多个时间节点;处理器执行计算机程序时还实现以下步骤:利用预设模型生成当前版本软件对应的缺陷累积理想趋势图;理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据调整因子,利用实际缺陷平均数量以及理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取多个软件标识对应的检测周期,按照检测周期检测相应软件标识对应的软件代码是否发生更新;当检测到检测周期对应的软件代码发生更新时,将软件代码标记为目标代码,利用目标代码分别生成对应的扫描任务;执行扫描任务,得到目标代码对应的第一扫描结果;获取上一次扫描目标代码得到的扫描结果,记作第二扫描结果,将第一扫描结果与第二扫描结果进行对比,得到对比结果;获取目标代码对应的缺陷数据页面,缺陷数据页面包括多条缺陷数据;根据对比结果对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,扫描任务包括多个;计算机程序被处理器执行时还实现以下步骤:计算多个扫描任务分别对应的代码量;对目标集群内多个节点服务器的负载进行监测;获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;根据总代码量,对多个扫描任务进行分组;将多组扫描任务分别分配至目标集群内相应节点服务器;接收节点服务器返回的目标代码对应的第一扫描结果。
在一个实施例中,扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;计算机程序被处理器执行时还实现以下步骤:将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;处理状态包括待处理;获取数据库的空闲时间,在数据库的空闲时间内对第一文件进行筛选,筛选出处理状态为待处理的任务标识;将处理状态为待处理的任务标识记录至第二文件中;在第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;利用提取到的任务数据执行对应的扫描任务,当扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷等级;计算机程序被处理器执行时还实现以下步骤:获取目标代码的代码量;根据多个缺陷的缺陷等级测算目标代码的修复任务量;根据代码量和修复任务量,确定下次扫描目标代码对应的检测周期。
在一个实施例中,第一扫描结果记录了多个缺陷的缺陷描述;第二扫描结果记录了多个缺陷的哈希值;计算机程序被处理器执行时还实现以下步骤:根据每个缺陷对应的缺陷描述分别生成每个缺陷对应的哈希值;对比第一扫描结果是否存在相对第二扫描结果发生变化的哈希值;若存在,根据第一扫描结果相对第二扫描结果发生变化的哈希值对缺陷数据页面上的缺陷数据进行更新。
在一个实施例中,软件包括当前版本软件和历史版本软件;计算机程序被处理器执行时还实现以下步骤:获取当前版本软件对应目标代码的多次扫描结果,根据当前版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积实际趋势图;获取历史版本软件对应目标代码的多次扫描结果,根据历史版本软件对应的多次扫描结果,生成当前版本软件对应的缺陷累积预测趋势图;计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;根据偏差度生成当前版本软件的质量监测结果。
在一个实施例中,当前版本软件对应的软件生命周期包括多个时间节点;计算机程序被处理器执行时还实现以下步骤:利用预设模型生成当前版本软件对应的缺陷累积理想趋势图;理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据调整因子,利用实际缺陷平均数量以及理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性存储介质中,该计算机程序在执行时可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可做出若干变形和改进,均属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种静态代码扫描结果处理方法,所述方法包括:
获取多个软件标识对应的检测周期,按照所述检测周期检测相应软件标识对应的软件代码是否发生更新;
当检测到检测周期对应的软件代码发生更新时,将所述软件代码标记为目标代码,利用所述目标代码分别生成对应的扫描任务;
执行所述扫描任务,得到所述目标代码对应的第一扫描结果;
获取上一次扫描所述目标代码得到的扫描结果,记作第二扫描结果,将所述第一扫描结果与所述第二扫描结果进行对比,得到对比结果;
获取所述目标代码对应的缺陷数据页面,所述缺陷数据页面包括多条缺陷数据;根据所述对比结果对所述缺陷数据页面上的缺陷数据进行更新;
所述软件包括当前版本软件和历史版本软件,所述当前版本软件对应的软件生命周期包括多个时间节点,所述方法还包括:
获取所述当前版本软件对应目标代码的多次扫描结果,根据所述当前版本软件对应的多次扫描结果,生成所述当前版本软件对应的缺陷累积实际趋势图,包括:利用预设模型生成所述当前版本软件对应的缺陷累积理想趋势图;所述理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据所述调整因子,利用所述实际缺陷平均数量以及所述理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图;
获取所述历史版本软件对应目标代码的多次扫描结果,根据所述历史版本软件对应的多次扫描结果,生成所述当前版本软件对应的缺陷累积预测趋势图;
计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;
根据所述偏差度生成所述当前版本软件的质量监测结果。
2.根据权利要求1所述的方法,其特征在于,所述扫描任务包括多个;所述执行所述扫描任务,得到所述目标代码对应的第一扫描结果的步骤,包括:
计算多个扫描任务分别对应的代码量;
对目标集群内多个节点服务器的负载进行监测;
获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定所述目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;
根据所述总代码量,对多个扫描任务进行分组;
将多组扫描任务分别分配至所述目标集群内相应节点服务器;
接收所述节点服务器返回的所述目标代码对应的第一扫描结果。
3.根据权利要求1所述的方法,其特征在于,所述扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;执行所述扫描任务的步骤,包括:
将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;所述处理状态包括待处理;
获取数据库的空闲时间,在所述数据库的空闲时间内对所述第一文件进行筛选,筛选出处理状态为待处理的任务标识;
将处理状态为待处理的任务标识记录至第二文件中;
在所述第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;
利用提取到的任务数据执行对应的扫描任务,当所述扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
4.根据权利要求1所述的方法,其特征在于,所述第一扫描结果记录了多个缺陷的缺陷等级;在得到所述目标代码对应的第一扫描结果的步骤之后,还包括:获取所述目标代码的代码量;
根据多个缺陷的缺陷等级测算所述目标代码的修复任务量;
根据所述代码量和所述修复任务量,确定下次扫描所述目标代码对应的检测周期。
5.根据权利要求1所述的方法,其特征在于,所述第一扫描结果记录了多个缺陷的缺陷描述;所述第二扫描结果记录了多个缺陷的哈希值;将所述第一扫描结果与所述第二扫描结果进行对比,得到对比结果的步骤以及根据所述对比结果对所述缺陷数据页面上的缺陷数据进行更新的步骤,包括:根据每个缺陷对应的缺陷描述,分别生成每个缺陷对应的哈希值;
对比所述第一扫描结果是否存在相对第二扫描结果发生变化的哈希值;
当存在时,根据所述第一扫描结果相对所述第二扫描结果发生变化的哈希值对所述缺陷数据页面上的缺陷数据进行更新。
6.一种静态代码扫描结果处理装置,所述装置包括:
更新检测模块,用于获取多个软件标识对应的检测周期,按照所述检测周期检测相应软件标识对应的软件代码是否发生更新;
代码提取模块,用于当检测到检测周期对应的软件代码发生更新时,将所述软件代码标记为目标代码,利用所述目标代码分别生成对应的扫描任务;
代码扫描模块,用于执行所述扫描任务,得到所述目标代码对应的第一扫描结果;
结果处理模块,用于获取上一次扫描所述目标代码得到的扫描结果,记作第二扫描结果,将所述第一扫描结果与所述第二扫描结果进行对比,得到对比结果;获取所述目标代码对应的缺陷数据页面,所述缺陷数据页面包括多条缺陷数据;根据所述对比结果对所述缺陷数据页面上的缺陷数据进行更新;
所述软件包括当前版本软件和历史版本软件,所述当前版本软件对应的软件生命周期包括多个时间节点,所述装置还包括:
软件质量监测模块,用于获取所述当前版本软件对应目标代码的多次扫描结果,根据所述当前版本软件对应的多次扫描结果,生成所述当前版本软件对应的缺陷累积实际趋势图,包括:利用预设模型生成所述当前版本软件对应的缺陷累积理想趋势图;所述理想趋势图包括多个时间节点对应的理想缺陷数量;计算多个历史版本软件在每个时间节点对应的实际缺陷平均数量;获取预设的每个时间节点对应的调整因子;根据所述调整因子,利用所述实际缺陷平均数量以及所述理想缺陷数量计算每个时间节点对应的预测缺陷数量;根据每个时间节点对应的预测缺陷数量,生成当前版本软件对应的缺陷累积预测趋势图;
所述软件质量监测模块还用于获取所述历史版本软件对应目标代码的多次扫描结果,根据所述历史版本软件对应的多次扫描结果,生成所述当前版本软件对应的缺陷累积预测趋势图;计算缺陷累积实际趋势图与缺陷累积预测趋势图的偏差度;根据所述偏差度生成所述当前版本软件的质量监测结果。
7.根据权利要求6所述的装置,其特征在于,所述扫描任务包括多个;
所述代码扫描模块还用于计算多个扫描任务分别对应的代码量;对目标集群内多个节点服务器的负载进行监测;获取预设的代码量和负载的最优匹配文件,根据最优匹配文件确定所述目标集群内多个节点服务器分别可以处理的扫描任务的总代码量;根据所述总代码量,对多个扫描任务进行分组;将多组扫描任务分别分配至所述目标集群内相应节点服务器;接收所述节点服务器返回的所述目标代码对应的第一扫描结果。
8.根据权利要求6所述的装置,其特征在于,所述扫描任务包括多个;多个扫描任务分别具有对应的任务标识、任务数据和对应的处理状态;
所述代码扫描模块还用于将多个扫描任务对应的任务标识、任务数据和对应的处理状态分别记录至第一文件;所述处理状态包括待处理;获取数据库的空闲时间,在所述数据库的空闲时间内对所述第一文件进行筛选,筛选出处理状态为待处理的任务标识;将处理状态为待处理的任务标识记录至第二文件中;在所述第二文件中抓取一个或多个任务标识,根据抓取到的任务标识在第一文件中提取对应的任务数据;利用提取到的任务数据执行对应的扫描任务,当所述扫描任务执行完毕时,对第一文件和第二文件分别进行更新。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810107376.0A CN108304327B (zh) | 2018-02-02 | 2018-02-02 | 静态代码扫描结果处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810107376.0A CN108304327B (zh) | 2018-02-02 | 2018-02-02 | 静态代码扫描结果处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108304327A CN108304327A (zh) | 2018-07-20 |
CN108304327B true CN108304327B (zh) | 2021-01-19 |
Family
ID=62850905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810107376.0A Active CN108304327B (zh) | 2018-02-02 | 2018-02-02 | 静态代码扫描结果处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304327B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110874316B (zh) * | 2018-08-31 | 2024-04-12 | 北京京东尚科信息技术有限公司 | 扫描代码的方法、装置和*** |
CN109491923B (zh) * | 2018-12-14 | 2021-11-12 | 东软集团股份有限公司 | 新增异常代码的确定方法、装置、介质及电子设备 |
CN109871319A (zh) * | 2019-01-18 | 2019-06-11 | 深圳壹账通智能科技有限公司 | 项目代码扫描方法、装置、计算机设备及存储介质 |
CN110096431A (zh) * | 2019-03-19 | 2019-08-06 | 深圳壹账通智能科技有限公司 | 页面权限测试方法、装置、计算机设备及存储介质 |
CN110109821A (zh) * | 2019-03-19 | 2019-08-09 | 深圳壹账通智能科技有限公司 | 软件程序质量评价方法、装置、计算机设备及存储介质 |
CN110231937A (zh) * | 2019-05-20 | 2019-09-13 | 平安科技(深圳)有限公司 | 脚本缺陷扫描方法、装置、计算机设备和存储介质 |
CN111125719B (zh) * | 2019-12-25 | 2023-10-24 | 中信百信银行股份有限公司 | 一种提升代码安全检测效率的方法、装置、计算机设备、和可读存储介质 |
CN111190824B (zh) * | 2019-12-28 | 2024-04-26 | 中国平安人寿保险股份有限公司 | 监测方法、装置、终端设备及存储介质 |
CN111444093B (zh) * | 2020-03-25 | 2024-04-02 | 天翼数字生活科技有限公司 | 项目开发过程质量的确定方法、装置、计算机设备 |
CN113010298A (zh) * | 2021-04-29 | 2021-06-22 | 中国工商银行股份有限公司 | 一种静态代码扫描工具自诊断调度方法及装置 |
CN115269444B (zh) * | 2022-09-30 | 2023-02-03 | 平安银行股份有限公司 | 代码静态检测方法、装置及服务器 |
CN117909205A (zh) * | 2022-10-12 | 2024-04-19 | 中兴通讯股份有限公司 | 代码静态分析结果管理方法、设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005202494A (ja) * | 2004-01-13 | 2005-07-28 | Mitsubishi Electric Corp | 静的解析結果分析システムおよび静的解析結果分析装置 |
CN103793315A (zh) * | 2012-10-29 | 2014-05-14 | Sap股份公司 | 监视和改善软件开发质量 |
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN106250319A (zh) * | 2016-08-15 | 2016-12-21 | 腾讯科技(深圳)有限公司 | 静态代码扫描结果处理方法和装置 |
CN107643984A (zh) * | 2017-10-18 | 2018-01-30 | 百度在线网络技术(北京)有限公司 | 用于输出信息的方法和装置 |
-
2018
- 2018-02-02 CN CN201810107376.0A patent/CN108304327B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005202494A (ja) * | 2004-01-13 | 2005-07-28 | Mitsubishi Electric Corp | 静的解析結果分析システムおよび静的解析結果分析装置 |
CN103793315A (zh) * | 2012-10-29 | 2014-05-14 | Sap股份公司 | 监视和改善软件开发质量 |
CN104424088A (zh) * | 2013-08-21 | 2015-03-18 | 腾讯科技(深圳)有限公司 | 软件的测试方法及装置 |
CN106250319A (zh) * | 2016-08-15 | 2016-12-21 | 腾讯科技(深圳)有限公司 | 静态代码扫描结果处理方法和装置 |
CN107643984A (zh) * | 2017-10-18 | 2018-01-30 | 百度在线网络技术(北京)有限公司 | 用于输出信息的方法和装置 |
Non-Patent Citations (1)
Title |
---|
基于Gompertz 模型与回归分析模型控制测试质量的工程化方法;陈敏华 等;《工业控制计算机》;20111205;第27卷(第11期);第4-6、9页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108304327A (zh) | 2018-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304327B (zh) | 静态代码扫描结果处理方法和装置 | |
CN107844343B (zh) | 一种复杂服务端应用***的升级***及方法 | |
CN106970880B (zh) | 一种分布式自动化软件测试方法及*** | |
US8205195B2 (en) | Method and system for automatically classifying and installing patches on systems | |
CN111309372A (zh) | 定时任务执行方法、装置、计算机设备和存储介质 | |
CN102479113B (zh) | 异常自适应处理方法及*** | |
CN107992410B (zh) | 软件质量监测方法、装置、计算机设备和存储介质 | |
CN109787858B (zh) | 一种批量发布服务的方法及终端 | |
CN111008188A (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN112015647A (zh) | 配置项监控方法、装置、计算机设备和存储介质 | |
CN112559365A (zh) | 一种测试用例筛选方法、装置、计算机设备和存储介质 | |
CN112148329B (zh) | 代码版本自动化更新方法、装置、计算机设备及存储介质 | |
CN111104260A (zh) | 服务升级的监测方法、装置、服务器及存储介质 | |
CN112363920A (zh) | 测试用例的修复方法、装置、计算机设备和存储介质 | |
CN115511136A (zh) | 基于层次分析和故障树的设备故障辅助诊断方法及*** | |
CN111382031A (zh) | 测试方法及装置 | |
CN112506791A (zh) | 应用程序测试方法、装置、计算机设备和存储介质 | |
CN115934487A (zh) | 日志监控告警方法、装置、计算机设备和存储介质 | |
CN109901998B (zh) | 资源回收方法、装置、***、计算机设备和存储介质 | |
CN113360389A (zh) | 一种性能测试方法、装置、设备及存储介质 | |
CN114996519B (zh) | 数据处理方法、装置、电子设备、存储介质及产品 | |
CN111752786A (zh) | 压力测试过程中的数据存储方法、汇总方法、设备及介质 | |
CN117556187B (zh) | 基于深度学习的云数据修复方法、***及可读存储介质 | |
CN116204410A (zh) | 数据库性能测试方法、装置、电子设备和存储介质 | |
CN114448793B (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 |