面向软件缺陷数据的特征选择及分类方法技术领域
本发明属于软件工程应用领域,具体涉及一种面向软件缺陷数据的特征选
择及分类方法。
背景技术
目前,软件系统规模日益增大并且其逻辑复杂性也日益增强,伴随着软件
中存在缺陷的模块增加,这势必威胁软件的可靠性,影响软件质量,造成不可估
量的损失。软件缺陷预测技术作为指导和评估软件测试工作的一种重要的途径,
可以准确地预测软件缺陷的分布情况,这对于提高软件质量有着重要的现实意
义。针对一个软件系统,合理地预测缺陷可以统计尚未发现但仍存在的缺陷数目
及缺陷分布。软件缺陷预测的关键是发现有缺陷的模块,这本质上是一个二分
类问题,即将软件模块分为“有缺陷”和“无缺陷”两类。分类的前提是进行
特征选择,根据选择出的最优特征子集进行分类。但在实际操作中,软件缺陷
预测过程存在以下两个难点:
(1)软件特征存在大量冗余特征
2004年,美国宇航局公开了软件数据集(NASAMDP),他们从源代码中提取
的各种软件特征,主要包括三大类--LOC,McCabe和Halstead。在每一类软件
特征中,除了基本特征是从源代码中直接抽取,其他的特征都是由这些基本特
征值间接计算获得。且有实验证明,只需要三个重要的软件特征就可以预测软
件模块是否含有缺陷。可见,每一类软件特征中,存在着较多的冗余特征。大
量的冗余或不相关特征参与运算,势必会降低运算速度和效率。因此,需要对
软件特征进行降维处理,根据软件特征的类别,在每一类中选择出对软件缺陷
预测影响力大的特征即可。
(2)软件模块数据存在严重的不平衡性
在实际的软件模块中,“有缺陷”的模块(少数类)数量要远远少于“无
缺陷”(多数类)的模块,因此,软件缺陷预测也是不平衡数据的分类问题,
这也是数据挖掘近年来的研究热点。在预测过程中,目标是检测出“有缺陷”
的模块进行修复。但软件数据集中存在大量的多数类即无缺陷模块,它们在运
算中耗费大量的时间和资源。因此,尽快准确地检测出“无缺陷”的多数类并
将其移除数据集从而降低后续的运算量,这对于提高整个分类过程的效率意义
重大。
针对以上两个问题,研究出一套完整的符合软件数据特性的特征选择及分
类方法,这对于提高软件缺陷预测效果、降低运算时间,意义重大。
发明内容
本发明的目的是解决面向软件缺陷数据的特征选择及分类方法所存在的效
率低、耗时久的问题,提供一种面向软件缺陷数据的特征选择及分类方法,以
减少运算时间,提高运算效率。
为实现上述目的,本发明技术方案主要包括以下四个步骤:
A.从软件数据集中获取数据,对数据进行预处理
(1)数据包括软件特征集、软件模块,将软件模块数据分为训练集和测试
集以备训练和测试。本发明采用十次交叉验证,将数据集分成十份,其中九份
做训练,一份做准确度测试。并将数据做标签处理。
(2)根据已有知识将特征集分类,得到三个特征集,分别是LOC类,McCabe
类和Halstead类。
B.根据互信息理论获得最优软件特征集
(1)根据互信息理论计算出三个特征集中的每个特征fi与类y1和y2的相关
性,根据相关性大小按降序排列,在三个特征集中只取相关性排名前50%的特
征,得到三个筛减后的特征子集。
(2)分别计算三个筛减后的特征子集中各个特征间的相关性,去除与排名
前30%的特征相关性大的特征,保证最终的最优特征子集为S,大小为t且S=
{L,M,H}。
C.对选择出的软件特征按分类效果进行排序
(1)将得到的最优特征,依次输入SVM并对其进行训练。
(2)将训练好的分类模型作用于测试集,得到分类结果后,根据Gmeans值
的大小对软件特征进行从小到大排序,按顺序依次取每类特征的一个元素,组
成最优特征子集的三元组,记为(l,h,m),则最优特征子集S可表示为:S={(l,
h,m)|l∈L,h∈H,m∈M}。
D.利用二维循环级联Adaboost以及特征集S对软件模块进行分类
(1)设定级联结构为五级,每一级均为Adaboost分类器。每个Adaboost
分类器由若干个弱分类器(分类错误率<0.5)加权集成。
(2)从S中挑选出第一个特征三元组(l,h,m),该三元组中的三个元
素的Gmeans值在S中最小。输入该特征三元组,进行第一级分类。被识别为有
缺陷的样本直接进入下一级,被识别为无缺陷的样本则进入本级的循环结构进
行二次判别。若二次判别中该样本有一次被识别为有缺陷,则进入下一级循环,
否则,则舍弃该样本。
(3)第二级判别则从S中取出排名第二、第三的特征三元组,进行上述操
作。依次类推,直至第五级,采用五个特征三元组。最终得到分类结果。
附图说明
图1是面向软件缺陷数据的特征选择及分类方法流程图。
图2是二维循环级联Adaboost软件预测模型。
具体实施方式
下面结合图1对本发明作进一步详细的描述。
第一步:从软件数据集中获取数据,对数据进行预处理
(1)首先获取软件特征集及软件模块数据,并将训练集做标签处理。其中,
特征集F={f1,f2…fm}。软件模块数据集{X,Y},X={x1,x2…xn},Y={y1,y2}=
{+1,-1}。若软件模块xi无缺陷,则(xi,yi)=(xi,-1),反之,(xi,yi)=(xi,+1)。
(2)根据已有知识将特征集分类,得到三个特征集,分别是LOC类,McCabe
类和Halstead类,简写为L,M,H。
第二步:根据互信息理论获得最优软件特征集
根据互信息理论,可以计算任意两个变量间的相关性,如下式
M I ( x , y ) = l o g p ( x , y ) p ( x ) p ( y ) ]]>
其中,p(x)和p(y)为x和y的边缘分布概率,p(x,y)是x和y的联合分布概率。
(1)根据互信息理论计算出三个特征集中每个特征fi与类y1和y2的相关性,
根据相关性大小按降序排列,在三个特征集中只取相关性排名前50%的特征,
得到三个筛减后的特征子集。
(2)分别计算三个筛减后的特征子集中各个特征间的相关性,去除与排名
前30%的特征相关性大的特征,保证最终的最优特征子集为S,大小为t且S=
{L,M,H}。
第三步:对选择出的软件特征按分类效果进行排序
(1)将得到的最优特征,依次输入SVM并对其进行训练。
(2)将训练好的分类模型作用于测试集,得到分类结果后,根据Gmeans值
的大小对软件特征进行从小到大排序。按顺序依次取每类特征的一个元素,组
成最优特征子集的三元组,记为(l,h,m),则最优特征子集S可表示为S={(l,
h,m)|l∈L,h∈H,m∈M}。
第四步:利用二维循环级联Adaboost以及特征集S对软件模块进行分类
(1)设定级联结构为五级,每一级均为Adaboost分类器。每个Adaboost
分类器由若干个弱分类器(分类错误率<0.5)加权集成。
(2)从S中挑选出第一个特征三元组(l,h,m),该三元组中的三个元素
的Gmeans值在S中最小。输入该特征三元组,进行第一级分类。被识别为有缺
陷的样本直接进入下一级,被识别为无缺陷的样本则进入本级的循环结构进行
二次判别。若二次判别中该样本有一次被识别为有缺陷,则进入下一级循环,
否则,则舍弃该样本。
(3)第二级判别则从S中取出排名第二、第三的特征三元组,进行上述操
作。依次类推,直至第五级,采用五个特征三元组。最终得到分类结果。
本发明提供了一种面向软件缺陷数据的特征选择及分类方法,应当指出,
对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以
做出若干改进,这些改进也应视为本发明的保护范围。本实施例中未明确的各
组成部分均可用于现有技术加以实现。