CN108763092A - 一种基于交叉验证的代码缺陷检测方法及装置 - Google Patents

一种基于交叉验证的代码缺陷检测方法及装置 Download PDF

Info

Publication number
CN108763092A
CN108763092A CN201810553230.9A CN201810553230A CN108763092A CN 108763092 A CN108763092 A CN 108763092A CN 201810553230 A CN201810553230 A CN 201810553230A CN 108763092 A CN108763092 A CN 108763092A
Authority
CN
China
Prior art keywords
test
result
code
aacode
aacode defect
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
Application number
CN201810553230.9A
Other languages
English (en)
Other versions
CN108763092B (zh
Inventor
计卫星
高玉金
王拙
王一拙
罗辉
杨恬
石峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN201810553230.9A priority Critical patent/CN108763092B/zh
Publication of CN108763092A publication Critical patent/CN108763092A/zh
Application granted granted Critical
Publication of CN108763092B publication Critical patent/CN108763092B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于交叉验证的代码缺陷检测方法及装置,选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。本发明提供的方法与现有的使用单个工具进行缺陷检测的方法相比,本发明基于被测代码与测试用例之间的相似性,并根据各个工具在已知测试用例上的准确率,对各个工具检测被测代码的测试结果进行综合计算和评判,具有较高的准确率,可以减少误报,提高代码缺陷检测和代码审核的工作效率。

Description

一种基于交叉验证的代码缺陷检测方法及装置
技术领域
本发明涉及检测技术领域,特别涉及一种基于交叉验证的代码缺陷检测方法及装置。
背景技术
软件分析是指对软件进行人工或者自动分析,以验证、确认或发现软件规约或者某种性质的过程和活动。将软件分析的方法应用于软件安全性检测,可有效发现和检测软件中存在的安全缺陷或漏洞。常见的软件分析按照代码的文本形式分为二进制和源代码分析,按照是否运行程序代码分为静态分析和动态分析。静态代码分析不需要运行程序,根据源代码或者可执行代码检测存在的潜在问题。动态分析方法通过运行待测程序以获取和分析程序运行过程中产生的动态信息,以判断其运行时语义性质。由于很难完全枚举程序所有的执行路径,动态分析方法通常存在漏报。目前存在多款开源的静态分析工具,包括FindBugs、JLint和Infer等,也有多款商业化的分析工具,例如Fortify和Coverity等。
目前已知资源泄漏、SQL注入、XSS、缓冲区溢出、文件上传等多种软件缺陷,由于每款缺陷检测工具设计和实现的原理各不相同,因此针对不同的软件缺陷表现出不同的检测能力和适用性。就一款工具而言,某一方面超强的检测能力可能会被大量其他类别的缺陷误报所掩盖。
在实际应用中,总体来看这些工具普遍存在误报和漏报较高的情况,影响了代码缺陷检测和审查的工作效率,以及工具的普及和推广应用。
发明内容
鉴于上述问题,本发明提供了一种基于交叉验证的代码缺陷检测方法及装置,该方法基于静态分析的软件缺陷检测,能够解决现在代码缺陷检测中误报较高的问题,提高代码缺陷检测的准确率,提高软件缺陷检测和代码审查的工作效率。
第一方面,本发明实施例提供一种基于交叉验证的代码缺陷检测方法,包括:
选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
在一个实施例中,获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率,包括:
分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
获取对所述测试集中的每个代码测试用例的人工标注结果;
将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
在一个实施例中,根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率,包括:
获取所述数据库中所述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当所述测试结果与所述标注结果相同时,表示所述代码缺陷检测工具测试正确,对比结果V(k,j,i)=1;
当所述测试结果与所述标注结果不相同时,表示所述代码缺陷检测工具测试错误,对比结果V(k,j,i)=0。
在一个实施例中,所述第二检测结果,通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当所述第一检测结果有缺陷时,所述E(k,new,i)=1;
当所述第一检测结果无缺陷时,所述E(k,new,i)=-1。
在一个实施例中,当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷,包括:
当所述S(i)大于0时,确定所述被检测代码存在缺陷。
第二方面,本发明实施例提供一种基于交叉验证的代码缺陷检测装置,包括:
第一检测模块,用于选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
获取模块,用于获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
第二检测模块,用于根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
确定模块,用于当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
在一个实施例中,所述获取模块,包括:
记录子模块,用于分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
获取子模块,用于获取对所述测试集中的每个代码测试用例的人工标注结果;
存储子模块,用于将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
选择子模块,用于计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
计算子模块,用于根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
在一个实施例中,所述计算子模块,具体用于获取所述数据库中所述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当所述测试结果与所述标注结果相同时,表示所述代码缺陷检测工具测试正确,对比结果V(k,j,i)=1;
当所述测试结果与所述标注结果不相同时,表示所述代码缺陷检测工具测试错误,对比结果V(k,j,i)=0。
在一个实施例中,所述第二检测模块中的所述第二检测结果,通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当所述第一检测结果有缺陷时,所述E(k,new,i)=1;
当所述第一检测结果无缺陷时,所述E(k,new,i)=-1。
在一个实施例中,所述确定模块,具体用于当所述S(i)大于0时,确定所述被检测代码存在缺陷。
本发明实施例提供的上述技术方案的有益效果至少包括:
本发明实施例提供的一种基于交叉验证的代码缺陷检测方法,选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。当所述第二检测结果与现有的使用单个工具进行缺陷检测的方法相比,本发明基于被测代码与测试用例之间的相似性,并根据各个工具在已知测试用例上的准确率,对各个工具检测被测代码的测试结果进行综合计算和评判,具有较高的准确率,可以减少误报,提高代码缺陷检测和代码审核的工作效率。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例提供的基于交叉验证的代码缺陷检测方法流程图;
图2为本发明实施例提供的步骤S12的流程图;
图3为本发明实施例提供的基于交叉验证的代码缺陷检测方法过程图;
图4为本发明实施例提供的基于交叉验证的代码缺陷检测装置的框图;
图5为本发明实施例提供的获取模块42的框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1所示,本发明实施例提供的基于交叉验证的代码缺陷检测方法,包括:S11~S14;
S11、选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
S12、获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
S13、根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
S14、当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
其中,步骤S11中,多个代码缺陷检测工具,例如开源的FindBugs、JLint和Infer等,也可以是商业化的分析工具,例如Fortify和Coverity等;多个代码缺陷检测工具可以用T1,T2,...,TK,表示。可以检测针对多种代码缺陷,比如资源泄漏、SQL注入、XSS、缓冲区溢出、文件上传等多种软件缺陷,可命名为D1,D2,...,DI等,其中每个检测工具都有针对不同的软件缺陷表现出不同的检测能力和适用性,比如FindBugs是一个静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。本发明实施例对代码缺陷检测工具的种类和数量不做限定。
步骤S12~S14,选取多个测试用例,用于多个代码缺陷检测工具的测试检测,然后再选取被检测代码与多个测试用例中N个相似性较高的测试用例,并获取N个测试用例的准确率。根据上述准确率,对第一检测结果进行加权求和,并生成第二检测结果;对第二检测结果进行综合计算和评判,从而确定上述被检测代码是否存在缺陷。
本实施例中,基于被测代码与测试用例之间的相似性,并根据各个工具在已知测试用例上的准确率,对各个工具检测被测代码的测试结果进行综合计算和评判,具有较高的准确率,可减少误报,提高代码缺陷检测和代码审核的工作效率。
在一个实施例中,参照图2所示,步骤S12具体包括S121~S125:
S121、分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
S122、获取对所述测试集中的每个代码测试用例的人工标注结果;
S123、将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
S124、计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
S125、根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
本实施例中,分别使用多个代码缺陷工具对测试集中的每一个测试用例进行测试,其中,该测试用例可以从实际的代码中选择或者人工编写一定数量的测试程序比如命名为C1,C2,...,CJ等,这些测试用例可能有缺陷D1,D2,...,DI,也可能没有缺陷;上述测试集也可以根据实际情况不断更新或补充新的测试用例,或补充具有新的缺陷(包括现有缺陷和潜在的未知缺陷)的测试用例,以增加该检测方法的准确性。
分别使用每种工具对每个测试用例进行测试,并记录每个测试用例的测试结果,如果工具TK针对某个测试用例CJ关于缺陷DI的测试结果为阳性,即存在缺陷时,则记为E(k,j,i)=1;否则记为E(k,j,i)=0;
对所有的测试用例进行人工标注,具体方法为,当测试用例CJ存在某种缺陷DI时,则标记为L(j,i)=1,否则标记为L(j,i)=0;
将工具测试结果与人工标注结果进行对比,具体做法为:针对每种缺陷,将工具测试结果与人工标注结果进行对比,如果工具测试结果与人工标注结果相同,即E(k,j,i)=L(j,i),则表示工具测试正确,记为V(k,j,i)=1,否则表示工具测试错误,即E(k,j,i)≠L(j,i),记为V(k,j,i)=0,将所有对比结果存储在数据库中。每个测试用例需要人工给一个标准结果,例如是否存在空指针引用的问题,然后用工具检测,据此判断工具检测的是否正确。
对于新的被测代码Cnew,计算被测代码与每个测试用例CJ的相似度,可以采用现有技术中已知的方法,比如基于属性计数的方法、基于结构度量的方法、二者结合的方法以及基于神经网络的方法,本发明对相似度的计算方法也不做限定,只要可以准确计算两个代码程序之间的相似性均可。
比如将计算后的相似度数据按照从高到低排列,选择相似度较高的N个测试用例,根据每个代码缺陷工具对N个测试用例的测试结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
在一个实施例中,获取上述数据库中上述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当上述工具的测试结果与上述人工的标注结果相同时,表示代码缺陷检测工具测试正确,则对比结果V(k,j,i)=1;
当上述工具的测试结果与上述人工标注结果不相同时,表示代码缺陷检测工具测试错误,则对比结果V(k,j,i)=0。
其中:第二检测结果通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当第一检测结果有缺陷时,则E(k,new,i)=1;
当第一检测结果无缺陷时,则E(k,new,i)=-1。
进一步地,上述公式(2)的S(i)其结果范围为-k到k,那么比如取阈值为0,当S(i)大于0时表示可能存在缺陷i的可能性较大,越接近k时,存在缺陷i的可能性越大;而到S(i)小于0时,可认为不存在缺陷,越接近-k时,可认为不存在缺陷。
参照图3所示,详细说明下本发明提供的基于交叉验证的代码缺陷检测方法;
第1步:选择多个可用的代码缺陷检测工具T1,T2,...,TK,可以是开源的,也可以是商业工具;
第2步:针对多种代码缺陷D1,D2,...,DI,从实际的代码中选择或者人工编写一定数量的测试程序C1,C2,...,CJ,这些测试用例可能有缺陷,也可能没有缺陷;
第3步:对所有的测试用例进行人工标注,具体方法为,当测试用例CJ存在某种缺陷DI时,则标记为L(j,i)=1,否则标记为L(j,i)=0;
第4步:分别使用每种工具对每个测试程序进行测试,并记录每个测试用例的测试结果,如果工具TK针对某个测试用例CJ关于缺陷DI的测试结果为阳性,则记为E(k,j,i)=1,否则记为E(k,j,i)=0;
第5步:将工具测试结果与人工标注结果进行对比,具体做法为:针对每种缺陷,将工具测试结果与人工标注结果进行对比,如果人工标注结果与工具测试结果相同,即L(j,i)=E(k,j,i),则表示工具测试正确,记为V(k,j,i)=1,否则表示工具测试错误,即L(j,i)≠E(k,j,i),记为V(k,j,i)=0,将所有对比结果存储在数据库中;
第6步:对于新的被测代码Cnew,计算被测代码与每个测试用例CJ的相似度,可以采用目前已知的基于属性计数的方法、基于结构度量的方法、二者结合的方法以及基于神经网络的方法;
第7步;将相似度从高到低排名,选择最相似的N个测试用例;
第8步:根据每个工具对N个测试用例的测试结果,按照缺陷类别逐一计算每个工具的测试准确率,具体做法为:从数据库里面读取N个测试用例的对比结果,对于工具TK关于缺陷DI计算准确率:
第9步:使用每个工具对新的被测代码Cnew进行测试,并记录相应的测试结果,测试结果为阳性记为E(k,new,i)=1,为阴性记为E(k,new,i)=-1;
第10步;根据每个工具对N个测试用例的测试准确率,对新代码的测试结果进行加权求和,得到综合测试结果,具体做法为:
其中A(k,i)表示工具TK关于缺陷DI的测试准确率,E(k,new,i)表示工具TK关于新测试用例Cnew的测试结果。
第11步:用户根据综合测试结果S(i),判定新测试用例Cnew是否存在某种缺陷DI,当综合测试结果S(i)越大时,表示存在缺陷的可能性越大。
为了进一步说明本发明提供的基于交叉验证的代码缺陷检测方法,以开源工具FindBugs,JLint和商业工具Fortify作为检测工具为例,包括如下步骤:
第1步:选择开源工具FindBugs,JLint和商业工具Fortify作为检测工具;
第2步:针对Java程序中的空指针引用,从已公布的标准测试用例中选择部分测试会用例,人工编写一定数量的测试用例;
第3步:对所有的测试用例进行人工标注;
第4步:分别使用FindBugs、JLint和Fortify对每个测试程序进行测试,并记录每个测试用例的测试结果;
第5步:将工具测试结果与人工标注结果进行对比,记录在数据库中;
第6步:对于新来的被测代码,计算被测代码与每个测试用例的相似度;
第7步;将相似度从高到低排名,选择相似度最高的100个测试用例;
第8步:根据每个工具对100个测试用例的测试结果,计算FindBugs、JLint和Fortify的测试准确率;
第9步:使用FindBugs、JLint和Fortify分别对新的待测代码进行测试,并记录相应的测试结果;
第10步;根据每个工具对100个测试用例的测试准确率,对新代码的测试结果进行加权求和,得到综合测试结果;
第11步:根据综合测试结果和预设的阈值,给出最终测试结果。
基于同一发明构思,本发明实施例还提供了一种基于交叉验证的代码缺陷检测装置,由于该装置所解决问题的原理与前述基于交叉验证的代码缺陷检测方法相似,因此该装置的实施可以参见前述方法的实施,重复之处不再赘述。
本发明实施例还提供了一种基于交叉验证的代码缺陷检测装置,该装置参照图4所示,包括:
第一检测模块41,用于选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
获取模块42,用于获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
第二检测模块43,用于根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
确定模块44,用于当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
在一个实施例中,所述获取模块42,参照图5所示,包括:
记录子模块421,用于分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
获取子模块422,用于获取对所述测试集中的每个代码测试用例的人工标注结果;
存储子模块423,用于将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
选择子模块424,用于计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
计算子模块425,用于根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
在一个实施例中,所述计算子模块425,具体用于获取所述数据库中所述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当所述测试结果与所述标注结果相同时,表示所述代码缺陷检测工具测试正确,所述对比结果V(k,j,i)=1;
当所述测试结果与所述标注结果不相同时,表示代码缺陷检测工具测试错误,所述对比结果V(k,j,i)=0。
在一个实施例中,所述第二检测模块43中的所述第二检测结果,通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当所述第一检测结果有缺陷时,所述E(k,new,i)=1;
当所述第一检测结果无缺陷时,所述E(k,new,i)=-1。
在一个实施例中,所述确定模块44,具体用于当所述S(i)大于0时,确定所述被检测代码存在缺陷。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种基于交叉验证的代码缺陷检测方法,其特征在于,包括:
选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
2.如权利要求1所述的方法,其特征在于,获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率,包括:
分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
获取对所述测试集中的每个代码测试用例的人工标注结果;
将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
3.如权利要求2所述的方法,其特征在于,根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率,包括:
获取所述数据库中所述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当所述测试结果与所述标注结果相同时,表示所述代码缺陷检测工具测试正确,对比结果V(k,j,i)=1;
当所述测试结果与所述标注结果不相同时,表示所述代码缺陷检测工具测试错误,对比结果V(k,j,i)=0。
4.如权利要求3所述的方法,其特征在于,所述第二检测结果,通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当所述第一检测结果有缺陷时,所述E(k,new,i)=1;
当所述第一检测结果无缺陷时,所述E(k,new,i)=-1。
5.如权利要求4所述的方法,其特征在于,当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷,包括:
当所述S(i)大于0时,确定所述被检测代码存在缺陷。
6.一种基于交叉验证的代码缺陷检测装置,其特征在于,包括:
第一检测模块,用于选择多个代码缺陷检测工具,对被检测代码进行检测,生成第一检测结果;
获取模块,用于获取每个代码缺陷检测工具对与所述被检测代码相似的N个测试用例的准确率;
第二检测模块,用于根据所述准确率,对所述第一检测结果进行加权求和,生成第二检测结果;
确定模块,用于当所述第二检测结果大于预设阈值时,确定所述被检测代码存在缺陷。
7.如权利要求6所述的装置,其特征在于,所述获取模块,包括:
记录子模块,用于分别使用每个代码缺陷工具对测试集进行测试,记录测试结果;所述测试集由多个代码测试用例组成;
获取子模块,用于获取对所述测试集中的每个代码测试用例的人工标注结果;
存储子模块,用于将所述测试结果与所述标注结果进行对比,将所有对比结果存储在数据库中;
选择子模块,用于计算所述被检测代码与所述测试集中每个代码测试用例的相似度,选择相似度较高的N个测试用例;
计算子模块,用于根据所述数据库中存储的每个代码缺陷工具对所述N个测试用例的对比结果,按照代码缺陷类别逐一计算每个代码缺陷工具的准确率。
8.如权利要求7所述的装置,其特征在于,所述计算子模块,具体用于获取所述数据库中所述N个测试用例的对比结果,对于每个代码缺陷检测工具关于缺陷类别计算准确率:
式中,V(k,j,i)表示对比结果,N表示与被检测代码相似度高的测试用例的数量,k表示代码缺陷检测工具,j表示测试用例,i表示缺陷类别;
当所述测试结果与所述标注结果相同时,表示所述代码缺陷检测工具测试正确,对比结果V(k,j,i)=1;
当所述测试结果与所述标注结果不相同时,表示所述代码缺陷检测工具测试错误,对比结果V(k,j,i)=0。
9.如权利要求8所述的装置,其特征在于,所述第二检测模块中的所述第二检测结果,通过下述公式获得:
式中,k表示代码缺陷检测工具,new表示被检测代码,i表示缺陷类别,A(k,i)表示序号为k代码缺陷检测工具检测缺陷类别i的测试准确率;E(k,new,i)为所述第一检测结果,表示序号为k代码缺陷检测工具对被检测代码new进行缺陷类别i的检测结果;
当所述第一检测结果有缺陷时,所述E(k,new,i)=1;
当所述第一检测结果无缺陷时,所述E(k,new,i)=-1。
10.如权利要求9所述的装置,其特征在于,所述确定模块,具体用于当所述S(i)大于0时,确定所述被检测代码存在缺陷。
CN201810553230.9A 2018-05-31 2018-05-31 一种基于交叉验证的代码缺陷检测方法及装置 Active CN108763092B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810553230.9A CN108763092B (zh) 2018-05-31 2018-05-31 一种基于交叉验证的代码缺陷检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810553230.9A CN108763092B (zh) 2018-05-31 2018-05-31 一种基于交叉验证的代码缺陷检测方法及装置

Publications (2)

Publication Number Publication Date
CN108763092A true CN108763092A (zh) 2018-11-06
CN108763092B CN108763092B (zh) 2020-12-01

Family

ID=64001657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810553230.9A Active CN108763092B (zh) 2018-05-31 2018-05-31 一种基于交叉验证的代码缺陷检测方法及装置

Country Status (1)

Country Link
CN (1) CN108763092B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559330A (zh) * 2020-12-07 2021-03-26 深圳开源互联网安全技术有限公司 一种开源软件组分检测结果正确性的分析方法
CN114385492A (zh) * 2021-12-30 2022-04-22 大连理工大学 一种基于差分测试的高级综合工具优化选项缺陷检测方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1696721A (zh) * 2004-05-10 2005-11-16 安捷伦科技有限公司 组合多个独立信息源用于被测器件的分类
CN104679656A (zh) * 2015-03-13 2015-06-03 哈尔滨工程大学 一种自适应调整缺陷检测率的组合测试方法
US20160291970A1 (en) * 2015-03-31 2016-10-06 Ca, Inc. Effective Defect Management Across Multiple Code Branches
CN106529293A (zh) * 2016-11-09 2017-03-22 东巽科技(北京)有限公司 一种用于恶意软件检测的样本类别判定方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1696721A (zh) * 2004-05-10 2005-11-16 安捷伦科技有限公司 组合多个独立信息源用于被测器件的分类
CN104679656A (zh) * 2015-03-13 2015-06-03 哈尔滨工程大学 一种自适应调整缺陷检测率的组合测试方法
US20160291970A1 (en) * 2015-03-31 2016-10-06 Ca, Inc. Effective Defect Management Across Multiple Code Branches
CN106529293A (zh) * 2016-11-09 2017-03-22 东巽科技(北京)有限公司 一种用于恶意软件检测的样本类别判定方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
罗琴灵等: "多策略软件代码缺陷检测方法研究", 《贵州大学学报(自然科学版)》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559330A (zh) * 2020-12-07 2021-03-26 深圳开源互联网安全技术有限公司 一种开源软件组分检测结果正确性的分析方法
CN114385492A (zh) * 2021-12-30 2022-04-22 大连理工大学 一种基于差分测试的高级综合工具优化选项缺陷检测方法

Also Published As

Publication number Publication date
CN108763092B (zh) 2020-12-01

Similar Documents

Publication Publication Date Title
US8291384B2 (en) Weighted code coverage tool
US10437702B2 (en) Data-augmented software diagnosis method and a diagnoser therefor
US20150370685A1 (en) Defect localization in software integration tests
US20170083670A1 (en) Drug adverse event extraction method and apparatus
US20090265693A1 (en) Method and system for test run prioritization for software code testing in automated test execution
CN102831055B (zh) 基于加权属性的测试用例选择方法
Chen et al. Understanding metric-based detectable smells in Python software: A comparative study
KR20140006862A (ko) 흐름 분석 계측
Winkler et al. Optimizing for recall in automatic requirements classification: An empirical study
Johari et al. Validation of object oriented metrics using open source software system: an empirical study
EP4055484A1 (en) Systems and methods for evaluating code contributions by software developers
CN110082666A (zh) 芯片测试分析方法、装置、设备及存储介质
CN108763092A (zh) 一种基于交叉验证的代码缺陷检测方法及装置
Badri et al. Evaluating the effect of control flow on the unit testing effort of classes: An empirical analysis
CN108959103A (zh) 基于bwdsp库函数的软件测试方法
CN105159826B (zh) 一种定位目标程序中的错误语句的方法和装置
CN111880957A (zh) 一种基于随机森林模型的程序错误定位方法
CN111858377A (zh) 测试脚本的质量评价方法、装置、电子设备及存储介质
Chamoli et al. Analysing software metrics for accurate dynamic defect prediction models
CN116627804A (zh) 基于人工智能的测试方法、系统、电子设备及存储介质
CN109886288A (zh) 一种用于电力变压器的状态评价方法及装置
CN115034580A (zh) 融合数据集的质量评估方法和装置
CN107818051A (zh) 一种测试用例的跳转分析方法、装置及服务器
Ma et al. A vector table model-based systematic analysis of spectral fault localization techniques
Jain et al. Contextual Predictive Mutation Testing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant