一种基于实例选择的跨项目缺陷预测方法

文档序号:31126622发布日期:2022-08-13 03:41阅读:176来源:国知局
技术简介:
本发明针对跨项目软件缺陷预测中模型泛化能力差的问题,提出基于组合分布特征向量的实例选择方法。通过构建包含极值、均值等统计特征的组合分布特征向量,计算目标实例与源项目实例的欧氏距离,筛选最相似实例构建训练集,利用Logistic分类算法建立预测模型,显著提升了跨项目缺陷预测的准确率和效率。
关键词:跨项目缺陷预测,组合分布特征向量

1.本发明属于软件缺陷预测技术领域,具体涉及一种基于实例选择的跨项目缺陷预测方法。


背景技术:

2.从项目角度,缺陷预测技术分为项目内软件缺陷预测和跨项目软件缺陷预测。项目内软件缺陷预测的训练数据和测试数据均来自同一个项目,训练数据和测试数据之间分布差异较小;跨项目软件缺陷预测的训练数据和测试数据均来自不同项目,训练数据和测试数据之间不仅分布差异较大,而且可使用数据量相差也较大,由于以上特点使得跨项目软件缺陷研究成为软件缺陷研究领域的热点之一。
3.针对给定的目标项目,在构建缺陷预测模型的时候可能会遇到没有充足的历史训练数据,研究人员为了有效解决这个问题往往选择从与本项目不同项目中选择历史数据构建训练集。
4.在训练集方面,存在源项目中部分实例与目标项目中实例相关性不太高等问题,这些实例对分类模型的性能造成一定程度的影响,为了进一步提高跨项目缺陷预测的结果,需提供一种基于实例选择的跨项目缺陷预测方法。


技术实现要素:

5.本发明要解决的技术问题是提供一种基于实例选择的跨项目缺陷预测方法,优化训练集的实例选择有助于提高缺陷预测的效率,实现更好的跨项目缺陷预测效果。
6.为解决上述技术问题,本发明的实施例提供一种基于实例选择的跨项目缺陷预测方法,包括如下步骤:
7.s1、构建分类实例集cid;
8.s2、将分类实例集中的所有度量值中心化emc;
9.s3、组合分布特征向量cdfv;
10.s4、实例间距离计算bidcm;
11.s5、构建最相似源实例索引集;
12.s6、构建训练集nd;
13.s7、构建跨项目缺陷预测分类方法;
14.s8、构建基于实例选择的跨项目缺陷预测方法iscpdp。
15.其中,步骤s1包括如下步骤:
16.s1.1、基于开源网站获取软件项目集合;
17.s1.2、以项目类作为实例构建项目实例集合;
18.s1.3、基于开源数据历史记录、项目源代码语法结构、源代码抽象语法树构建传统度量元集{wmc,dit,noc,cbo,rfc,lcom,lcom3,npm,dam,moa,mfa,cam,ic,cbm,amc,ca,ce,max_cc,avg_cc,loc},其中,wmc代表每个类的加权方法,dit代表继承树的深度,noc代表子
类的数目,cbo代表对象类之间的耦合,rfc代表一个类的响应,lcom和lcom3代表在方法上缺少的凝聚力,npm代表公共类的个数,dam代表数据访问指标,moa代表聚合的量度,mfa代表功能抽象的量度,cam代表类方法之间的聚合,ic代表继承耦合,cbm代表方法之间的耦合,amc代表平均方法复杂度,ca代表传入耦合,ce代表传出耦合,max_cc代表mccabe圈复杂性的最大值,avg_cc代表mccabe圈复杂性的平均值,loc代表代码的行数;
19.s1.4、将源项目中的所有实例按步骤s1.3处理得到源项目传统度量元向量集spmvs=[tradition_metric1,tradition_metric2,

,tradition_metrici],其中,i=1,2,3,

,n;
[0020]
s1.5、将目标项目中的所有实例按步骤s1.3处理得到目标项目传统度量元向量集tpmvs=[tradition_metric1,tradition_metric2,

,tradition_metricj],其中,j=1,2,3,

