法律状态公告日
法律状态信息
法律状态
2022-07-22
公开
发明专利申请公布
技术领域
本发明属于软件缺陷预测技术领域,具体涉及一种基于动态特征引导实例选择的跨项目缺陷预测方法。
背景技术
大型软件系统由众多的软件模块组成,在这些软件模块中可能存在隐藏的逻辑或者控制流程缺陷,为了保证生产活动的稳定进行,有必要通过尽早审查和严格测试软件模块等方法发现并去除缺陷模块。
不同的项目拥有不同的规模和分布特征,对于一个目标项目选择一个源项目建立缺陷预测模型,在源项目中可能存在与目标项目相关性并不强的实例数据,此类数据在一定程度上影响缺陷预测模型的性能表现,因此在构建精确的跨项目软件缺陷预测模型时,有必要对数据集进行预处理。
为了实现更好的跨项目缺陷预测效果,需要提供一种基于动态特征引导实例选择的跨项目缺陷预测方法。
发明内容
本发明要解决的技术问题是提供一种基于动态特征引导实例选择的跨项目缺陷预测方法,利用训练集中已有实例数据构建动态特征,针对目标项目中实例的特征向量与动态特征之间的相似度进行源实例选择,进一步提高跨项目缺陷预测结果。
为解决上述技术问题,本发明的实施例提供一种基于动态特征引导实例选择的跨项目缺陷预测方法,包括如下步骤:
S1、构建项目实例向量集CPIVS;
S2、构建预训练动态特征PREDF;
S3、计算预训练动态特征与实例特征之间距离;
S4、构建引导实例选择索引集GISI;
S5、构建基于动态特征引导实例选择的训练集DFD;
S6、构建基于动态特征引导实例选择的跨项目缺陷预测方法DFGIS。
其中,步骤S1包括如下步骤:
S1.1、基于开源网站获取软件项目集合;
S1.2、以项目类作为实例构建项目实例集合;
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代表代码的行数;
S1.4、将源项目中的所有实例按步骤S1.3处理得到源项目传统度量元向量集SCPIVS=[instance
S1.5、将目标项目中的所有实例按步骤S1.3处理得到目标项目传统度量元向量集TCPIVS=[tradition_value
S1.6、基于开源数据历史记录构建源项目实例标签SLABEL=[stag
S1.7、基于开源数据历史记录构建目标项目实例标签TLABEL=[ttag
S1.8、构建项目实例向量集CPIVS={SCPIVS,SLABEL,TCPIVS,TLABEL}。
其中,步骤S2包括如下步骤:
S2.1、若预训练索引列表pretrain-list不存在,则构建预训练索引列表pretrain-list;若预训练索引列表pretrain-list存在,则读取预训练索引列表pretrain-list;
S2.2、读取步骤S1.4中的源项目传统度量元向量集SCPIVS;
S2.3、读取目标实例向量tiv;
S2.4、若步骤S2.1的预训练索引列表pretrain-list为空,则预训练动态特征PREDF定义为步骤S2.3的目标实例向量tiv;
S2.5、若步骤S2.1的预训练索引列表pretrain-list不为空,使用pretrain-list将步骤S2.2的源项目传统度量元向量集SCPIVS中对应实例向量取出,组成预训练实例集pretrain-instance,计算预训练实例集中每一种特征对应所有实例的特征值的标准差,则预训练动态特征PREDF定义为所有特征对应的标准差的集合。
其中,步骤S3包括如下步骤:
S3.1、通过步骤S2获得预训练动态特征PREDF;
S3.2、使用步骤S1.4中的源项目传统度量元向量集SCPIVS构建源实例向量索引集src-index,将src-index中去除步骤S2.1中的预训练索引列表pretrain-list,得到剔除预训练索引列表exclu-list;
S3.3、按步骤S3.2的剔除预训练索引列表exclu-list读取源项目传统度量元向量集SCPIVS中的对应实例向量,组成剔除预训练索引实例集exclu-instance;
S3.4、将步骤S3.3的剔除预训练索引实例集exclu-instance依次计算与步骤S3.1中的预训练动态特征PREDF之间的欧式距离,得到一个目标实例动态特征距离列表DF_dist=[dist
其中,步骤S4包括如下步骤:
S4.1、选择步骤S1.5中目标项目传统度量元向量集TCPIVS的一个目标实例特征向量,按步骤S3得到目标实例动态特征距离列表DF_dist=[dist
S4.2、将步骤S4.1中目标实例动态特征距离列表DF_dist从小到大排序,并记录排序后的索引Sort_DF_dist;
S4.3、选择步骤S4.2中索引Sort_DF_dist第一个索引;
S4.4、设置选择源实例个数k;
S4.5、通过步骤S4.1~步骤S4.4得到源实例索引,将索引添加到步骤S2.1的预训练索引列表pretrain-list中;
S4.6、将步骤S4.5执行k次,得到该目标实例的引导实例选择索引集GISI。
其中,步骤S5包括如下步骤:
S5.1、遍历步骤S1.5中目标项目传统度量元向量集TCPIVS的实例特征向量,按照步骤S4执行得到对应该目标实例的引导实例选择索引集GISI
S5.2、将步骤S5.1得到的每一个目标实例对应的引导实例选择索引集GISI
S5.3、将步骤S5.2中重复引导实例选择索引集RGISI去除重复的实例索引得到训练集实例索引SGISI;
S5.4、将步骤S1.4中的源项目传统度量元向量集SCPIVS按照步骤S5.3的训练集实例索引SGISI取出,得到训练集实例数据DFD_INST;
S5.5、将步骤S1.6中的源项目实例标签SLABEL按照步骤S5.3中训练集实例索引SGISI重新排序得到训练集实例标签集DFD_LABEL;
S5.6、构建基于动态特征引导实例选择的训练集DFD={DFD_INST,DFD_LABEL}。
其中,步骤S6包括如下步骤:
S6.1、通过步骤S1得到项目实例向量集CPIVS={SCPIVS,SLABEL,TCPIVS,TLABEL};
S6.2、通过步骤S2得到每一次选择实例时的预训练动态特征PREDF;
S6.3、通过步骤S3计算预训练动态特征与实例特征之间距离,得到一个目标实例动态特征距离列表DF_dist;
S6.4、通过步骤S4得到一个目标实例的引导实例选择索引集GISI;
S6.5、通过步骤S5得到基于动态特征引导实例选择的训练集DFD={DFD_INST,DFD_LABEL};
S6.6、使用Logistic分类算法对步骤S6.5的基于动态特征引导实例选择的训练集DFD中训练集实例数据DFD_INST和训练集实例标签集DFD_LABEL进行模型训练;
S6.7、将步骤S6.6训练得到的模型对步骤S1.5的目标项目传统度量元向量集TCPIVS进行缺陷预测,得到预测标签集PRED_LABEL,结合目标项目实例标签TLABEL,通过公式计算得到f-score;
S6.8、得到基于动态特征引导实例选择的跨项目缺陷预测方法DFGIS。
本发明的上述技术方案的有益效果如下:
本发明提供一种基于动态特征引导实例选择的跨项目缺陷预测方法,更加合理的选择源实例,针对每个目标实例的实例选择,使用已经在训练集中的实例集构建动态特征,通过计算动态特征与其余源实例之间的欧式距离进行源实例选择,将选出的所有源实例组成训练数据集,使用该训练数据集建立跨项目缺陷预测模型。
附图说明
图1为本发明的流程图;
图2为本发明中构建基于动态特征引导实例选择的训练集DFD流程图;
图3为本发明中不同k下选中的实例个数图;
图4为本发明中不同k下使用Logistic得到的f-score图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
如图1所示,本发明提供一种基于动态特征引导实例选择的跨项目缺陷预测方法,包括如下步骤:
S1、构建项目实例向量集CPIVS;
S2、构建预训练动态特征PREDF;
S3、计算预训练动态特征与实例特征之间距离;
S4、构建引导实例选择索引集GISI;
S5、构建基于动态特征引导实例选择的训练集DFD;
S6、构建基于动态特征引导实例选择的跨项目缺陷预测方法DFGIS。
步骤S1、构建项目实例向量集CPIVS的具体步骤如下:
基于开源网站获取软件项目集合;以项目类作为实例构建项目实例集合;基于开源数据历史记录、项目源代码语法结构、源代码抽象语法树构建特征集{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代表继承耦合,CBW代表方法之间的耦合,AMC代表平均方法复杂度,Ca代表传入耦合,Ce代表传出耦合,Max_CC代表McCabe圈复杂性的最大值,Avg_CC代表McCabe圈复杂性的平均值,LOC代表代码的行数。
将源项目中的所有实例按上述步骤处理得到源项目传统度量元向量集SCPIVS=[tradition_value
基于开源数据历史记录构建源项目实例标签SLABEL=[stag
构建项目实例向量集CPIVS={SCPIVS,SLABEL,TCPIVS,TLABEL}。
步骤S2、构建预训练动态特征PREDF的具体步骤如下:
若预训练索引列表pretrain-list不存在,则构建预训练索引列表pretrain-list;若预训练索引列表pretrain-list存在,则读取预训练索引列表pretrain-list;读取源项目传统度量元向量集SCPIVS;读取目标实例向量tiv。
若预训练索引列表pretrain-list为空,则预训练动态特征PREDF定义为目标实例向量tiv。
若预训练索引列表pretrain-list不为空,使用pretrain-list将源项目传统度量元向量集SCPIVS中对应实例向量取出,组成预训练实例集pretrain-instance,计算预训练实例集中每一种特征对应所有实例的特征值的标准差,则预训练动态特征PREDF定义为所有特征对应的标准差的集合。
步骤S3、计算预训练动态特征与实例特征之间距离的具体步骤如下:
获得预训练动态特征PREDF;使用源项目传统度量元向量集SCPIVS构建源实例向量索引集src-index,将src-index中去除预训练索引列表pretrain-list得到剔除预训练索引列表exclu-list。
按剔除预训练索引列表exclu-list读取源项目传统度量元向量集SCPIVS中对应实例向量,组成剔除预训练索引实例集exclu-instance。
将剔除预训练索引实例集exclu-instance依次计算与预训练动态特征PREDF之间的欧式距离,得到一个目标实例动态特征距离列表DF_dist=[dist
步骤S4、构建引导实例选择索引集GISI的具体步骤如下:
选择目标项目传统度量元向量集TCPIVS的一个目标实例特征向量,按步骤S3得到目标实例动态特征距离列表DF_dist=[dist
将目标实例动态特征距离列表DF_dist从小到大排序,并记录排序后的索引Sort_DF_dist;选择索引Sort_DF_dist第一个索引。
设置选择源实例个数k;通过上述步骤得到源实例索引,将索引添加到预训练索引列表pretrain-list中。
将上述步骤执行k次,得到该目标实例的引导实例选择索引集GISI。
步骤S5、构建基于动态特征引导实例选择的训练集DFD的具体步骤如下:
遍历目标项目传统度量元向量集TCPIVS的实例特征向量按照步骤S4执行得到对应该目标实例的引导实例选择索引集GISI
将上述步骤得到的每一个目标实例对应的引导实例选择索引集GISI
将重复引导实例选择索引集RGISI去除重复的实例索引得到训练集实例索引SGISI。
将源项目传统度量元向量集SCPIVS按照训练集实例索引SGISI取出,得到训练集实例数据DFD_INST。
将源项目实例标签SLABEL按照训练集实例索引SGISI重新排序得到训练集实例标签集DFD_LABEL。
构建基于动态特征引导实例选择的训练集DFD={DFD_INST,DFD_LABEL}。
构建基于动态特征引导实例选择的训练集DFD的流程图如图2所示。
步骤S6、构建基于动态特征引导实例选择的跨项目缺陷预测方法DFGIS的具体步骤如下:
选择ivy-2.0作为源项目,选择synapse-1.2作为目标项目。根据源项目实例情况构建源项目传统度量元向量集SCPIVS和源项目实例标签SLABEL,根据目标项目实例情况构建目标项目传统度量元向量集TCPIVS和目标项目实例标签TLABEL。
按上述定义的构建预训练动态特征方法得到每一次选择实例时的预训练动态特征PREDF。
按上述定义的计算预训练动态特征与实例特征之间距离方法,得到一个目标实例动态特征距离列表DF_dist。
将选择实例个数k设置在1到20范围内,在每一个k下获得基于动态特征引导实例选择的训练集DFD={DFD_INST,DFD_LABEL}。
使用Logistic分类器对基于动态特征引导实例选择的训练集DFD建立分类模型并预测,通过实验表明,该模型得到的f-score值最大为0.242,该值大于没有使用该实例选择方法得到的0.149;通过本发明建立的模型性能优于没有使用该实例选择方法建立的模型,从而表明基于动态特征引导实例选择的跨项目缺陷预测方法的有效性。
不同k下选中的实例个数如图3所示。
不同k下使用Logistic得到的f-score如图4所示。
本发明使用已经在训练集中的实例集构建动态特征,通过计算动态特征与其余源实例之间的欧式距离进行源实例选择,将选出的所有源实例组成训练数据集,使用该训练数据集建立跨项目缺陷预测模型。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
机译: 基于近邻点的跨实例缺陷混合实例选择方法
机译: 跨项目软件缺陷预测方法及系统
机译: 通过回归基于项目特征预测项目-项目亲和力