一种信息处理方法及装置与流程

文档序号:12363402阅读:139来源:国知局
本发明涉及程序测试技术,尤其涉及一种信息处理方法及装置。
背景技术
::程序静态分析(ProgramStaticAnalysis)又称为静态测试,是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。现在已有一些用于实现对程序进行静态测试的工具一般称为静态代码分析工具。在现有的静态代码分析过程中,通常都是采用固定的规则进行分析参数的调整,或用户通过配置变量方式对分析参数的调整,以此来影响静态代码分析的速度,其中分析参数包括文件类型、分析算法中前向搜索的代码行数等参数。该方法中,用户需要掌握如何通过静态代码分析工具先前输出的分析结果,进行人工分析和对分析参数进行调整的技能。可见,现有的这种方式对用户的要求比较高,从而导致静态代码分析的周期比较长。技术实现要素:有鉴于此,本发明实施例为解决现有技术中存在的至少一个问题而提供一种信息处理方法及装置,能够缩短静态代码分析的周期,从而提高分析效率。本发明实施例的技术方案是这样实现的:第一方面,本发明实施例提供一种信息处理方法,所述方法包括:利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;根据所述输出日志确定为所述代码风险告警在所述静态代码分析工具中配 置文件的分析参数下的分布信息;将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围;按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;按照所述修改后的配置文件对所述待测试代码进行静态代码分析。第二方面,本发明实施例提供一种信息处理方法,所述方法包括:获取采用哈希树查找方式时的待查找对象的关键词;以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树;统计所述第一哈希树中每一分支节点的下一级分支节点的数量;根据所述每一分支节点的下一级分支节点的数量对所述每一分支节点的路径进行合并,得到第二哈希树;按照所述第二哈希树对所述待查找对象进行查找。第三方面,本发明实施例提供一种信息处理装置,所述装置包括第一获取单元、第一确定单元、第二确定单元、修改单元和处理单元,其中:所述第一获取单元,用于利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;所述第一确定单元,用于根据所述输出日志确定为所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息;所述第二确定单元,用于将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围;所述修改单元,用于按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;所述处理单元,用于按照所述修改后的配置文件对所述待测试代码进行静态代码分析。第四方面,本发明实施例提供一种信息处理装置,所述装置包括第二获取单元、建立单元、统计单元、合并单元和查找单元,其中:所述第二获取单元,用于获取采用哈希树查找方式时的待查找对象的关键词;所述建立单元,用于以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树;所述统计单元,用于统计所述第一哈希树中每一分支节点的下一级分支节点的数量;所述合并单元,用于根据所述每一分支节点的下一级分支节点的数量对所述每一分支节点的路径进行合并,得到第二哈希树;所述查找单元,用于按照所述第二哈希树对所述待查找对象进行查找。本发明实施例提供的信息处理方法及装置,其中,利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;根据所述输出日志确定所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息;将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围;按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;按照所述修改后的配置文件对所述待测试代码进行静态代码分析;如此,能够缩短静态代码分析的周期,从而提高分析效率。附图说明图1为本发明实施例一信息处理方法的实现流程示意图;图2为本发明实施例二信息处理方法的实现流程示意图;图3为本发明实施例三信息处理方法的实现流程示意图;图4-1为本发明实施例四信息处理方法的实现流程示意图;图4-2为相关技术中建立的哈希树的示意图一;图4-3为本发明实施例对图4-2所示的哈希树进行优化后的示意图;图4-4为相关技术中建立的哈希树的示意图二;图4-5为本发明实施例对图4-4所示的哈希树进行优化后的示意图;图5为本发明实施例五中代码风险告警在不同目录路径下的次数示意图;图6为本发明实施例六中建立的哈希树的结构示意图;图7-1为本发明实施例七信息处理装置的组成结构示意图一;图7-2为本发明实施例七信息处理装置的组成结构示意图二;图7-3为本发明实施例七信息处理装置的组成结构示意图三;图7-4为本发明实施例七信息处理装置的组成结构示意图四;图8为本发明实施例八信息处理装置的组成结构示意图。具体实施方式下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。实施例一本发明实施例提供一种信息处理方法,具体应用于程序静态分析的过程中,该信息处理方法所实现的功能可以通过计算设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算设备至少包括处理器和计算机存储介质。其中计算设备包括个人计算机(PC,PersonalComputer)、高性能的计算机如服务器、笔记本电脑、一体机、桌面电脑等设备。图1为本发明实施例一信息处理方法的实现流程示意图,如图1所示,该信息处理方法包括:步骤101,利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;这里,待测试代码是指编程人员写的一段程序。关于代码风险告警的输出日志可以是告警日志,具体地,通过调用静态代码分析工具对待测试代码进行测试,在测试后获取输出的告警日志作为关于代码风险告警的输出日志。这里,步骤101可以在每次静态代码分析工具完成第一次运行后,获取关于代码风险告警的输出日志。步骤102,根据所述输出日志,确定所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息;这里,所述配置文件的分析参数是指一些影响代码分析时覆盖范围和分析时长的门限值,本发明实施例中的分析参数至少包括以下任一项:文件类型、目录路径、前向搜索的代码行数。当所述配置文件的分析参数为文件类型时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同文件类型下的分布信息;当所述配置文件的分析参数为目录路径时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同目录路径下的分布信息;当所述配置文件的分析参数为前向搜索的代码行数时,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同的前向搜索的代码行数下的分布信息。这里,分布信息包括分布比例和分布频次。步骤103,将满足预设条件的分析参数的取值范围,确定为所述分析参数的目标搜索范围;这里,由于步骤102中的分布信息中的分布比例和分布频次都是关于数值的,对应地,所述预设条件也为关于数值的,例如可以是门限阈值,也可以是取值范围。步骤104,按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;这里,初始搜索范围是指采用固定的规则而设置的静态代码分析的搜索范围,或者,用户通过配置变量方式而设置的搜索范围。步骤105,按照所述修改后的配置文件对所述待测试代码进行静态代码分析。这里,步骤105中,按照所述修改后的配置文件对所述待测试代码进行静态代码分析,可以进行一次,也可以进行多次;需要说明的是,进行一次时,如果静态代码分析的结果比较好,计算设备认为满足预先写入的条件了,可以停止静态代码分析,其中预先写入的条件可以在程序中设置一些参数,当满足这些参数时,计算设备停止静态代码分析;当然也可以是程序员认为分析结果 比较好,停止静态分析。当然,当分析结果不好的时候,可以回到步骤101,继续执行本发明实施例提供的技术方案。本发明实施例103中,以所述配置文件的分析参数为文件类型为例进行说明,当所述配置文件的分析参数为文件类型时,对应地,将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围,为:将满足预设条件的文件类型,确定为文件类型的目标搜索范围。例如,假设静态分析的文件类型包括三类分别为.cpp文件、.h文件和.dll文件,统计首次静态代码分析的输出日志中代码风险告警分布在不同文件类型的分布信息见表1,其中,.cpp文件、.h文件和.dll文件是指以.cpp、.h和.dll结尾的文件。代码风险告警一共有100次,其中,.cpp文件一共有60次代码风险告警,.h文件一共有35次代码风险告警,.dll文件一共有5次代码风险告警;按照分布比例来说,.cpp文件中代码风险告警占总数的60%,.h文件中代码风险告警占总数的35%,.dll文件中代码风险告警占总数的5%。表1代码风险告警分布在不同文件类型的分布信息当分布信息为分布频次时,假设预设条件为分布频次大于10次以上的文件类型,则.cpp文件和.h文件为文件类型的目标搜索范围;假设预设条件为分布频次按照从大到小的顺序进行累加,且累加之和大于等于90次以上的文件类型,则.cpp文件和.h文件为文件类型的目标搜索范围。当分布信息为分布比例时,假设预设条件为分布比例大于0%以上的文件类型,则.cpp文件、.h文件和.dll文件为文件类型的目标搜索范围;当分布信息为分布比例时,假设预设条件为分布信息按照从大到小的顺序进行累加,且累加之和大于等于90%以上的文件类型,则.cpp文件和.h文件为文件类型的目标搜索范围。本发明实施例中,利用静态代码分析工具对待测试代码进行静态代码分析 后,获取关于代码风险告警的输出日志;根据所述输出日志确定为所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息;将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围;按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;按照所述修改后的配置文件对所述待测试代码进行静态代码分析。这样,能够缩短静态代码分析的周期,从而提高分析效率。具体地,每次静态代码分析工具完成一次运行后,依靠本本发明实施例一提供的方案,能够自动地根据首次分析代码的输出日志,进行各种聚类统计,从而找出绝大部分的代码风险告警的分布信息,例如:95%的代码风险告警是在前向搜索分析3行内代码就可被发现,95%的代码质量风险被发现在.c文件中,并将这些发现的分布信息自动更新到静态代码分析工具的配置文件中。这样,在下一次运行静态代码分析工具时,将会通过降低不到5%或用户自定义的代码风险告警数量的代价,以减少分析的代码文件数量和分析的代码行数。实施例二基于上述的实施一,本发明实施例提供一种信息处理方法,具体应用于程序静态分析的过程中,该信息处理方法所实现的功能可以通过计算设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算设备至少包括处理器和计算机存储介质。图2为本发明实施例二信息处理方法的实现流程示意图,如图2所示,该信息处理方法包括:步骤201,利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;步骤202,根据所述输出日志,确定所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布比例;这里,所述配置文件的分析参数是指一些影响代码分析时覆盖范围和分析时长的门限值,本发明实施例中的分析参数至少包括以下任一项:文件类型、 目录路径、前向搜索的代码行数。当所述配置文件的分析参数为文件类型时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同文件类型下的分布信息;当所述配置文件的分析参数为目录路径时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同目录路径下的分布信息;当所述配置文件的分析参数为前向搜索的代码行数时,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同的前向搜索的代码行数下的分布信息。步骤203,对代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;步骤204,将所述排序结果按从大到小的顺序进行累加,并将累加之和大于等于预设的第一阈值的分析参数,确定为所述分析参数的目标搜索范围;步骤205,按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;步骤206,按照所述修改后的配置文件对所述待测试代码进行静态代码分析。本发明实施例中,步骤203中,对代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;以表1为例,排序结果为.cpp文件大于(>).h文件>.dll文件,或者.dll文件小于(<).cpp文件<.h文件,然后将所述排序结果按从大到小的顺序进行累加,并将累加之和大于等于预设的第一阈值的分析参数,确定为所述分析参数的目标搜索范围;假设第一阈值为90%,则.cpp文件和.h文件为文件类型的目标搜索范围。本发明实施例二中,所述分布信息为分布比例,因此,实施例二和实施例三中的第一阈值为关于比例的数值(对应于实施例一中的预设条件)。本发明实施例二中,所述分布信息还可以为分布频次,当分布信息为分布频次时,对应地,实施例二中的第一阈值为关于次数的数值,本领域的技术人员可以根据实际情况对第一阈值进行设置,这里不再赘述。实施例三基于实施例一,本发明实施例提供一种信息处理方法,具体应用于程序静态分析的过程中,该信息处理方法所实现的功能可以通过计算设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算设备至少包括处理器和计算机存储介质。图3为本发明实施例三信息处理方法的实现流程示意图,如图3所示,该信息处理方法包括:步骤301,利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;步骤302,根据所述输出日志,确定所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布比例;这里,所述配置文件的分析参数是指一些影响代码分析时覆盖范围和分析时长的门限值,本发明实施例中的分析参数至少包括以下任一项:文件类型、目录路径、前向搜索的代码行数。当所述配置文件的分析参数为文件类型时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同文件类型下的分布信息;当所述配置文件的分析参数为目录路径时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同目录路径下的分布信息;当所述配置文件的分析参数为前向搜索的代码行数时,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同的前向搜索的代码行数下的分布信息。步骤303,对所述代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;步骤304,将所述排序结果中大于等于预设的第二阈值的分析参数,确定为所述分析参数的目标搜索范围;步骤305,按照所述目标搜索范围对所述配置文件中分析参数的初始搜索 范围进行修改,得到修改后的配置文件;步骤306,按照所述修改后的配置文件对所述待测试代码进行静态代码分析。本发明实施例中,步骤301、步骤302、步骤305和步骤306分别对应于实施例二中的步骤201、步骤202、步骤205和步骤206,因此,本领域的技术人员可以参见实施例二中的相关描述,故而不再赘述。本发明实施例中,步骤303中,对代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;以表1为例,排序结果为.cpp文件>.h文件>.dll文件,或者.dll文件<.cpp文件<.h文件,然后将所述排序结果按从大到小的顺序进行累加,并将所述排序结果中大于等于预设的第二阈值的分析参数,确定为所述分析参数的目标搜索范围;假设第二阈值为90%,则.cpp文件和.h文件为文件类型的目标搜索范围。本发明实施例三中,所述分布信息为分布比例,因此,实施例三中的第二阈值均为关于比例的数值(对应于实施例一中的预设条件)。本发明实施例三中,所述分布信息还可以为分布频次,当分布信息为分布频次时,对应地,实施例三中的第二阈值均为关于次数的数值,本领域的技术人员可以根据实际情况对第一阈值和第二阈值进行设置,这里不再赘述。本发明实施例二和实施例三中,所述分布信息还可以为分布频次,而且可以将分布频次转换为分布比例,将分布频次转换为分布比例可以采用以下的方式:步骤S31,从所述输出日志中获取所述代码风险告警的总次数;步骤S32,根据所述代码风险告警分布在所述分析参数下的频次和所述代码风险告警的总次数,确定所述代码风险告警分布在所述分析参数下的分布比例。这里,以表1为例,代码风险告警的总次数为100次。所述分析参数为文件类型时,分析参数内不同参数是指.cpp文件、.h文件和.dll文件,对应地,所述代码风险告警分布在所述分析参数内下频次是指,所述代码风险告警分布在 不同的文件类型的频次;例如,代码风险告警分布在.cpp文件下的频次(60次),代码风险告警分布在.h文件下的频次(35次),代码风险告警分布在.dll文件下的频次(5次)。在已知所述代码风险告警分布在所述分析参数下的频次和所述代码风险告警的总次数的情况下,将所述代码风险告警分布在所述分析参数下的频次除以所述代码风险告警的总次数,即得到所述代码风险告警分布在所述分析参数下的分布比例。例如,将代码风险告警分布在.cpp文件下的频次除以总次数(60次/100),即为代码风险告警分布在.cpp文件下的分布比例(60%)。实施例四采用上述的实施例一至三提供的技术方案,能够缩短静态代码分析的周期,从而提高分析效率。本发明人除了上述的技术方案外,本发明人发现:在现有的静态代码分析过程中,当对代码进行上下文分析时,需要进行函数名查找操作,函数名查找的方法通常有:线性查找方式、哈希树查找方式,其中哈希树查找方式是指建立以函数名为哈希树的节点的键值,然后按照哈希树进行相同函数名的匹配查找。虽然哈希树查找方式是一种比较快速查找算法,但是现有的哈希树的实现方式导致查找路径还是存在一定冗余,因此会影响静态测试分析的性能,换句话说,现有的哈希树的查找方式所涉及的步骤中还是存在一定冗余的步骤,从而导致静态代码分析的周期比较长。本发明人针对这一问题,在本发明实施例中再提供一种信息处理方法,具体应用于程序静态分析的过程中,该信息处理方法所实现的功能可以通过计算设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算设备至少包括处理器和计算机存储介质。其中计算设备包括个人计算机、高性能的计算机如服务器、笔记本电脑、一体机、桌面电脑等设备。图4-1为本发明实施例四信息处理方法的实现流程示意图,如图4-1所示,该信息处理方法包括:步骤401,获取采用哈希树查找方式时的待查找对象的关键词;这里,哈希树中的“哈希”是一种基于key-value结构的数据结构,key是键值,其中支持非数值型作为键值类型,value是该key键值对应的数据结构。哈希树是一种基于Hash数据结构进行多种不同类型数据存储的树形结构,可以提高后续查找的效率。这里,待查找对象可以为函数,待查找对象的关键词可以为函数名即为一个函数的名字。步骤402,以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树;这里,以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树,具体为:以所述待查找对象的关键词中的每一字符为哈希树中分支节点的键值,建立第一哈希树。这里,步骤402可以具体为:以所述待查找对象的关键词中字符为哈希树中分支节点的键值、以所述待查找对象的关键词为所述哈希树的叶子节点的键值,建立第一哈希树。步骤403,统计所述第一哈希树中每一分支节点的下一级分支节点的数量;步骤404,根据所述每一分支节点的下一级分支节点的数量对所述每一分支节点的路径进行合并,得到第二哈希树;步骤405,按照所述第二哈希树对所述待查找对象进行查找。这里,步骤404具体包括:步骤4041,判断所述每一分支节点的下一级分支节点的数量是否等于1,得到判断结果;步骤4042,当判断结果表明所述每一分支节点的下一级分支节点的数量等于1时,将下一级分支节点的键值从所述第一哈希树中删除;当判断结果表明所述每一分支节点的下一级分支节点的数量不等于1时,将下一级分支节点的键值在所述第一哈希树中保留,得到第二哈希树。本发明实施例提供的技术方案可以用于下面的场景,在下面的场景中将以查找函数为例,来说明本发明实施例提供的技术方案。场景1:如果完全以函数名的全量字符作为构建哈希树多层节点的key值,则遇到部分长命名的函数名时,会产生不必要的查找浪费。例如函数名:Run0,Run1,Runwindows,RunTable;如图4-2所示,在建立哈希树时,以所述函数名中每一字符为哈希树中分支节点的键值、以所述函数名为所述哈希树的叶子节点的键值,建立哈希树;在进行函数名查找时,查找的方式将按照图4-2所示的哈希进行查找。在现有技术中,在查找匹配Runwindows这个函数名时,会将Runwindows这个函数名中的每一个字符都查找完。事实上,在采用本发明实施例提供的技术方案时,在查找匹配Runwindows这个函数名时,只会查找到Runw这个阶段时就结束查找,因此,不需要继续后续的indo路径的查找,换句话说,在w处会有一个路径合并属性,这个属性存储了w所代替的路径w:indo,在t处会有一个路径合并属性,这个属性存储了t所代替的路径t:able;优化后的哈希树为图4-3所示,优化后的查找顺序为:R:u:n:{Run0,Run1},R:u:n:w:{Runwindow},R:u:n:t:{Runtable}。可见,本发明实施例提供的技术方案可以避免冗余的查找操作,从而提升了查找效率,进而缩短了静态代码分析的周期。场景2:多个函数名存在中间字符集相同的情况如:getABC,getABD,gBtree;如图4-4所示,在建立哈希树时,以所述函数名中每一字符为哈希树中分支节点的键值、以所述函数名为所述哈希树的叶子节点的键值,建立哈希树;在相关技术中,在查找匹配:getABC、getABD函数时会存在多余重复查找的步骤(etAB),而本发明实施例提供的技术方案,如图4-5所示,优化后的查找顺序为:g:e:B:{getABC,getABD},g:B:{gBtree};其中,冒号(:)是指哈希树中的分支,大括号({})中的字符为待查找的函数名;也就是说,在e处会有一个路径合并属性,这个属性存储了e所代替的路径e:tA;在B会有一个路径合并属性,这个属性存储了B所代替的路径B:tre。可见,本发明实施例提供的技术方案,能够提高后续函数名哈希树的查询效率。本发明实施例提供的技术方案,基于常见的待查找对象的命名习惯中的规律或规则自学习自动优化初始的哈希树结构,能够去掉以上场景1和场景2中的冗余多余的查找步骤。下面以具体实例,来说明应用本发明实施例提供的技术方案的效果,某邮箱的后台代码第一次静态代码分析花费2.5小时,一共发现1400多个空指针问题,应用本发明实施例提供的技术方案后,分析时间从2.5小时缩短为1.5小时,减少36%耗时。某游戏的前端代码第一次静态代码分析花费5分25秒,一共发现55个空指针问题,应用本发明实施例提供的技术方案后,分析时间从5分25秒缩短为25秒,减少90%耗时。实施例五基于前述的实施例一至三,本发明实施例将从代码的文件类型、目录路径、前向搜索的代码行数这三个方面,进行描述如何利用静态代码分析的输出日志中告警的分布信息来优化分析参数。分布信息1:文件类型中代码风险告警的分布信息步骤S110:统计首次静态代码分析的输出日志中关于代码风险告警分布在所属不同文件类型的频次。例如,.cpp文件中告警出现的频次为100次,.h文件告警出现的频次为2次,.dll文件中告警出现的频次为0次。步骤S120:基于步骤S110中的输出日志,按如下步骤筛选出后续静态代码分析时的目标搜索范围,该目标搜索范围为比较重点的文件类型范围。步骤S121,求出每个文件类型发现的分析告警次数在总次数中的比例;步骤S122,依次按步骤S121中分布比例按从大到小的顺序进行累加,当累加之和大于等于(≥)X%(X取值为90,95等)时,将这些累加比例对应的文件类型作为后续静态代码分析任务中的目标搜索范围,其中,X%可以理解为上述实施例中的第一阈值。步骤S120和步骤12的价值在于:避免代码分析过程浪费时间在一些很小 概率会出现代码质量风险的文件类型上。特征分布信息2:目录路径中代码风险告警的分布信息步骤S210,统计静态代码分析的输出日志中代码风险告警分布在不同路径下出现的频次及其占比。步骤S211,由于代码风险告警中所出现的所有目录都是有代码质量风险的目录,因此,可以从静态代码分析的起始目标代码路径开始统计告警报告中每个目录下所发现的代码质量风险问题的比例,图5为本发明实施例五中代码风险告警在不同目录路径下的次数示意图,如图5所示,目录路径A为最大的目录,目录A下包括三个目录,分别为A\B1、目录A\B2和目录A\B3,而目录A\B1下还包括两个目录A\B\C1和A\B\C2,其中,冒号(:)后面的数字为代码风险告警出现的次数,冒号(:)前面的文字为目录名称,例如:目录路径A出现100次的代码风险告警,目录路径A\B1出现60次的代码风险告警,目录路径A\B2出现40次的代码风险告警,录路径A\B3出现0次的代码风险告警,目录路径A\B\C1出现57次的代码风险告警,目录路径A\B\C2出现3次的代码风险告警。步骤212,按目录的层级分别统计每个层级不同目录下的代码风险告警的比例。将代码风险告警的比例满足预设条件所对应的目录作为目标搜索范围,换句话说,也可以将代码风险告警的比例不满足预设条件所对应的目录作为不再分析的目录中,假设,预设条件为比例大于0%所对应的目录,那么目录A\B3可以为不再分析的目录,对应地,还可以设置目录列表,既可以为待分析的目录列表(目标搜索范围),也可以为不再分析的目录列表。后续将不再对路径A\B3下的代码进行静态代码分析,从而减少了代码分解分析量。分布信息3:前向搜索的代码行数中代码风险告警的分布信息针对某些代码分析规则例如RiskVar=RiskFun(),对变量RiskVar赋值后,进行前向搜索N行代码的上下文分析时,如何确定分析性能与风险覆盖率平衡 最佳的代码行数N,将由下面的步骤来实现。步骤S310,:统计静态代码分析的输出日志中每个代码风险告警中,出现问题的代码行与RiskVar变量出现代码行之间的距离:X行。将所有的X行数据都存入到一个代码行距列表中,例如:[1,2,3,3,3,3,3,4,5,2,3,3,4,5,6,7,3...]。步骤S320,对代码行距列表中的所有数据进行聚类,统计每类的频次和占比。例如:如表2所示,行距1出现1频次的代码风险告警,占比为2%;行距2出现为0频次的代码风险告警,占比为0%;行距3出现30频次的代码风险告警,占比为60%;行距4出现15频次的代码风险告警,占比为30%;行距5出现0频次的代码风险告警,占比为0%;行距6出现0频次的代码风险告警,占比为0%;行距7出现4频次的代码风险告警,占比8%。表2,前向搜索的代码行数中代码风险告警的分布信息行距1234567总和占比2%0%60%30%0%0%8%100%频次10301500450步骤S330,对所有行距值所占的比例进行从小到大或从大到小的顺序进行排序。按照从大到小的顺序每个行距值所对应的占比值进行累加求和,当累加求和值达到Z%(Z为90或95等)时,中止累加求和运算,参与求和运算的行距值中的最大值就是代码前向搜索时的行数。这里,需要说明的是,在步骤S330中,求出行数可能是一些在行数上不连续的一些代码行,继续承接步骤S320中的例子,当第一阈值设置为90%时,则目标搜索范围为行距3和行距5。当第一阈值设置为95%时,则目标搜索范围为行距3、行距5和行距7。由此可见,行距3和行距5并不是连续的,在行距3和行距5之间还具有一个行距4。在步骤S330中,求出行数可能是一些在行数上不连续的一些代码行,当然, 目标搜索范围还可以为连续的行数,继续承接步骤S320中的例子,将对所有行距值按从小到大的顺序进行排序,即[1,2,3,4,5,6,7...],从小到大把每个行距值的占比值进行累加求和,当当第一阈值设置为90%时,则目标搜索范围为从行距1至行距5,即,目标搜索范围为行距1、行距2、行距3、行距4和行距5,这些行距是连续的代码行。当第一阈值设置为95%时,则目标搜索范围为行距1至行距7,即,目标搜索范围为行距1、行距2、行距3、行距4、行距5、行距6和行距7,这些行距也是连续的代码行。将上述分布信息1中确定的关于文件类型的目标搜索范围,上述分布信息2中确定的不再分析的代码目录路径,上述分布信息3中的代码前向搜索的行数,写入到静态代码分析工具的配置文件中。待静态代码分析工具第二次运行时,就将是在性能最优参数环境下的运行了。本发明实施例提供的技术方案,利用统计聚类的思想对代码风险告警的分布信息进行挖掘,例如,代码风险告警分布在不同的文件类型上的信息,代码风险告警分布在不同的目录路径上的信息,代码风险告警分布在不同的前向搜索代码行上的信息,通过将上述分布信息写入到配置文件中,可以避免后续每次静态代码分析过程,都对低概率告警的代码进行低效的代码静态分析。实施例六基于上述的实施例四,本发明实施例将以函数名为例,来说明如何根据函数名的命名规律优化原来的哈希树,最终生成去冗余查询路径的哈希树。步骤S610,以函数名中每个字符为分支节点的键值,以函数名为叶子节点的键值,建立第一哈希树,并记录下每个分支节点的下一级节点数量,每个分支节点(叶子节点除外),还有一个路径合并属性字段,在第一步时该字段都为空。图6为本发明实施例六中建立的哈希树的结构示意图,如图6所示,假设待查找的对象为函数名:getABC,getABD,gBtree。以函数名中每个字符为分支节点的键值,以函数名为叶子节点的键值,建立第一哈希树,并记录下每个 分支节点的下一级分支节点的数量,在图6中,冒号前面的文件为函数名中的字符,冒号后面的数字为该分支节点的下一级节点数量,例如,函数名中字符g的下一级分支节点的数量为2(字符g包括e和B两个分支节点),函数名中字符额的下一级分支节点的数量为1(字符e仅包括t一个分支节点)自循环去冗余查找路径的迭代计算,包括以下步骤:步骤S611,从第二级分支节点开始遍历第一哈希树。步骤S612,自循环去冗余查找路径的迭代算法如下:如果下一级分支节点的数量等于(=)1,例如第二级的分支节点e的下一级的分支节点的数量为1,那么将t从第一哈希树中删除,在具体实现的过程中,可以用分支节点e现有的下一级的分支节点t的下一级分支节点的数量来替换掉e的下一级的分支节点的数量,e的下一级分支节点则指向t的下一级的分支节点A。在将t从第一哈希树中删除后,还可以把分支节点t加入到分支节点e的路径合并属性字段。如果下一级分支节点的数量不等于1,则将该分支节点保留在第一哈希树中。步骤S613,继续判断分支节点e的下一级的分支节点的数量是否等于1,重复步骤S612,直到下一级分支节点数不再为1或者下一级节点为叶子节点。在经过上述的步骤S611至S613之后,图6所示的第一哈希树将变成图4-5所示的第二哈希树。在利用图4-5所示的第二哈希树进行函数名查找时,例如当需要进行getABC函数查找匹配时,在第二哈希树中的查找执行步骤为:步骤S621,匹配第一个字符g,匹配成功;步骤S622:接着匹配第二个字符e,发现e的路径合并属性中有一个字符串tA,于是读取getABC函数名从e开始的后续所有字符,是否完全匹配tA,如果完全匹配,则继续读取函数名getA后面的字符,并与第二哈希树的这个分支子树ge的下一个分支节点的键值B进行匹配,直到访问到叶子节点,在叶子节点中查找是否存在getABC函数名。实施例七基于前述的信息处理方法,本发明实施例提供一种信息处理装置,本发明实施例提供的信息处理装置中的第一获取单元、第一确定单元、第二确定单元、修改单元和处理单元,以及各单元各自所包括的各模块都可以通过计算设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在具体实施例的过程中,处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。图7-1为本发明实施例七信息处理装置的组成结构示意图,如图7-1所示,该信息处理装置700包括第一获取单元701、第一确定单元702、第二确定单元703、修改单元704和处理单元705,其中:所述第一获取单元701,用于利用静态代码分析工具对待测试代码进行静态代码分析后,获取关于代码风险告警的输出日志;所述第一确定单元702,用于根据所述输出日志确定为所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息;所述第二确定单元703,用于将满足预设条件的分析参数,确定为所述分析参数的目标搜索范围;所述修改单元704,用于按照所述目标搜索范围对所述配置文件中分析参数的初始搜索范围进行修改,得到修改后的配置文件;所述处理单元705,用于按照所述修改后的配置文件对所述待测试代码进行静态代码分析。本发明实施例中,如图7-2所示,所述分布信息包括分布比例;对应地,所述第二确定单元703包括排序模块7031和第一确定模块7032,其中:所述排序模块7031,用于对所述代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;所述第一确定模块7032,用于将所述排序结果中按从大到小的顺序进行累加,并将累加之和大于等于预设的第一阈值的分析参数,确定为所述分析参数的目标搜索范围。本发明实施例中,如图7-3所示,所第二确定单元703包括排序模块7031和第二确定模块7033,其中:所述排序模块7031,用于对所述代码风险告警的分布比例按从大到小或从小到大的顺序进行排序,得到排序结果;所述第二确定模块7033,用于将所述排序结果中大于等于预设的第二阈值的分析参数,确定为所述分析参数的目标搜索范围。本发明实施例中,如图7-4所示,所述分布信息包括分布频次,对应地,所述第二确定单元703还包括获取模块7034和第三确定模块7035,其中:所述获取模块7034,用于从所述输出日志中获取所述代码风险告警的总次数;所述第三确定模块7035,用于根据所述代码风险告警分布在所述分析参数下的频次和所述代码风险告警的总次数,确定所述代码风险告警分布在所述分析参数下的分布比例。本发明实施例中,所述配置文件的分析参数至少包括以下任一项:文件类型、目录路径、前向搜索的代码行数;当所述配置文件的分析参数为文件类型时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同文件类型下的分布信息;当所述配置文件的分析参数为目录路径时,对应地,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同目录路径下的分布信息;当所述配置文件的分析参数为前向搜索的代码行数时,所述代码风险告警在所述静态代码分析工具中配置文件的分析参数下的分布信息为所述代码风险告警在不同的前向搜索的代码行数下的分布信息。本发明实施例中,所述装置包括第二获取单元、建立单元、统计单元、合并单元和查找单元,其中:所述第二获取单元,用于获取采用哈希树查找方式时的待查找对象的关键 词;所述建立单元,用于以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树;所述统计单元,用于统计所述第一哈希树中每一分支节点的下一级分支节点的数量;所述合并单元,用于根据所述每一分支节点的下一级分支节点的数量对所述每一分支节点的路径进行合并,得到第二哈希树;所述查找单元,用于按照所述第二哈希树对所述待查找对象进行查找。这里,所述合并单元包括判断模块和删除模块,其中:所述判断模块,用于判断所述每一分支节点的下一级分支节点的数量是否等于1,得到判断结果;所述删除模块,用于当判断结果表明所述每一分支节点的下一级分支节点的数量等于1时,将下一级分支节点的键值删除,得到第二哈希树。这里,所述建立单元,用于以所述待查找对象的关键词中字符为哈希树中分支节点的键值、以所述待查找对象的关键词为所述哈希树的叶子节点的键值,建立第一哈希树。这里需要指出的是:以上实施例七中的信息处理装置实施例的描述,与上述实施例一至三和实施例五的信息处理方法实施例的描述是类似的,具有同信息处理方法实施例相似的有益效果,因此不做赘述。对于本发明信息处理装置实施例七中未披露的技术细节,请参照本发明方法实施例一至三和实施例五的描述而理解,为节约篇幅,因此不再赘述。实施例八基于前述的信息处理方法,本发明实施例提供一种信息处理装置,本发明实施例提供的信息处理装置中的第二获取单元、建立单元、统计单元、合并单元和查找单元,以及各单元各自所包括的各模块都可以通过计算设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在具体实施例的过程中,处理 器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。图8为本发明实施例八信息处理装置的组成结构示意图,如图8所示,该信息处理装置800包括第二获取单元801、建立单元802、统计单元803、合并单元804和查找单元805,其中:所述第二获取单元801,用于获取采用哈希树查找方式时的待查找对象的关键词;所述建立单元802,用于以所述待查找对象的关键词中字符为哈希树中分支节点的键值,建立第一哈希树;所述统计单元803,用于统计所述第一哈希树中每一分支节点的下一级分支节点的数量;所述合并单元804,用于根据所述每一分支节点的下一级分支节点的数量对所述每一分支节点的路径进行合并,得到第二哈希树;所述查找单元805,用于按照所述第二哈希树对所述待查找对象进行查找。本发明实施例中,所述建立单元,用于以所述待查找对象的关键词中字符为哈希树中分支节点的键值、以所述待查找对象的关键词为所述哈希树的叶子节点的键值,建立第一哈希树。本发明实施例中,所述合并单元包括判断模块和删除模块,其中:所述判断模块,用于判断所述每一分支节点的下一级分支节点的数量是否等于1,得到判断结果;所述删除模块,用于当判断结果表明所述每一分支节点的下一级分支节点的数量等于1时,将下一级分支节点的键值删除,得到第二哈希树。这里需要指出的是:以上实施例八中的信息处理装置实施例的描述,与上述实施例四和六的信息处理方法实施例的描述是类似的,具有同信息处理方法实施例相似的有益效果,因此不做赘述。对于本发明信息处理装置实施例八中未披露的技术细节,请参照本发明方法实施例四和六的描述而理解,为节约篇幅,因此不再赘述。应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ReadOnlyMemory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1