CN109918286A - 一种静态代码分析的处理方法及装置 - Google Patents

一种静态代码分析的处理方法及装置 Download PDF

Info

Publication number
CN109918286A
CN109918286A CN201811627973.2A CN201811627973A CN109918286A CN 109918286 A CN109918286 A CN 109918286A CN 201811627973 A CN201811627973 A CN 201811627973A CN 109918286 A CN109918286 A CN 109918286A
Authority
CN
China
Prior art keywords
defect
code
unit
incremental
analysis
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
CN201811627973.2A
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.)
Beijing Qihu Ceteng Security Technology Co Ltd
Beijing Qianxin Technology Co Ltd
Original Assignee
Beijing Qihu Ceteng Security Technology Co Ltd
Beijing Qianxin 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 Beijing Qihu Ceteng Security Technology Co Ltd, Beijing Qianxin Technology Co Ltd filed Critical Beijing Qihu Ceteng Security Technology Co Ltd
Priority to CN201811627973.2A priority Critical patent/CN109918286A/zh
Publication of CN109918286A publication Critical patent/CN109918286A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种静态代码分析的处理方法及装置,所述方法包括:获取被修改的静态代码的增量代码信息;根据所述增量代码信息,确定需要重新分析的代码区域;对所述代码区域进行重新分析,以获取增量分析缺陷;根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。所述装置执行上述方法。本发明实施例提供的静态代码分析的处理方法及装置,通过对被修改的静态代码的增量代码信息进行分析处理,能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。

Description