,m;
[0021]
s1.6、基于开源数据历史记录构建源项目实例标签source_label=[slabel1,slabel2,

,slabeli],其中,i=1,2,3,

,n;该标签与步骤s1.4源项目传统度量元向量集spmvs中实例对应,记录其中有bug的实例的索引,使用该索引构建源项目正向实例索引集sppis,记录其中无bug的实例的索引,使用该索引构建源项目负向实例索引集spnis;
[0022]
s1.7、基于开源数据历史记录构建目标项目实例标签target_label=[tlabel1,tlabel2,

,tlabelj],其中,j=1,2,3,

,m;该标签与步骤s1.5目标项目传统度量元向量集tpmvs中实例对应;记录其中有bug的实例的索引,使用该索引构建目标项目正向实例索引集tppis,记录其中无bug的实例的索引,使用该索引构建目标项目负向实例索引集tpnis;
[0023]
s1.8、将步骤s1.4的源项目传统度量元向量集spmvs按照步骤s1.6中源项目正向实例索引集sppis构建源项目正向实例向量集sppivs,按照步骤s1.6中源项目负向实例索引集spnis构建源项目负向实例向量集spnivs;
[0024]
s1.9、将步骤s1.5的目标项目传统度量元向量集tpmvs按照步骤s1.7中目标项目正向实例索引集tppis构建目标项目正向实例向量集tppivs,按照步骤s1.7中目标项目负向实例索引集tpnis构建目标项目负向实例向量集tpnivs;
[0025]
s1.10、构建分类实例集cid={sppivs,spnivs,tppivs,tpnivs}。
[0026]
其中,步骤s2包括如下步骤:
[0027]
s2.1、选择一个度量元,计算所有实例下该度量元集合的平均值metric_avg;
[0028]
s2.2、将所有实例对应该度量元的值减去平均值metric_avg,得到中心化值cmetric;
[0029]
s2.3、将步骤s1.3的传统度量元集中每一个度量元按照步骤s2.1、s2.2处理;
[0030]
s2.4、将步骤s1.10的分类实例集cid中sppivs按照步骤s2.3处理得到源项目正向实例中心化向量集sppivs_emc;
[0031]
s2.5、将步骤s1.10的分类实例集cid中spnivs按照步骤s2.3处理得到源项目负向实例中心化向量集spnivs_emc;
[0032]
s2.6、将步骤s1.10的分类实例集cid中tppivs按照步骤s2.3处理得到目标项目正向实例中心化向量集tppivs_emc;
[0033]
s2.7、将步骤s1.10的分类实例集cid中tpnivs按照步骤s2.3处理得到目标项目负
向实例中心化向量集tpnivs_emc。
[0034]
其中,步骤s3包括如下步骤:
[0035]
s3.1、选择一个实例,该实例由二十种度量元组成,计算该二十种度量值的最小值m_min,最大值m_max,平均值m_mean,标准差m_std,中位数m_median;
[0036]
s3.2、使用步骤s3.1构建实例的组合分布特征向量cdfv=[m_min,m_max,m_mean,m_std,m_median];
[0037]
s3.3、将步骤s2.4中的源项目正向实例中心化向量集sppivs_emc按照步骤s3.2处理得到源项目正向实例组合分布特征向量集sppivs_cdfv;
[0038]
s3.4、将步骤s2.5中的源项目负向实例中心化向量集spnivs_emc按照步骤s3.2处理得到源项目负向实例组合分布特征向量集spnivs_cdfv;
[0039]
s3.5、将步骤s2.6中的目标项目正向实例中心化向量集tppivs_emc按照步骤s3.2处理得到目标项目正向实例组合分布特征向量集tppivs_cdfv;
[0040]
s3.6、将步骤s2.7中的目标项目负向实例中心化向量集tpnivs_emc按照步骤s3.2处理得到目标项目负向实例组合分布特征向量集tpnivs_cdfv。
[0041]
其中,步骤s4包括如下步骤:
[0042]
s4.1、由步骤s3.3的源项目正向实例组合分布特征向量集sppivs_cdfv和步骤s3.4的源项目负向实例组合分布特征向量集spnivs_cdfv组建源项目组合分布特征向量集spemc=[spnivs_cdfv,sppivs_cdfv];
[0043]
s4.2、由步骤s3.5的目标项目正向实例组合分布特征向量集tppivs_cdfv和步骤s3.6的目标项目负向实例组合分布特征向量集tpnivs_cdfv组建目标项目组合分布特征向量集tpemc=[tpnivs_cdfv,tppivs_cdfv];
[0044]
s4.3、选择目标项目组合分布特征向量集tpemc中一个实例组合分布特征向量,按顺序依次计算与源项目组合分布特征向量集spemc中每一个实例组合分布特征向量的欧氏距离,得到实例间距离集合bidcm=[d1,

,dj],其中j=1,2,3,

