一种静态代码缺陷检测分析方法及装置制造方法及图纸

技术编号:14337485 阅读:111 留言:0更新日期:2017-01-04 10:41
本发明专利技术实施例公开了一种静态代码缺陷检测分析方法及装置,针对现有的对待测源代码文件的代码缺陷检测分析效率低下的问题,其中,检测分析方法包括:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;根据所述待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,提高待测源代码文件的代码缺陷检测分析效率。

【技术实现步骤摘要】

本专利技术涉及代码测试领域,特别涉及一种静态代码缺陷检测分析方法及装置
技术介绍
随着软件技术的日益发展,软件系统的复杂性和规模性也在不断地扩大,不可避免地会导致代码中出现BUG(缺陷)及失误,由此而引起的软件问题及其带来的危害性也越来越显著,由于软件代码问题而引起的巨大损失或者灾难也不断地出现在人们的视野中。为了解决这些问题,软件测试就显得尤为重要,目前,软件测试主要通过动态检测分析和静态检测分析两个方面进行。其中,静态检测分析是指不运行被测代码本身,仅通过分析或检查源程序的语法、结构、过程及接口等来检查程序的正确性。静态检测中相比较于直接对源代码文件的代码进行分析,分析经过编译预处理的源代码文件的代码相对而言要简单,所以大多数静态分析工具都以源代码文件的代码经过预处理产生的预编译结果文件为分析对象,使用编译器对源代码文件的代码进行预处理,然后进行后续分析。静态检测的效率与待待测源代码文件的代码的规模、代码行数、语法复杂度及检测分析的方法等因素直接相关,然而现有技术中的静态代码缺陷检测分析方法一般都是以串行检测分析的方式进行检测分析,这样在需要对大量工程文件进行检测分析的时候,使得对代码的缺陷检测效率低下。总之,现有技术的问题:现有的静态代码缺陷检测分析方法是以串行检测分析的方式进行检测分析,使得在需要对大量工程文件进行检测分析的时候,效率低下。
技术实现思路
本专利技术实施例的目的在于提供一种静态代码缺陷检测分析方法及装置,通过结合串行检测分析与并行检测分析的方法,提高待测源代码文件的代码缺陷检测分析的效率。为达到上述目的,本专利技术实施例公开了一种静态代码缺陷检测方法,包括:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;根据所述待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。优选的,所述根据所述待测源代码文件,生成抽象语法树,包括:通过预处理方式,处理所述待测源代码文件,生成中间文件;简化所述中间文件;根据简化后的中间文件,生成所述抽象语法树。优选的,所述简化所述中间文件,包括:读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;判断所述头文件名称是否存在于预先分析的头文件列表中;如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。优选的,所述简化所述中间文件,在判断所述头文件名称是否存在于预先分析的头文件列表中之后,所述静态代码缺陷检测分析方法还包括:如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息以及头文件中函数声明信息及变量的声明信息。优选的,所述根据简化后的中间文件,生成所述抽象语法树,包括:获取简化后的中间文件的头文件列表中包含的头文件名称;根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;根据所述头文件信息内容,生成抽象语法树。优选的,根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,包括:根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;根据所述符号表中的函数信息,并通过所述函数信息定义函数节点,其中,所述函数信息为定义不同作用域且包括声明信息的函数信息;根据所有的函数节点,形成一个全局的函数池,其中,所述函数节点包括:函数类型、函数的调用集合及函数的作用域;遍历所述函数池中的所有函数,根据所述控制流图,在判断当前函数与当前函数调用的函数不在同一个测试单元,建立当前函数所在的测试单元与当前函数的调用函数所在的测试单元的关联;遍历所述函数池中的所有函数节点,建立每个当前测试单元与所述其他测试单元的关联,得到关联后的每个当前测试单元与所述其他测试单元的依赖关系。优选的,所述依赖关系是各个测试单元依赖关系的有向图。优选的,所述根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:根据所述依赖关系,通过深度优先搜索算法查找所述依赖关系的有向图中的所有节点,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。优选的,根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析,包括:根据所述依赖关系,判断所述依赖关系是否是有环有向图;如果否,拓扑排序所述依赖关系的无环有向图中入度为0的节点,并对所述拓扑排序的结果进行逆序排列,得到所述逆序排列后的所述待测源代码文件的代码缺陷检测分析次序;如果是,选择所述依赖关系的有环有向图中出度最小的节点,并断开所述依赖关系的有环有向图中的各个环,将断开后的有环有向图中的各个环重新排序,得到代码缺陷检测分析次序;根据所述代码缺陷检测分析次序,并行检测分析有向图中出度为0的节点处对应的测试单元,得到并行检测分析的结果;根据所述代码缺陷检测分析次序和所述并行检测分析的结果,串行检测分析所述待测源代码文件中的剩余测试单元,其中,所述剩余测试单元为除所述出度为0的节点处对应的测试单元以外的其他剩余测试单元。本专利技术实施例还公开了一种静态代码缺陷检测分析装置,包括:获取模块,用于获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;抽象语法树生成模块,用于根据所述待测源代码文件,生成抽象语法树;依赖关系形成模块,用于根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;检测分析模块,用于根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。由上述的技术方案可见,本专利技术实施例获取待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,根据所述依赖关系,串行检测分析与并行检测分析进行所述待测源代码文件的代码缺陷检测分析,使用并行检测分析、串行检测分析结合的高效率检测分析方式,提高待测源代码文件的代码缺陷检测分析的效率。同时,本专利技术实施例对待测源代码文件进行预处理生成中间文件,简化中间文件,根据简化后的中间文件,生成抽象语法树,通过简化中间文件,减小了待测源代码文件代码的规模,提高了待测源代码文件的代码缺陷检测分析的效率,避免了内存溢出现象的发生,当然,实施本专利技术的任一产品或方法必不一定需要同本文档来自技高网...
一种静态代码缺陷检测分析方法及装置

