一种缺陷关联方法及装置的制作方法

文档序号:6401998阅读:196来源:国知局
专利名称:一种缺陷关联方法及装置的制作方法
技术领域
本发明涉及计算机中的缺陷关联技术,尤其涉及一种缺陷关联方法及装置。
背景技术
缺陷检测一般包括静态缺陷检测和人工审查两个阶段。静态缺陷检测工具能够检测软件存在的缺陷,并生成缺陷报告。针对静态缺陷检测工具所输出的缺陷报告,开发人员需要通过人工审查来逐一判断这一缺陷是否属实,或者这一缺陷是否足够重要以便需要开发人员修复。大量的缺陷输出、误报以及不重要的缺陷所占的比例过多,就必然会导致开发人员耗费大量的经历去审查缺陷报告。通常情况下开发人员有责任对缺陷进行评估以判定缺陷是否中肯。然而,处理这些缺陷的速度通常并不是很高,根据国内多个行业的大型系统的测试经验,一般每人每小时处理的缺陷在15至30个之间。如果一个静态缺陷检测工具针对某一软件报告了 6000个缺陷,每一个缺陷需要1.5分钟的人工时间来审查,那么一个开发人员需要连续工作18.75天才能全部审查完毕(每天8小时工作),如此耗费了大量的时间和精力。