,m。
[0045]
其中,步骤s5包括如下步骤:
[0046]
s5.1、选择步骤s4.2中目标项目组合分布特征向量集的一个目标实例组合分布特征向量,按步骤s4.3得到该实例间距离集合bidcm=[d1,

,dj];
[0047]
s5.2、将步骤s5.1中实例间距离集合bidcm从小到大排序,并记录排序后的索引sort_bidcm;
[0048]
s5.3、选择步骤s5.2中索引sort_bidcm前k个索引,构建前k个最相似实例索引集msii_k。
[0049]
其中,步骤s6包括如下步骤:
[0050]
s6.1、遍历步骤s4.2中目标项目组合分布特征向量集tpemc的实例组合分布特征向量,按照步骤s5执行得到对应该目标实例的最相似源实例索引集msii_ki;
[0051]
s6.2、将步骤s6.1得到的每一个目标实例对应的最相似源实例集msii_ki组合得到最相似重复源实例索引集msrsis;
[0052]
s6.3、将步骤s6.2中最相似重复源实例索引集msrsis去除重复的实例索引得到训练集实例索引mssis;
[0053]
s6.4、将步骤s4.1中源项目组合分布特征向量集spemc按照步骤s6.3的训练集实
例索引mssis取出,得到训练集实例数据nd_inst;
[0054]
s6.5、由步骤s1.6的源项目负向实例索引集spnis和源项目正向实例索引集sppis组建源项目标签索引集splis=[spnis,sppis];
[0055]
s6.6、将步骤s1.6中的源项目实例标签source_label按照步骤s6.5中源项目标签索引集splis重新排序得到训练集实例标签集nd_label;
[0056]
s6.7、构建训练集nd={nd_inst,nd_label}。
[0057]
其中,步骤s7包括如下步骤:
[0058]
s7.1、由步骤s4.2获取目标项目组合分布特征向量集tpemc;
[0059]
s7.2、由步骤s1.7的目标项目负向实例索引集tpnis和源项目正向实例索引集tppis组建目标项目标签索引集tplis=[tpnis,tppis];
[0060]
s7.3、将步骤s1.7中的目标项目实例标签target_label按照步骤s7.2中目标项目标签索引集tplis重新排列得到测试集实例标签集test_label;
[0061]
s7.4、使用logistic分类算法对步骤s6.7的训练集nd中的训练集实例数据nd_inst和训练集实例标签集nd_label进行模型训练;
[0062]
s7.5、将步骤s7.4训练得到的模型对步骤s7.1的目标项目组合分布特征向量集tpemc进行缺陷预测,得到预测标签集pred_label,通过公式计算得到logistic-score。
[0063]
其中,步骤s8包括如下步骤:
[0064]
s8.1、通过步骤s1得到分类实例集cid={sppivs,spnivs,tppivs,tpnivs};
[0065]
s8.2、通过步骤s2得到源项目正向实例中心化向量集sppivs_emc、源项目负向实例中心化向量集spnivs_emc、目标项目正向实例中心化向量集tppivs_emc和目标项目负向实例中心化向量集tpnivs_emc;
[0066]
s8.3、通过步骤s3得到源项目正向实例组合分布特征向量集sppivs_cdfv、源项目负向实例组合分布特征向量集spnivs_cdfv、目标项目正向实例组合分布特征向量集tppivs_cdfv和目标项目负向实例组合分布特征向量集tpnivs_cdfv;
[0067]
s8.4、通过步骤s4计算实例间距离,得到目标实例对应的实例间距离集合bidcm;
[0068]
s8.5、通过步骤s5构建前k个最相似实例索引集msii_k;
[0069]
s8.6、通过步骤s6获得训练集nd={nd_inst,nd_label};
[0070]
s8.7、通过步骤s7构建跨项目缺陷预测分类方法;
[0071]
s8.8、得到基于实例选择的跨项目缺陷预测方法iscpdp。
[0072]
本发明的上述技术方案的有益效果如下:
[0073]
本发明提供一种基于实例选择的跨项目缺陷预测方法,通过使用组合分布特征向量实现对实例信息的有效表示,并衡量每一个目标实例与源项目中所有实例的相似度,将选出的所有源项目实例构建缺陷预测分类模型,有效避免源项目中无关实例对分类模型性能的影响,进一步优化测试资源使用,充分利用源项目实例中有效信息。
附图说明
[0074]
图1为本发明的流程图;
[0075]
图2为本发明中构建分类实例集cid流程图;
[0076]
图3为本发明中构建组合分布特征向量流程图;
[0077]
图4为本发明中构建跨项目缺陷预测分类方法的流程图。
具体实施方式
[0078]
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
[0079]
如图1所示,本发明提供一种基于实例选择的跨项目缺陷预测方法,包括如下步骤:
[0080]
s1、构建分类实例集cid;
[0081]
s2、将分类实例集中的所有度量值中心化emc;
[0082]
s3、组合分布特征向量cdfv;
[0083]
s4、实例间距离计算bidcm;
[0084]
s5、构建最相似源实例索引集;
[0085]
s6、构建训练集nd;
[0086]
s7、构建跨项目缺陷预测分类方法;
[0087]
s8、构建基于实例选择的跨项目缺陷预测方法iscpdp。
[0088]
步骤s1、构建分类实例集cid的具体步骤如下:
[0089]
基于开源网站获取软件项目集合;以项目类作为实例构建项目实例集合;基于开源数据历史记录、项目源代码语法结构、源代码抽象语法树构建特征集{wmc,dit,noc,cbo,rfc,lcom,lcom3,npm,dam,moa,mfa,cam,ic,cbm,amc,ca,ce,max_cc,avg_cc,loc},其中wmc代表每个类的加权方法,dit代表继承树的深度,noc代表子类的数目,cbo代表对象类之间的耦合,rfc代表一个类的响应,lcom和lcom3代表在方法上缺少的凝聚力,npm代表公共类的个数,dam代表数据访问指标,moa代表聚合的量度,mfa代表功能抽象的量度,cam代表类方法之间的聚合,ic代表继承耦合,cbm代表方法之间的耦合,amc代表平均方法复杂度,ca代表传入耦合,ce代表传出耦合,max_cc代表mccabe圈复杂性的最大值,avg_cc代表mccabe圈复杂性的平均值,loc代表代码的行数。
[0090]
将源项目中的所有实例按上述特征集处理得到源项目传统度量元向量集spmvs=[tradition_metric1,tradition_metric2,

,tradition_metrici]。其中i=1,2,3,

