基于过采样操作的代价敏感神经网络的警告分类方法转让专利

申请号 : CN201610392819.6

文献号 : CN106095671B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐玲潘志辉洪明坚葛永新杨梦宁张小洪杨丹王洪星黄晟

申请人 : 重庆大学

摘要 :

本发明涉及基于过采样操作的代价敏感神经网络的警告分类方法,包括S1使用FindBugs工具对目标软件一系列版本的jar文件进行分析,得到目标软件的静态警告;S2对S1获得的静态警告进行标注;S3采用BP神经网络,使用过采样的方式改变样本集中样本的分布得到新的样本集,采用新的样本集中的样本训练分类器,然后使用该分类器对样本集中的所有样本进行预测分类,将样本集中的所有样本预测为有效警告或误报警告。本发明方法在有效警告查全率Recall方面平均提高了44.07%,还能快速达到较高而平稳的查全率,同时较传统神经网络方法能达到更低的分类代价。

权利要求 :

1.基于过采样操作的代价敏感神经网络的警告分类方法,其特征在于,包括如下步骤:S1:使用FindBugs工具对目标软件一系列版本的jar文件进行分析,得到目标软件的静态警告;

S2:对步骤S1获得的静态警告进行标注;

S2a:将目标软件一系列版本中,相邻两个版本中静态警告进行两两对比,如果前一个版本中警告在后一个版本中消失则认为该警告是有效警告;反之,如果前一个版本中的警告在后一个版本中仍然存在则认为该警告是误报警告;

S2b:将有效警告中重复的有效警告剔除后,剩下的所有的有效警告构成有效警告集,将所有误报警告中重复的误报警告剔除后,剩下的所有误报警告构成误报警告集,有效警告集和误报警告集构成样本集;有效警告集中的有效警告和无效警告集中的无效警告均为样本集中的样本;

S3:采用BP神经网络,使用过采样的方式改变样本集中样本的分布得到新的样本集,采用新的样本集中的样本训练分类器,然后使用该分类器对样本集中的所有样本进行预测分类,将样本集中的所有样本预测为有效警告或误报警告;

所述步骤S3具体如下:

采用过采样的方式改变样本集中样本的分布,再对样本集中的所有样本进行预测分类;

1)根据公式(1)增加步骤S2b有效警告集中的有效警告的数量得到新的样本集;

其中,NⅠ表示样本集中误报警告的数量,NⅡ表示样本集中有效警告的数量, 表示新的样本集中有效警告的数量,CostⅠ表示误报警告被误分类产生的代价,CostⅡ表示有效警告被误分类产生的代价,CostⅠ,CostⅡ均为自然数,且 的取值为[1,50];

2)令j=1;

3)从新的样本集中选取十分之九分的样本构成训练样本集Qj,剩下十分之一的样本构成测试样本集Pj,且Qj≠Qj-1,Pj≠Pj-1;

4)采用BP神经网络对训练样本集Qj进行训练得到分类器,然后使用该分类器对测试样本集Pj中的所有测试样本进行预测分类,即将测试样本集Pj中的每个测试样本分为有效警告或误报警告,然后将测试样本集Pj中所有经过预测分类的测试样本输出;

5)判断新的样本集中所有样本是否都经过预测分类,如果是则结束,否则执行下一步;

6)令j=j+1,并返回步骤3)。

2.如权利要求1所述的基于过采样操作的代价敏感神经网络的警告分类方法,其特征在于,所述 的取值为[20,50]。

说明书 :

基于过采样操作的代价敏感神经网络的警告分类方法

技术领域

[0001] 本发明涉及软件静态分析,尤其涉及软件静态警告的分类,具体涉及基于过采样操作的代价敏感神经网络的警告分类方法。

背景技术