一种静态代码分析的处理方法及装置
技术领域
本发明实施例涉及静态代码处理技术领域,具体涉及一种静态代码分析的处理方法及装置。
背景技术
静态代码分析是指在不运行程序的前提下,进行代码分析的方法,在软件开发生命周期中,尽早找到修复程序中潜在的缺陷,显得尤为重要。
现有软件开发的特点是:频繁迭代、且在大量的代码修改中通常只修改其中少量的代码,而现有技术采用的是对全量静态代码进行分析,由于全量静态代码的代码量很大,且要挖掘程序中深层次的缺陷,因此,每次分析都需要消耗高昂的时间开销和内存开销。
因此,如何避免上述缺陷,能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷,成为亟须解决的问题。
发明内容
针对现有技术存在的问题,本发明实施例提供一种静态代码分析的处理方法及装置。
第一方面,本发明实施例提供一种静态代码分析的处理方法,所述方法包括:
获取被修改的静态代码的增量代码信息;
根据所述增量代码信息,确定需要重新分析的代码区域;
对所述代码区域进行重新分析,以获取增量分析缺陷;
根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
第二方面,本发明实施例提供一种静态代码分析的处理装置,所述装置包括:
获取单元,用于获取被修改的静态代码的增量代码信息;
确定单元,用于根据所述增量代码信息,确定需要重新分析的代码区域;
分析单元,用于对所述代码区域进行重新分析,以获取增量分析缺陷;
更新单元,用于根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
第三方面,本发明实施例提供一种电子设备,包括:处理器、存储器和总线,其中,
所述处理器和所述存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
获取被修改的静态代码的增量代码信息;
根据所述增量代码信息,确定需要重新分析的代码区域;
对所述代码区域进行重新分析,以获取增量分析缺陷;
根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,包括:
所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如下方法:
获取被修改的静态代码的增量代码信息;
根据所述增量代码信息,确定需要重新分析的代码区域;
对所述代码区域进行重新分析,以获取增量分析缺陷;
根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
本发明实施例提供的静态代码分析的处理方法及装置,通过对被修改的静态代码的增量代码信息进行分析处理,能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例静态代码分析的处理方法流程示意图;
图2为本发明实施例静态代码的分析处理示意图;
图3为本发明实施例依赖关系说明示意图;
图4为本发明实施例代码区域确定示意图;
图5为本发明实施例原有缺陷更新示意图;
图6为本发明实施例静态代码分析的处理装置结构示意图;
图7为本发明实施例提供的电子设备实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例静态代码分析的处理方法流程示意图,如图1所示,本发明实施例提供的一种静态代码分析的处理方法,包括以下步骤:
S101:获取被修改的静态代码的增量代码信息。
具体的,装置获取被修改的静态代码的增量代码信息。装置可以是执行该方法的设备等。图2为本发明实施例静态代码的分析处理示意图,如图2所示,该步骤可以通过增量分析引擎来实现。所述增量代码信息可以包括代码块和所述代码块的依赖关系,获取增量代码信息的具体步骤可以包括:
确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一,还可以进一步包括所述CFG中程序基本块中的单条程序语句。具体说明如下:对于一些基于AST的静态分析器,例如Cppcheck,由于其没有在源码对应CFG的基础上进行数据流分析或者符号执行,就无法使用上述CFG中程序基本块中的单条程序语句作为最小修改单元。而对于一些基于符号执行的技术,例如Clang Static Analyzer,由于,其对程序基本块中的单条程序语句进行状态模拟,就可以采用上述CFG中程序基本块中的单条程序语句作为最小修改单元,方便与它的分析方案进行结合。
基于所述最小修改单元,获取所述代码块。
例如:如果最小修改单元为编译单元,且代码某一行做了修改,就可以认定编译单元整体做了修改、进一步地在计算依赖关系时,计算的就是编译单元间的依赖关系。可以理解的是:最小修改单元的范围越大,计算修改的代码块和计算依赖关系的工作会越简单,但最终需要被重新分析的代码范围会越大,例如对应CFG中程序基本块的最小修改单元的范围大于对应CFG中程序基本块中的单条程序语句的最小修改单元的范围。
进一步地,还可以包括:基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
对应句法结构说明如下:
例如ASTfunc调用了函数ASTfoo、ASTfoo的函数体内部的代码做了修改,但是由于ASTfunc对应的AST本身没有发生变化,那么就认为ASTfunc没有发生变化。
对应语义结构说明如下:
例如ASTfunc引用了类型信息Typedef,当Typedef内部增加了一个数据成员时,就认为ASTfunc发生了变化。
需要说明的是:上述预设规则的实现方式,为本领域成熟技术,不再赘述。采用何种技术判断代码做了修改,同样会影响增量分析引擎的实现难度以及后面的需要被重新分析的代码范围。
计算所述代码块的依赖关系。需要说明的:代码块的依赖关系的计算为本领域成熟技术。
可以通过如下两种方式实现:
(1)程序值-依赖关系,例如:对于符号执行技术而言,需要基于程序中的符号值或者实际值来计算依赖关系;
(2)非程序值-依赖关系,例如:对于活跃变量分析而言,某个变量在当前程序点是否活跃,基于的是变量值在未来时段是否被用到某类信息中,基于此计算依赖关系。
图3为本发明实施例依赖关系说明示意图,如图3所示,函数func1调用函数func2,如果函数func2内部被修改,就会影响到func1的程序行为,那么就认为func1依赖于func2。程序中的依赖关系有很多种,一个问题有可能只需要计算一种依赖关系,也有可能需要计算多种依赖关系。
S102:根据所述增量代码信息,确定需要重新分析的代码区域。
具体的,装置根据所述增量代码信息,确定需要重新分析的代码区域。参照图2,该步骤可以通过增量分析引擎来实现。进一步地,可以根据所述代码块和所述依赖关系,确定所述代码区域。图4为本发明实施例代码区域确定示意图,如图4所示,假设编译单元2中的funcA和全局变量globalM发生了修改,假设这里采用函数作为最小修改单元,那么根据依赖关系计算到的最终需要重新分析的代码区域如灰色区域所示。
S103:对所述代码区域进行重新分析,以获取增量分析缺陷。
具体的,装置对所述代码区域进行重新分析,以获取增量分析缺陷。参照图2,该步骤可以通过增量分析引擎来实现。具体实现方式可以与现有技术对全量代码分析的方式相同,不再赘述,但是,本发明实施例增量分析所消耗的时间开销和内存开销等要远远少于全量分析所消耗的时间开销和内存开销等。
S104:根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
具体的,装置根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。参照图2,该步骤可以通过缺陷刷新引擎来实现。图5为本发明实施例原有缺陷更新示意图,如图5所示,原有缺陷可分为如下三类:
1)未受影响缺陷,即没有被此次代码修改影响的缺陷。
2)待刷新缺陷,即缺陷具体内容不变,但是位置等信息需要刷新的缺陷,例如文件名以及行列号需要刷新。
3)待重新分析缺陷,可以包括通过此次代码修改后的已修复缺陷和新增缺陷;更新所述原有缺陷具体可以包括:
根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型可以包括待刷新缺陷和待重新分析缺陷。例如:原有缺陷的未受影响缺陷为A、B、C;原有缺陷的待刷新缺陷为D、E;原有缺陷的待重新分析缺陷为F、G。
根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷。可以通过求解增量分析缺陷与待重新分析缺陷之间的差集,确定已修复缺陷和新增缺陷,例如:增量分析缺陷为G、H,则已修复缺陷为F,新增缺陷为H。
将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。即从{A、B、C、D、E、F、G}中删除F、G,得到{A、B、C、D、E},再添加G、H,得到{A、B、C、D、E、G、H};再对D、E进行刷新,从而得到更新后的原有缺陷为{A、B、C、D(已刷新)、E(已刷新)、G、H}。
本发明实施例提供的静态代码分析的处理方法,通过对被修改的静态代码的增量代码信息进行分析处理,能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述增量代码信息包括代码块和所述代码块的依赖关系;相应的,所述获取被修改的静态代码的增量代码信息,包括:
确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一。
具体的,装置确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一。可参照上述实施例,不再赘述。
基于所述最小修改单元,获取所述代码块。
具体的,装置基于所述最小修改单元,获取所述代码块。可参照上述实施例,不再赘述。
计算所述代码块的依赖关系。
具体的,装置计算所述代码块的依赖关系。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,通过先后分别获取代码块和代码块的依赖关系,有效获取到增量代码信息,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述基于所述最小修改单元,获取所述代码块,包括:
基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
具体的,装置基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,通过采取预设规则能够高效获取到代码块,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。
具体的,装置中的所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,进一步能够灵活确定最小修改单元,提高该技术方案的适用性。
在上述实施例的基础上,所述根据所述增量代码信息,确定需要重新分析的代码区域,包括:
根据所述代码块和所述依赖关系,确定所述代码区域。
具体的,装置根据所述代码块和所述依赖关系,确定所述代码区域。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,通过代码块和依赖关系,能够准确确定代码区域,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷,包括:
根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷。
具体的,装置根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷。可参照上述实施例,不再赘述。
根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷。
具体的,装置根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷。可参照上述实施例,不再赘述。
将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。
具体的,装置将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述缺陷类型还包括未受影响缺陷;相应的,所述方法还包括:
不对所述未受影响缺陷作任何处理。
具体的,装置不对所述未受影响缺陷作任何处理。可参照上述实施例,不再赘述。
本发明实施例提供的静态代码分析的处理方法,通过不对未受影响缺陷作任何处理,进一步能够节约时间开销和内存开销。
图6为本发明实施例静态代码分析的处理装置结构示意图,如图6所示,本发明实施例提供了一种静态代码分析的处理装置,包括获取单元601、确定单元602、分析单元603和更新单元604,其中:
获取单元601用于获取被修改的静态代码的增量代码信息;确定单元602用于根据所述增量代码信息,确定需要重新分析的代码区域;分析单元603用于对所述代码区域进行重新分析,以获取增量分析缺陷;更新单元604用于根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
具体的,获取单元601用于获取被修改的静态代码的增量代码信息;确定单元602用于根据所述增量代码信息,确定需要重新分析的代码区域;分析单元603用于对所述代码区域进行重新分析,以获取增量分析缺陷;更新单元604用于根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
本发明实施例提供的静态代码分析的处理装置,通过对被修改的静态代码的增量代码信息进行分析处理,能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述增量代码信息包括代码块和所述代码块的依赖关系;相应的,所述获取单元601具体用于:确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一;基于所述最小修改单元,获取所述代码块;计算所述代码块的依赖关系。
具体的,所述获取单元601具体用于:确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一;基于所述最小修改单元,获取所述代码块;计算所述代码块的依赖关系。
本发明实施例提供的静态代码分析的处理装置,通过先后分别获取代码块和代码块的依赖关系,有效获取到增量代码信息,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述获取单元601还具体用于:基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
具体的,所述获取单元601还具体用于:基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
本发明实施例提供的静态代码分析的处理装置,通过采取预设规则能够高效获取到代码块,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。
具体的,装置中的所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。
本发明实施例提供的静态代码分析的处理装置,进一步能够灵活确定最小修改单元,提高该技术方案的适用性。
在上述实施例的基础上,所述确定单元602具体用于:根据所述代码块和所述依赖关系,确定所述代码区域。
具体的,所述确定单元602具体用于:根据所述代码块和所述依赖关系,确定所述代码区域。
本发明实施例提供的静态代码分析的处理装置,通过代码块和依赖关系,能够准确确定代码区域,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述更新单元604具体用于:根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷;根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷;将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。
具体的,所述更新单元604具体用于:根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷;根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷;将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。
本发明实施例提供的静态代码分析的处理装置,进一步能够高效地对代码进行静态分析,从而实时获取到静态代码的缺陷。
在上述实施例的基础上,所述缺陷类型还包括未受影响缺陷;相应的,所述装置还用于:不对所述未受影响缺陷作任何处理。
具体的,所述装置还用于:不对所述未受影响缺陷作任何处理。
本发明实施例提供的静态代码分析的处理装置,通过不对未受影响缺陷作任何处理,进一步能够节约时间开销和内存开销。
本发明实施例提供的静态代码分析的处理装置具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
图7为本发明实施例提供的电子设备实体结构示意图,如图7所示,所述电子设备包括:处理器(processor)701、存储器(memory)702和总线703;
其中,所述处理器701、存储器702通过总线703完成相互间的通信;
所述处理器701用于调用所述存储器702中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:获取被修改的静态代码的增量代码信息;根据所述增量代码信息,确定需要重新分析的代码区域;对所述代码区域进行重新分析,以获取增量分析缺陷;根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取被修改的静态代码的增量代码信息;根据所述增量代码信息,确定需要重新分析的代码区域;对所述代码区域进行重新分析,以获取增量分析缺陷;根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取被修改的静态代码的增量代码信息;根据所述增量代码信息,确定需要重新分析的代码区域;对所述代码区域进行重新分析,以获取增量分析缺陷;根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的电子设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上各实施例仅用以说明本发明的实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明的实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明的各实施例技术方案的范围。