,n。将目标项目中的所有实例按上述特征集处理得到目标项目传统度量元向量集tpmvs=[tradition_metric1,tradition_metric2,

,tradition_metricj]。其中j=1,2,3,

,m。
[0091]
基于开源数据历史记录构建源项目实例标签source_label=[slabel1,slabel2,

,slabeli]。其中i=1,2,3,

,n;该标签源项目传统度量元向量集spmvs中实例对应,记录其中有bug的实例的索引,使用该索引构建源项目正向实例索引集sppis,记录其中无bug的实例的索引,使用该索引构建源项目负向实例索引集spnis。基于开源数据历史记录构建目标项目实例标签target_label=[tlabel1,tlabel2,

,tlabelj]。其中j=1,2,3,

,m;该标签与目标项目传统度量元向量集tpmvs中实例对应;记录其中有bug的实例的索引,使用该索引构建目标项目正向实例索引集tppis,记录其中无bug的实例的索引,使用该索引构建目标项目负向实例索引集tpnis。
[0092]
将源项目传统度量元向量集spmvs按照中源项目正向实例索引集sppis构建源项目正向实例向量集sppivs,按照源项目负向实例索引集spnis构建源项目负向实例向量集
spnivs。将目标项目传统度量元向量集tpmvs按照目标项目正向实例索引集tppis构建目标项目正向实例向量集tppivs,按照目标项目负向实例索引集tpnis构建目标项目负向实例向量集tpnivs。
[0093]
构建分类实例集cid={sppivs,spnivs,tppivs,tpnivs}。
[0094]
构建分类实例集cid的流程图如图2所示。
[0095]
步骤s2、将分类实例集中的所有度量值中心化emc的具体步骤如下:
[0096]
选择一个度量元,计算所有实例下该度量元集合的平均值metric_avg;将所有实例对应该度量元的值减去平均值metric_avg,得到中心化值cmetric。
[0097]
将分类实例集cid中sppivs按照上述过程处理得到源项目正向实例中心化向量集sppivs_emc;将分类实例集cid中spnivs处理得到源项目负向实例中心化向量集spnivs_emc;将分类实例集cid中tppivs处理得到目标项目正向实例中心化向量集tppivs_emc;将分类实例集cid中tpnivs处理得到目标项目负向实例中心化向量集tpnivs_emc。
[0098]
步骤s3、组合分布特征向量cdfv的具体步骤如下:
[0099]
选择一个实例,该实例由二十种度量元组成,计算该二十种度量值的最小值m_min,最大值m_max,平均值m_mean,标准差m_std,中位数m_median;使用上述过程构建实例的组合分布特征向量cdfv=[m_min,m_max,m_mean,m_std,m_median]。
[0100]
将源项目正向实例中心化向量集sppivs_emc按照上述过程处理得到源项目正向实例组合分布特征向量集sppivs_cdfv;将源项目负向实例中心化向量集spnivs_emc按照上述过程处理得到源项目负向实例组合分布特征向量集spnivs_cdfv;将目标项目正向实例中心化向量集tppivs_emc按照上述过程处理得到目标项目正向实例组合分布特征向量集tppivs_cdfv;将目标项目负向实例中心化向量集tpnivs_emc按照上述过程处理得到目标项目负向实例组合分布特征向量集tpnivs_cdfv。
[0101]
构建组合分布特征向量的流程图如图3所示。
[0102]
步骤s4、实例间距离计算bidcm的具体步骤如下:
[0103]
由步骤s3.3的源项目正向实例组合分布特征向量集sppivs_cdfv和步骤s3.4的源项目负向实例组合分布特征向量集spnivs_cdfv组建源项目组合分布特征向量集spemc=[spnivs_cdfv,sppivs_cdfv]。
[0104]
由步骤s3.5的目标项目正向实例组合分布特征向量集tppivs_cdfv和步骤s3.6的目标项目负向实例组合分布特征向量集tpnivs_cdfv组建目标项目组合分布特征向量集tpemc=[tpnivs_cdfv,tppivs_cdfv]。
[0105]
选择目标项目组合分布特征向量集tpemc中一个实例组合分布特征向量,按顺序依次计算与源项目组合分布特征向量集spemc中每一个实例组合分布特征向量的欧氏距离,得到实例间距离集合bidcm=[d1,

,dj],其中j=1,2,3,