[0002] 在软件开发过程中,大量资源被消耗在发现和解决软件中的缺陷。除了一些大公司在开发过程中会使用自动化测试方法,在大多数中小规模的软件公司或项目团队中,软件的测试工作仍然停留在手工处理阶段。其测试任务往往繁重且低效,稍小的功能变动都需要回归测试其他功能,在资源有限以及时间紧迫的情况下,软件测试工作通常不能顺利的完成,造成仍有许多未被发现的错误遗留在软件系统中。测试手段的匮乏己经成为制约软件产出效率以及软件质量的瓶颈。鉴于此,动态分析和静态分析方法被分别提出,以在节约开发资源的前提下发现软件潜在的错误。动态分析需要编译执行程序,以观察该软件是否满足预先设置好的输出结果;静态分析通常对源代码或其相应的二进制文件进行分析,在不编译运行软件的情况下发现代码中是否存在不佳的编程实践。静态分析技术目标不在于证实软件是否输出正确或发现程序中的逻辑问题,而是作为动态分析方法的一种补充,在项目编码阶段尽可能地发现潜在问题,提高程序的鲁棒性和可靠性。
[0003] 静态分析技术可以自动化检测软件中可能造成程序崩溃的潜在异常代码块,如空指针引用、下标越界、代码风格不一致等,帮助开发人员在项目的初期阶段发现一些可能存在的代码安全隐患。目前,前沿的JAVA静态分析工具有FindBugs、PMD、Checkstyle等,本发明将这些静态分析工具分析报告的潜在异常信息统一称为警告。
[0004] 与测试和代码走查等代码质量控制手段不同的是,静态分析工具往往会报告大量的警告,平均每千行代码中有40个警告。这些警告中,既有开发人员认为重要并将进行修复的有效警告;也有对代码质量并不产生影响而将被忽略的误报警告。有研究发现,35-91%的警告都是无关紧要的误报警告,而平均每个警告都需要花费有经验的开发人员5分钟时间进行评估。大量的误报警告将耗费大量的开发资源,这一因素严重阻碍了静态分析工具在开发过程中的普及。
[0005] 为了最大效应的利用静态分析工具,除了分析工具限制报告预先定义的低优先级警告外,大量警告分类技术与排序技术被不断提出。分类技术将警告预测为有效警告或误报警告;而排序技术则是根据警告被预测为有效警告的可能性对警告进行排序。通过提取警告特征,主要包括警告本身特征(分析工具定义)、源代码特征、代码仓库特征等,从简单的警告类型选择到复杂的机器学习算法分别被应用来减少误报警告,以提高静态分析工具的可用性。
[0006] 然而,在警告分类过程中存在两类问题:第一类为误分类造成代价不等问题,将一个误报警告归类为一个有效警告(误分类Ⅰ),和将一个有效警告归类为误报警告(误分类Ⅱ),所产生的代价是不等的,与软件缺陷预测类,误分类Ⅱ可能造成软件的崩溃,而误分类Ⅰ仅仅需要开发人员花费5分钟时间进行审查,即误分类Ⅱ的代价会远远高于误分类Ⅰ;第二类问题为类不平衡问题,如上文所述,误报警告可能占整体警告的绝大部分,本发明的实验数据也是类极不平衡的。以往的警告分类技术目的往往是降低分类的错误率,而忽略了上述不同分类错误所产生的不同代价,以及数据的不平衡问题。

发明内容

[0007] 针对现有技术存在的上述问题,本发明的目的是提供一种尽可能降低警告分类后代价的一种警告分类方法。
[0008] 为实现上述目的,本发明采用如下技术方案:基于过采样操作的代价敏感神经网络的警告分类方法,其特征在于,包括如下步骤:
[0009] S1:使用FindBugs工具对目标软件一系列版本的jar文件进行分析,得到目标软件的静态警告;
[0010] S2:对步骤S1获得的静态警告进行标注;
[0011] S2a:将目标软件一系列版本中,相邻两个版本中静态警告进行两两对比,如果前一个版本中警告在后一个版本中消失则认为该警告是有效警告;反之,如果前一个版本中的警告在后一个版本中仍然存在则认为该警告是误报警告;
[0012] S2b:将有效警告中重复的有效警告剔除后,剩下的所有的有效警告构成有效警告集,将所有误报警告中重复的误报警告剔除后,剩下的所有误报警告构成误报警告集,有效警告集和误报警告集构成样本集;有效警告集中的有效警告和无效警告集中的无效警告均为样本集中的样本;
[0013] S3:采用BP神经网络,使用过采样的方式改变样本集中样本的分布得到新的样本集,采用新的样本集中的样本训练分类器,然后使用该分类器对样本集中的所有样本进行预测分类,将样本集中的所有样本预测为有效警告或误报警告。
[0014] 作为优化,所述步骤S3具体如下:
[0015] 采用过采样的方式改变样本集中样本的分布,再对样本集中的所有样本进行预测分类;
[0016] 1)根据公式(1)增加步骤S2b有效警告集中的有效警告的数量得到新的样本集;
[0017]
[0018] 其中,NⅠ表示样本集中误报警告的数量,NⅡ表示样本集中有效警告的数量, 表示新的样本集中有效警告的数量,CostⅠ表示误报警告被误分类产生的代价,CostⅡ表示有效警告被误分类产生的代价,CostⅠ,CostⅡ均为自然数,且 的取值为[1,50];
[0019] 2)令j=1;
[0020] 3)从新的样本集中选取十分之九分的样本构成训练样本集Qj,剩下十分之一的样本构成测试样本集Pj,且Qj≠Qj-1,Pj≠Pj-1;
[0021] 4)采用BP神经网络对训练样本集Qj进行训练得到分类器,然后使用该分类器对测试样本集Pj中的所有测试样本进行预测分类,即将测试样本集Pj中的每个测试样本分为有效警告或误报警告,然后将测试样本集Pj中所有经过预测分类的测试样本输出;
[0022] 5)判断新的样本集中所有样本是否都经过预测分类,如果是则结束,否则执行下一步;
[0023] 6)令j=j+1,并返回步骤3)。
[0024] 作为优化,所述 的取值为[20,50]。
[0025] 相对于现有技术,本发明具有如下优点:通过实验结果对比发现,本发明方法在有效警告查全率Recall方面平均提高了44.07%。另外本发明方法能快速达到较高而平稳的查全率,且当有效警告被误分类的代价在高于一定值时,代价敏感分类方法较传统神经网络方法,能达到更低的分类代价。

附图说明

[0026] 图1为警告标注过程图。
[0027] 图2为有效警告及误报警告分布图。
[0028] 图3a为CostⅠ=1,CostⅡ=50下MyFaces项目在本发明给出的三种方法与现有技术的实验效果对比图;图3b为CostⅠ=1,CostⅡ=50下Camel项目在本发明给出的三种与现有技术的实验效果对比图;图3c为CostⅠ=1,CostⅡ=50下CXF项目在本发明给出的三种与现有技术的实验效果对比图。
[0029] 图4为BP神经网络结构。
[0030] 图5a为项目MyFaces中个版本的缺陷分布;图5b为项目Camel中个版本的缺陷分布;图5c为项目CXF中个版本的缺陷分布。
[0031] 图6为变量间的单调关系。

具体实施方式

[0032] 下面对本发明作进一步详细说明。
[0033] 基于过采样操作的代价敏感神经网络的警告分类方法,包括如下步骤:
[0034] S1:使用FindBugs工具对目标软件一系列版本的jar文件进行分析,得到目标软件的静态警告;本发明中的目标软件是指准备对其警告进行分类的软件;
[0035] FindBugs是由Bill Pugh和David Hovemeyer创建的开源项目,通过操作Java字节码来查找Java代码中的程序错误。它使用匹配缺陷模式的方式来识别Java程序中超过400种不同类型的源代码警告。这些源代码警告可分为四个等级,分别是恐怖的(scariest)、吓人的(scary)、令人困扰的(troubling)和值得关注的(of concern),该级别用来指示某警告的存在对软件系统的危害程度;且每一种警告类型都有一个预先定义的优先级,其中共有高、中、低三种优先级,该优先级用来指示警告为有效警告的可能性。FindBugs通过匹配缺陷模式来查找代码中的潜在错误,这些缺陷模式由经验丰富的开发人员归纳自真实的源代码错误。
[0036] S2:对步骤S1获得的静态警告进行标注;
[0037] S2a:将目标软件一些列版本中,相邻两个版本中静态警告进行两两对比,如果前一个版本中警告在后一个版本中消失则认为该警告是有效警告;反之,如果前一个版本中的警告在后一个版本中仍然存在则认为该警告是误报警告;
[0038] S2b:将有效警告中重复的有效警告剔除后,剩下的所有的有效警告构成有效警告集,将所有误报警告中重复的误报警告剔除后,剩下的所有误报警告构成误报警告集,有效警告集和误报警告集构成样本集;有效警告集中的有效警告和无效警告集中的无效警告均为样本集中的样本;
[0039] 实现了基于连续的缺陷修复版本的自动化警告标注方法,能实现对警告快速有效的标注,按如下基本思想进行标注:若一个警告在某个版本中被引入,而在后续的版本中消失,则该警告被标注为有效警告;若后续的版本中,该警告仍然存在,则该警告被标注为误报警告。如图1所示,在警告标注的过程中,在版本1.1.1中存在,而在版本1.1.2中消失的警告(黑色)标注为有效警告;在版本1.1.2中仍然存在标注为误报警告。最后综合所有选择的版本数据,得到本发明后续的实验数据集。
[0040] S3:采用BP神经网络,使用样本集中的样本训练分类器,并在形成分类器的过程中引入代价,然后使用该分类器对样本集中的所有样本进行预测分类,将样本集中的所有样本预测为有效警告或误报警告。
[0041] 对于步骤S3,可以采用如下三种基于PB神经网络的代价敏感预测分类方法,具体如下:
[0042] 第一种:采用过采样的方式改变样本集中样本的分布,再对样本集中的所有样本进行预测分类;
[0043] 1)根据公式(1)增加步骤S2b有效警告集中的有效警告的数量得到新的样本集;过采样的方法通过增加代价较高类别的样本数量,改变训练数据的分布,将代价直接反应到样本数据中。
[0044]
[0045] 其中,NⅠ表示样本集中误报警告的数量,NⅡ表示样本集中有效警告的数量, 表示新的样本集中有效警告的数量,CostⅠ表示误报警告被误分类产生的代价,CostⅡ表示有效警告被误分类产生的代价,CostⅠ,CostⅡ均为自然数,且 的取值为[1,50];所述的取值最好为[20,50]。当 的比值在[20,50]范围时,基于过采样的代价敏感神经网络的警告分类方法比BP神经网络的ECM值更低,即基于过采样的代价敏感神经网络的警告分类方法能得到更低的分类代价。
[0046] 数量的样本将通过随机复制的方式使误报警告Ⅰ及有效警告Ⅱ两类样本数目与其代价成比例,从而达到代价敏感的目的。即通过公式(1), 为过采样后有效警告集中的样本数量,而原先仅有NⅠ数量的有效警告,因此 数量的有效警告样本需要增加。与代价成比例,即 这样通过样本的改变会影响分类效果,从而将实现了代价敏感。
[0047] 2)令j=1;
[0048] 3)从新的样本集中选取十分之九分的样本构成训练样本集Qj,剩下十分之一的样本构成测试样本集Pj,且Qj≠Qj-1,Pj≠Pj-1;即每次所选的训练样本集都不相同;
[0049] 4)采用BP神经网络对训练样本集Qj进行训练得到分类器,然后使用该分类器对测试样本集Pj中的所有测试样本进行预测分类,即将测试样本集Pj中的每个测试样本分为有效警告或误报警告,然后将测试样本集Pj中所有经过预测分类的测试样本输出;
[0050] 5)判断新的样本集中所有样本是否都经过预测分类,如果是则结束,否则执行下一步;
[0051] 6)令j=j+1,并返回步骤3)。
[0052] 第二种:采用阈值操作的方式对样本集中的所有样本进行预测分类;阈值操作的方法将神经网络的判决边界向代价较低类别的边界偏移,从而降低代价较高一类样本被分错类的风险。该方法使用BPNN对原始样本进行训练,通过在预测阶段引入代价信息,实现分类的代价敏感效果;
[0053] a)令r=1;
[0054] b)从样本集中选取十分之九分的样本构成训练样本集Qr,剩下十分之一的样本构成测试样本集Pr,且Qr≠Qr-1,Pr≠Pr-1;即每次所选的训练样本集都不相同;
[0055] c)采用BP神经网络对训练样本集Qr进行训练得到分类器,然后将测试样本集Pr中的测试样本依次输入该分类器,计算得到用于预测有效警告或误报警告的真实类别概率值为Oi,i∈{Ⅰ,Ⅱ},则 且0≤Oi≤1,其中,OⅠ表示测试样本被预测为误报警告的真实类别概率值,OⅡ表示测试样本被预测为有效警告的真实类别概率值;
[0056] d)对分类器的预测输出做阈值操作得到新类别概率输出,如公式(2):
[0057]
[0058] 其中, 表示经过阈值操作后的预测有效警告或误报警告的新类别概率值,η为归一化项,使得 且 其中, 表示经过阈值操作后测试样本被预测为误报警告的新类别概率值, 表示经过阈值操作后测试样本被预测为有效警告的新类别概率值;
[0059] e)然后根据步骤d)得到的新类别概率对测试样本集Pr中的测试样本进行预测分类,如果 则认为测试样本集Pr中的测试样本为误报警告,否则为有效警报,然后将测试样本集中所有经过预测分类的样本输出;
[0060] f)判断样本集中所有样本是否都经过预测分类,如果是则结束,否则执行下一步;
[0061] g)令r=r+1,并返回步骤b)。
[0062] 所述步骤d)中,最好限定 的取值为[25,50]。当 的比值在[25,50]范围时,基于阈值操作的代价敏感神经网络的警告分类方法比BP神经网络进行分类的ECM值更低,即基于阈值操作的代价敏感神经网络的警告分类方法能得到更低的分类代价。
[0063] 第三种:采用欠采样的方式改变样本集中样本的分布,再对样本集中的所有样本进行预测分类;
[0064] I)根据公式(3)减少步骤S2b误报警告集中的误报警告的数量得到新的样本集;欠采样的方法通过减少代价较低类别的样本数量,改变训练数据的分布,将代价反应到样本数据中;
[0065]
[0066] 其中,NⅠ表示样本集中误报警告的数量,NⅡ表示样本集中有效警告的数量,NⅠ’表示新的样本集中误报警告的数量,CostⅠ表示误报警告被误分类产生的代价,CostⅡ表示有效警告被误分类产生的代价,CostⅠ,CostⅡ均为自然数,且 的取值为[1,50];所述的取值最好为[20,50]。当 的比值在[20,50]范围时,基于欠采样操作的代价敏感神经网络的警告分类方法比BP神经网络进行分类的ECM值更低,即基于欠采样操作的代价敏感神经网络的警告分类方法能得到更低的分类代价。
[0067] 由式(3)可计算代价较低误报警告Ⅰ样本的数量将为NⅠ’,且移除 个类Ⅰ的样本数量,使不同类别的样本数目与代价成比例。通过公式(3),NⅠ’为欠采样后误报警告的数量,而原先仅有NⅠ数量的误报警告,因此(NⅠ‘-NⅠ)数量的误报警告样本需要增加,与代价成比例,即 这样样本数量就与样本类型对应的代价成比例,从而将代价引入到分类中。
[0068] II)令k=1;
[0069] III)从新的样本集中选取十分之九分的样本构成训练样本集Qk,剩下十分之一的样本构成测试样本集Pk,且Qk≠Qk-1,Pk≠Pk-1;即每次所选的训练样本集都不相同;
[0070] IV)采用BP神经网络对训练样本集Qk进行训练得到分类器,然后使用该分类器对测试样本集Pk中的所有测试样本进行预测分类,即将测试样本集Pk中的每个测试样本分为有效警告或误报警告,然后将测试样本集Pk中所有经过预测分类的测试样本输出;
[0071] V)判断新的样本集中所有样本是否都经过预测分类,如果是则结束,否则执行下一步;
[0072] VI)令j=j+1,并返回步骤Ⅲ)。
[0073] 神经网络学习算法为现有技术,其目标是寻找一个函数,该函数能把一组输入映射到其相应的输出。例如一个简单的分类问题,输入是某种鸟类的图片,正确的输出将是该鸟类的名称。对于某些相对简单的输入输出模式可以轻易地使用单层神经网络学习,但是这些单层神经网络不能学习比较复杂的模式,例如非线性可分的情况。单层神经网络只能利用图片中像素的某种特征来学习一种输出以及一种标签函数;因为它被限制为仅具有一个层,所以没有办法从输入中学习到任何抽象特征;而多层神经网络通过刻画特征的内部表示,并且在每一层中学习不同的特征从而消除了单层网络的限制因素。多层神经网络采用的学习过程如下:第一层用来处理图片中的单个像素输入以学习鸟类轮廓线条走向;第二层就可以通过结合第一层的学习结果,进一步处理简单的鸟类形状问题;通过每向上提升一层就学习更多的抽象特征的特点,而达到对复杂模式进行分类的目的。
[0074] 如前文提及的对鸟类图片分类情况,每一层都是通过其下方层的学习结果来学习新的模式,也正是这种多层次的学习能力使多层神经网络能够刻画独立于外界输入的内部表示形式。反向传播算法的发展目标和动机正是找到这样一种训练多层神经网络的方法,该方法能够通过学习任意输入到输出的映射关系得到适当的内部表示机制,最终能够对复杂的映射模式进行分类。
[0075] BP(Back Propagation)神经网络是神经网络学习算法的一个变种,它能够学习和存储大量的输入输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、一个或多个隐含层(hide layer)和输出层(output layer),参见图4。
[0076] BP神经网络主要有两个阶段:激励传播和权重更新[。每次迭代中的传播环节包含两步:(前向传播阶段)将训练输入送入网络以获得激励响应;(反向传播阶段)将激励响应同训练输入对应的目标输出求差,从而获得隐含层和输出层的响应误差。对于每个节点上的权重,按照以下步骤进行更新:将输入激励和响应误差相乘,从而获得权重的梯度;将这个梯度乘上一个比例并取反后加到权重上。这个比例将会影响到训练过程的速度和效果,因此称为“训练因子”。梯度的方向指明了误差扩大的方向,因此在更新权重的时候需要对其取反,从而减小权重引起的误差。激励传播和权重更新两个阶段可以反复循环迭代,直到网络对输入的响应达到满意的预定的目标范围为止。
[0077] 代价敏感神经网络算法的基本思想是:误将一个存在缺陷的模块预测为一个没有缺陷的模块将造成软件系统不可预知的后果,同样在判断一个病人是否为重症时,将其判断为健康的代价将会远远高于将其判断为存在健康隐患的代价,前者可能因误诊而耽误了病人的最佳治疗时间。在本发明在对源代码进行警告分类中,就是基于这种代价敏感的思想,因为将误报警告归类为有效警告的代价会远远小于将有效警告归类为误报警告的代价。本发明的分类方法中,基础分类器采用的是经典的BP神经网络。
[0078] 本发明提供的方法与现有方法的比对:
[0079] 采用过采样进行预测分类以下记为CSBNN-OS,采用阈值操作进行预测分类记为CSBNN-TM,采用欠采样进行预测分类以下记为CSBNN-US,现有神经网络进行预测分类记为BPNN。
[0080] 实验数据
[0081] 在三个开源Apache项目下,共选择了38个连续缺陷修复版本作为警告获取对象,表1展示了这三个项目的详细信息。由表1可知,这三个实验项目具有中大型项目代表性,另外连续的缺陷修复版本及两年左右的时间周期,能防止因代码重构等非缺陷修复因素而造成警告的消失,从而保证自动化有效警告标注的正确性。
[0082] 表1
[0083]项目 版本号 时间 版本数量 代码行数(KLOC)
MyFaces 2.1.5~2.1.16 2012.2.6~2014.9.22 12 64.517~72.121
Camel 2.9.0~2.9.8 2011.12.31~2013.9.20 9 117.069~124.39
CXF 2.6.0~2.6.16 2012.4.17~2014.10.21 17 195.943~208.65
[0084] 本发明使用FindBugs作为静态分析工具,由于已有研究证实默认配置下FindBugs警告与软件缺陷具有更强的相关性,本发明在实验中使用了FindBugs的默认配置对上述三个项目下的38个版本进行分析。经过标注有效警告,得到各个项目下有效警告及误报警告的分布,如图2所示。从标注结果可以看出,有效警告在所有警告中的比例极低,在MyFaces、Camel和CXF三个项目下,有效警告的比重分别为3.7%,6.0%,8.3%。由于数据存在类极不平衡的原因,许多分类器在做有效警告分类时效率极低,而代价敏感神经网络能很好地处理类不平衡问题。
[0085] (一)对发明步骤S2限定的对静态警告进行标注的方法分析:
[0086] 1、缺陷数据抽取
[0087] 在Jira缺陷跟踪系统中,一条缺陷有表1.1所示的一系列标签,这些标签记录了这条缺陷的类型、状态、优先级、受影响版本等一系列的信息。本发明所定义的缺陷在Jira系统中的类型为“Type=Bug”,同时为了确保某条缺陷的真实存在,该缺陷必须被开发人员在某个版本上进行了修复,其状态应为“Resolution=Fixed”。本发明使用一定的检索策略,在Jira缺陷跟踪系统中获取实验数据中各个版本的缺陷数据。该检索策略使用紧接着的发布版本中被修复的缺陷数量,作为当前版本中的缺陷数量。例如,我们需要获取MyFaces 2.1.0版本中缺陷的数量,则查找MyFaces 2.1.1版本中被修复缺陷的数量,其检索模式为“project=MYFACES AND issuetype=Bug AND resolution=Fixed AND fixVersion=
2.1.1”。迭代三个实验项目中的所有40个版本,我们便得到了验证实验所需的软件缺陷数据。
[0088] 表1.1 Jira系统中一条缺陷记录的标签
[0089]Type 缺陷类型 Status 缺陷状态
Priority 优先级 Resolution 解决状态
fixVersion 修复版本 Project 所属项目
Affects Version 受影响版本 Description 缺陷描述
[0090] 通过上述的缺陷检索方法,本发明得到如下图5a、5b和5c所示的在实验项目中各个版本的缺陷分布图。在MyFaces项目中,平均每个版本会产生15.6个缺陷;平均每个版本会有36.3个缺陷出现在Camel项目中;而在CXF项目中,每个缺陷修复版本平均也会有31.3个缺陷。从每个版本平均出现的缺陷数量可以看出,MyFaces项目相对其他两个项目来说更加稳定些,当然其项目规模较小是很重要的一方面。另外,从图中可以看出缺陷分布规律为:随着越来越多的缺陷修复版本的发布,软件系统的缺陷数量越来越少,越加趋于稳定。
[0091] 2、相关性分析
[0092] 经过警告标注过程及抽取出各版本的缺陷数量,本发明还使用了JavaNCSS工具获取每个版本的代码行数。JavaNCSS是一款开源的代码度量工具,它可以在项目、包、类等层面上计算Java代码行数及圈复杂度等度量单元。在除以各版本的代码行数(KLOC)后,得到了各个版本中警告、有效警告及缺陷的密度。
[0093] 另外在三个实验项目上,本发明对警告密度、有效警告密度及缺陷密度这三个变量进行了分析。本发明统计了这些变量的最大值、最小值、平均值、中位数、标准差、偏度系数、及标准误。偏度系数及标准误可以有利于我们选择正确的相关系数计算方法,表1.2展示的统计结果如下:
[0094] 表1.2缺陷密度、警告密度、有效警告密度分析
[0095]
[0096] 1)在各缺陷修复版本统计中,MyFaces、Camel、CXF的缺陷密度范围分别为:0.249±0.272,0.302±0.211,和0.154±0.094。CXF项目中平均每千行代码有0.154个缺陷,而Camel项目几乎是其的两倍,MyFaces每千行代码中有0.249个缺陷。相对来说,CXF项目最为稳定,不仅缺陷密度最小,其浮动的范围也不大,仅为0.094个缺陷每千行代码。
[0097] 2)警告的密度相对来说很平滑,在MyFaces、Camel、CXF三个项目中警告的密度分别为5.46±0.554,4.4±0.045,5.204±0.048。也就是说每千行代码中,各项目平均会有4~5个FindBugs中等优先级警告。
[0098] 3)经过自动化警告标注后,各项目中有效警告的密度极低,仅有平均0.196±0.64,0.037±0.047,0.03±0.036个有效警告,分布在在MyFaces、Camel、CXF三个项目中。
[0099] 通常在相关性分析时,我们可以使用Spearman等级相关系数或皮尔逊相关系数方法,皮尔逊相关系数计算方法较为严格,要求在变量间呈线性关系,而Spearman系数仅要求变量间存在单调关系。另外,当偏度系数两倍于标准误时,使用Spearman系数效果更好,本发明正是通过计算偏度系数及标准误来确定使用哪类系数的。在有效警告密度这一变量的分析中,三个实验项目下其偏度系数都超出了两倍的标准误,因此本发明使用了Spearman相关系数来作为验证自动化警告标注可行性的指标。
[0100] 3、可行性评估指标
[0101] 本发明使用了SPSS工具计算Spearman等级相关系数对警告标注的正确性进行验证。统计学中经常用ρ或者rs表示该相关系数,它是衡量两个变量是否相互依赖的非参数指标。该系数使用单调方程评价两个统计变量的相关性,如果数据中没有重复值,并且两个变量完全单调相关时,则Spearman相关系数值为+1或-1,且其中+1表示两组变量完全正相关,-1表示其完全负相关[。
[0102] 我们可以使用有序的、区间的或比例数据变量来计算Spearman等级相关系数,然而这两个统计变量之间需要满足单调关系。单调关系表现为:一个变量递增时,另一个变量也递增;或两个变量同时递减。如图6所示.
[0103] 计算Spearman等级相关系数前,首先需要对数据按等级进行排序,如表1.3所示,原始数据Xi,Yi被转换成等级数据xi,yi。转换过程为将变量中最大的数标记为1,按递减序列依次将其他数向后排,如Yi变量经过等级排序后得到yi。需要注意的是,在Xi变量中存在连结数据,该变量中包含两个61,按等级排序时,不能确定哪个排3,哪个排4,此时将其排序都取均值3.5。
[0104] 表1.3数据等级计算案例
[0105]Xi Yi xi yi
56 66 5 5
75 70 2 2
61 65 3.5 4
80 77 1 1
61 62 3.5 3
[0106] 经过上述排序后,有两种方法计算Spearman等级相关系数,一种为有数据连结的情况,其计算公式为(1a)。
[0107]
[0108] 其中di表示两变量排序后的差值xi-yi,n为变量的个数。另一种计算公式为没有数据连结的情况,其计算公式为(1b)。
[0109]
[0110] 4、有效性结果分析
[0111] 表1.4展示了三个实验项目中,警告密度与缺陷密度,以及有效警告密度与缺陷密度的Spearman等级相关系数(ρ)和其显著性水平(p-value)。在警告密度与缺陷密度的相关系数中,项目Camel具有最高的系数值0.783且显著性水平p-value<0.05,说明在该项目中警告的密度对于缺陷来说有很强的指示作用。然而,在项目CXF中该系数值仅为0.316,该值并没有很强的指导意义。另外,项目MyFaces在该系数上的值为-0.132,这一值违反了开发人员的直觉。平均来说,警告密度与缺陷密度的相关系数为0.322,显著性水平为0.298,该值对于项目或其开发人员来说,并没有实际意义。
[0112] 下面分析有效警告密度与缺陷密度相关性,确认本发明使用的自动化警告标注方法的可行性。在该系数计算中,项目Camel的有效警告密度与缺陷密度的Spearman等级相关系数值最高,达到了0.814,且其显著性水平为0.014远远小于0.05,该值说明在Camel项目中有效警告与软件的发布后缺陷存在很强的关联,减少或升高有效警告的数量,都将引起较大的软件缺陷数量上的浮动。同样,该值在项目MyFaces上为0.782,同样说明有效警告与软件缺陷在MyFaces项目中有很强的联系。即使该值最低的项目CXF,也达到0.599,说明有效警告与缺陷存在强关联。综合三个实验项目,有效警告密度与缺陷密度Spearman等级相关系数值为0.732,显著性水平为0.009,该值可以有力地说明经过自动化标注的有效警告与软件缺陷有很强的内在关联,消除掉着部分警告将大大减少软件中缺陷的数量。同时也证明了本发明使用的自动化警告标注方法是正确可行的。
[0113] 表1.4实验项目下的Spearman等级相关系数结果ρ
[0114]  警告密度 有效警告密度
  ρ(p-value) ρ(p-value)
缺陷密度(MyFaces) -0.132(0.625) 0.782(0.000)
缺陷密度(Camel) 0.783(0.037) 0.814(0.014)
缺陷密度(CXF) 0.316(0.232) 0.599(0.014)
平均值 0.322(0.298) 0.732(0.009)
[0115] (二)本发明给出的静态警告分类方法与现有分类方法的有效性评价标准:
[0116] 在有效警告分类应用中,分类结果可由表2.1所示的混淆矩阵表示,其中TP为有效警告的正确分类数目,FN为有效警告的误分类数目,FP误报警告的误分类数目,TN为误报警告的正确分类数目。在警告分类过程中有两种类型的误分类,分别对应两种误分类代价:误分类Ⅰ将误报警告分类为有效警告造成的代价CostⅠ;以及误分类Ⅱ将有效警告分类为误报警告造成的代价CostⅡ,且CostⅡ远远大于CostⅠ。本发明使用了多种分类度量指标。误分类率MR式(2a),该指标用来衡量整体的分类错误率;以及有效警告的召回率Recall式(2b),衡量被正确分类有效警告占所有有效警告的比例。
[0117] 表2.1警告分类混淆矩阵
[0118]
[0119]
[0120]
[0121] 同时由于本发明处理的是代价敏感的分类问题,将误分类代价考虑在内的度量指标非常必要。本发明使用式(2c)所示的误分类期望成本ECM来评估上述三种代价敏感分类方法以及传统反向传播神经网络在警告分类上的效率。在式(2c)中,CostⅠ,CostⅡ分别表示两种误分类的代价;ErrⅠ为将误报警告分类为有效警告的比例FP/(TN+FP);ErrⅡ为将有效警告分类为误报警告的比例FN/(TP+FN);另外在ECM指标中,PⅠ为误报警告在测试集中所占的比例,PⅡ有效警告在测试集中所占的比例。
[0122] ECM=CostⅠErrⅠPⅠ+CostⅡErrⅡPⅡ  (2c);
[0123] 结果分析
[0124] 本发明设计了两组对比实验,且实验过程中均采用十折交叉验证取均值的方式来获取更精确的分类结果。为了方便实验的进行,同时不影响实验效果的情况下,本发明将CostⅠ取为固定值1, 取值为固定的范围[1,50]来进行实验。该取值能充分反应有效警告及误报警告被误分类时,产生的不等代价的问题。
[0125] 在第一组实验中,本发明设定CostⅠ=1,CostⅡ=40,将传统反向传播神经网络BPNN,及三种代价敏感神经网络CSBNN-OS、CSBNN-TM、CSBNN-US应用到本发明的三个开源项目数据中,并比较他们的误分类率MR、有效警告召回率Recall、及误分类期望成本ECM。在第二组实验中,设定CostⅠ=1,CostⅡ=1:50,应用上述评价标准,分别比较CSBNN-OS、CSBNN-TM、CSBNN-US算法在有效警告分类问题上的效率,同时还比较了BPNN方法与三种代价敏感方法在误分类期望成本ECM指标上的差异。
[0126] 表2.2为第一组实验CostⅠ=1,CostⅡ=40下的实验结果。在本发明类极不平衡的数据条件下,较BPNN方法而言,三种代价敏感神经网络方法都能大幅提高有效警告的查全率Recall;而其分类错误率MR也相应的大幅增加;在误分类期望成本ECM方面,代价敏感分类方法在Camel、CXF两个项目上都优于BPNN方法,而在MyFaces项目上确相反;另外从实验结果来看,CSBNN-OS、CSBNN-TM、CSBNN-US方法在分类效果方面相当。
[0127] 表2.2第一组实验对比结果
[0128]
[0129] 图3a为MyFaces项目下CostⅠ=1,CostⅡ=50对三种代价敏感方法的比较,实验结果进一步验证了三种代价敏感方法在CostⅡ代价不断提高的条件下,最后达到了相当的分类效果。CSBNN-OS、CSBNN-US方法都能快速的将代价信息体现到分类效果中,从图来看MyFaces项目在代价CostⅡ=4左右时,便将有效警告的查全率Recall提高到稳定的水平0.575;而基于阈值操作的方法CSBNN-TM则要在CostⅡ=25左右时,才能将代价信息引入到源代码警告分类中。在分类错误率MR评价指标上,三种代价敏感方法都大幅将其提升,这是误分类代价更低的误报警告Ⅰ被大量归类为有效警告造成的。三种代价敏感方法在ECM指标上都高于BPNN方法,但从其走势上来看,当CostⅡ的值继续增长时,代价敏感方法将得到更低的ECM值。
[0130] 图3b为在Camel项目下CostⅠ=1,CostⅡ=50对三种代价敏感方法的比较,其结果与项目MyFaces类似,三种代价敏感方法在CostⅡ代价不断提高的条件下,最后达到了相当的分类效果。Camel项目下,CSBNN-OS、CSBNN-US方法同样在代价CostⅡ=4左右时,便将有效警告的查全率Recall以及误分类率MR提高到稳定的水平,其值分别为0.7057和0.9179。同样的,CSBNN-TM方法在CostⅡ=15左右时,才将代价信息体现到分类效果中。三种代价敏感方法在ECM指标上都在CostⅡ=25左右时,优于BPNN方法。
[0131] 图3c为在项目CXF下CostⅠ=1,CostⅡ=50对三种代价敏感方法的比较,与之前讨论的两个实验项目结果相似,三种代价敏感方法在CostⅡ代价不断提高时,最后达到了相当的分类效果。在代价CostⅡ=4左右,CSBNN-OS、CSBNN-US方法的有效警告分类查全率Recall以误分类率MR就达到了稳定的水平,且其值分别稳定在0.88和0.9091。CSBNN-TM方法则在CostⅡ=8左右时,才将代价信息体现到分类效果中;并且在CostⅡ=15左右时,有效警告分类查全率Recall以误分类率MR达到了稳定的水平。在ECM指标上,当CostⅡ=13左右时,三种代价敏感神经网络方法相对于普通BPNN方法来说得到了更优秀的结果。
[0132] 实验结果进一步验证了三种代价敏感方法在CostⅡ代价不断提高的条件下,最后达到了相当的分类效果。在本发明的实验数据基础上,CSBNN-OS、CSBNN-TM、CSBNN-US在Recall评估标准上最后都达到了一致的水平,且平均提高了44.07%。由于当CostⅡ增大时三种代价敏感方法都将把大量误报警告分类为有效警告,同时造成误分类率的显著提升。与CSBNN-OS、CSBNN-US方法能快速达到较高且平稳的误分类率MR与查全率Recall不同,CSBNN-TM方法增长速度更缓慢,这是因为CSBNN-OS、CSBNN-US方法按相应的代价比例重新分布训练样本,能更快的将代价体现到分类实践中。如当CostⅡ/CostⅠ为1时,CSBNN-OS、CSBNN-US方法将误报警告和有效警告训练样本数量比例变为1,势必影响分类效果而提高查全率Recall,然而CSBNN-TM的输出仍为普通BPNN的输出对查全率Recall没有影响。相应的CSBNN-TM方法在CostⅡ为20之前,误分类期望成本ECM较之另外两种代价敏感分类方法更低,同时当CostⅡ/CostⅠ高于一定值时,BPNN方法的误分类期望成本ECM将高于代价敏感神经网络分类方法。
[0133] 最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。