当前位置: 首页 > 专利查询>南通大学专利>正文

基于类不平衡学习和遗传算法的包裹式特征选择的软件缺陷预测方法技术

技术编号:14016008 阅读:228 留言:0更新日期:2016-11-18 01:05
基于类不平衡学习和遗传算法的包裹式特征选择的软件缺陷预测方法,属于软件质量保障领域。包括如下步骤:(1)挖掘软件项目的版本控制系统和缺陷跟踪系统,从中抽取程序模块;通过对程序模块进行类型标记和软件度量,可以生成缺陷预测数据集D;(2)对缺陷预测数据集执行两阶段包裹式特征选择方法,先得到最优特征子集FS',再基于最优特征子集FS',对数据集D进行预处理并形成预处理后的数据集D';(3)借助决策树这一分类方法,基于预处理后的数据集D'构建出缺陷预测模型。本发明专利技术一方面可以有效识别并移除缺陷预测数据集内的冗余特征和无关特征,另一方面可以有效缓解缺陷预测数据集内的类不平衡问题,最终可有效提高缺陷预测模型的性能。

【技术实现步骤摘要】

本专利技术属于软件质量保障领域,具体涉及一种基于两阶段包裹式特征选择的软件缺陷预测方法。
技术介绍
软件缺陷预测通过分析软件历史仓库,构建缺陷预测模型,来预先识别出被测项目内的潜在缺陷程序模块,通过将更多测试资源优先分配到这些程序模块,可以达到优化测试资源分配,提高软件产品质量的目的。但在搜集缺陷预测数据集时,若考虑多个度量元(即特征),则容易造成数据集存在维数灾难问题,即数据集内会含有无关特征和冗余特征。其中冗余特征是指大量或完全重复了其他单个或多个特征中含有的信息,而无关特征则对采用的分类算法不能提供任何的帮助。特征选择是一种有效方法,可以尝试识别并移除特征空间中的无关特征和冗余特征,最终达到降低数据集的维数、减少训练集的规模、缩短训练时间、以及提高缺陷预测模型的性能。特征选择方法在研究时主要存在两个难点:(1)特征交互问题。该问题是指特征之间存在两两交互、三三交互甚至更高强度的交互。一方面,一个特征可能跟类标的关联度不大,但如果该特性与其他特征存在互补关系,则可以显著提升分类方法的性能,因此,移除这类特征会造成选出的特征子集并不是最优的。另一方面,某一特征虽然与类标存在很强的相关性,但若与其他特征放在一起时,可能会具有一定冗余性,因此会造成分类方法性能的下降。(2)搜索空间大。搜索空间会随着特征数的增加呈指数级增长(即相对于n个特征,其可能的特征子集数为2n个)。在大部分情况下,搜索所有可能的子集是不可行的。目前常见的特征选择方法可以简单分为包裹式方法和过滤式方法。其中包裹式方法借助预先指定的分类方法的预测性能来决定选择出的特征子集,虽然可以取得更好的预测性能,但以增加计算开销为代价。而过滤式方法则根据数据集的特征完成特征的选择,因此与选择的分类方法无关,通用性更好且计算开销较小,但性能并不保证。在软件缺陷预测问题中,模型的性能非常重要,因此专利技术重点关注包裹式特征选择方法。除此之外,由于软件缺陷在被测项目内部的分布存在类不平衡问题,即大部分缺陷都集中存在于少数程序模块之内。因此搜集到的缺陷预测数据集存在明显的类不平衡问题,即缺陷模块(多数类)的数量要远远少于无缺陷模块(少数类)的数量。因此在设计包裹式特征选择方法的同时,需要考虑类不平衡问题。综上所述,为有效缓解缺陷预测数据集内存在的维数灾难问题和类不平衡问题,有必要设计出一种有效的基于包裹式特征选择的软件缺陷预测方法。本专利技术由此而生。
技术实现思路
本专利技术的目的在于提供基于两阶段包裹式特征选择的软件缺陷预测方法,一方面可以有效识别并移除缺陷预测数据集内的冗余特征和无关特征,另一方面可以有效缓解缺陷预测数据集内的类不平衡问题;具有缺陷预测模型构建时间短和模型预测性能高的优点,从而可以更为精准的预测出被测项目内的潜在缺陷程序模块,最终达到优化测试资源分配和提高软件产品质量的目的。为实现上述目的,本专利技术采用如下的技术方案:一种基于两阶段包裹式特征选择的软件缺陷预测方法,包括如下步骤:(1)挖掘软件项目的版本控制系统和缺陷跟踪系统,从中抽取程序模块;所述程序模块的粒度根据缺陷预测的目的可设置为文件、包、类或函数;随后对上述每个程序模块,通过分析缺陷跟踪系统内的缺陷报告信息进行标记;最后基于软件代码复杂度或软件开发过程分析,设计出与软件缺陷存在相关性的度量元,并借助这些度量元完成对每个程序模块的度量;通过对程序模块进行类型标记和软件度量,生成缺陷预测数据集D;(2)对缺陷预测数据集D进行两阶段包裹式特征选择,从原有特征集FS中移除原有数据集内的冗余特征和无关特征,得到最优特征子集FS';(3)基于最优特征子集FS',对数据集D进行预处理并形成预处理后的数据集D',即保留最优特征子集FS'中的特征,最终采用决策树分类方法,构建出缺陷预测模型。本专利技术步骤(2)中执行两阶段包裹式特征选择方法包括如下步骤:2-1)在缺陷预测数据集中,有缺陷模块的数量要远少于无缺陷模块的数量,因此在第一阶段用类不平衡学习方法SMOTE合成新的少数虚拟的有缺陷模块,即每一次从有缺陷模块中随机选择模块a,并从该模块a的最近邻中随机选择一个模块b,然后在模块a和模块b之间构成的连线上随机选择1点,作为新合成的虚拟的有缺陷模块;若原有缺陷预测数据集D中的无缺陷模块的实例数为nmax,有缺陷模块的实例数为nmin,则应用SMOTE方法后会额外合成nmin个有缺陷模块样本,最终形成预处理后的数据集D1;2-2)在第二阶段,基于数据集D1,采用一种针对缺陷预测问题定制的遗传算法,从原有特征集FS中移除原有数据集内的冗余特征和无关特征,选出最优特征子集FS',形成预处理后的数据集D';本专利技术步骤2-2)中的遗传算法包括如下步骤:2-2-1)初始化种群:假设缺陷预测数据集原有特征集FS包含n个特征,则种群内的每个染色体用n比特串进行编码,若第i个比特取值为1,则表示对应的第i个特征被选择,否则比特取值为0;在初始化种群时,针对每个染色体,每个比特随机赋值,即赋值为1或赋值为0;随后依次计算每个染色体的适应值,其计算过程按照以下步骤进行:2-2-1-1)首先读取染色体对应的特征子集FSt;然后将数据集D'均匀划分为5份,并确保每一份数据与原数据集的类分布保持一致;2-2-1-2)取其中四份构成训练集,剩余一份构成测试集,借助选出的特征子集FSt对训练集和测试集进行预处理,仅保留选中的特征,基于预处理后的训练集,借助决策树分类方法构建预测模型,并基于预处理后的测试集计算出模型的AUC值;上述过程重复5次,确保每份数据都至少被用做测试集一次;2-2-1-3)计算出这5个AUC值的均值AUCavg,并将1-AUCavg作为染色体对应的适应值并返回;2-2-2)基于上一种群,依次执行选择算子、交叉算子和变异算子,形成新的种群;其中选择算子在执行时,每一次从上一个种群中选出适应值最高的染色体,并重复一份放入新的种群中;交叉算子在每次执行时,基于交叉概率,从上一种群中随机选择两个染色体,并随机确定交叉点,然后进行交叉并形成两个新的染色体,并将这两个新的染色体放入新的种群;变异算子在每次执行时,基于变异概率,从上一种群中随机选择一个染色体,并随机确定变异点,然后进行变异并形成一个新的染色体,并将这个新的染色体放入新的种群;当新的种群生成结束后,依次计算出每个染色体的适应值,并更新种群中的最优染色体,所述最优染色体为适应值最小的染色体;针对软件缺陷预测问题,在种群最优染色体更新的时候,按照如下步骤进行:2-2-2-1)若当前染色体c的适应值小于种群最优染色体,则用染色体c替换种群最优染色体;2-2-2-2)若当前染色体c的适应值与种群最优染色体一样,则进一步比较当前染色体对应的特征子集的规模,并与种群最优染色体对应的特征子集规模进行比较,若当前染色体对应的特征子集的规模更小,则用染色体c替换种群最优染色体;2-2-3)若满足种群演化的终止准则,则返回当前种群中的最优染色体对应的特征子集FS',否则继续执行步骤2-2-2);其中种群在演化时,若达到指定的代数或种群提前收敛,则满足终止准则并停止种群演化。传统的软件缺陷预测方法在进行包裹式特征选择时,主要考虑了两类方法:(1)基于前向搜索的包裹式特征选择方法。该本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201610422657.html" title="基于类不平衡学习和遗传算法的包裹式特征选择的软件缺陷预测方法原文来自X技术">基于类不平衡学习和遗传算法的包裹式特征选择的软件缺陷预测方法</a>