Claims (16)

1.一种静态代码分析的处理方法,其特征在于,包括:
获取被修改的静态代码的增量代码信息;
根据所述增量代码信息,确定需要重新分析的代码区域;
对所述代码区域进行重新分析,以获取增量分析缺陷;
根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
2.根据权利要求1所述的方法,其特征在于,所述增量代码信息包括代码块和所述代码块的依赖关系;相应的,所述获取被修改的静态代码的增量代码信息,包括:
确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一;
基于所述最小修改单元,获取所述代码块;
计算所述代码块的依赖关系。
3.根据权利要求2所述的方法,其特征在于,所述基于所述最小修改单元,获取所述代码块,包括:
基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
4.根据权利要求2所述的方法,其特征在于,所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。
5.根据权利要求2所述的方法,其特征在于,所述根据所述增量代码信息,确定需要重新分析的代码区域,包括:
根据所述代码块和所述依赖关系,确定所述代码区域。
6.根据权利要求1至5任一所述的方法,其特征在于,所述根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷,包括:
根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷;
根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷;
将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。
7.根据权利要求6所述的方法,其特征在于,所述缺陷类型还包括未受影响缺陷;相应的,所述方法还包括:
不对所述未受影响缺陷作任何处理。
8.一种静态代码分析的处理装置,其特征在于,包括:
获取单元,用于获取被修改的静态代码的增量代码信息;
确定单元,用于根据所述增量代码信息,确定需要重新分析的代码区域;
分析单元,用于对所述代码区域进行重新分析,以获取增量分析缺陷;
更新单元,用于根据所述代码区域、所述增量分析缺陷和所述静态代码被修改前的原有缺陷,更新所述原有缺陷。
9.根据权利要求8所述的装置,其特征在于,所述增量代码信息包括代码块和所述代码块的依赖关系;相应的,所述获取单元具体用于:
确定代码的最小修改单元;所述最小修改单元是确定所述代码是否被修改,以及获取所述依赖关系的最小单元,且与采用的静态代码分析技术的技术类型相对应;所述最小修改单元包括编译单元、函数、CFG中程序基本块中的其中之一;
基于所述最小修改单元,获取所述代码块;
计算所述代码块的依赖关系。
10.根据权利要求9所述的装置,其特征在于,所述获取单元还具体用于:
基于所述最小修改单元,采取预设规则获取所述代码块;所述预设规则包括文件修改时间是否变化、文件文本内容是否变化、经过词法分析之后token序列是否发生变化、AST句法结构是否变化、AST语义结构是否变化;其中,所述token序列不包括注释信息token、且不包括标点符号token。
11.根据权利要求9所述的装置,其特征在于,所述最小修改单元还包括所述CFG中程序基本块中的单条程序语句。
12.根据权利要求9所述的装置,其特征在于,所述确定单元具体用于:
根据所述代码块和所述依赖关系,确定所述代码区域。
13.根据权利要求8至12任一所述的装置,其特征在于,所述更新单元具体用于:
根据所述代码区域和所述原有缺陷,确定所述原有缺陷的缺陷类型;所述缺陷类型包括待刷新缺陷和待重新分析缺陷;
根据所述增量分析缺陷和所述待重新分析缺陷,确定已修复缺陷和新增缺陷;
将所述待重新分析缺陷从所述原有缺陷中删除;将所述增量分析缺陷添加到所述原有缺陷中;并对所述待刷新缺陷的相关信息进行刷新。
14.根据权利要求13所述的装置,其特征在于,所述缺陷类型还包括未受影响缺陷;相应的,所述装置还用于:
不对所述未受影响缺陷作任何处理。
15.一种电子设备,其特征在于,包括:处理器、存储器和总线,其中,
所述处理器和所述存储器通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7任一所述的方法。
16.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7任一所述的方法。
CN201811627973.2A 2018-12-28 2018-12-28 一种静态代码分析的处理方法及装置 Pending CN109918286A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811627973.2A CN109918286A (zh) 2018-12-28 2018-12-28 一种静态代码分析的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811627973.2A CN109918286A (zh) 2018-12-28 2018-12-28 一种静态代码分析的处理方法及装置