发明内容
有鉴于此,本发明的主要目的在于提供一种缺陷关联方法及装置,能够对缺陷进行分组,从而减少部分缺陷的识别工作,提高测试人员的工作效率。为达到上述目的,本发明的技术方案是这样实现的:本发明提供了一种缺陷关联方法,该方法包括:从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库;获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列;依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组;根据预设的缺陷关联模式,精化分组的缺陷。上述方案中,该方法还包括:确定当前频繁子序列能够组成更大的频繁子序列时,将当前频繁子序列组成更大的频繁子序列;消除所述更大的频繁子序列中不满足约束条件的频繁子序列。上述方案中,所述从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库包括:从缺陷报告中提取缺陷对应的变量声明代码、变量赋值处代码和缺陷发生处代码;对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树;对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射;获取映射后的代码元素对应的哈希值;将所述映射后的代码元素对应的哈希值转换为二进制表示的缺陷相关代码块序列信息库。上述方案中,所述获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列包括:获取所述缺陷相关代码块序列信息库中支持数大于等于1、且项集间隔大于等于O的频繁子序列;删除所述频繁子序列中项集个数小于或等于设定阈值的频繁子序列;以及,删除项集间隔大于或等于设定阈值的频繁子序列。上述方案中,所述根据预设的缺陷关联模式,精化分组的缺陷包括:获取缺陷分组Dk ;其中k>=0,k为缺陷分组编号;根据预设的缺陷关联模式Mi,对所有缺陷分组Dk中的缺陷进行模式匹配;其中i>=0, i为缺陷关联模式编号;获得与所述缺陷关联模式Mi匹配的所有缺陷集合DMij ;其中i>=0,j>=0, j为满足缺陷关联模式i的缺陷集合编号;DMs C Dk时,确定Dk为精化的缺陷分组,该缺陷分组Dk的缺陷关联模式为Mi ;其中,Q表不包含于;DM1J Cr Dk时,从缺陷分组Dk中查找包含DMij的最大缺陷分组Dm,将DMij插入缺陷分组Dm中,并且从不包含Dm的缺陷分组Dk中删除DMu中的元素;精化的缺陷分组为删除DMij中的元素之后的缺陷分组Dk和插入DMu的缺陷分组Dni,且该缺陷分组的缺陷关联模式为Mi;其中CT表示不包含于。本发明还提供了一种缺陷关联装置,该装置包括:缺陷报告处理单元、频繁子序列处理单元、提纯单元、缺陷分组单元、缺陷分组精化单元;其中,所述缺陷报告处理单元,用于从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库;所述频繁子序列处理单元,用于获取缺陷相关代码块序列信息库的基本频繁子序列;所述提纯单元,用于消除所述基本频繁子序列中不满足约束条件的频繁子序列;所述缺陷分组单元,用于依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组;所述缺陷分组精化单元,用于根据预设的缺陷关联模式,精化分组的缺陷。上述方案中,该装置还包括:确定单元和频繁子序列扩大单元;所述确定单元,用于确定当前频繁子序列能否够组成更大的频繁子序列,能时触发所述频繁子序列扩大单元;所述频繁子序列扩大单元,用于将当前频繁子序列组成更大的频繁子序列。
上述方案中,所述缺陷报告处理单元包括:缺陷相关代码块提取子单元、语句分析子单元、代码元素映射子单元、哈希值转换子单元、二进制转换子单元;其中,所述缺陷相关代码块提取子单元,用于从缺陷报告中提取缺陷对应的变量声明代码、变量赋值处代码和缺陷发生处代码;所述语句分析子单元,用于对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树;所述代码元素映射子单元,用于对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射;所述哈希值转换子单元,用于获取映射后的代码元素对应的哈希值;所述二进制转换子单元,用于将所述映射后的代码元素对应的哈希值转换为二进制表示的缺陷相关代码块序列信息库。上述方案中,所述提纯单元包括:第一提纯单元、第二提纯单元;其中,所述第一提纯单元,用于删除频繁子序列中项集个数小于或等于设定阈值的频繁子序列;所述第二提纯单元,用于删除项集间隔大于或等于设定阈值的频繁子序列。上述方案中,所述缺陷分组精化单元包括:缺陷分组获取子单元、匹配子单元、精化子单元;其中,所述缺陷分组获取子单元,用于获取缺陷分组Dk ;其中k>=0,k为缺陷分组编号;所述匹配子单元,用于据预设的缺陷关联模式Mi,对所有缺陷分组Dk中的缺陷进行模式匹配;其中i>=0,i为缺陷关联模式编号;获得与所述缺陷关联模式Mi匹配的所有缺陷集合DMij ;其中i>=0,j>=0, j为满足缺陷关联模式i的缺陷集合编号;所述精化子单元,用于确定DMii c 0|时,确定Dk为精化的缺陷分组,且该缺陷分组Dk的缺陷关联模式为Mi ;其中,Q表示包含于;确定DM,j (Z Dk时,从缺陷分组Dk中查找包含DMij的最大缺陷分组Dm,将DMu插入缺陷分组Dm中,并且从除Dm以外的缺陷分组Dk中删除DMu中的元素;精化的缺陷分组为删除DMij中的元素之后的缺陷分组Dk和插入DMij的缺陷分组Dm ;其中,CT表示不包含于。本发明提供的缺陷关联方法及装置,从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库;获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列;依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组;根据预设的缺陷关联模式,精化分组的缺陷。如此,可以对缺陷进行精确的分组,从而减少部分缺陷的识别工作,提高测试人员的工作效率。


图1为本发明缺陷关联方法实现流程示意图;图2为本发明缺陷关联装置的组成结构示意图;图3为本发明缺陷报告处理单元的组成结构示意图4为本发明提纯单元的组成结构示意图;图5为本发明缺陷分组精化单元的组成结构示意图;图6为本发明实施例中缺陷报告结果示意图;图7为本发明实施例中缺陷关联模式示意图。
具体实施例方式为了能够更加详尽地了解本发明的特点与技术内容,下面结合附图对本发明的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明。图1为本发明缺陷关联方法实现流程示意图,如图1所示,该方法包括以下步骤:步骤101:从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库。这里,所述缺陷报告中的缺陷包括:缺陷编号、缺陷类型、相关变量名、变量声明代码、变量赋值处代码、缺陷发生处代码等。本步骤具体包括:从缺陷报告中提取缺陷对应的变量声明代码、变量赋值处代码和缺陷发生处代码;对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树;对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射;获取映射后的代码元素对应的哈希值;将所述映射后的代码元素对应的哈希值转换为二进制表示的缺陷相关代码块序列信息库。上述方案中,所述对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树具体可以是:将所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码输入到的程序语句语法分析器中,经编译后分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树。上述方案中,所述代码元素包括:变量、操作符、常量、函数、关键词等。对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射是为了容忍代码元素的修改。本发明制定了一个代码元素映射规贝U,处理的代码元素主要包括:注释、分隔符、标识符、关键字、基本数据类型及引用类型。制定的代码元素映射规则如下所述。规则一:通过程序语法分析器过滤掉所有代码注释信息;这里,缺陷相关代码块中有可能包含注释信息,注释信息对于缺陷优化也非常有价值,但是考虑到对缺陷报告的优化效率,本发明通过程序语法分析器过滤掉所有代码注释信息。规则二:程序的分隔符主要包括:语句分隔符分号“;”、语句块分隔符花括号“ {} ”和任意多的空格和换行。其中,分号代表一个程序语义的完整表达,故本发明保留分号;语句块分隔符花括号和空格对频繁子序列的挖掘产生影响,故本发明通过程序语法分析器将其过滤掉。规则三:对关键字的映射规则如表I所示,包括三种情况:(1)关键字处理前后字符不变;(2)关键字同类替换,即静态(static)、私有(private)、保护(protected)、公共(public)这四个关键字将被替换为同一字符,在本发明中统一替换为public,这是因为本发明考虑到程序员可以通过这四个修饰符变换、以及进行类和方法的重用、以及容忍修饰符改变以检测这一类代码块的相似性;(3)过滤删除关键字,这是因为本发明认为关键字只改变程序的语义执行,引入关键字对检查代码相似性及方法的重用会造成困难,故本发明通过程序语法分析器将其过滤掉。
权利要求
1.一种缺陷关联方法,其特征在于,该方法包括: 从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库; 获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列; 依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组; 根据预设的缺陷关联模式,精化分组的缺陷。
2.根据权利要求1所述的缺陷关联方法,其特征在于,该方法还包括: 确定当前频繁子序列能够组成更大的频繁子序列时,将当前频繁子序列组成更大的频繁子序列; 消除所述更大的频繁子序列中不满足约束条件的频繁子序列。
3.根据权利要求1所述的缺陷关联方法,其特征在于,所述从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库包括: 从缺陷报告中提取缺陷对应的变量声明代码、变量赋值处代码和缺陷发生处代码;对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树; 对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射; 获取映射后的代码元素对应的哈希值; 将所述映射后的代码元素对应的哈希值转换为二进制表示的缺陷相关代码块序列信息库。
4.根据权利要求1所述的缺陷关联方法,其特征在于,所述获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列包括: 获取所述缺陷相关代码块序列信息库中支持数大于等于1、且项集间隔大于等于O的频繁子序列; 删除所述频繁子序列中项集个数小于或等于设定阈值的频繁子序列;以及,删除项集间隔大于或等于设定阈值的频繁子序列。
5.根据权利要求1至4任一项所述的缺陷关联方法,其特征在于,所述根据预设的缺陷关联模式,精化分组的缺陷包括: 获取缺陷分组Dk ;其中k>=0,k为缺陷分组编号; 根据预设的缺陷关联模式Mi,对所有缺陷分组Dk中的缺陷进行模式匹配;其中i>=0,i为缺陷关联模式编号; 获得与所述缺陷关联模式Mi匹配的所有缺陷集合DMu ;其中i>=0,j>=0,j为满足缺陷关联模式i的缺陷集合编号; DMlj e Dk时,确定Dk为精化的缺陷分组,该缺陷分组Dk的缺陷关联模式为Mi;其中,&表不包含于;DMy <z Dfc时,从缺陷分组Dk中查找包含DMij的最大缺陷分组Dm,将DMij插入缺陷分组Dm中,并且从不包含Dm的缺陷分组Dk中删除DMij中的元素;精化的缺陷分组为删除DMij中的元素之后的缺陷分组Dk和插入DMu的缺陷分组Dni,且该缺陷分组的缺陷关联模式为Mi ;其中,C表不不包含于。
6.一种缺陷关联装置,其特征在于,该装置包括:缺陷报告处理单元、频繁子序列处理单元、提纯单元、缺陷分组单元、缺陷分组精化单元;其中, 所述缺陷报告处理单元,用于从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库; 所述频繁子序列处理单元,用于获取缺陷相关代码块序列信息库的基本频繁子序列; 所述提纯单元,用于消除所述基本频繁子序列中不满足约束条件的频繁子序列; 所述缺陷分组单元,用于依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组; 所述缺陷分组精化单元,用于根据预设的缺陷关联模式,精化分组的缺陷。
7.根据权利要求6所述的缺陷关联装置,其特征在于,该装置还包括:确定单元和频繁子序列扩大单元; 所述确定单元,用于确定当前频繁子序列能否够组成更大的频繁子序列,能时触发所述频繁子序列扩大单元; 所述频繁子序列扩大单元,用于将当前频繁子序列组成更大的频繁子序列。
8.根据权利要求6所述的缺陷关联装置,其特征在于,所述缺陷报告处理单元包括:缺陷相关代码块提取子单元、语句分析子单元、代码元素映射子单元、哈希值转换子单元、二进制转换子单元;其中, 所述缺陷相关代码块提取子单元,用于从缺陷报告中提取缺陷对应的变量声明代码、变量赋值处代码和缺陷发生处代码; 所述语句分析子单元,用于对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码进行语句分析及编译,而分别生成所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树; 所述代码元素映射子单元,用于对所述变量声明代码、所述变量赋值处代码和所述缺陷发生处代码对应的语法树分别进行代码元素映射; 所述哈希值转换子单元,用于获取映射后的代码元素对应的哈希值; 所述二进制转换子单元,用于将所述映射后的代码元素对应的哈希值转换为二进制表示的缺陷相关代码块序列信息库。
9.根据权利要求6所述的缺陷关联装置,其特征在于,所述提纯单元包括:第一提纯单元、第二提纯单元;其中, 所述第一提纯单元,用于删除频繁子序列中项集个数小于或等于设定阈值的频繁子序列; 所述第二提纯单元,用于删除项集间隔大于或等于设定阈值的频繁子序列。
10.根据权利要求6至9任一项所述的缺陷关联装置,其特征在于,所述缺陷分组精化单元包括:缺陷分组获取子单元、匹配子单元、精化子单元;其中, 所述缺陷分组获取子单元,用于获取缺陷分组Dk ;其中k>=0,k为缺陷分组编号;所述匹配子单元,用于据预设的缺陷关联模式Mi,对所有缺陷分组Dk中的缺陷进行模式匹配;其中i>=0,i为缺陷关联模式编号; 获得与所述缺陷关联模式Mi匹配的所有缺陷集合DMu ;其中i>=0,j>=0,j为满足缺陷关联模式i的缺陷集合编号; 所述精化子单元,用于确定DMy c Dk时,确定Dk为精化的缺陷分组,且该缺陷分组Dk的缺陷关联模式为Mi ;其中,£表不包含于; 确定DM,j cr Dk时,从缺陷分组Dk中查找包含DMij的最大缺陷分组Dm,将DMij插入缺陷分组Dm中,并且从除Dm以外的缺陷分组Dk中删除DMu中的元素;精化的缺陷分组为删除DMij中的元素之 后的缺陷分组Dk和插入DMij的缺陷分组Dni ;其中,C表示不包含于。
全文摘要
本发明公开了一种缺陷关联方法,包括从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息库;获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列中不满足约束条件的频繁子序列;依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷进行分组;根据预设的缺陷关联模式,精化分组的缺陷。本发明同时还公开了一种缺陷关联装置。采用本发明的技术方案,可以对缺陷进行精确的分组。
文档编号G06F11/36GK103176905SQ20131012809
公开日2013年6月26日 申请日期2013年4月12日 优先权日2013年4月12日
发明者金大海, 宫云战, 张大林, 黄俊飞, 王雅文 申请人:北京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1