1.一种基于优化实例选择的跨项目软件缺陷预测方法,其特征在于,包括如下步骤:S1、构建项目向量集PVS;
S2、构建目标实例优化索引IPI;
S3、构建预训练集TPRED;
S4、构建目标项目的优化索引TPOI;
S5、构建基于优化实例选择的训练集BOD;
S6、构建基于优化实例选择的跨项目软件缺陷预测方法BOICP;
步骤S1包括如下步骤:
S1.1、基于开源网站获取软件项目集合;
S1.2、以项目类作为实例构建项目实例集合;
S1.3、基于开源数据历史记录、项目源代码语法结构、源代码抽象语法树构建传统度量元集{WMC, DIT, NOC, CBO, RFC, LCOM, LCOM3, NPM, DAM, MOA, MFA, CAM, IC, CBW, AMC, Ca, Ce, Max_CC, Avg_CC, LOC },其中,WMC代表每个类的加权方法,DIT代表继承树的深度,NOC代表子类的数目,CBO代表对象类之间的耦合,RFC代表一个类的响应,LCOM和LCOM3代表在方法上缺少的凝聚力,NPM代表公共类的个数,DAM代表数据访问指标,MOA代表聚合的量度,MFA代表功能抽象的量度,CAM代表类方法之间的聚合,IC代表继承耦合,CBW代表方法之间的耦合,AMC代表平均方法复杂度,Ca代表传入耦合,Ce代表传出耦合,Max_CC代表McCabe圈复杂性的最大值,Avg_CC代表McCabe圈复杂性的平均值,LOC代表代码的行数;
S1.4、将源项目中的所有实例按步骤S1.3处理得到源项目传统度量元向量集SCPIVS =[instance1, instance2, …, instancei],其中,i=1,2,3,…,n;
S1.5、将目标项目中的所有实例按步骤S1.3处理得到目标项目传统度量元向量集TCPIVS =[tradition_value1, tradition_value2, …, tradition_valuej],其中,j=1,2,
3,…,m;
S1.6、基于开源数据历史记录构建源项目实例标签SLABEL =[stag1, stag2, …, stagi],其中,i=1,2,3,…,n;该标签与步骤S1.4 源项目传统度量元向量集SCPIVS中实例对应;
S1.7、基于开源数据历史记录构建目标项目实例标签TLABEL =[ttag1, ttag2, …, ttagj],其中,j=1,2,3,…,m;该标签与步骤S1.5目标项目传统度量元向量集TCPIVS中实例对应;
S1.8、构建项目向量集PVS={SCPIVS, SLABEL, TCPIVS, TLABEL};
步骤S2包括如下步骤:
S2.1、构建目标实例优化索引IPI,源实例索引列表ASI;
S2.2、选择一个目标实例向量;
S2.3、若IPI的列表长度为空,则构建实例训练集的全局特征向量GFV为步骤S2.2的目标实例向量,否则GFV为实例训练集中所有实例的同一度量元标准差的集合;
S2.4、使用步骤S2.1的源实例索引列表ASI对步骤S1中的源项目传统度量元向量集SCPIVS选择实例构建待选择源实例库SIL;
S2.5、计算待选择源实例库SIL中每一个实例与GFV之间的欧式距离,并返回最小欧氏距离对应的索引min‑index;
S2.6、将min‑index加入到步骤S2.1的目标实例优化索引IPI中;
S2.7、将源实例索引列表ASI中的min‑index删除;
S2.8、设置每一个目标实例选择的源实例个数为k,循环执行步骤S2.3 S2.7,直到目~标实例优化索引IPI长度满足k;
S2.9、经步骤S2.8执行后,得到目标实例优化索引IPI;
步骤S3包括如下步骤:
S3.1、将目标项目中的每一个实例按照步骤S2执行得到每一个目标实例的目标实例优化索引IPI;
S3.2、将步骤S3.1中每一个目标实例得到的优化索引结合并去重,构建预训练集优化索引TIPI;
S3.3、使用步骤S3.2得到的预训练集优化索引TIPI对步骤S1的源项目传统度量元向量集SCPIVS按实例选取,得到预训练集的实例向量集TPRED‑D;
S3.4、使用步骤S3.2得到的预训练集优化索引TIPI对步骤S1的源项目实例标签SLABEL按实例选取,得到预训练集的标签集TPRED‑L;
S3.5、构建预训练集TPRED={TPRED‑D, TPRED‑L};
步骤S4包括如下步骤:
S4.1、将步骤S3得到的预训练集的实例向量集TPRED‑D与预训练集的标签集TPRED‑L按列组合,并将标签集放在最后一列;
S4.2、使用spearman计算每一个度量元与最后一列标签直接的相关性,得到相关性列表CList;
S4.3、将步骤S4.2的相关性列表CList所有元素取绝对值后按从大到小排序,返回特征对应索引;
S4.4、设置选择相关性特征索引个数为q;
S4.5、使用步骤S4.4的相关性特征索引个数q对步骤S4.3返回的特征索引进行选择,并使用得到的特征索引构建源项目相关性特征集SPTFS;
S4.6、将步骤S1的目标项目传统度量元向量集TCPIVS和目标项目实例标签TLABEL按步骤S4.1 S4.5构建目标项目相关性特征集TPTFS;
~
S4.7、计算源项目相关性特征集SPTFS中所有源实例与目标项目相关性特征集TPTFS中的一个实例相关性特征集的欧氏距离,并返回欧式距离从小到大排序后的索引列表,设置从SPTFS中选择实例个数为p,则获得该目标实例选出的p个索引;
S4.8、将目标项目相关性特征集TPTFS中所有目标实例按照步骤S4.7处理得到优化索引集合,将该索引集合去重得到目标项目的优化索引TPOI;
步骤S5包括如下步骤:
S5.1、使用步骤S4得到的目标项目的优化索引TPOI对步骤S3预训练集的实例向量集TPRED‑D进行选择,得到基于优化实例选择的训练特征集BOD‑D;
S5.2、使用步骤S4得到的目标项目的优化索引TPOI对步骤S3预训练集的标签集TPRED‑L进行选择,得到基于优化实例选择的标签集BOD‑L;
S5.3、构建基于优化实例选择的训练集BOD={BOD‑D, BOD‑L};
步骤S6包括如下步骤:
S6.1、通过步骤S1得到项目向量集PVS={SCPIVS, SLABEL, TCPIVS, TLABEL};
S6.2、通过步骤S2得到目标实例优化索引IPI;
S6.3、通过步骤S3得到预训练集的实例向量集TPRED‑D和预训练集的标签集TPRED‑L;
S6.4、通过步骤S4得到目标项目的优化索引TPOI;
S6.5、通过步骤S5得到基于优化实例选择的训练特征集BOD‑D和基于优化实例选择的标签集BOD‑L;
S6.6、使用Logistic分类算法对步骤S6.5的基于优化实例选择的训练特征集BOD‑D和基于优化实例选择的标签集BOD‑L进行模型训练;
S6.7、将步骤S6.6训练得到的模型对步骤S1的目标项目传统度量元向量集TCPIVS进行缺陷预测,得到预测标签集PRED_LABEL,结合目标项目实例标签TLABEL通过公式计算得到f‑score;
S6.8、得到基于优化实例选择的跨项目软件缺陷预测方法BOICP。