面向软件缺陷数据的特征选择及分类方法

文档序号:9631824阅读:384来源:国知局
面向软件缺陷数据的特征选择及分类方法
【技术领域】
[0001] 本发明属于软件工程应用领域,具体涉及一种面向软件缺陷数据的特征选择及分 类方法。
【背景技术】
[0002] 目前,软件系统规模日益增大并且其逻辑复杂性也日益增强,伴随着软件中存在 缺陷的模块增加,这势必威胁软件的可靠性,影响软件质量,造成不可估量的损失。软件缺 陷预测技术作为指导和评估软件测试工作的一种重要的途径,可以准确地预测软件缺陷的 分布情况,这对于提高软件质量有着重要的现实意义。针对一个软件系统,合理地预测缺 陷可以统计尚未发现但仍存在的缺陷数目及缺陷分布。软件缺陷预测的关键是发现有缺陷 的模块,这本质上是一个二分类问题,即将软件模块分为"有缺陷"和"无缺陷"两类。分类 的前提是进行特征选择,根据选择出的最优特征子集进行分类。但在实际操作中,软件缺陷 预测过程存在以下两个难点:
[0003] (1)软件特征存在大量冗余特征
[0004] 2004年,美国宇航局公开了软件数据集(NASAMDP),他们从源代码中提取的各种 软件特征,主要包括三大类一L0C,McCabe和Halstead。在每一类软件特征中,除了基本特 征是从源代码中直接抽取,其他的特征都是由这些基本特征值间接计算获得。且有实验证 明,只需要三个重要的软件特征就可以预测软件模块是否含有缺陷。可见,每一类软件特征 中,存在着较多的冗余特征。大量的冗余或不相关特征参与运算,势必会降低运算速度和效 率。因此,需要对软件特征进行降维处理,根据软件特征的类别,在每一类中选择出对软件 缺陷预测影响力大的特征即可。
[0005] (2)软件模块数据存在严重的不平衡性
[0006] 在实际的软件模块中,"有缺陷"的模块(少数类)数量要远远少于"无缺陷"(多 数类)的模块,因此,软件缺陷预测也是不平衡数据的分类问题,这也是数据挖掘近年来的 研究热点。在预测过程中,目标是检测出"有缺陷"的模块进行修复。但软件数据集中存在 大量的多数类即无缺陷模块,它们在运算中耗费大量的时间和资源。因此,尽快准确地检测 出"无缺陷"的多数类并将其移除数据集从而降低后续的运算量,这对于提高整个分类过程 的效率意义重大。
[0007] 针对以上两个问题,研究出一套完整的符合软件数据特性的特征选择及分类方 法,这对于提高软件缺陷预测效果、降低运算时间,意义重大。

【发明内容】

