CN105204997B - 软件缺陷检测方法及装置 - Google Patents
软件缺陷检测方法及装置 Download PDFInfo
- Publication number
- CN105204997B CN105204997B CN201510640770.7A CN201510640770A CN105204997B CN 105204997 B CN105204997 B CN 105204997B CN 201510640770 A CN201510640770 A CN 201510640770A CN 105204997 B CN105204997 B CN 105204997B
- Authority
- CN
- China
- Prior art keywords
- path
- mark
- point
- code
- definite value
- 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.)
- Active
Links
- 230000007547 defect Effects 0.000 title claims abstract description 71
- 238000001514 detection method Methods 0.000 title claims abstract description 70
- 238000000034 method Methods 0.000 claims abstract description 30
- 238000012216 screening Methods 0.000 claims abstract description 29
- 230000035899 viability Effects 0.000 claims abstract description 14
- 238000010586 diagram Methods 0.000 claims description 21
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
Abstract
本发明公开了一种软件缺陷检测方法及装置,属于计算机领域。所述方法包括:基于指定错误类型,从待检测源代码中,获取初检代码集合,所述初检代码集合中包括多个存在潜在缺陷的代码段;对于所述初检代码集合中的每个代码段,对所述代码段进行危险路径筛选,得到所述代码段的指令集,所述指令集中包括危险路径;分别对所述每个代码段的指令集进行路径可行性检测,以对所述待检测源代码进行软件缺陷检测。本发明通过对所获初检代码集合包括的代码段中的路径进行危险路径筛选,并对危险路径进行路径可行性检测,进而在保证软件缺陷检测的准确性的前提下,减小缺陷检测所消耗的时间,提高软件缺陷检测的效率。
Description
技术领域
本发明涉及计算机领域,特别涉及一种软件缺陷检测方法及装置。
背景技术
随着计算机技术的快速发展,开发人员开发出了越来越多的软件,为了保证这些软件的质量,以及提高这些软件的可靠性,需要对这些软件进行软件缺陷检测,该软件缺陷检测通常是指对该软件的源代码进行静态分析,通过静态分析可以确定该源代码中存在的缺陷或者错误,进而将该缺陷或者错误进行上报,以进行后续的修改或改进等。
目前,软件缺陷检测的操作可以为:根据事先存储的指定错误类型,从待检测源代码中,确定多个目标变量,对于该多个目标变量中的每个目标变量,从待检测源代码中,按照该待检测源代码的执行顺序,获取该目标变量的第一个定值点与该目标变量的多个引用点之间的指令,该定值点是对该目标变量进行赋值的点,该引用点是引用该目标变量的点,将获取的指令中与该目标变量相关的指令组成指令集,从而将该多个目标变量分别对应的指令集组成初检指令集,之后,对于该初检指令集中的每个指令集,检测该指令集中所有可能的路径是否可行,当该指令集中存在可行的危险路径时,确定该指令集的这条可行路径上的引用点存在软件缺陷,当该指令集中所有可能的危险路径均不可行时,确定该指令集不存在软件缺陷,从而完成对待检测源代码的软件缺陷检测。
由于指令集中所有可能的路径中不仅可以包括危险路径,还可以包括安全路径,而安全路径不会造成错误的发生,因此,对该指令集中所有可能的路径进行检测,会增加软件缺陷检测的工作量,同时也会消耗较长的时间,降低软件缺陷检测的效率。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种软件缺陷检测方法及装置。所述技术方案如下:
第一方面,提供了一种软件缺陷检测方法,所述方法包括:
基于指定错误类型,从待检测源代码中,获取初检代码集合,所述初检代码集合中包括多个存在潜在缺陷的代码段;
对于所述初检代码集合中的每个代码段,对所述代码段进行危险路径筛选,得到所述代码段的指令集,所述指令集中包括危险路径;
分别对所述每个代码段的指令集进行路径可行性检测,以对所述待检测源代码进行软件缺陷检测。
结合第一方面,在上述第一方面的第一种可能的实现方式中,所述基于指定错误类型,从待检测源代码中,获取初检代码集合,包括:
基于指定错误类型,从待检测源代码中,确定多个目标变量;
对于所述多个目标变量中的每个目标变量,从所述待检测源代码中,获取所述目标变量的多个定值点和多个引用点,所述定值点为对所述目标变量进行赋值的点,所述引用点为引用所述目标变量的点;
基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源;
基于所述多个目标变量、所述多个目标变量的潜在错误源和所述多个目标变量的多个引用点,确定初检代码集合。
结合第一方面的第一种可能的实现方式,在上述第一方面的第二种可能的实现方式中,所述基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源,包括:
基于所述指定错误类型和所述目标变量的多个定值点,确定所述多个定值点的错误属性;
基于所述多个定值点的错误属性,从存储的错误属性与安全特性之间的对应关系中,获取所述多个定值点的安全特性;
基于所述多个定值点的安全特性,将所述多个定值点中安全特性为危险的第一个定值点确定为所述目标变量的潜在错误源。
结合第一方面至第一方面的第二种可能的实现方式中的任一种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述对所述代码段进行危险路径筛选,得到所述代码段的指令集,包括:
对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
从所述多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从所述多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集。
结合第一方面的第三种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注,包括:
确定所述代码段的潜在错误源的路径标注;
确定所述代码段包括的各个分支路径的路径标注;
基于所述潜在错误源的路径标注和所述各个分支路径的路径标注,对所述代码段包括的各个分支路径所在的分支点、所述代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
结合第一方面的第三种可能的实现方式,在上述第一方面的第五种可能的实现方式中,所述基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集,包括:
对于所述多个第二路径标注中的每个第二路径标注,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
基于选择的第一路径标注对应的定值点的安全特性,确定所述第二路径标注对应的引用点的安全特性;
基于所述多个第二路径标注对应的引用点的安全特性,从所述多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
将选择的引用点所在路径上的指令组成所述代码段的指令集。
结合第一方面的第五种可能的实现方式,在上述第一方面的第六种可能的实现方式中,所述从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,包括:
基于所述多个第一路径标注的长度,对所述多个第一路径标注进行排序,得到路径标注顺序;
基于所述路径标注顺序,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注。
第二方面,提供了一种软件缺陷检测装置,所述装置包括:
获取模块,用于基于指定错误类型,从待检测源代码中,获取初检代码集合,所述初检代码集合中包括多个存在潜在缺陷的代码段;
筛选模块,用于对于所述初检代码集合中的每个代码段,对所述代码段进行危险路径筛选,得到所述代码段的指令集,所述指令集中包括危险路径;
检测模块,用于分别对所述每个代码段的指令集进行路径可行性检测,以对所述待检测源代码进行软件缺陷检测。
结合第二方面,在上述第二方面的第一种可能的实现方式中,所述获取模块包括:
第一确定单元,用于基于指定错误类型,从待检测源代码中,确定多个目标变量;
获取单元,用于对于所述多个目标变量中的每个目标变量,从所述待检测源代码中,获取所述目标变量的多个定值点和多个引用点,所述定值点为对所述目标变量进行赋值的点,所述引用点为引用所述目标变量的点;
第二确定单元,用于基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源;
第三确定单元,用于基于所述多个目标变量、所述多个目标变量的潜在错误源和所述多个目标变量的多个引用点,确定初检代码集合。
结合第二方面的第一种可能的实现方式,在上述第二方面的第二种可能的实现方式中,所述第二确定单元包括:
第一确定子单元,用于基于所述指定错误类型和所述目标变量的多个定值点,确定所述多个定值点的错误属性;
获取子单元,用于基于所述多个定值点的错误属性,从存储的错误属性与安全特性之间的对应关系中,获取所述多个定值点的安全特性;
第二确定子单元,基于所述多个定值点的安全特性,将所述多个定值点中安全特性为危险的第一个定值点确定为所述目标变量的潜在错误源。
结合第二方面至第二方面的第二种可能的实现方式中的任一种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述筛选模块包括:
标注单元,用于对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
选择单元,用于从所述多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从所述多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
筛选单元,用于基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集。
结合第二方面的第三种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述标注单元包括:
第三确定子单元,用于确定所述代码段的潜在错误源的路径标注;
第四确定子单元,用于确定所述代码段包括的各个分支路径的路径标注;
标注子单元,用于基于所述潜在错误源的路径标注和所述各个分支路径的路径标注,对所述代码段包括的各个分支路径所在的分支点、所述代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
结合第二方面的第三种可能的实现方式,在上述第二方面的第五种可能的实现方式中,所述筛选单元包括:
第一选择子单元,用于对于所述多个第二路径标注中的每个第二路径标注,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
第五确定子单元,用于基于选择的第一路径标注对应的定值点的安全特性,确定所述第二路径标注对应的引用点的安全特性;
第二选择子单元,用于基于所述多个第二路径标注对应的引用点的安全特性,从所述多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
组成子单元,用于将选择的引用点所在路径上的指令组成所述代码段的指令集。
结合第二方面的第五种可能的实现方式,在上述第二方面的第六种可能的实现方式中,所述第一选择子单元,具体用于:
基于所述多个第一路径标注的长度,对所述多个第一路径标注进行排序,得到路径标注顺序;
基于所述路径标注顺序,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注。
本发明实施例提供的技术方案带来的有益效果是:在本发明实施例中,通过指定错误类型,从待检测源代码中,获取初检代码集合,并对该初检集合包括的每个代码段中的路径进行危险路径筛选,得到该代码段的指令集,由于指令集中存储的都是危险路径上的指令,因此,对该指令集进行路径可行性检测,从而可以在保证软件缺陷检测的准确性的前提下,无需对安全路径进行可行性检测,减少软件缺陷检测的工作量和检测所消耗的时间,提高了软件缺陷检测的效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的提供的一种软件缺陷检测方法流程图;
图2是本发明实施例的提供的另一种软件缺陷检测方法流程图;
图3是本发明实施例的提供的一种多个BDD路径标注的示意图;
图4是本发明实施例的提供的一种软件缺陷检测装置结构示意图;
图5是本发明实施例的提供的一种获取模块结构示意图;
图6是本发明实施例的提供的一种第二确定单元结构示意图;
图7是本发明实施例的提供的一种筛选模块结构示意图;
图8是本发明实施例的提供的一种标注单元结构示意图;
图9是本发明实施例的提供的一种筛选单元结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种软件缺陷检测方法的流程图。参见图1,该方法的执行主体为终端,包括以下步骤。
步骤101:基于指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段。
步骤102:对于该初检代码集合中的每个代码段,对该代码段进行危险路径筛选,得到该代码段的指令集,该指令集中包括危险路径。
步骤103:分别对该每个代码段的指令集进行路径可行性检测,以对该待检测源代码进行软件缺陷检测。
在本发明实施例中,通过指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段,并对该初检集合包括的每个代码段中的路径进行危险路径筛选,得到该代码段的指令集,对该指令集进行路径可行性检测,从而可以在保证软件缺陷检测的准确性的前提下,无需对安全路径进行可行性检测,可以减少软件缺陷检测的工作量和检测所消耗的时间,提高了软件缺陷检测的效率。
可选地,基于指定错误类型,从待检测源代码中,获取初检代码集合,包括:
基于指定错误类型,从待检测源代码中,确定多个目标变量;
对于该多个目标变量中的每个目标变量,从该待检测源代码中,获取该目标变量的多个定值点和多个引用点,该定值点为对该目标变量进行赋值的点,该引用点为引用该目标变量的点;
基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源;
基于该多个目标变量、该多个目标变量的潜在错误源和多个该目标变量的多个引用点,确定初检代码集合。
可选地,基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源,包括:
基于该指定错误类型和该目标变量的多个定值点,确定该多个定值点的错误属性;
基于该多个定值点的错误属性,从存储的错误属性与安全特性之间的对应关系中,获取该多个定值点的安全特性;
基于该多个定值点的安全特性,将该多个定值点中安全特性为危险的第一个定值点确定为该目标变量的潜在错误源。
可选地,对该代码段进行危险路径筛选,得到该代码段的指令集,包括:
对该代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
从该多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从该多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集。
可选地,对该代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注,包括:
确定该代码段的潜在错误源的路径标注;
确定该代码段包括的各个分支路径的路径标注;
基于该潜在错误源的路径标注和该各个分支路径的路径标注,对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
可选地,基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集,包括:
对于该多个第二路径标注中的每个第二路径标注,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
基于选择的第一路径标注对应的定值点的安全特性,确定该第二路径标注对应的引用点的安全特性;
基于该多个第二路径标注对应的引用点的安全特性,从该多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
将选择的引用点所在路径上的指令组成该代码段的指令集。
可选地,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注,包括:
基于该多个第一路径标注的长度,对该多个第一路径标注进行排序,得到路径标注顺序;
基于该路径标注顺序,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注。
上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。
图2是本发明实施例提供的一种软件缺陷检测方法的流程图。参见图2,该方法的执行主体为终端,包括以下步骤。
步骤201:基于指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段。
由于该待检测源代码中存在的错误可能包括多种错误类型,比如,该错误类型可以为空指针引用错误、未赋值引用错误等,为了对该待检测源代码中的存在的多种错误类型进行软件缺陷检测,因此,将该多种错误类型确定为指定错误类型,基于该指定错误类型,从该待检测源代码中,获取初检代码集合,而基于该指定错误类型,从该待检测源代码中,获取初检代码集合可以通过如下步骤(1)-(4)来实现,如下所述。
(1)、基于该指定错误类型,从该待检测源代码中,确定多个目标变量。
当终端基于该指定错误类型,从该待检测源代码中,确定多个目标变量时,可以从该待检测源代码中,查找与该指定错误类型相关的多个变量,将查找到的多个变量确定为多个目标变量。
比如,该指定错误类型为空指针引用错误,从该待检测源代码中,查找到与该空指针引用错误相关的空指针变量为变量p和变量q,从而将该变量p和变量q确定为目标变量。
(2)、对于该多个目标变量中的每个目标变量,从该待检测源代码中,获取该目标变量的多个定值点和多个引用点,该定值点为对该目标变量进行赋值的点,该引用点为引用该目标变量的点。
对于该多个目标变量中的每个目标变量,当终端从该待检测源代码中,获取该目标变量的多个定值点和多个引用点时,可以将该待检测源代码中,对该目标变量进行赋值的多个点确定为该目标变量的多个定值点,以及将该待检测源代码中,引用该目标变量的多个点确定为引用点。
比如,对于多个目标变量中的变量p,在该待检测源代码中,获取对该变量p进行赋值的多个定值点为定值点1、定值点2和定值点3,以及从该待检测源代码中,获取引用该变量p的多个引用点为引用点1、引用点2、引用点3和引用点4。
(3)、基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源。
为了确定该待检测源代码中出现潜在错误的位置,以提取出存在潜在错误的代码段,终端需要基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源,而基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源的操作可以为:基于该指定错误类型和该目标变量的多个定值点,分别确定该多个定值点的错误属性;基于该多个定值点的错误属性,分别从存储的错误属性与安全特性之间的对应关系中,获取该多个定值点的安全特性;基于该多个定值点的安全特性,按照待检测源代码中该多个定值点的执行顺序,将该多个定值点中安全特性为危险的第一个定值点确定为该目标变量的潜在错误源。
需要说明的是,该待检测源代码中该多个定值点的执行顺序是指该多个定值点所在的指令在该待检测源代码中依次被执行的先后顺序。
其中,当终端基于该指定错误类型和该目标变量的多个定值点,分别确定该多个定值点的错误属性时,可以先基于该指定错误类型,分别从存储的错误类型与错误属性之间的对应关系中,获取对应的错误属性,再基于获取的错误属性和该目标变量的多个定值点处对该目标变量的赋值,确定该多个定值点的错误属性。
比如,终端基于该空指针引用错误,从如下表1所示的错误类型与错误属性之间的对应关系中,获取对应的错误属性为NULL(空)、NOTNULL(非空)、MAYNULL(不确定),基于该错误属性NULL、NOTNULL、MAYNULL和该变量p的多个定值点处对该变量p的赋值,确定该定值点1、定值点2和定值点3的错误属性,也即是,假如,定值点1处对变量p的赋值为p=&x,定值点2处对变量p的赋值为p=NULL,定值点3处对变量p的赋值为if(a>b)p=&a;else p=NULL,则确定定值点1对变量p的赋值不为空,从而确定定值点1的错误属性为NOTNULL,定值点2对变量p的赋值为空,从而确定定值点2的错误属性为NULL,定值点3对变量p的赋值可能为空也可能不为空,从而确定定值点3的错误属性为MAYNULL。之后,基于定值点1的错误属性NOTNULL、定值点2的错误属性NULL、定值点3的错误属性MAYNULL,分别从如下表2所示的错误属性与安全特性之间的对应关系中,获取定值点1对应的安全特性为危险,定值点2对应的安全特性为安全,定值点3对应的安全特性为危险,基于该定值点1、定值点2和定值点3的安全特性,按照该待检测源代码中,定值点1、定值点2和定值点3的执行顺序,将安全特性为危险的第一个定值点1,确定为该变量p的潜在错误源。
表1
需要说明的是,在本发明实施例中,仅以上述表1所示的错误类型与错误属性之间的对应关系为例进行说明,上述表1并不对本发明实施例构成限定。
表2
错误属性 | 安全特性 |
NULL | 安全 |
NOTNULL | 危险 |
MAYNULL | 危险 |
DEFINED | 安全 |
…… | …… |
需要说明的是,在本发明实施例中,仅以上述表2所示的错误属性与安全特性之间的对应关系为例进行说明,上述表2并不对本发明实施例构成限定。
(4)、基于该多个目标变量、该多个目标变量的潜在错误源和该多个目标变量分别对应的多个引用点,确定初检代码集合。
对于该多个目标变量中的每个变量,当确定该目标变量的潜在错误源时,终端从该待检测源代码中,获取该目标变量的潜在错误源与该目标变量的多个引用点之间的源代码,将获取的源代码中与该目标变量相关的代码组成代码段,从而得到该多个目标变量分别对应的代码段,将该多个目标变量分别对应的代码段组成该初检代码集合。
比如,对于该多个目标变量中的变量p,该变量p的多个引用点中,引用点4为最后一个引用点,当确定该定值点1为该变量p的潜在错误源时,终端从该待检测源代码中,获取该变量p的定值点1和该变量p的引用点4之间的源代码,将该源代码中与该变量p相关的代码组成代码段,将该代码段添加到初检代码集合;同理,获取该多个目标变量中变量q对应的代码段,并添加至初检代码集合。
步骤202:对于该初检代码集合中的每个代码段,对该代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注。
对于该初检代码集合中的每个代码段,由于该代码段中可能存在一个或者多个分支点,对于每个分支点,由于该分支点的执行结果存在真假,因此,在该分支点之后会产生两个分支路径,其中一个分支路径为真分支路径,另一个分支路径为假分支路径,从而当该代码段中存在多个分支点时,该代码段中会包括多个路径,为了确定该代码段中包括的多个路径是安全路径还是危险路径,可以对该代码段中的多个路径进行二分决策图BDD(Binary Decision Diagram,二分决策图)标注,得到多个BDD路径标注。
而对该代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注的操作可以为:确定该代码段的潜在错误源的路径标注;确定该代码段包括的各个分支路径的路径标注;基于该潜在错误源的路径标注和该各个分支路径的路径标注,对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
其中,当终端确定该代码段的潜在错误源的路径标注时,可以将该潜在错误源的路径标注确定为第一数值。对于该各个分支路径中的每个分支路径,当确定该分支路径的路径标注时,由于该分支路径包括真分支路径和假分支路径,因此,可以将该分支路径包括的真分支路径的路径标注确定为第二数值,将该分支路径包括的假分支路径的路径标注确定为第一数值。
需要说明的时,该第一数值、第二数值可以事先设置,比如,该第一数值为0,第二数值为1;另外,第一数值也可以1,第二数值为0。当然,在实际应用中,该第一数值、第二数值还可以为其他数值或者字符等,本发明实施例对比不做具体限定。
比如,第一数值为0,第二数值为1,将该代码段的潜在错误源的路径标注确定为0,将该代码段包括的各个分支路径中的假分支路径的路径标注确定为0,将该代码段包括的各个分支路径中的真分支路径的路径标注确定为1。
另外,当终端基于该潜在错误源的路径标注和该各个分支路径的路径标注,对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注时,从该潜在错误源的路径标注开始,按照代码段的执行顺序,将该代码段中包括的各个分支路径的路径标注,依次添加在该潜在错误源的路径标注之后,以对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
比如,该代码段中的路径如图3所示,该代码段包括的分支路径所在的分支点个数为5,且该5个分支点依次为T1、T2、T3、T4和T5,从定值点1的路径标注0开始,按照代码段的执行顺序,依次将该代码段包括的各个分支路径的路径标注,依次添加到定值点1的路径标注0之后,以对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到如图3所示的多个BDD路径标注。
步骤203:从该多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从该多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注。
终端从该多个BDD路径标注中,选择该目标变量的多个定值点的路径标注,将选择的定值点的路径标注确定为第一路径标注,从而得到多个第一路径标注,以及从该多个BDD路径标注中,选择该目标变量的多个引用点的路径标注,将选择的引用点的路径标注确定为第二路径标注,从而得到多个第二路径标注。
比如,从该多个BDD路径标注中,选择该变量p的多个定值点中每个定值点的路径标注,也即是,定值点1的路径标注为0,定值点2的路径标注为010,定值点3的路径标注为00,将选择的定值点的路径标注确定为第一路径标注,从而得到多个第一路径标注分别为0、010、00,以及从该多个BDD路径标注中,选择该变量p的多个引用点中每个引用点的路径标注,也即是,引用点1的路径标注为0111,引用点2的路径标注为0110||0101,引用点3的路径标注为0100,引用点4的路径标注为000,将选择的引用点的路径标注确定为第二路径标注,从而得到多个第二路径标注分别为0111、0110||0101、0100、000。
需要说明的是,第二路径标注0110||0101中的“||”表示该第二路径标注是该代码段中两条路径的BDD路径标注的汇聚,也即是,该两条路径中的一条路径的BDD路径标注为0110,另一条路径的BDD路径标注为0101。
步骤204:基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集。
由于该代码段中的路径不仅包括危险路径,还包括安全路径,而安全路径不会引发错误的发生,因此,为了减少后续软件缺陷检测的工作量和缺陷检测所消耗的时间,提高软件缺陷检测的效率,终端基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集,而基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集可以通过如下步骤(a)-(d)来实现,如下所述。
(a)、对于该多个第二路径标注中的每个第二路径标注,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注,并从选择的第一路径标注中选择长度最长的第一路径标注。
其中,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注的操作可以为:对于该多个第一路径标注中的每个第一路径标注,基于该第一路径标注的长度,从该第二路径标注中获取与该第一路径标注的长度相同的标注前缀,将该标注前缀与该第一路径标注进行比较,如果该标注前缀与该第一路径标注相同,则确定该第一路径标注为与该第二路径标注的前缀相同的第一路径标注,否则,确定该第一路径标识不是与该第二路径标注的前缀相同的第一路径标注。
比如,对于该多个第一路径标注中的每个第一路径标注,若该第一路径为010,基于该第一路径标注010的长度,从该第二路径标注0111中获取与该第一路径标注的长度相同的标注前缀为011,将该标注前缀011与该第一路径标注010进行比较,该标注前缀011与该第一路径标注010不同,确定该第一路径标注不是与该第二路径标注0111的前缀相同的第一路径标注。同理,确定第一路径标注00不是与该第二路径标注前缀相同的第一路径标注,确定第一路径标注0为与该第二路径标注0111的前缀相同的第一路径标注。
进一步,为了提高从该多个第一路径标注中,选择与该第二路径标注的前缀相同且长度最长的第一路径标注的速度,减少不必要的负担,当终端从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注时,可以基于该多个第一路径标注的长度,对该多个第一路径标注进行排序,得到路径标注顺序;基于该路径标注顺序,从该多个第一路径标注中,选择与该第二路径标注的前缀相同且长度最长的第一路径标注。
其中,当终端基于该路径标注顺序,从该多个第一路径标注中,选择与该第二路径标注的前缀相同且长度最长的第一路径标注时,对于该多个第一路径标注中的每个第一路径标注,按照该路径标注顺序,从长度最长的第一路径标注开始,依次获取第二路径标注中与该第一路径标注长度相同的前缀,并将获取的前缀与该第一路径标注进行比较,当两者不同时,则确定该第一路径标注不是该第二路径标注的前缀,当两者相同时,则确定该第一路径标注为与该第二路径标注的前缀相同且长度最长的第一路径标注。
需要说明的是,基于该多个第一路径标注的长度,对该多个第一路径标注进行排序时,不仅基于该多个第一路径标注的长度,按照从长到短的顺序,对该多个第一路径标注进行排序,还可以基于该多个第一路径标注的长度,按照从短到长的顺序,对该多个第一路径标注进行排序,只需在基于该路径标注顺序,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注时,从长度最长的第一路径标注开始选择即可,另外,当该多个第一路径标注中存在至少两个第一路径标注的长度相同时,该至少两个第二路径标注之间的排序可以不分先后,本发明实施例对此不做具体限定。
比如,该第二路径标注为0111,当从该多个第一路径标注中,选择与该第二路径标注0111的前缀相同的第一路径标注时,可以基于该多个第一路径标注0、010、00的长度,按照从长到短的顺序,对该多个第一路径标注0、010、00进行排序,得到路径标注顺序为010、00、0。基于该路径标注顺序010、00、0,首先,获取第二路径标注0111中与第一路径标注010的长度相同的前缀为011,由于第一路径标注010与前缀011不同,确定第一路径标注010不是该第二路径标注0111的前缀,再次,获取第二路径标注0111中与第一路径标注00的长度相同的前缀为01,由于第一路径标注00与前缀01不同,确定第一路径标注00不是该第二路径标注0111的前缀,最后,获取第二路径标注中与第一路径标注0的长度相同的前缀为0,由于第一路径标注0与前缀0相同,确定第一路径标注0为第二路径标注0111的前缀。
(b)、基于选择的第一路径标注对应的定值点的安全特性,确定该第二路径标注对应的引用点的安全特性。
当选择与该第二路径标注的前缀相同的第一路径标注之后,终端将选择的第一路径标注对应的定值点的安全特性,确定为该第二路径标注对应的引用点的安全特性,也即是,若选择的第一路径标注对应的定值点的安全特性为安全,则该第二路径标注对应的引用点的安全特性也为安全,若选择的第一路径标注对应的安全特性为危险,则该第二路径标注对应的引用点的安全特性也为危险。
例如,选择的与第二路径标注0111的前缀相同的第一路径标注为0,而第一路径标注0对应的定值1的安全特性为危险,从而确定该第二路径标注0111对应的引用点1的安全特性为危险。
需要说明的是,当一个引用点存在至少两个第二路径标注时,只要基于该至少两个第二路径标注中一个,确定出该引用点的安全特性为危险,则将该引用点的安全特性确定为危险。
比如,引用点2的第二路径标注为0110||0101,也即是,引用点2对应的第二路径标注为0110和0101,基于上述步骤(a),通过第二路径标注0110,确定引用点2的安全特性为危险,通过第二路径标注0101,确定引用点2的安全特性为安全,则将该引用点2的安全特性确定为危险。
(c)、基于该多个第二路径标注对应的引用点的安全特性,从该多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
比如,该多个第二路径标注0111、0110||0101、0100、000中,0111对应的引用点1的安全特性为危险,0110||0101对应引用点2中的安全特性为危险,0100对应的引用点3的安全特性为安全,000对应的引用点4的安全特性为危险,从该多个第二路径标注对应的引用点中,选择安全特性为危险的引用点为引用点1、引用点2和引用点4。
(d)、将选择的引用点所在路径上的指令组成该代码段的指令集。
当选择安全特性为危险的引用点时,由于该引用点所在的路径为危险路径,可能存在潜在的软件缺陷,为了对该引用点所在的路径进行后续的可行性检测,终端将该选择的引用点所在路径上的指令组成该代码段的指令集。
比如,选择的引用点的为引用点1、引用点2和引用点4,则将引用点1所在路径上的指令组成该代码段的第一个指令子集,将引用点2所在路径上的指令组成该代码段的第二个指令子集,将引用点4所在路径上的指令组成该代码段的第三个指令子集,从而将该三个指令子集确定为该代码段的指令集。
步骤205:分别对每个代码段的指令集进行路径可行性检测,以对该待检测源代码进行软件缺陷检测。
由于该代码段中的危险路径可能是可行路径,也可能是不可行路径,也即是,危险路径的可行性不确定,当该危险路径是不可行路径时,则确定该代码段不存在软件缺陷,因此,终端需要分别对每个代码段的指令集进行路径可行性检测,以对该待检测源代码进行软件缺陷检测。
其中,对每个代码段的指令集进行路径可行性检测时,可以基于BDD路径标注的信息,并结合该待检测源代码中的分支点进行约束表达式的重构,然后对重构的约束调用约束求解器进行求解,若可解,则确定该危险路径可行,否则,则确定该危险路径不可行,从而确定该待检测源代码中存在软件缺陷,将该软件缺陷进行上报,以进行后续的修改或改进,进而保证该待检测源代码对应的软件的质量,提高该软件的可靠性。
需要说明的是,基于BDD路径标注的信息,并结合该待检测源代码中的分支点进行约束表达式的重构,然后对重构的约束调用约束求解器进行求解的方法可以参考相关技术,本发明实施例对此不做详细阐述。
在本发明实施例中,通过指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段,并对该初检集合包括的每个代码段中的路径进行BDD路径标注,从而基于该BDD路径标注筛选出该代码段中危险路径所在的指令集,对该指令集进行路径可行性检测,从而可以在保证软件缺陷检测的准确性的前提下,无需对安全路径进行可行性检测,可以减少软件缺陷检测的工作量和检测所消耗的时间,提高了软件缺陷检测的效率。
图4是本发明实施例提供了一种软件缺陷检测装置的结构示意图,参见图4,该装置包括获取模块401,筛选模块402,检测模块403。
获取模块401,用于基于指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段;
筛选模块402,用于对于该初检代码集合中的每个代码段,对该代码段进行危险路径筛选,得到该代码段的指令集,该指令集中包括危险路径;
检测模块403,用于分别对该每个代码段的指令集进行路径可行性检测,以对该待检测源代码进行软件缺陷检测。
可选地,参见图5,该获取模块401包括第一确定单元4011,获取单元4012,第二确定单元4013,第三确定单元4014。
第一确定单元4011,用于基于指定错误类型,从待检测源代码中,确定多个目标变量;
获取单元4012,用于对于该多个目标变量中的每个目标变量,从该待检测源代码中,获取该目标变量的多个定值点和多个引用点,该定值点为对该目标变量进行赋值的点,该引用点为引用该目标变量的点;
第二确定单元4013,用于基于该指定错误类型和该目标变量的多个定值点,从该待检测源代码中,确定该目标变量的潜在错误源;
第三确定单元4014,用于基于该多个目标变量、该多个目标变量的潜在错误源和该多个目标变量的多个引用点,确定初检代码集合。
可选地,参见图6,该第二确定单元4013包括第一确定子单元40131,获取子单元40132,第二确定子单元40133。
第一确定子单元40131,用于基于该指定错误类型和该目标变量的多个定值点,确定该多个定值点的错误属性;
获取子单元40132,用于基于该多个定值点的错误属性,从存储的错误属性与安全特性之间的对应关系中,获取该多个定值点的安全特性;
第二确定子单元40133,基于该多个定值点的安全特性,将该多个定值点中安全特性为危险的第一个定值点确定为该目标变量的潜在错误源。
可选地,参见图7,该筛选模块402包括标注单元4021,选择单元4022,筛选单元4023。
标注单元4021,用于对该代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
选择单元4022,用于从该多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从该多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
筛选单元4023,用于基于该多个第一路径标注和该多个第二路径标注,对该代码段进行危险路径筛选,得到该代码段的指令集。
可选地,参见图8,该标注单元4021包括第三确定子单元40211,第四确定子单元40212,标注子单元40213。
第三确定子单元40211,用于确定该代码段的潜在错误源的路径标注;
第四确定子单元40212,用于确定该代码段包括的各个分支路径的路径标注;
标注子单元40213,用于基于该潜在错误源的路径标注和该各个分支路径的路径标注,对该代码段包括的各个分支路径所在的分支点、该代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
可选地,参见图9,该筛选单元4023包括第一选择子单元40231,第五确定子单元40232,第二选择子单元40233,组成子单元40234。
第一选择子单元40231,用于对于该多个第二路径标注中的每个第二路径标注,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
第五确定子单元40232,用于基于选择的第一路径标注对应的定值点的安全特性,确定该第二路径标注对应的引用点的安全特性;
第二选择子单元40233,用于基于该多个第二路径标注对应的引用点的安全特性,从该多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
组成子单元40234,用于将选择的引用点所在路径上的指令组成该代码段的指令集。
可选地,该第一选择子单元40231,具体用于:
基于该多个第一路径标注的长度,对该多个第一路径标注进行排序,得到路径标注顺序;
基于该路径标注顺序,从该多个第一路径标注中,选择与该第二路径标注的前缀相同的第一路径标注。
综上所述,在本发明实施例中,通过指定错误类型,从待检测源代码中,获取初检代码集合,该初检代码集合中包括多个存在潜在缺陷的代码段,并对该初检集合包括的每个代码段中的路径进行危险路径筛选,得到该代码段的指令集,对该指令集进行路径可行性检测,从而可以在保证软件缺陷检测的准确性的前提下,无需对安全路径进行可行性检测,可以减少软件缺陷检测的工作量和检测所消耗的时间,提高软件缺陷检测的效率。
需要说明的是:上述实施例提供的软件缺陷检测的装置在软件缺陷检测时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的软件缺陷检测的装置与软件缺陷检测的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种软件缺陷检测方法,其特征在于,所述方法包括:
基于指定错误类型,从待检测源代码中,获取初检代码集合,所述初检代码集合中包括多个存在潜在缺陷的代码段;
对于所述初检代码集合中的每个代码段,对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
从所述多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从所述多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集,所述指令集中包括危险路径;
分别对所述每个代码段的指令集进行路径可行性检测,以对所述待检测源代码进行软件缺陷检测。
2.如权利要求1所述的方法,其特征在于,所述基于指定错误类型,从待检测源代码中,获取初检代码集合,包括:
基于指定错误类型,从待检测源代码中,确定多个目标变量;
对于所述多个目标变量中的每个目标变量,从所述待检测源代码中,获取所述目标变量的多个定值点和多个引用点,所述定值点为对所述目标变量进行赋值的点,所述引用点为引用所述目标变量的点;
基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源;
基于所述多个目标变量、所述多个目标变量的潜在错误源和所述多个目标变量分别对应的多个引用点,确定初检代码集合。
3.如权利要求2所述方法,其特征在于,所述基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源,包括:
基于所述指定错误类型和所述目标变量的多个定值点,分别确定所述多个定值点的错误属性;
基于所述多个定值点的错误属性,分别从存储的错误属性与安全特性之间的对应关系中,获取所述多个定值点的安全特性;
基于所述多个定值点的安全特性,将所述多个定值点中安全特性为危险的第一个定值点确定为所述目标变量的潜在错误源。
4.如权利要求1-3任一所述的方法,其特征在于,所述对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注,包括:
确定所述代码段的潜在错误源的路径标注;
确定所述代码段包括的各个分支路径的路径标注;
基于所述潜在错误源的路径标注和所述各个分支路径的路径标注,对所述代码段包括的各个分支路径所在的分支点、所述代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
5.如权利要求1-3任一所述的方法,其特征在于,所述基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集,包括:
对于所述多个第二路径标注中的每个第二路径标注,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
基于选择的第一路径标注对应的定值点的安全特性,确定所述第二路径标注对应的引用点的安全特性;
基于所述多个第二路径标注对应的引用点的安全特性,从所述多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
将选择的引用点所在路径上的指令组成所述代码段的指令集。
6.如权利要求5所述的方法,其特征在于,所述从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,包括:
基于所述多个第一路径标注的长度,对所述多个第一路径标注进行排序,得到路径标注顺序;
基于所述路径标注顺序,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注。
7.一种软件缺陷检测装置,其特征在于,所述装置包括:
获取模块,用于基于指定错误类型,从待检测源代码中,获取初检代码集合,所述初检代码集合中包括多个存在潜在缺陷的代码段;
筛选模块,用于对于所述初检代码集合中的每个代码段,对所述代码段进行危险路径筛选,得到所述代码段的指令集,所述指令集中包括危险路径;
检测模块,用于分别对所述每个代码段的指令集进行路径可行性检测,以对所述待检测源代码进行软件缺陷检测;
其中,所述筛选模块,包括:
标注单元,用于对所述代码段中的路径进行二分决策图BDD标注,得到多个BDD路径标注;
选择单元,用于从所述多个BDD路径标注中,选择定值点的路径标注,得到多个第一路径标注,以及从所述多个BDD路径标注中,选择引用点的路径标注,得到多个第二路径标注;
筛选单元,用于基于所述多个第一路径标注和所述多个第二路径标注,对所述代码段进行危险路径筛选,得到所述代码段的指令集。
8.如权利要求7所述的装置,其特征在于,所述获取模块包括:
第一确定单元,用于基于指定错误类型,从待检测源代码中,确定多个目标变量;
获取单元,用于对于所述多个目标变量中的每个目标变量,从所述待检测源代码中,获取所述目标变量的多个定值点和多个引用点,所述定值点为对所述目标变量进行赋值的点,所述引用点为引用所述目标变量的点;
第二确定单元,用于基于所述指定错误类型和所述目标变量的多个定值点,从所述待检测源代码中,确定所述目标变量的潜在错误源;
第三确定单元,用于基于所述多个目标变量、所述多个目标变量的潜在错误源和所述多个目标变量的多个引用点,确定初检代码集合。
9.如权利要求8所述装置,其特征在于,所述第二确定单元包括:
第一确定子单元,用于基于所述指定错误类型和所述目标变量的多个定值点,确定所述多个定值点的错误属性;
获取子单元,用于基于所述多个定值点的错误属性,从存储的错误属性与安全特性之间的对应关系中,获取所述多个定值点的安全特性;
第二确定子单元,基于所述多个定值点的安全特性,将所述多个定值点中安全特性为危险的第一个定值点确定为所述目标变量的潜在错误源。
10.如权利要求7-9任一所述的装置,其特征在于,所述标注单元包括:
第三确定子单元,用于确定所述代码段的潜在错误源的路径标注;
第四确定子单元,用于确定所述代码段包括的各个分支路径的路径标注;
标注子单元,用于基于所述潜在错误源的路径标注和所述各个分支路径的路径标注,对所述代码段包括的各个分支路径所在的分支点、所述代码段中的定值点和引用点进行BDD标注,得到多个BDD路径标注。
11.如权利要求7-9任一所述的装置,其特征在于,所述筛选单元包括:
第一选择子单元,用于对于所述多个第二路径标注中的每个第二路径标注,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注,从选择的第一路径标注中选择长度最长的第一路径标注;
第五确定子单元,用于基于选择的第一路径标注对应的定值点的安全特性,确定所述第二路径标注对应的引用点的安全特性;
第二选择子单元,用于基于所述多个第二路径标注对应的引用点的安全特性,从所述多个第二路径标注对应的引用点中,选择安全特性为危险的引用点;
组成子单元,用于将选择的引用点所在路径上的指令组成所述代码段的指令集。
12.如权利要求11所述的装置,其特征在于,
所述第一选择子单元,具体用于:
基于所述多个第一路径标注的长度,对所述多个第一路径标注进行排序,得到路径标注顺序;
基于所述路径标注顺序,从所述多个第一路径标注中,选择与所述第二路径标注的前缀相同的第一路径标注。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510640770.7A CN105204997B (zh) | 2015-09-30 | 2015-09-30 | 软件缺陷检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510640770.7A CN105204997B (zh) | 2015-09-30 | 2015-09-30 | 软件缺陷检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105204997A CN105204997A (zh) | 2015-12-30 |
CN105204997B true CN105204997B (zh) | 2018-10-19 |
Family
ID=54952691
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510640770.7A Active CN105204997B (zh) | 2015-09-30 | 2015-09-30 | 软件缺陷检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105204997B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107844408B (zh) * | 2016-09-18 | 2021-02-12 | 中国矿业大学 | 一种基于层次聚类的相似执行路径生成方法 |
CN108897678B (zh) * | 2018-06-20 | 2021-10-15 | 中国联合网络通信集团有限公司 | 静态代码检测方法和静态代码检测系统、存储设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
CN102385550A (zh) * | 2010-08-30 | 2012-03-21 | 北京理工大学 | 一种针对软件缺陷的检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8370181B2 (en) * | 2008-10-14 | 2013-02-05 | Camstar Systems, Inc. | System and method for supply chain data mining and analysis |
-
2015
- 2015-09-30 CN CN201510640770.7A patent/CN105204997B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
CN102385550A (zh) * | 2010-08-30 | 2012-03-21 | 北京理工大学 | 一种针对软件缺陷的检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105204997A (zh) | 2015-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fontana et al. | Antipattern and code smell false positives: Preliminary conceptualization and classification | |
CN102521121B (zh) | 一种页面测试方法和页面测试装置 | |
JP2005302028A (ja) | プログラムを計装するプローブ最適化のための方法およびシステム | |
WO2014180107A1 (zh) | 一种基于测试的静态分析误报消除方法 | |
CN101369249A (zh) | 标识软件的gui部件的方法和装置 | |
Sarhan et al. | A survey of challenges in spectrum-based software fault localization | |
CN106294134A (zh) | 代码的崩溃定位方法及装置 | |
CN109101410B (zh) | 一种风险驱动测试方法和装置以及计算机可读存储介质 | |
US20120297364A1 (en) | Augmented design structure matrix visualizations for software system analysis | |
CN105808438A (zh) | 一种基于函数调用路径的测试用例复用方法 | |
CN105468517B (zh) | 一种基于黑盒测试用例约简的统计错误定位方法 | |
CN109408385B (zh) | 一种基于缺陷规则和分类反馈的缺陷发现方法 | |
CN105204997B (zh) | 软件缺陷检测方法及装置 | |
CN104536882A (zh) | 基于频繁子图挖掘的错误定位方法 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
WO2022100447A1 (zh) | 单元测试代码结构自动解析与路径分析方法 | |
CN101894073B (zh) | 基于控制流交集的缺陷自动定位装置及其自动定位方法 | |
CN108829575A (zh) | 测试案例推荐方法、电子装置及可读存储介质 | |
CN104536880A (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
Sullivan | Hawkeye: User-guided enumeration of scenarios | |
CN114676061A (zh) | 一种基于知识图谱自动化固件检测方法 | |
CN105824758B (zh) | 一种基于执行索引和访问路径的堆区对象比较方法 | |
Yuan et al. | Test case generation based on program invariant and adaptive random algorithm | |
CN112579440A (zh) | 一种虚拟测试依赖对象的确定方法及装置 | |
Wu | An effective equivalence partitioning method to design the test case of the WEB application |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240407 Address after: 2257, 1st Floor, Zone E, No. 205 Dongxiaojing Industrial Park, Dongba Township, Chaoyang District, Beijing, 100018 Patentee after: BEIJING ZHONGKE CHUANGYI TECHNOLOGY Co.,Ltd. Country or region after: China Address before: 100048 No. 105 West Third Ring Road North, Beijing, Haidian District Patentee before: Capital Normal University Country or region before: China |