CN106294156A - 一种静态代码缺陷检测分析方法及装置 - Google Patents
一种静态代码缺陷检测分析方法及装置 Download PDFInfo
- Publication number
- CN106294156A CN106294156A CN201610658272.XA CN201610658272A CN106294156A CN 106294156 A CN106294156 A CN 106294156A CN 201610658272 A CN201610658272 A CN 201610658272A CN 106294156 A CN106294156 A CN 106294156A
- Authority
- CN
- China
- Prior art keywords
- file
- measured
- source code
- test cell
- dependence
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Tests Of Electronic Circuits (AREA)
Abstract
本发明实施例公开了一种静态代码缺陷检测分析方法及装置,针对现有的对待测源代码文件的代码缺陷检测分析效率低下的问题,其中,检测分析方法包括:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;根据所述待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,提高待测源代码文件的代码缺陷检测分析效率。
Description
技术领域
本发明涉及代码测试领域,特别涉及一种静态代码缺陷检测分析方法及装置。
背景技术
随着软件技术的日益发展,软件系统的复杂性和规模性也在不断地扩大,不可避免地会导致代码中出现BUG(缺陷)及失误,由此而引起的软件问题及其带来的危害性也越来越显著,由于软件代码问题而引起的巨大损失或者灾难也不断地出现在人们的视野中。为了解决这些问题,软件测试就显得尤为重要,目前,软件测试主要通过动态检测分析和静态检测分析两个方面进行。其中,静态检测分析是指不运行被测代码本身,仅通过分析或检查源程序的语法、结构、过程及接口等来检查程序的正确性。
静态检测中相比较于直接对源代码文件的代码进行分析,分析经过编译预处理的源代码文件的代码相对而言要简单,所以大多数静态分析工具都以源代码文件的代码经过预处理产生的预编译结果文件为分析对象,使用编译器对源代码文件的代码进行预处理,然后进行后续分析。静态检测的效率与待待测源代码文件的代码的规模、代码行数、语法复杂度及检测分析的方法等因素直接相关,然而现有技术中的静态代码缺陷检测分析方法一般都是以串行检测分析的方式进行检测分析,这样在需要对大量工程文件进行检测分析的时候,使得对代码的缺陷检测效率低下。
总之,现有技术的问题:现有的静态代码缺陷检测分析方法是以串行检测分析的方式进行检测分析,使得在需要对大量工程文件进行检测分析的时候,效率低下。
发明内容
本发明实施例的目的在于提供一种静态代码缺陷检测分析方法及装置,通过结合串行检测分析与并行检测分析的方法,提高待测源代码文件的代码缺陷检测分析的效率。
为达到上述目的,本发明实施例公开了一种静态代码缺陷检测方法,包括:
获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;
根据所述待测源代码文件,生成抽象语法树;
根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
优选的,所述根据所述待测源代码文件,生成抽象语法树,包括:
通过预处理方式,处理所述待测源代码文件,生成中间文件;
简化所述中间文件;
根据简化后的中间文件,生成所述抽象语法树。
优选的,所述简化所述中间文件,包括:
读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;
判断所述头文件名称是否存在于预先分析的头文件列表中;
如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。
优选的,所述简化所述中间文件,在判断所述头文件名称是否存在于预先分析的头文件列表中之后,所述静态代码缺陷检测分析方法还包括:
如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息以及头文件中函数声明信息及变量的声明信息。
优选的,所述根据简化后的中间文件,生成所述抽象语法树,包括:
获取简化后的中间文件的头文件列表中包含的头文件名称;
根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;
根据所述头文件信息内容,生成抽象语法树。
优选的,根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,包括:
根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;
根据所述符号表中的函数信息,并通过所述函数信息定义函数节点,其中,所述函数信息为定义不同作用域且包括声明信息的函数信息;
根据所有的函数节点,形成一个全局的函数池,其中,所述函数节点包括:函数类型、函数的调用集合及函数的作用域;
遍历所述函数池中的所有函数,根据所述控制流图,在判断当前函数与当前函数调用的函数不在同一个测试单元,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联;
遍历所述函数池中的所有函数节点,建立每个当前测试单元与所述其他测试单元的关联,得到关联后的每个当前测试单元与所述其他测试单元的依赖关系。
优选的,所述依赖关系是各个测试单元依赖关系的有向图。
优选的,所述根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:
根据所述依赖关系,通过深度优先搜索算法查找所述依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
优选的,根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:
根据所述依赖关系,判断所述依赖关系是否是有环有向图;
如果否,拓扑排序所述依赖关系的无环有向图中入度为0的节点,并对所述拓扑排序的结果进行逆序排列,得到所述逆序排列后的所述待测源代码文件的代码缺陷检测分析次序;
如果是,选择所述依赖关系的有环有向图中出度最小的节点,并断开所述依赖关系的有环有向图中的各个环,将断开后的有环有向图中的各个环重新排序,得到代码缺陷检测分析次序;
根据所述代码缺陷检测分析次序,并行检测分析有向图中出度为0的节点处对应的测试单元,得到并行检测分析的结果;
根据所述代码缺陷检测分析次序和所述并行检测分析的结果,串行检测分析所述待测源代码文件中的剩余测试单元,其中,所述剩余测试单元为除所述出度为0的节点处对应的测试单元以外的其他剩余测试单元。
本发明实施例还公开了一种静态代码缺陷检测分析装置,包括:
获取模块,用于获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;
抽象语法树生成模块,用于根据所述待测源代码文件,生成抽象语法树;
依赖关系形成模块,用于根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
检测分析模块,用于根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
由上述的技术方案可见,本发明实施例获取待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据所述依赖关系,串行检测分析与并行检测分析进行所述待测源代码文件的代码缺陷检测分析,使用并行检测分析、串行检测分析结合的高效率检测分析方式,提高待测源代码文件的代码缺陷检测分析的效率。同时,本发明实施例对待测源代码文件进行预处理生成中间文件,简化中间文件,根据简化后的中间文件,生成抽象语法树,通过简化中间文件,减小了待测源代码文件代码的规模,提高了待测源代码文件的代码缺陷检测分析的效率,避免了内存溢出现象的发生,当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例静态代码缺陷检测分析方法流程图;
图2是本发明实施例生成抽象语法树的流程图;
图3是本发明实施例简化中间文件的流程图;
图4是本发明实施例生成所述抽象语法树的流程图;
图5是本发明实施例得到关联后的每个当前测试单元与其他测试单元的依赖关系的流程图;
图6是本发明实施例进行所述待测源代码文件的代码缺陷检测分析的流程图;
图7是本发明实施例静态代码缺陷检测分析装置图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种静态代码缺陷检测分析方法,具体结合附图中图1详细说明,包括如下步骤:
步骤S1:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;
根据编程语言如C语言和C++语言,编写的代码形成待测源代码文件,形成的待测源代码文件包括多个待测源代码文件段的测试单元,获取待测源代码文件,包括获取待测源代码文件的路径信息。
步骤S2:根据所述待测源代码文件,生成抽象语法树;
抽象语法树是指从具体语法中抽象出语言结构的本质性东西,而不考虑语言的具体符号表示,抽象语法树反映了抽象的语法结构,展示了一个操作过程并同时描述了源程序的层次结构;
根据所述待测源代码文件,通过预处理方式,其中,预处理方式包括文件包含,根据预处理之后的待测源代码文件包含的头文件,头文件名称以及头文件名称对应的头文件信息内容生成抽象语法树。
步骤S3:根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
根据所述抽象语法树,生成每个当前测试单元与其他测试单元中的函数的调用关系,建立每个当前测试单元与其他测试单元的关联,通过建立的每个当前测试单元与其他测试单元的关联,生成待检测源代码文件的检测分析关系,得到关联后的每个当前测试单元与其他测试单元的依赖关系。
步骤S4:根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
根据生成的关联后的每个当前测试单元与其他测试单元的依赖关系,优先选择出依赖关系中没有依赖其他测试单元的当前测试单元,进行并行检测分析,根据关联后的每个当前测试单元与其他测试单元的依赖关系和并行检测分析的结果,串行检测分析没有进行并行检测分析的剩余测试单元。
本发明实施例通过获取待测源代码文件,根据获取的待测源代码文件,生成抽象语法树,根据生成的所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据得到的依赖关系,结合串行检测分析与并行检测分析,进行待测源代码文件的代码缺陷检测分析,在保证待测源代码文件的代码缺陷检测分析精度不变的情况下,提高待测源代码文件的代码缺陷检测分析的效率。
优选的,所述步骤S2,包括如下步骤,具体结合附图中图2详细说明:
步骤S21:通过预处理方式,处理所述待测源代码文件,生成中间文件;
步骤S22:简化所述中间文件;
步骤S23:根据简化后的中间文件,生成所述抽象语法树。
对待测源代码文件进行预处理,其中,预处理不是直接解析待测源代码文件的代码,而是把待测源代码文件的代码分割或者处理成特定的单位,通过预处理之后,待测源代码文件的代码被处理为若干有序的阶段;预处理主要对待测源代码文件进行头文件展开和宏定义的替换,预处理命令包括三种形式:宏替换、文件包含和条件编译。本发明实施例主要对经过文件包含处理的待测源代码文件进行简化,其中,文件包含是指预处理过程中读入待测源代码文件包含的头文件,然后将头文件对应的内容插入到头文件对应的命令行中,把所述头文件和当前处理的待测源代码文件组和成新的中间文件。
经过预处理之后的待测源代码文件的中间文件的分为注释行和代码行两种类型。其中注释行的结构为#line number filename,在#标记之后紧跟当前注释行的是代码行数,这个代码行数后面跟随的是文件名称,所以对应注释行就是说明代码是从文件名为filename的文件中第line number行来展开的,而代码行的结构就是标准的程序语法结构。
经过预处理之后的待测源代码文件的代码规模增大,直接对经过预处理之后的待测源代码文件的代码进行处理会导致对待测源代码文件的代码缺陷检测分析效率低下,所以需要简化经过预处理之后的待测源代码文件的中间文件,根据简化后的中间文件,获得简化后的中间文件包含的头文件以及对应的头文件名称对应的头文件信息内容,根据生成的头文件信息内容,生成抽象语法树。
通过对待测源代码文件进行预处理,生成中间文件,简化生成的中间文件,根据简化后的中间文件生成抽象语法树;通过预处理方式处理待测源代码文件使得对待测源代码文件的代码检测分析相对传统的直接对待测源代码文件进行处理简单;简化中间文件,减小了需要检测分析的待测源代码文件的代码的规模,提高待测源代码文件的代码检测分析效率,并且避免了内存溢出现象的产生。
优选的,所述步骤S22,包括如下步骤,具体结合附图中图3详细说明:
步骤S221:读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;
步骤S222:判断所述头文件名称是否存在于预先分析的头文件列表中;
步骤S223:如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。
获得经过预处理之后的待测源代码文件,待测源代码文件在实际的应用中也可以看成是一个测试工程,待测源代码文件会使用重复的头文件,简化中间文件的过程,就是读取经过预处理之后的待测源代码文件中的头文件名称和所述头文件名称对应的展开部分,判断头文件名称是否已经存在于预先分析的头文件列表中,如果存在于预先分析的头文件列表中,则删除头文件名称对应的展开部分,删除中间文件中重复存在的头文件名称对应的头文件展开部分,得到简化后的中间文件。
对经过预处理之后的待测源代码文件进行简化,缩减待测源代码文件的代码检测分析的规模。
优选的,所述简化所述中间文件,在判断所述头文件名称是否存在于预先分析的头文件列表中之后,所述静态代码缺陷检测分析方法还包括,具体结合附图中图3详细说明:
步骤S224:如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息以及头文件中函数声明信息及变量的声明信息。
获得经过简化后的中间文件的头文件名称和所述头文件名称对应的展开部分,判断头文件名称是否已经存在于预先分析的头文件列表中,如果不存在,则将头文件名称添加至预先分析的头文件列表中,并且更新预设的头文件信息表,其中,需要更新的头文件信息表中存储的内容包括:中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息、头文件中函数声明信息、变量的声明信息,其中,存储中间文件中头文件的名称是为了防止分析不同中间文件的重名变量时产生冲突,存储头文件所在测试单元的名称是为了防止分析不同头文件中的重名函数时产生冲突。
优选的,所述步骤S23,包括如下步骤,具体结合附图中图4详细说明:
步骤S231:获取简化后的中间文件的头文件列表中包含的头文件名称;
步骤S232:根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;
步骤S233:根据所述头文件信息内容,生成抽象语法树。
获取简化后的中间文件的所有头文件列表中包含的头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容,生成抽象语法树。抽象语法树是指从具体语法中抽象出语言结构的本质性东西,而不考虑语言的具体符号表示,抽象语法树反映了抽象的语法结构,展示了一个操作过程并同时描述了待测源代码文件的代码的层次结构。根据头文件信息列表中存储的头文件信息内容,生成抽象语法树,主要是对存储在头文件信息列表中的头文件信息内容中的自定义类型信息进行处理,遇到不识别的头文件信息内容,通过查找头文件信息列表中的头文件信息内容进行处理。
优选的,所述步骤S3,包括如下步骤,具体结合附图中图5详细说明:
步骤S31:根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;
步骤S32:根据所述符号表中的函数信息,并通过所述函数信息定义函数节点,其中,所述函数信息为定义不同作用域且包括声明信息的函数信息;
步骤S33:根据所有的函数节点,形成一个全局的函数池,其中,所述函数节点包括:函数类型、函数的调用集合及函数的作用域;
步骤S34:遍历所述函数池中的所有函数,根据所述控制流图,在判断当前函数与当前函数调用的函数不在同一个测试单元,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联;
步骤S35:遍历所述函数池中的所有函数节点,建立每个当前测试单元与所述其他测试单元的关联,得到关联后的每个当前测试单元与所述其他测试单元的依赖关系。
函数池是仿照线程池、进城池模拟出来的,代表全局所有函数的一个大的集合。根据函数类型、函数的调用集合以及函数的作用域判断当前函数与当前函数调用的函数是否在同一个测试单元,如果否,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联,遍历函数池中的所有函数节点,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系。
根据得到的每个当前测试单元与其他测试单元的依赖关系,选择出不需要依赖其他测试单元的测试单元,进而在进行待测源代码文件的代码检测分析时选择出可以优先进行并行检测分析的测试单元。
优选的,所述依赖关系是各个测试单元依赖关系的有向图。
优选的,所述步骤S4包括:根据所述依赖关系,通过深度优先搜索算法查找所述依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
根据生成的依赖关系,通过DFS(Depth First Search,深度优先搜索算法)查找所述依赖关系的有向图中的所有节点,选择出依赖关系的有向图中,不需要依赖其他节点处的其他测试单元的节点处,对应的测试单元,进行并行检测分析;并且根据所述依赖关系的有向图中节点的关联,得到测试单元的关联,进而得到待测源代码文件的代码缺陷检测分析次序,根据并行检测分析的结果以及得到的待测源代码文件的代码缺陷检测分析次序,对没有进行并行检测分析的测试单元进行串行检测分析,串行检测分析与并行检测分析结合,进行所述待测源代码文件的代码缺陷检测分析。
优选的,根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括如下步骤,具体结合附图中图6详细说明:
步骤S41:根据所述依赖关系,判断所述依赖关系是否是有环有向图;
步骤S42:如果否,拓扑排序所述依赖关系的无环有向图中入度为0的节点,并对所述拓扑排序的结果进行逆序排列,得到所述逆序排列后的所述待测源代码文件的代码缺陷检测分析次序;
步骤S43:如果是,选择所述依赖关系的有环有向图中出度最小的节点,并断开所述依赖关系的有环有向图中的各个环,将断开后的有环有向图中的各个环重新排序,得到代码缺陷检测分析次序;
步骤S44:根据所述代码缺陷检测分析次序,并行检测分析有向图中出度为0的节点处对应的测试单元,得到并行检测分析的结果;
步骤S45:根据所述代码缺陷检测分析次序和所述并行检测分析的结果,串行检测分析所述待测源代码文件中的剩余测试单元,其中,所述剩余测试单元为除所述出度为0的节点处对应的测试单元以外的其他剩余测试单元。
根据生成的依赖关系,判断所述依赖关系是否是有环有向图,如果否,通过DFS,查找所述依赖关系的有向图中的所有节点,从所述依赖关系的无环有向图中入度为0的节点开始,对所述依赖关系的无环有向图中的所有节点进行拓扑排序,对通过拓扑排序的结果逆序排列,得到待测源代码文件的代码缺陷检测分析次序,根据得到的源代码文件的代码缺陷检测分析次序,进行待测源代码文件的代码缺陷检测分析;
判断得到的依赖关系如果是有环有向图,首先需要通过DFS,查找所述依赖关系的有向图中的所有节点,选择所述依赖关系的有环有向图中出度最小的节点,根据得到的依赖关系的有环有向图中出度最小的节点,断开依赖关系的有环有向图,根据断开后的依赖关系的有环有向图,得到待测源代码文件的代码缺陷检测分析次序,根据得到的源代码文件的代码缺陷检测分析次序,进行待测源代码文件的代码缺陷检测分析;
通过DFS,查找所述依赖关系的有向图中的所有节点,选择出依赖关系的有向图中出度为0的节点,首先对选择出的依赖关系的有向图中出度为0的节点处对应的测试单元进行并行检测分析,然后根据得到的并行检测分析的结果和待测源代码文件的代码缺陷检测分析次序,对除并行检测分析后的依赖关系的有向图中,出度为0的节点处的测试单元之外的剩余测试单元,进行串行检测分析。
并行检测分析和串行检测分析结合,进行待测源代码文件的代码缺陷检测分析,缩短待测源代码文件的代码缺陷检测分析的时间,提高待测源代码文件的代码缺陷检测分析的效率。
本发明实施例还公开了一种静态代码缺陷检测分析装置,包括如下模块,具体结合附图中图7详细说明:
获取模块5,用于获取待测源代码文件,其中,所述待测源代码文件包括:多个测试单元;
根据编程语言如C语言和C++语言,编写的代码形成待测源代码文件,形成的待测源代码文件包括多个测试单元,获取待测源代码文件,包括待测源代码文件的路径信息;获取模块用于获取根据具体的编程语言形成的待测源代码文件。
抽象语法树生成模块6,用于根据所述待测源代码文件,生成抽象语法树;
抽象语法树是指从具体语法中抽象出语言结构的本质性东西,而不考虑语言的具体符号表示,抽象语法树反映了抽象的语法结构,展示了一个操作过程并同时描述了源程序的层次结构。
根据所述待测源代码文件,通过预处理方式,其中,预处理方式包括文件包含,根据预处理之后的待测源代码文件包含的头文件,头文件名称以及头文件名称对应的头文件信息内容生成抽象语法树;抽象语法树生成模块用于根据所述待测源代码文件,通过预处理方式,根据预处理之后的待测源代码文件包含的头文件,头文件名称以及头文件名称对应的头文件信息内容生成抽象语法树。
依赖关系形成模块7,用于根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
依赖关系形成模块7用于根据所述抽象语法树,生成每个当前测试单元与其他测试单元中的函数的调用关系,建立每个当前测试单元与其他测试单元的关联,通过建立的每个当前测试单元与其他测试单元的关联,生成待检测源代码文件的检测分析关系,得到关联后的每个当前测试单元与其他测试单元的依赖关系。
检测分析模块8,用于根据所述依赖关系,串行检测分析与并行检测分析进行所述待测源代码文件的代码缺陷检测分析。
检测分析模8用于根据生成的关联后的每个当前测试单元与其他测试单元的依赖关系,优先选择出依赖关系中没有依赖其他测试单元的当前测试单元,进行并行检测分析,根据关联后的每个当前测试单元与其他测试单元的依赖关系和并行检测分析的结果,串行检测分析没有进行并行检测分析的剩余测试单元。
本发明实施例的静态代码缺陷检测分析装置,通过获取模块、抽象语法树生成模块、依赖关系形成模块以及检测分析模块,根据获取的待测源代码文件,生成抽象语法树,根据生成的所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据得到的依赖关系,串行检测分析与并行检测分析结合进行待测源代码文件的代码缺陷检测分析,在保证待测源代码文件的代码缺陷检测分析精度不变的情况下,提高待测源代码文件的代码缺陷检测分析的效率。
需要说明的是,本发明实施例的装置是应用上述静态代码缺陷检测分析方法的装置,则上述静态代码缺陷检测分析方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
优选的,所述抽象语法树生成模块6,包括:
中间文件生成子模块,用于通过预处理方式,处理所述待测源代码文件,生成中间文件;
简化中间文件子模块,用于简化所述中间文件;
生成抽象语法树第一子模块,用于根据简化后的中间文件,生成所述抽象语法树。
优选的,所述简化中间文件子模块,包括:
读取单元,用于读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;
第一判断单元,用于判断所述头文件名称是否存在于预先分析的头文件列表中;
简化单元,用于如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。
优选的,所述第一判断单元进一步用于:
如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息、头文件中函数声明信息及变量的声明信息。
优选的,所述生成抽象语法树第一子模块,包括:
头文件名称获取单元,用于获取简化后的中间文件的头文件列表中包含的头文件名称;
头文件信息内容得到单元,用于根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;
生成抽象语法树第二单元,用于根据所述头文件信息内容,生成抽象语法树。
优选的,所述依赖关系形成模块7,包括:
符号表和控制流图生成子模块,用于根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;
函数节点定义子模块,用于根据所述符号表中的函数信息,并通过所述函数信息定义函数节点;
函数池形成子模块,用于根据所有的函数节点,形成一个全局的函数池,其中,所述函数信息为定义不同作用域且包括声明信息的函数信息,所述函数节点包括:函数类型、函数的调用集合及函数的作用域;
关联测试单元子模块,用于遍历所述函数池中的所有函数,根据所述控制流图,在判断当前函数与当前函数调用的函数不在同一个测试单元,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联;
形成依赖关系子模块,用于遍历所述函数池中的所有函数节点,建立每个当前测试单元与所述其他测试单元的关联,得到关联后的每个当前测试单元与所述其他测试单元的依赖关系。
优选的,所述依赖关系形成模块7进一步用于,所述依赖关系是各个测试单元依赖关系的有向图。
优选的,所述检测分析模块8进一步用于:
根据所述依赖关系,通过深度优先搜索算法查找所述依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
优选的,所述检测分析模块8,包括:
第二判断子模块,用于根据所述依赖关系,判断所述依赖关系是否是有环有向图;
第一检测分析次序子模块,用于如果否,拓扑排序所述依赖关系的无环有向图中入度为0的节点,并对所述拓扑排序的结果进行逆序排列,得到所述逆序排列后的所述待测源代码文件的代码缺陷检测分析次序;
第一检测分析次序子模块,用于如果是,选择所述依赖关系的有环有向图中出度最小的节点,并断开所述依赖关系的有环有向图中的各个环,将断开后的有环有向图中的各个环重新排序,得到代码缺陷检测分析次序;
并行检测分析子模块,用于根据所述代码缺陷检测分析次序,并行检测分析有向图中出度为0的节点处对应的测试单元,得到并行检测分析的结果;
串行检测分析子模块,用于根据所述代码缺陷检测分析次序和所述并行检测分析的结果,串行检测分析所述待测源代码文件中的剩余测试单元,其中,所述剩余测试单元为除所述出度为0的节点处对应的测试单元以外的其他剩余测试单元。
本发明实施例根据获取的待测源代码文件,生成抽象语法树,根据生成的所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据得到的依赖关系,串行检测分析与并行检测分析结合进行待测源代码文件的代码缺陷检测分析,在保证待测源代码文件的代码缺陷检测分析精度不变的情况下,提高待测源代码文件的代码缺陷检测分析的效率。
本发明实施例还提供一种静态代码缺陷检测分析系统,且静态代码缺陷检测分析的装置是应用于静态代码缺陷检测分析系统,则上述静态代码缺陷检测分析装置的所有实施例均适用于该系统,且均能达到相同或相似的有益效果。
该静态代码缺陷检测分析系统,可以包括以下静态代码缺陷检测分析装置,用于对输入部分输入的待测源代码文件进行处理,包括:对待测源代码文件进行预处理,简化预处理后的待测源代码文件;根据简化后的待测源代码文件,对待测源文件的代码进行语法和词法分析;通过语法树生成器生成抽象语法树;根据抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据关联后的每个当前测试单元与其他测试单元的依赖关系,通过深度优先搜索算法查找依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对待测源代码文件的代码缺陷检测分析。该静态代码缺陷检测分析装置,根据生成的抽象语法树,通过符号表生成器、控制流图生成器、使用—定义链、定义—使用链以及函数调用图,进而建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,同时,通过缺陷模式检测状态机对要检测分析的缺陷模式按照定义的缺陷模式状态机进行统一测试。
其中,上述使用—定义链、定义—使用链是用于描述变量之间的定义使用关系;缺陷模式检测状态机是用于对要检测的缺陷模式或者规则进行统一测试。
该静态代码缺陷检测分析系统还可以包括以下装置:
输入装置,用于输入待测源代码文件,在输入部分通过配置文件对该静态代码缺陷检测分析系统进行配置,包括:定义待检测分析的缺陷模式或者规则,为静态代码缺陷检测分析方法中获取待检测源代码文件提供基础;
精度提高装置,该静态代码缺陷检测分析系统中通过区间运算、函数间分析,以及复杂性约束三个核心技术,用于减低检测分析过程中的漏报率和误报率;
检测分析装置,通过缺陷模式状态机、模式的自动匹配,自动的计算待测源代码文的可疑缺陷点,其中,检测分析方法应用静态代码缺陷检测分析方法中的结合并行检测分析和串行检测分析的方法;
结果输出装置,将静态代码缺陷检测分析方法的检测分析结果通过界面显示,另外,结果输出部分保留结果日志并且创建关于结果的数据库。
上述静态代码缺陷检测分析系统包括:输入装置、精度提高装置、检测分析装置以及结果输出装置,采用在Windows(视窗操作系统)平台安装、配置和使用,依赖于Windows平台,点击安装后的图标,即可使用。可以在待测源代码文件的代码开发生命周期的早期发现代码缺陷,并直观得将详细信息的展示在开发人员面前,提高待测源代码文件的代码检测分析的效率。同时,形成的静态代码缺陷检测分析系统能够以界面的方式进行操作,更方便的操作定位待测源代码文件的缺陷点。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种静态代码缺陷检测分析方法,其特征在于,包括:
获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;
根据所述待测源代码文件,生成抽象语法树;
根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
2.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,所述根据所述待测源代码文件,生成抽象语法树,包括:
通过预处理方式,处理所述待测源代码文件,生成中间文件;
简化所述中间文件;
根据简化后的中间文件,生成所述抽象语法树。
3.根据权利要求2所述的静态代码缺陷检测分析方法,其特征在于,所述简化所述中间文件,包括:
读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;
判断所述头文件名称是否存在于预先分析的头文件列表中;
如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。
4.根据权利要求3所述的静态代码缺陷检测分析方法,其特征在于,所述简化所述中间文件,在判断所述头文件名称是否存在于预先分析的头文件列表中之后,所述静态代码缺陷检测分析方法还包括:
如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息以及头文件中函数声明信息及变量的声明信息。
5.根据权利要求2所述的静态代码缺陷检测分析方法,其特征在于,所述根据简化后的中间文件,生成所述抽象语法树,包括:
获取简化后的中间文件的头文件列表中包含的头文件名称;
根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;
根据所述头文件信息内容,生成抽象语法树。
6.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,所述根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,包括:
根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;
根据所述符号表中的函数信息,并通过所述函数信息定义函数节点,其中,所述函数信息为定义不同作用域且包括声明信息的函数信息;
根据所有的函数节点,形成一个全局的函数池,其中,所述函数节点包括:函数类型、函数的调用集合及函数的作用域;
遍历所述函数池中的所有函数,根据所述控制流图,在判断当前函数与当前函数调用的函数不在同一个测试单元,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联;
遍历所述函数池中的所有函数节点,建立每个当前测试单元与所述其他测试单元的关联,得到关联后的每个当前测试单元与所述其他测试单元的依赖关系。
7.根据权利要求1或6所述的静态代码缺陷检测分析方法,其特征在于,所述依赖关系是各个测试单元依赖关系的有向图。
8.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,所述根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:
根据所述依赖关系,通过深度优先搜索算法查找所述依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
9.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:
根据所述依赖关系,判断所述依赖关系是否是有环有向图;
如果否,拓扑排序所述依赖关系的无环有向图中入度为0的节点,并对所述拓扑排序的结果进行逆序排列,得到所述逆序排列后的所述待测源代码文件的代码缺陷检测分析次序;
如果是,选择所述依赖关系的有环有向图中出度最小的节点,并断开所述依赖关系的有环有向图中的各个环,将断开后的有环有向图中的各个环重新排序,得到代码缺陷检测分析次序;
根据所述代码缺陷检测分析次序,并行检测分析有向图中出度为0的节点处对应的测试单元,得到并行检测分析的结果;
根据所述代码缺陷检测分析次序和所述并行检测分析的结果,串行检测分析所述待测源代码文件中的剩余测试单元,其中,所述剩余测试单元为除所述出度为0的节点处对应的测试单元以外的其他剩余测试单元。
10.一种静态代码缺陷检测分析装置,其特征在于,包括:
获取模块,用于获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;
抽象语法树生成模块,用于根据所述待测源代码文件,生成抽象语法树;
依赖关系形成模块,用于根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;
检测分析模块,用于根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610658272.XA CN106294156B (zh) | 2016-08-11 | 2016-08-11 | 一种静态代码缺陷检测分析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610658272.XA CN106294156B (zh) | 2016-08-11 | 2016-08-11 | 一种静态代码缺陷检测分析方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106294156A true CN106294156A (zh) | 2017-01-04 |
CN106294156B CN106294156B (zh) | 2018-12-07 |
Family
ID=57668876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610658272.XA Active CN106294156B (zh) | 2016-08-11 | 2016-08-11 | 一种静态代码缺陷检测分析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294156B (zh) |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815145A (zh) * | 2016-12-22 | 2017-06-09 | 合肥安珀信息科技有限公司 | 一种基于分析目标驱动的代码分析方法和系统 |
CN107391368A (zh) * | 2017-07-13 | 2017-11-24 | 中国航发控制系统研究所 | 一种航空机载软件中源代码与目标代码一致性的分析方法 |
CN107506304A (zh) * | 2017-08-24 | 2017-12-22 | 方智林 | 代码检测方法、装置、电子设备及存储介质 |
CN107659653A (zh) * | 2017-09-29 | 2018-02-02 | 北京邮电大学 | Ndn网络测量数据缓存方法、装置、电子设备及存储介质 |
CN107678971A (zh) * | 2017-10-19 | 2018-02-09 | 扬州大学 | 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法 |
CN107832059A (zh) * | 2017-11-21 | 2018-03-23 | 广州视源电子科技股份有限公司 | 一种基于Makefile的代码静态分析方法和装置 |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
CN108897678A (zh) * | 2018-06-20 | 2018-11-27 | 中国联合网络通信集团有限公司 | 静态代码检测方法和静态代码检测系统、存储设备 |
CN109033843A (zh) * | 2018-08-02 | 2018-12-18 | 南瑞集团有限公司 | 用于分布式静态检测系统的Java文件依赖性分析方法及模块 |
CN109086050A (zh) * | 2018-07-04 | 2018-12-25 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109426723A (zh) * | 2017-09-01 | 2019-03-05 | 深圳市源伞新科技有限公司 | 使用释放后内存的检测方法、系统、设备及存储介质 |
CN109508981A (zh) * | 2017-09-15 | 2019-03-22 | 富士通株式会社 | 用于测试智能合约的方法和装置 |
CN109800077A (zh) * | 2018-12-11 | 2019-05-24 | 北京奇安信科技有限公司 | 全程序静态检测的文件优先检测顺序的处理方法及装置 |
CN109857641A (zh) * | 2018-12-29 | 2019-06-07 | 北京奇安信科技有限公司 | 对程序源文件进行缺陷检测的方法及装置 |
CN110187967A (zh) * | 2019-05-15 | 2019-08-30 | 南瑞集团有限公司 | 一种适用于依赖分析工具的内存预测方法及装置 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110286934A (zh) * | 2019-06-30 | 2019-09-27 | 潍柴动力股份有限公司 | 一种静态代码的检查方法及装置 |
CN110472411A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
CN110825650A (zh) * | 2019-11-29 | 2020-02-21 | 北京网聘咨询有限公司 | 单元测试覆盖精度检测方法及装置 |
CN110990281A (zh) * | 2019-12-04 | 2020-04-10 | 中国直升机设计研究所 | 一种自动化静态分析方法 |
CN111124872A (zh) * | 2018-10-31 | 2020-05-08 | 上海哔哩哔哩科技有限公司 | 基于差异代码分析的分支检测方法、装置及存储介质 |
CN111143219A (zh) * | 2019-12-27 | 2020-05-12 | 中国信息安全测评中心 | 一种基于人工智能的软件代码缺陷识别方法及相关装置 |
CN111581094A (zh) * | 2020-05-08 | 2020-08-25 | 贝壳技术有限公司 | 头文件名检测方法、装置、存储介质及电子设备 |
CN111611158A (zh) * | 2020-05-08 | 2020-09-01 | 中国原子能科学研究院 | 一种应用性能分析系统及方法 |
CN113076244A (zh) * | 2021-03-30 | 2021-07-06 | 深圳前海微众银行股份有限公司 | 一种函数调用关系检测方法及装置 |
CN113283613A (zh) * | 2021-07-23 | 2021-08-20 | 上海燧原科技有限公司 | 深度学习模型的生成方法、优化方法、装置、设备及介质 |
CN113791757A (zh) * | 2021-07-14 | 2021-12-14 | 北京邮电大学 | 软件需求和代码映射方法及系统 |
US11226889B2 (en) | 2020-05-05 | 2022-01-18 | International Business Machines Corporation | Regression prediction in software development |
CN114580325A (zh) * | 2021-12-31 | 2022-06-03 | 上海盈方微电子有限公司 | 芯片RTL验证阶段Tarmac日志分析方法 |
WO2023024714A1 (en) * | 2021-08-24 | 2023-03-02 | Xfusion Digital Technologies Co., Ltd. | Static analysis method, apparatus, and device, and computer-readable storage medium |
CN115981711A (zh) * | 2023-03-20 | 2023-04-18 | 花瓣云科技有限公司 | 一种代码处理方法及电子设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2023011182A (ja) * | 2021-07-12 | 2023-01-24 | 株式会社日立製作所 | 不具合解析支援装置及び不具合解析支援方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
US20130014093A1 (en) * | 2010-03-29 | 2013-01-10 | Soft4Soft Co., Ltd. | Code inspection executing system for performing a code inspection of abap source codes |
CN104021084A (zh) * | 2014-06-19 | 2014-09-03 | 国家电网公司 | 一种Java源代码缺陷检测方法及装置 |
-
2016
- 2016-08-11 CN CN201610658272.XA patent/CN106294156B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
CN101482847A (zh) * | 2009-01-19 | 2009-07-15 | 北京邮电大学 | 一种基于安全漏洞缺陷模式的检测方法 |
US20130014093A1 (en) * | 2010-03-29 | 2013-01-10 | Soft4Soft Co., Ltd. | Code inspection executing system for performing a code inspection of abap source codes |
CN102073588A (zh) * | 2010-12-28 | 2011-05-25 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
CN104021084A (zh) * | 2014-06-19 | 2014-09-03 | 国家电网公司 | 一种Java源代码缺陷检测方法及装置 |
Non-Patent Citations (2)
Title |
---|
张大林 等: ""基于缺陷关联的静态分析优化"", 《软件学报》 * |
金大海 等: ""软件代码测试技术"", 《信息通信技术》 * |
Cited By (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815145A (zh) * | 2016-12-22 | 2017-06-09 | 合肥安珀信息科技有限公司 | 一种基于分析目标驱动的代码分析方法和系统 |
CN107391368A (zh) * | 2017-07-13 | 2017-11-24 | 中国航发控制系统研究所 | 一种航空机载软件中源代码与目标代码一致性的分析方法 |
CN107506304A (zh) * | 2017-08-24 | 2017-12-22 | 方智林 | 代码检测方法、装置、电子设备及存储介质 |
CN109426723A (zh) * | 2017-09-01 | 2019-03-05 | 深圳市源伞新科技有限公司 | 使用释放后内存的检测方法、系统、设备及存储介质 |
CN109508981A (zh) * | 2017-09-15 | 2019-03-22 | 富士通株式会社 | 用于测试智能合约的方法和装置 |
CN107659653A (zh) * | 2017-09-29 | 2018-02-02 | 北京邮电大学 | Ndn网络测量数据缓存方法、装置、电子设备及存储介质 |
CN107659653B (zh) * | 2017-09-29 | 2020-09-25 | 北京邮电大学 | Ndn网络测量数据缓存方法、装置、电子设备及存储介质 |
CN107678971A (zh) * | 2017-10-19 | 2018-02-09 | 扬州大学 | 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法 |
CN107832059A (zh) * | 2017-11-21 | 2018-03-23 | 广州视源电子科技股份有限公司 | 一种基于Makefile的代码静态分析方法和装置 |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN108549535B (zh) * | 2018-03-16 | 2021-02-05 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN108614707A (zh) * | 2018-04-27 | 2018-10-02 | 深圳市腾讯网络信息技术有限公司 | 静态代码检查方法、装置、存储介质和计算机设备 |
CN108897678A (zh) * | 2018-06-20 | 2018-11-27 | 中国联合网络通信集团有限公司 | 静态代码检测方法和静态代码检测系统、存储设备 |
CN109086050B (zh) * | 2018-07-04 | 2021-11-30 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109086050A (zh) * | 2018-07-04 | 2018-12-25 | 烽火通信科技股份有限公司 | 一种模块依赖关系的分析方法及系统 |
CN109033843B (zh) * | 2018-08-02 | 2022-06-10 | 南瑞集团有限公司 | 用于分布式静态检测系统的Java文件依赖性分析方法及模块 |
CN109033843A (zh) * | 2018-08-02 | 2018-12-18 | 南瑞集团有限公司 | 用于分布式静态检测系统的Java文件依赖性分析方法及模块 |
CN111124872A (zh) * | 2018-10-31 | 2020-05-08 | 上海哔哩哔哩科技有限公司 | 基于差异代码分析的分支检测方法、装置及存储介质 |
CN109800077A (zh) * | 2018-12-11 | 2019-05-24 | 北京奇安信科技有限公司 | 全程序静态检测的文件优先检测顺序的处理方法及装置 |
CN109857641B (zh) * | 2018-12-29 | 2022-09-13 | 奇安信科技集团股份有限公司 | 对程序源文件进行缺陷检测的方法及装置 |
CN109857641A (zh) * | 2018-12-29 | 2019-06-07 | 北京奇安信科技有限公司 | 对程序源文件进行缺陷检测的方法及装置 |
CN110187967A (zh) * | 2019-05-15 | 2019-08-30 | 南瑞集团有限公司 | 一种适用于依赖分析工具的内存预测方法及装置 |
CN110262803A (zh) * | 2019-06-30 | 2019-09-20 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110286934A (zh) * | 2019-06-30 | 2019-09-27 | 潍柴动力股份有限公司 | 一种静态代码的检查方法及装置 |
CN110262803B (zh) * | 2019-06-30 | 2023-04-18 | 潍柴动力股份有限公司 | 一种依赖关系的生成方法及装置 |
CN110472411A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
CN110472411B (zh) * | 2019-08-20 | 2021-05-07 | 杭州和利时自动化有限公司 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
CN110825650A (zh) * | 2019-11-29 | 2020-02-21 | 北京网聘咨询有限公司 | 单元测试覆盖精度检测方法及装置 |
CN110825650B (zh) * | 2019-11-29 | 2023-04-11 | 北京网聘咨询有限公司 | 单元测试覆盖精度检测方法及装置 |
CN110990281B (zh) * | 2019-12-04 | 2023-11-07 | 中国直升机设计研究所 | 一种自动化静态分析方法 |
CN110990281A (zh) * | 2019-12-04 | 2020-04-10 | 中国直升机设计研究所 | 一种自动化静态分析方法 |
CN111143219A (zh) * | 2019-12-27 | 2020-05-12 | 中国信息安全测评中心 | 一种基于人工智能的软件代码缺陷识别方法及相关装置 |
US11226889B2 (en) | 2020-05-05 | 2022-01-18 | International Business Machines Corporation | Regression prediction in software development |
CN111611158A (zh) * | 2020-05-08 | 2020-09-01 | 中国原子能科学研究院 | 一种应用性能分析系统及方法 |
CN111581094A (zh) * | 2020-05-08 | 2020-08-25 | 贝壳技术有限公司 | 头文件名检测方法、装置、存储介质及电子设备 |
CN113076244A (zh) * | 2021-03-30 | 2021-07-06 | 深圳前海微众银行股份有限公司 | 一种函数调用关系检测方法及装置 |
CN113076244B (zh) * | 2021-03-30 | 2023-03-03 | 深圳前海微众银行股份有限公司 | 一种函数调用关系检测方法及装置 |
CN113791757A (zh) * | 2021-07-14 | 2021-12-14 | 北京邮电大学 | 软件需求和代码映射方法及系统 |
CN113791757B (zh) * | 2021-07-14 | 2023-08-22 | 北京邮电大学 | 软件需求和代码映射方法及系统 |
CN113283613A (zh) * | 2021-07-23 | 2021-08-20 | 上海燧原科技有限公司 | 深度学习模型的生成方法、优化方法、装置、设备及介质 |
WO2023024714A1 (en) * | 2021-08-24 | 2023-03-02 | Xfusion Digital Technologies Co., Ltd. | Static analysis method, apparatus, and device, and computer-readable storage medium |
CN114580325A (zh) * | 2021-12-31 | 2022-06-03 | 上海盈方微电子有限公司 | 芯片RTL验证阶段Tarmac日志分析方法 |
CN115981711A (zh) * | 2023-03-20 | 2023-04-18 | 花瓣云科技有限公司 | 一种代码处理方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106294156B (zh) | 2018-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294156A (zh) | 一种静态代码缺陷检测分析方法及装置 | |
Nayak et al. | Automatic Test Data Synthesis using UML Sequence Diagrams. | |
CN103645986B (zh) | 一种编译器的可视化语法树的生成方法和重构方法 | |
Tilley et al. | A survey of formal concept analysis support for software engineering activities | |
Philippow et al. | An approach for reverse engineering of design patterns | |
EP2257873A2 (en) | Systems and methods for information flow analysis | |
CN109426615A (zh) | 过程间的空指针解引用检测方法、系统、设备以及介质 | |
Deransart et al. | Analysis and visualization tools for constraint programming: constraint debugging | |
JPH08190587A (ja) | 業務プロセスのシミュレーションシステム | |
JPH02272645A (ja) | プログラム・デバツグ支援方法 | |
CN109344230A (zh) | 代码库文件生成、代码搜索、联结、优化以及移植方法 | |
CN102662644A (zh) | 一种使用流程图生成测试案例的方法 | |
Lethbridge et al. | Umplification: Refactoring to incrementally add abstraction to a program | |
CN104077232A (zh) | 一种基于用例与源码双向追溯的测试装置及方法 | |
Koskimies et al. | SCED: A tool for dynamic modelling of object systems | |
Stephan et al. | Identifying instances of model design patterns and antipatterns using model clone detection | |
Zhang et al. | Query-based filtering and graphical view generation for clone analysis | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
Aljamaan et al. | Specifying trace directives for UML attributes and state machines | |
Bertolino et al. | An approach to integration testing based on architectural descriptions | |
Yamashita et al. | Changebeadsthreader: An interactive environment for tailoring automatically untangled changes | |
CN115080448B (zh) | 一种软件代码不可达路径自动检测的方法和装置 | |
Boucher et al. | Transforming workflow models into automated end-to-end acceptance test cases | |
Li et al. | Soncraft: A tool for construction, simulation, and analysis of structured occurrence nets | |
Lai et al. | Defining and verifying behaviour of domain specific language with fUML |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |