一种基于Stacking集成学习的软件缺陷预测方法技术

技术编号:34046027 阅读:13 留言:0更新日期:2022-07-06 14:38
本发明专利技术提供了一种基于Stacking集成学习的软件缺陷预测方法,本发明专利技术不是人工根据先验知识或者搜索算法进行组合,而是通过Stacking集成学习算法将RF、XGBoost和SVM三个基模型作为初级模型,将缺陷数据集样本特征输入到初级模型中训练且得到三个基模型对待测样本预测为缺陷样本的概率值,然后将三个概率值进行特征组合,作为输入次级模型LR的二次特征,最后将二次特征作为LR的输入,对LR模型进行训练,得到基于Stacking集成学习的软件缺陷预测复合模型(XGBoost

A software defect prediction method based on stacking ensemble learning

【技术实现步骤摘要】
一种基于Stacking集成学习的软件缺陷预测方法


[0001]本专利技术涉及一种基于Stacking集成学习的软件缺陷预测方法,属于软件缺陷预测


技术介绍

[0002]计算机行业近年来的迅猛发展,给全世界几乎所有产业带来了新的活力,现代人的生活已经完全被计算机科学所改变。随着计算机科学不断融入人们的生活,人们越来越离不开软件程序。软件不仅仅作为一种不可或缺的工具,给人们的衣食住行提供便利,还改变了人类的工作方式和思维方式,不断推动文明的进步。
[0003]在这样的背景下,软件用户数量不断暴涨,带来了更多的软件需求也带来了一系列问题,如软件系统的功能模块和内部结构愈加复杂、开发人员越来越多、开发难度增加、出现软件缺陷等。其中,软件缺陷是最为严重的问题,轻则影响软件质量导致软件无法实现原有的功能,重则造成经济损失和人身安全。为了避免由软件缺陷导致的经济损失、人身安全等重大事故,对软件进行缺陷预测是很有必要的。在早期就预测出存在缺陷的软件模块,能够使软件从业人员对软件模块进行修改,避免存在缺陷的软件应用到重要的生活领域,提高了软件正确性、可靠性的同时,也保障了软件的安全从而避免了事故的发生。
[0004]软件缺陷预测技术诞生于上世纪70年代,该技术通过软件或者模块产生的以某些度量标准对应的历史缺陷数据进行分析。现如今,软件缺陷预测大多使用统计学领域和机器学习领域的方法来探究软件缺陷和软件度量属性的关系,以预测软件模块中软件是否存在缺陷或对软件缺陷数量进行预测。最近几年的时间,人工智能的课题逐步变得活跃,并且延伸至如图像、语音等领域,推进这些领域大步发展。而人工智能同样可以应用到软件缺陷预测领域。相关从业者不再是由一些静态度量和软件度量来判断软件模块是否存在缺陷,而是使用机器学习的算法和统计学的理论,将由软件度量方法得到的软件模块数据制作成软件缺陷数据集,最终建立一些模型进行软件缺陷的预测。目前这一领域也存在一些需要解决的问题:如解决缺陷数据集类不平衡给预测带来的影响、缺陷数据集样本存在异常值等问题。

技术实现思路

[0005]本专利技术的技术解决问题是:克服现有技术的不足,提出一种基于Stacking集成学习的软件缺陷预测方法,该方法是将软件缺陷数据集中的软件度量作为输入的特征,经过合适的机器学习算法对软件模块进行软件缺陷数量和概率的预测的一种方法。
[0006]本专利技术的技术解决方案是:
[0007]一种基于Stacking集成学习的软件缺陷预测方法,该方法的步骤包括:
[0008]第一步,使用代码行数度量法提取测试软件样本的一类特征,使用Halstead科学度量法提取测试软件样本的二类特征,使用McCabe度量法提取测试软件样本的三类特征,使用CK度量法提取测试软件样本的四类特征;
[0009]第二步,将第一步得到的一类特征、二类特征、三类特征和四类特征进行汇总,得到测试软件的数据集D;
[0010]第三步,对第二步得到的数据集D进行数据预处理;
[0011]第四步,用RF模型、XGBoost模型和SVM模型构建初级模型,将数据集D分为训练集D
train
和测试集D
test
,训练集D
train
样本数量为N,测试集D
test
样本数量为M;
[0012]第五步,构建次级模型LR的新训练集C
train
和新测试集C
test
,将P1,P2,P3合并成为新训练集的样本的C
train
的二次特征集合X
train
,将Y
true_1
作为新训练集C
train
的样本的目标值集合,将T1,T2,T3组合成集合X
test
作为输入到次级模型LR的新测试集C
test
的样本的二次特征集合,将Y
true_2
作为新测试集C
test
的样本的目标值集合,将新训练集{X
train
,Y
true_1
}训练次级模型LR,将新测试集{X
test
,Y
true_2
}的特征值集合输入训练好的次级模型LR得到预测值Y
predict
,初级模型和训练后的次级模型LR形成复合模型;
[0013]第六步,将待测试软件样本代入到训练好的复合模型中进行预测,得到待测试软件样本的缺陷预测结果;
[0014]第七步,进行复合模型的预测性能的评估;将Y
predict
和Y
true_2
进行对比计算,得到复合模型的预测的各评价指标,完成基于Stacking集成学习的软件缺陷预测。
[0015]所述的第一步中,一类特征为与代码行数相关的度量元,包括测试软件样本的代码总行数、注释行数、实际运行行数、方法行数。
[0016]所述的第一步中,二类特征为测试软件样本的程序长度、程序容量、语言等级、编写效率、编写耗时度量元。
[0017]所述的第一步中,三类特征为测试软件样本的循环结构数量、程序选择结构的数量度量元。
[0018]所述的第一步中,四类特征为测试软件样本的类中方法数、类继承深度、类的直接子类个数、类的耦合类个数、类中方法调用总数、类内方法引用实例数度量元。
[0019]所述的第三步中,对第二步得到的数据集D进行数据预处理的具体步骤包括:(1)去除含有异常值或缺失值的样本;(2)对样本的特征进行标准化处理;(3)统一规范化样本目标值,将有缺陷类样本的目标值设置为1,无缺陷类样本的目标值设置为0。
[0020]所述的第四步中,RF模型的训练方法为:首先使用数据集D对RF模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{D
train_1
,D
train_2
,...,D
train_K
},重复K次以下操作:
[0021]将第i份子数据集D
train_i
作为验证集D
v_i i∈(1,2,...,K),其余K

1份子数据集作为新训练集D
t_i
输入到RF模型中进行训练,将验证集输入到经过新训练集D
t_i
训练好的RF模型中得到预测结果P
1i
,将测试集输入到经过新训练集D
t_i
训练好的RF模型中得到预测结果T
1i
,直到i>K结束此操作;
[0022]复完上述的K次操作之后,得到P
11
,P
12
,...,P
1k
共K个行1列的集合,将它们整合为一个集合P1,此时的P1共有个样本,其值为RF模型训练集D
train
中样本是正例的概率,并且P1与训练集D...

【技术保护点】

【技术特征摘要】
1.一种基于Stacking集成学习的软件缺陷预测方法,其特征在于该方法的步骤包括:第一步,使用代码行数度量法提取测试软件样本的一类特征,使用Halstead科学度量法提取测试软件样本的二类特征,使用McCabe度量法提取测试软件样本的三类特征,使用CK度量法提取测试软件样本的四类特征;第二步,将第一步得到的一类特征、二类特征、三类特征和四类特征进行汇总,得到测试软件的数据集D;第三步,对第二步得到的数据集D进行数据预处理;第四步,用RF模型、XGBoost模型和SVM模型构建初级模型,将数据集D分为训练集D
train
和测试集D
test
,训练集D
train
样本数量为N,测试集D
test
样本数量为M;第五步,构建次级模型LR的新训练集C
train
和新测试集C
test
,将P1,P2,P3合并成为新训练集的样本的C
train
的二次特征集合X
train
,将Y
true_1
作为新训练集C
train
的样本的目标值集合,将T1,T2,T3组合成集合X
test
作为输入到次级模型LR的新测试集C
test
的样本的二次特征集合,将Y
true_2
作为新测试集C
test
的样本的目标值集合,将新训练集{X
train
,Y
true_1
}训练次级模型LR,将新测试集{X
test
,Y
true_2
}的特征值集合输入训练好的次级模型LR得到预测值Y
predict
,初级模型和训练后的次级模型LR形成复合模型;第六步,将待测试软件样本代入到训练好的复合模型中进行预测,得到待测试软件样本的缺陷预测结果;第七步,进行复合模型的预测性能的评估;将Y
predict
和Y
true_2
进行对比计算,得到复合模型的预测的各评价指标,完成基于Stacking集成学习的软件缺陷预测。2.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第一步中,一类特征为与代码行数相关的度量元,包括测试软件样本的代码总行数、注释行数、实际运行行数、方法行数。3.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第一步中,二类特征为测试软件样本的程序长度、程序容量、语言等级、编写效率、编写耗时度量元。4.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第一步中,三类特征为测试软件样本的循环结构数量、程序选择结构的数量度量元。5.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第一步中,四类特征为测试软件样本的类中方法数、类继承深度、类的直接子类个数、类的耦合类个数、类中方法调用总数、类内方法引用实例数度量元。6.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第三步中,对第二步得到的数据集D进行数据预处理的具体步骤包括:(1)去除含有异常值或缺失值的样本;(2)对样本的特征进行标准化处理;(3)统一规范化样本目标
值,将有缺陷类样本的目标值设置为1,无缺陷类样本的目标值设置为0。7.根据权利要求1所述的一种基于Stacking集成学习的软件缺陷预测方法,其特征在于:所述的第四步中,RF模型的训练方法为:首先使用数据集D对RF模型进行训练,采用K折交叉验证法训练,方法为:将训练集均分为K份互斥的子数据集{D
train_1
,D
train_2
,...,D
train_K
},重复K次以下操作:将第i份子数据集D
train_i
作为验证集D
v_i
i∈(1,2,...,K),其余K

1份子数据集作为新训练集D
t_i
输入到RF模型中进行训练,将验证集输入到经过新训练集D
t_i
训练好的RF模型中得到预测结果P
1i
,将测试集输入到经过新训练集D
t_i
训练好的RF模型中得到预测结果T
1i
,直到i>K结束此操作;复完上述的K次操作之后,得到P
11
,P
12
,...,P
1k
共K个...

【专利技术属性】
技术研发人员:单纯张浩伦廖书妍周彦哲彭哲恒
申请(专利权)人:北京理工大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1