1.一种基于域特征分布的跨项目软件缺陷预测方法,其特征在于,包括如下步骤:S1、构建项目向量集PVS;
S2、构建源域实例候选索引集SDCI;
S3、构建源域实例候选集SDCS;
S4、构建适应域特征分布索引DFDI;
S5、构建适应域特征分布的训练集DFDD;
S6、构建基于域特征分布的跨项目软件缺陷预测方法DFDCP;
步骤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、获取源项目传统度量元向量集SCPIVS和源项目实例标签SLABEL;
S2.2、将步骤S2.1的源项目实例标签SLABEL分类处理,构建源项目正向索引列表SPPIL和源项目负向索引列表SPNIL;
S2.3、使用SPPIL对SCPIVS选择得到源项目正向数据集SDPDS,使用SPNIL对SCPIVS选择得到源项目负向数据集SDNDS;
S2.4、将SDPDS中每个实例的度量元减去所有实例对应该度量元的平均值,得到源项目正向去均值化数据集SPPDM;
S2.5、将SDNDS中每个实例的度量元减去所有实例对应该度量元的平均值,得到源项目负向去均值化数据集SPNDM;
S2.6、将步骤S2.4的SPPDM和步骤S2.5的SPNDM组合后按原实例顺序排列,计算每一个去均值化实例向量的最小值、最大值、平均值、标准差和中位数,将这五个数值作为实例的新特征向量,最后得到源项目去均值化实例集SDMS;
S2.7、将步骤S1的目标项目传统度量元向量集TCPIVS和目标项目实例标签TLABEL执行步骤S2.1 S2.6,得目标项目去均值化实例集TDMS;
~
S2.8、设置选择去均值化实例个数为k;
S2.9、计算TDMS中的一个去均值化实例向量与SDMS中所有去均值化源实例向量之间的欧式距离,将欧式距离按从小到大排序并选择前k个欧氏距离对应的源实例索引;
S2.10、将TDMS中所有去均值化实例向量按照步骤S2.9处理组合并去重,由此构建源域实例候选索引集SDCI;
步骤S3包括如下步骤:
S3.1、使用步骤S2得到的源域实例候选索引集SDCI对源项目去均值化实例集SDMS进行选择,得到源域实例候选特征集SDCS‑D;
S3.2、使用步骤S2得到的源域实例候选索引集SDCI对源项目实例标签SLABEL进行选择,得到源域实例候选标签集SDCS‑L;
S3.3、构建源域实例候选集SDCS={SDCS‑D, SDCS‑L};
步骤S4包括如下步骤:
S4.1、获取步骤S3的源域实例候选特征集SDCS‑D;
S4.2、获取步骤S2的目标项目去均值化实例集TDMS;
S4.3、构建单个目标实例域特征分布索引空列表SIDFD,构建步骤S4.1的SDCS‑D实例索引集;
S4.4、选择TDMS中的一个实例向量;
S4.5、若SIDFD为空,则将目标实例域候选集特征定义为步骤S4.4的实例向量,然后计算目标实例域候选集特征与SDCS‑D中所有源实例的欧氏距离,将最小距离的实例索引加入到SIDFD并将该索引从SDCS‑D实例索引集中删除;若SIDFD不为空,则将目标实例域候选集特征定义为目标实例域候选集中所有实例向量按度量元计算标准差得到的标准差列表,然后计算该标准差列表和SDCS‑D实例索引集中所有的欧氏距离,将最小距离的实例索引加入到SIDFD并将该索引从SDCS‑D实例索引集中删除;
S4.6、设置选择适应域特征分布索引个数为q;
S4.7、当SIDFD长度满足q时,停止S4.4目标实例选择源实例;
S4.8、将TDMS中所有目标实例按照步骤S4.3 S4.5执行得到每个目标实例的单个目标~实例域特征分布索引;
S4.9、将步骤S4.8得到的每个目标实例的单个目标实例域特征分布索引组合后去重构建适应域特征分布索引DFDI;
步骤S5包括如下步骤:
S5.1、使用步骤S4得到的适应域特征分布索引DFDI对源域实例候选特征集SDCS‑D进行选择,得到适应域特征分布的训练特征集DFDD‑D;
S5.2、使用步骤S4得到的适应域特征分布索引DFDI对源域实例候选标签集SDCS‑L进行选择,得到适应域特征分布的训练标签集DFDD‑L;
S5.3、构建适应域特征分布的训练集DFDD={DFDD‑D, DFDD‑L};
步骤S6包括如下步骤:
S6.1、通过步骤S1得到项目向量集PVS={SCPIVS, SLABEL, TCPIVS, TLABEL};
S6.2、通过步骤S2得到源域实例候选索引集SDCI;
S6.3、通过步骤S3得到源域实例候选特征集SDCS‑D和源域实例候选标签集SDCS‑L;
S6.4、通过步骤S4得到适应域特征分布索引DFDI;
S6.5、通过步骤S5得到适应域特征分布的训练特征集DFDD‑D和适应域特征分布的训练标签集DFDD‑L;
S6.6、使用Logistic分类算法对步骤S6.5的适应域特征分布的训练特征集DFDD‑D和适应域特征分布的训练标签集DFDD‑L进行模型训练;
S6.7、将步骤S6.6训练得到的模型对步骤S2的目标项目去均值化实例集TDMS进行缺陷预测,得到预测标签集PRED_LABEL,结合目标项目实例标签TLABEL通过公式计算得到f‑score;
S6.8、得到基于域特征分布的跨项目软件缺陷预测方法DFDCP。