[0008] 本发明的目的是解决面向软件缺陷数据的特征选择及分类方法所存在的效率低、 耗时久的问题,提供一种面向软件缺陷数据的特征选择及分类方法,以减少运算时间,提高 运算效率。
[0009] 为实现上述目的,本发明技术方案主要包括以下四个步骤:
[0010]A.从软件数据集中获取数据,对数据进行预处理
[0011] (1)数据包括软件特征集、软件模块,将软件模块数据分为训练集和测试集以备训 练和测试。本发明采用十次交叉验证,将数据集分成十份,其中九份做训练,一份做准确度 测试。并将数据做标签处理。
[0012] ⑵根据已有知识将特征集分类,得到三个特征集,分别是L0C类,McCabe类和 Halstead类。
[0013] B.根据互信息理论获得最优软件特征集
[0014] (1)根据互信息理论计算出三个特征集中的每个特征仁与类y挪y2的相关性,根 据相关性大小按降序排列,在三个特征集中只取相关性排名前50%的特征,得到三个筛减 后的特征子集。
[0015] (2)分别计算三个筛减后的特征子集中各个特征间的相关性,去除与排名前30% 的特征相关性大的特征,保证最终的最优特征子集为S,大小为t且S= {L,M,H}。
[0016] C.对选择出的软件特征按分类效果进行排序
[0017] (1)将得到的最优特征,依次输入SVM并对其进行训练。
[0018] ⑵将训练好的分类模型作用于测试集,得到分类结果后,根据Gmeans值的大小 对软件特征进行从小到大排序,按顺序依次取每类特征的一个元素,组成最优特征子集的 三元组,记为(1,h,m),则最优特征子集S可表示为:S= {(1,h,m) 11eL,heH,meM}。
[0019] D.利用二维循环级联Adaboost以及特征集S对软件模块进行分类
[0020] (1)设定级联结构为五级,每一级均为Adaboost分类器。每个Adaboost分类器由 若干个弱分类器(分类错误率〈〇. 5)加权集成。
[0021] (2)从S中挑选出第一个特征三元组(1,h,m),该三元组中的三个元素的Gmeans 值在S中最小。输入该特征三元组,进行第一级分类。被识别为有缺陷的样本直接进入下 一级,被识别为无缺陷的样本则进入本级的循环结构进行二次判别。若二次判别中该样本 有一次被识别为有缺陷,则进入下一级循环,否则,则舍弃该样本。
[0022] (3)第二级判别则从S中取出排名第二、第三的特征三元组,进行上述操作。依次 类推,直至第五级,采用五个特征三元组。最终得到分类结果。
【附图说明】
[0023] 图1是面向软件缺陷数据的特征选择及分类方法流程图。
[0024] 图2是二维循环级联Adaboost软件预测模型。
【具体实施方式】
[0025] 下面结合图1对本发明作进一步详细的描述。
[0026] 第一步:从软件数据集中获取数据,对数据进行预处理
[0027] (1)首先获取软件特征集及软件模块数据,并将训练集做标签处理。其中,特征集 F= 软件模块数据集{X,Y},X= …xn},Y= = {+1,-1}。若软 件模块Xi无缺陷,贝Ui,yi) = (Xi,-l),反之,Ui,yi) = (Xi,+l)。
[0028] (2)根据已有知识将特征集分类,得到三个特征集,分别是L0C类,McCabe类和 Halstead类,简写为L,M,H。
[0029] 第二步:根据互信息理论获得最优软件特征集
[0030] 根据互信息理论,可以计算任意两个变量间的相关性,如下式
[0031]
[0032] 其中,p(X)和p(y)为X和y的边缘分布概率,p(X,y)是X和y的联合分布概率。
[0033] (1)根据互信息理论计算出三个特征集中每个特征仁与类y挪72的相关性,根据 相关性大小按降序排列,在三个特征集中只取相关性排名前50%的特征,得到三个筛减后 的特征子集。
[0034] (2)分别计算三个筛减后的特征子集中各个特征间的相关性,去除与排名前30% 的特征相关性大的特征,保证最终的最优特征子集为S,大小为t且S= {L,M,H}。
[0035] 第三步:对选择出的软件特征按分类效果进行排序
[0036] (1)将得到的最优特征,依次输入SVM并对其进行训练。
[0037] ⑵将训练好的分类模型作用于测试集,得到分类结果后,根据Gmeans值的大小 对软件特征进行从小到大排序。按顺序依次取每类特征的一个元素,组成最优特征子集的 三元组,记为(1,h,m),则最优特征子集S可表示为S= {(1,h,m) 11eL,heH,meM}。
[0038] 第四步:利用二维循环级联Adaboost以及特征集S对软件模块进行分类
[0039] (1)设定级联结构为五级,每一级均为Adaboost分类器。每个Adaboost分类器由 若干个弱分类器(分类错误率〈〇. 5)加权集成。
[0040] (2)从S中挑选出第一个特征三元组(1,h,m),该三元组中的三个元素的Gmeans 值在S中最小。输入该特征三元组,进行第一级分类。被识别为有缺陷的样本直接进入下 一级,被识别为无缺陷的样本则进入本级的循环结构进行二次判别。若二次判别中该样本 有一次被识别为有缺陷,则进入下一级循环,否则,则舍弃该样本。
[0041] (3)第二级判别则从S中取出排名第二、第三的特征三元组,进行上述操作。依次 类推,直至第五级,采用五个特征三元组。最终得到分类结果。
[0042] 本发明提供了一种面向软件缺陷数据的特征选择及分类方法,应当指出,对于本 技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进,这些 改进也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用于现有技术加以 实现。
【主权项】
1.面向软件缺陷数据的特征选择及分类方法,其特征在于,主要包括以下三个步骤: A. 从软件数据集中获取数据,对数据进行预处理 (1) 数据包括软件特征集、软件模块;将软件模块数据分为训练集和测试集以备训练 和测试;本发明采用十次交叉验证,将数据集分成十份,其中九份做训练,一份做准确度测 试;并将数据做标签处理; (2) 根据已有知识将特征集分类,得到三个特征集,分别是LOC类,McCabe类和 Halstead类; B. 根据互信息理论获得最优软件特征集 (1) 根据互信息理论计算出三个特征集中每个特征^与类yJPy2的相关性,根据相关 性大小按降序排列,三个特征集中只取相关性排名前50%的特征,得到三个筛减后的特征 子集; (2) 分别计算三个筛减后的特征子集中各个特征间的相关性,去除与排名前30%的特 征相关性大的特征,保证最终的最优特征子集为S,大小为t且S= {L,M,H}; C. 对选择出的软件特征按分类效果进行排序 (1) 将得到的最优特征,依次输入SVM并对其进行训练; (2) 将训练好的分类模型作用于测试集,得到分类结果后,根据Gmeans值的大小对软 件特征进行从小到大排序,按顺序依次取每类特征的一个元素,组成最优特征子集的三元 组,记为(1,h,m),则最优特征子集S可表示为: S= {(1,h,m) 11eL,heH,meM}; D. 利用二维循环级联Adaboost以及特征集S对软件模块进行分类 (1) 设定级联结构为五级,每一级均为Adaboost分类器;每个Adaboost分类器由若干 个弱分类器(分类错误率〈〇. 5)加权集成; (2) 从S中挑选出第一个特征三元组(1,h,m),该三元组中的三个元素的Gmeans值在 S中最小;输入该特征三元组,进行第一级分类;被识别为有缺陷的样本直接进入下一级, 被识别为无缺陷的样本则进入本级的循环结构进行二次判别;若二次判别中该样本有一次 被识别为有缺陷,则进入下一级循环,否则,则舍弃该样本; ⑶第二级判别则从S中取出排名第二、第三的特征三元组,进行上述操作;依次类推, 直至第五级,采用五个特征三元组;最终得到分类结果。
【专利摘要】本发明公开了一种面向软件缺陷数据的特征选择及分类方法,可用于指导软件缺陷数据分类的整个过程,包括以下步骤:A.从软件数据集中获取数据,对数据进行预处理,包括对数据做标签处理和根据已有经验知识将软件特征分成三类;B.根据互信息理论,计算出与类别相关性最大,特征间相关性最小的特征,将其加入最优软件特征集;C.对选择出的软件特征作用于分类器,且按分类效果进行升序排列;D.利用二维循环级联Adaboost以及最优特征子集对软件模块进行缺陷预测,及时准确地剔除无缺陷的样本,从而减少运算时间。本发明克服软件缺陷数据的不平衡性,及时剔除多数类以平衡数据集,以此减少运行时间,提高运算效率。
【IPC分类】G06K9/62
【公开号】CN105389598
【申请号】CN201511003241
【发明人】李克文, 邹晶杰
【申请人】中国石油大学(华东)
【公开日】2016年3月9日
【申请日】2015年12月28日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1