【技术保护点】
一种静态代码缺陷检测分析方法,其特征在于,包括:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;根据所述待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。

【技术特征摘要】
1.一种静态代码缺陷检测分析方法,其特征在于,包括:获取待测源代码文件,其中,所述待测源代码文件包括:多个待测源代码文件段的测试单元;根据所述待测源代码文件,生成抽象语法树;根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,其中,所述其他测试单元为所述多个测试单元中除所述当前测试单元以外的其他测试单元;根据所述依赖关系,结合串行检测分析与并行检测分析,并对所述待测源代码文件的代码缺陷检测分析。2.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,所述根据所述待测源代码文件,生成抽象语法树,包括:通过预处理方式,处理所述待测源代码文件,生成中间文件;简化所述中间文件;根据简化后的中间文件,生成所述抽象语法树。3.根据权利要求2所述的静态代码缺陷检测分析方法,其特征在于,所述简化所述中间文件,包括:读取所述中间文件中的头文件名称和所述头文件名称对应的展开部分,其中,所述头文件名称对应的展开部分包括:所述头文件名称对应的函数声明信息和自定义声明信息;判断所述头文件名称是否存在于预先分析的头文件列表中;如果是,则删除所述头文件名称对应的展开部分,得到简化后的中间文件。4.根据权利要求3所述的静态代码缺陷检测分析方法,其特征在于,所述简化所述中间文件,在判断所述头文件名称是否存在于预先分析的头文件列表中之后,所述静态代码缺陷检测分析方法还包括:如果否,则添加所述头文件名称至所述预先分析的头文件列表中,并更新预设的头文件信息表,其中,所述预设的头文件信息表包括:所述中间文件中头文件的名称、头文件所在测试单元的名称、自定义类型信息以及头文件中函数声明信息及变量的声明信息。5.根据权利要求2所述的静态代码缺陷检测分析方法,其特征在于,所述根据简化后的中间文件,生成所述抽象语法树,包括:获取简化后的中间文件的头文件列表中包含的头文件名称;根据所述头文件名称,得到所述头文件名称对应的存储在所述头文件信息表中的头文件信息内容;根据所述头文件信息内容,生成抽象语法树。6.根据权利要求1所述的静态代码缺陷检测分析方法,其特征在于,所述根据所述抽象语法树,建立每个当前测试单元与其他测试单元的关联,得到关联后的每个当前测试单元与其他测试单元的依赖关系,包括:根据所述抽象语法树,生成符号表和控制流图,其中,所述符号表包括:所述待测源代码文件的每个标识符和对应的标识符的声明信息,所述控制流图中对应待测源代码文件的一个语句、与所述控制流图中的一个节点对应;根据所述符号表中的函数信息,并通过所述函数信息定义函数节点,其中,所述函数信息为定义不同作用域...

【专利技术属性】
技术研发人员:宫云战邓秋晗金大海黄俊飞王雅文
申请(专利权)人:北京邮电大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1