Publications (1)

Publication Number Publication Date
CN109918286A true CN109918286A (zh) 2019-06-21

Family

ID=66959958

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811627973.2A Pending CN109918286A (zh) 2018-12-28 2018-12-28 一种静态代码分析的处理方法及装置

Country Status (1)

Country Link
CN (1) CN109918286A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113127341A (zh) * 2021-03-26 2021-07-16 西北大学 一种基于图网络模型的增量代码缺陷检测方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078667A1 (en) * 2009-09-29 2011-03-31 International Business Machines Corporation Static code analysis for packaged application customization
CN106681783A (zh) * 2016-12-13 2017-05-17 深圳市恒扬数据股份有限公司 一种svn代码检测方法及其系统
CN106951228A (zh) * 2017-02-21 2017-07-14 腾讯科技(深圳)有限公司 版本迭代中差异的处理方法和装置
CN107643984A (zh) * 2017-10-18 2018-01-30 百度在线网络技术(北京)有限公司 用于输出信息的方法和装置
CN108319854A (zh) * 2017-12-29 2018-07-24 上海瑞家信息技术有限公司 一种增量代码静态扫描方法、设备及计算机可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078667A1 (en) * 2009-09-29 2011-03-31 International Business Machines Corporation Static code analysis for packaged application customization
CN106681783A (zh) * 2016-12-13 2017-05-17 深圳市恒扬数据股份有限公司 一种svn代码检测方法及其系统
CN106951228A (zh) * 2017-02-21 2017-07-14 腾讯科技(深圳)有限公司 版本迭代中差异的处理方法和装置
CN107643984A (zh) * 2017-10-18 2018-01-30 百度在线网络技术(北京)有限公司 用于输出信息的方法和装置
CN108319854A (zh) * 2017-12-29 2018-07-24 上海瑞家信息技术有限公司 一种增量代码静态扫描方法、设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113127341A (zh) * 2021-03-26 2021-07-16 西北大学 一种基于图网络模型的增量代码缺陷检测方法及系统
CN113127341B (zh) * 2021-03-26 2023-03-21 西北大学 一种基于图网络模型的增量代码缺陷检测方法及系统

Similar Documents

Publication Publication Date Title
US20200401386A1 (en) Reconfiguring application software into microservice architecture
Rothermel et al. A methodology for testing spreadsheets
CN109117164B (zh) 基于关键元素差异性分析的微服务更新方法及系统
CN108388515A (zh) 测试数据生成方法、装置、设备以及计算机可读存储介质
CN112394942A (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
US8046202B1 (en) Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation
Kusum et al. Efficient processing of large graphs via input reduction
CN112328226B (zh) 一种嵌入式系统自动化测试代码生成方法及装置
Nusrat et al. How developers optimize virtual reality applications: A study of optimization commits in open source unity projects
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
CN102929646A (zh) 应用程序生成方法及装置
US8935657B2 (en) Model-to-model transformation by kind
CN109918286A (zh) 一种静态代码分析的处理方法及装置
Souza et al. Provenance of dynamic adaptations in user-steered dataflows
Troya et al. Specification and simulation of queuing network models using domain-specific languages
Izsó et al. MONDO-SAM: A Framework to Systematically Assess MDE Scalability.
Dyer et al. Boa: An enabling language and infrastructure for ultra-large-scale msr studies
CN107577476A (zh) 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质
Haraldsson Genetic improvement of software: from program landscapes to the automatic improvement of a live system
Yang et al. A method-level defect prediction approach based on structural features of method-calling network
Carvalho et al. Improving cellular automata scheduling through dynamics control
CN109299004B (zh) 关键元素差异性分析方法及系统
Arzt et al. Automatic low-overhead load-imbalance detection in MPI applications
Martone et al. Refactoring for performance with semantic patching: Case study with recipes
Gerndt et al. A multi-aspect online tuning framework for HPC applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190621