,m。
[0106]
步骤s5、构建最相似源实例索引集的具体步骤如下:
[0107]
选择步骤s4.2中目标项目组合分布特征向量集的一个目标实例组合分布特征向量,按步骤s4.3得到该实例间距离集合bidcm=[d1,

,dj]。
[0108]
将步骤s5.1中实例间距离集合bidcm从小到大排序,并记录排序后的索引sort_bidcm。
[0109]
选择步骤s5.2中索引sort_bidcm前k个索引,构建前k个最相似实例索引集msii_
k。
[0110]
步骤s6构建训练集nd的具体步骤如下:
[0111]
遍历步骤s4.2中目标项目组合分布特征向量集tpemc的实例组合分布特征向量按照步骤s5执行得到对应该目标实例的最相似源实例索引集msii_ki。
[0112]
将步骤s6.1得到的每一个目标实例对应的最相似源实例集msii_ki组合得到最相似重复源实例索引集msrsis;将步骤s6.2中最相似重复源实例索引集msrsis去除重复的实例索引得到训练集实例索引mssis。
[0113]
将步骤s4.1中源项目组合分布特征向量集spemc按照步骤s6.3的训练集实例索引mssis取出,得到训练集实例数据nd_inst。
[0114]
由步骤s1.6的源项目负向实例索引集spnis和源项目正向实例索引集sppis组建源项目标签索引集splis=[spnis,sppis];将步骤s1.6中的源项目实例标签source_label按照步骤s6.5中源项目标签索引集splis重新排序得到训练集实例标签集nd_label;构建训练集nd={nd_inst,nd_label}。
[0115]
步骤s7构建跨项目缺陷预测分类方法的具体步骤如下:
[0116]
由步骤s4.2获取目标项目组合分布特征向量集tpemc;由步骤s1.7的目标项目负向实例索引集tpnis和源项目正向实例索引集tppis组建目标项目标签索引集tplis=[tpnis,tppis]。
[0117]
将步骤s1.7中的目标项目实例标签target_label按照步骤s7.2中目标项目标签索引集tplis重新排列得到测试集实例标签test_label;使用logistic分类算法对步骤s6.7的训练集nd中的训练集实例数据nd_inst和训练集实例标签集nd_label进行模型训练;将步骤s7.4训练得到的模型对步骤s7.1的目标项目组合分布特征向量集tpemc进行缺陷预测,得到预测标签集pred_label,通过公式计算得到logistic-score。
[0118]
构建跨项目缺陷预测分类方法的流程图如图4所示。
[0119]
步骤s8构建基于实例选择的跨项目缺陷预测方法iscpdp的具体步骤如下:
[0120]
选择poi-3.0作为源项目,选择camel-1.2作为目标项目。根据源项目实例情况构建源项目正向实例索引集sppis和源项目正向实例向量集sppiv,根据目标项目实例情况构建目标项目正向实例索引集tppis和目标项目正向实例向量集tppivs。
[0121]
按上述定义的构建中心化向量方法得到源项目正向实例中心化向量集sppivs_emc、源项目负向实例中心化向量集spnivs_emc、目标项目正向实例中心化向量集tppivs_emc和目标项目负向实例中心化向量集tpnivs_emc。
[0122]
按上述定义的构建组合分布特征向量方法得到源项目正向实例组合分布特征向量集sppivs_cdfv、源项目负向实例组合分布特征向量集spnivs_cdfv、目标项目正向实例组合分布特征向量集tppivs_cdfv和目标项目负向实例组合分布特征向量集tpnivs_cdfv。
[0123]
通过计算实例间距离,得到目标实例对应的实例间距离集合bidcm;构建前2个最相似实例索引集msii_2。获得训练集nd={nd_inst,nd_label}。
[0124]
使用logistic分类器对数据集nd建立分类模型并预测,通过实验表明,该模型得到的f-score值为0.627,该值大于没有使用实例选择方法得到的0.440;通过本发明实例选择建立的模型性能优于没有使用实例建立的模型,从而表明基于实例选择的跨项目缺陷预测方法的有效性。
[0125]
本发明通过使用组合分布特征向量实现对实例信息的有效表示,并衡量每一个目标实例与源项目中所有实例的相似度,将选出的所有源项目实例构建缺陷预测分类模型,有效避免源项目中无关实例对分类模型性能的影响,进一步优化测试资源使用,充分利用源项目实例中有效信息。
[0126]
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!