【技术保护点】
一种基于两阶段包裹式特征选择的软件缺陷预测方法,其特征在于包括如下步骤:(1)挖掘软件项目的版本控制系统和缺陷跟踪系统,从中抽取程序模块;所述程序模块的粒度根据缺陷预测的目的设置为文件、包、类或函数;随后对上述每个程序模块,通过分析缺陷跟踪系统内的缺陷报告信息进行标记;最后基于软件代码复杂度或软件开发过程分析,设计出与软件缺陷存在相关性的度量元,并借助这些度量元完成对每个程序模块的度量;通过对程序模块进行类型标记和软件度量,生成缺陷预测数据集D;(2)对缺陷预测数据集D进行两阶段包裹式特征选择,从原有特征集FS中移除原有数据集内的冗余特征和无关特征,得到最优特征子集FS';(3)基于最优特征子集FS',对数据集D进行预处理并形成预处理后的数据集D',即保留最优特征子集FS'中的特征,最终采用决策树分类方法,构建出缺陷预测模型。

【技术特征摘要】
1.一种基于两阶段包裹式特征选择的软件缺陷预测方法,其特征在于包括如下步骤:(1)挖掘软件项目的版本控制系统和缺陷跟踪系统,从中抽取程序模块;所述程序模块的粒度根据缺陷预测的目的设置为文件、包、类或函数;随后对上述每个程序模块,通过分析缺陷跟踪系统内的缺陷报告信息进行标记;最后基于软件代码复杂度或软件开发过程分析,设计出与软件缺陷存在相关性的度量元,并借助这些度量元完成对每个程序模块的度量;通过对程序模块进行类型标记和软件度量,生成缺陷预测数据集D;(2)对缺陷预测数据集D进行两阶段包裹式特征选择,从原有特征集FS中移除原有数据集内的冗余特征和无关特征,得到最优特征子集FS';(3)基于最优特征子集FS',对数据集D进行预处理并形成预处理后的数据集D',即保留最优特征子集FS'中的特征,最终采用决策树分类方法,构建出缺陷预测模型。2.根据权利要求1所述的基于两阶段包裹式特征选择的软件缺陷预测方法,其特征在于上述步骤(2)中执行两阶段包裹式特征选择方法包括如下步骤:2-1)在缺陷预测数据集中,有缺陷模块的数量要远少于无缺陷模块的数量,因此在第一阶段用类不平衡学习方法SMOTE合成新的少数虚拟的有缺陷模块,即每一次从有缺陷模块中随机选择模块a,并从该模块a的最近邻中随机选择一个模块b,然后在模块a和模块b之间构成的连线上随机选择1点,作为新合成的虚拟的有缺陷模块;若原有缺陷预测数据集D中的无缺陷模块的实例数为nmax,有缺陷模块的实例数为nmin,则应用SMOTE方法后会额外合成nmin个有缺陷模块样本,最终形成预处理后的数据集D1;2-2)在第二阶段,基于数据集D1,采用一种针对缺陷预测问题定制的遗传算法,从原有特征集FS中移除原有数据集内的冗余特征和无关特征,选出最优特征子集FS',形成预处理后的数据集D'。3.根据权利要求2所述的基于两阶段包裹式特征选择的软件缺陷预测方法,其特征在于上述步骤2-2)中的一种针对软件缺陷预测问题定制的遗传算法包括如下步骤:2-2-1)初始化种群:假设缺陷预测数据集原有特征集FS包含n个特征,则种群内的每个染色体用n比特串进行编码,若第i个比特取值为1,则表示对应的第i个特征...

【专利技术属性】
技术研发人员:陈翔田丹陆凌姣王莉萍吉人魏世鑫
申请(专利权)人:南通大学
类型:发明
国别省市:江苏;32

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

1