CN107247666B - 一种基于特征选择和集成学习的软件缺陷个数预测方法 - Google Patents

一种基于特征选择和集成学习的软件缺陷个数预测方法 Download PDF

Info

Publication number
CN107247666B
CN107247666B CN201710375644.2A CN201710375644A CN107247666B CN 107247666 B CN107247666 B CN 107247666B CN 201710375644 A CN201710375644 A CN 201710375644A CN 107247666 B CN107247666 B CN 107247666B
Authority
CN
China
Prior art keywords
regression
feature
software
defects
integrated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201710375644.2A
Other languages
English (en)
Other versions
CN107247666A (zh
Inventor
余啸
刘进
井溢洋
崔晓晖
邱昌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN201710375644.2A priority Critical patent/CN107247666B/zh
Publication of CN107247666A publication Critical patent/CN107247666A/zh
Application granted granted Critical
Publication of CN107247666B publication Critical patent/CN107247666B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation

Abstract

本发明属于软件缺陷预测技术领域,特别是涉及一种基于特征选择和集成学习的软件缺陷个数预测方法,针对软件缺陷个数的预测中不相关的模块特征损害了缺陷预测模型性能,回归模型均具有不同的预测能力,无法选择最佳回归算法等问题,首先利用基于包裹式的特征选择方法过滤不相关和冗余的特征,然后采用六种不同的回归算法:线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感知器回归,采用集成学习技术,根据特征筛选后的数据实例,构建综合回归模型。相比于单个的回归模型,本发明提高了软件缺陷个数预测的准确性。

Description

一种基于特征选择和集成学习的软件缺陷个数预测方法
技术领域
本发明属于软件缺陷预测技术领域,特别是涉及一种基于特征选择和集成学习的软件缺陷个数预测方法。
背景技术
(1)软件缺陷个数预测技术
软件已经成为影响国民经济、军事、政治乃至社会生活的重要因素。高可靠和复杂的软件系统依赖于其采用的软件的可靠性。软件的缺陷是导致相关系统出错、失效、崩溃甚至机毁人亡的潜在根源。所谓缺陷,到目前为止,学术界,产业界有很多相关的术语和定义,比如故障、缺陷、bug、错误、失误、失效、失败等。根据ISO 9000对缺陷的定义为:满足与预期或者规定用途有关的要求,缺陷是软件中已经存在的一个部分,可以通过修改软件而滤除。然而软件技术发展至今,任何检验、验证手段都不可能发现并排除所有的缺陷,软件作为一种无形的产物,虽然不会磨损用坏,却随时可能因为我们不易查知的原因出现故障甚至失效。事实上,从第一个软件诞生,就伴随出现软件缺陷的检测和预测技术。检测技术在于发现缺陷,而预测技术则在于预测还未发现的缺陷。20世纪70年代,出现了利用统计学习技术,根据历史数据以及已经发现的缺陷等软件度量数据预测软件系统的缺陷数目及类型。缺陷预测技术的目的在于统计计算机软件系统的缺陷数,以决定系统是否可以交付使用。缺陷预测技术为软件质量的提高和保证起着非常重要的作用,同时也促进了软件工程技术向前大大的发展了一步。
软件缺陷预测过程的第一步是收集和标注软件实例。一个软件实例能够被标记为有缺陷和无缺陷。第二步,抽取软件实例的度量属性。到目前为止,研究人员从不同的角度提出了许多软件度量属性,而与软件缺陷预测密切相关的度量属性主要有代码度量、McCabe度量和Halstead度量三种。代码度量是最直接、应用最普遍的度量属性。通过对程序进行简单的计数,我们可以得到相关代码的度量值。它包含总行数(LOC)、空白行数目(LOCb)、注释行数目(LOCc)、代码行数目(LOCe)和代码和注释总数目(LOCec)。(文献:[1]包晓露,王小娟,贾有良、申来安。软件测试基础:方法与度量[M].北京:人民邮电出版社,2007:74-76.)。软件复杂性通过程序结构的复杂性表现出来,而程序结构的复杂性主要值的是实例内部程序的复杂性。MaCabe度量的正是实例内部程序的复杂性。它由三种度量组成,分别为环形复杂度(Cyclomatic Complexity)、基本复杂度(Essential Complexity)和设计复杂度(Dessign Complexity)。Halstead度量不仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐述程序语言的等级高低。Halstead度量方法充分考虑了程序中出现的算子和操作数,它包括软件长度(N)、容量(V)、级别(L)、难度(D)、工作量(E)、时间(T)、误差估计(B)、程序消息(I)等度量。第三步,建立缺陷预测模型,缺陷预测模型本质上属于模式识别的范畴。而缺陷预测模型的建立过程就是通过一定的机器学习算法来搭建模型结构并确定度量属性之间依赖强度的过程,即为模型的结构学习和参数学习过程。第四步,通过模型预测结果,由于建立好的缺陷预测模型可以通过自身模型结构和模型参数来量化描述度量属性与预测结果之间的因果关系,这样给定一个软件实例的度量属性数据集,使用训练好的预测模型就可以得到该实例是否存在缺陷,即完成软件缺陷预测的过程。
(2)软件缺陷个数预测技术
但这些软件缺陷预测技术通常只给出有缺陷或无缺陷的二分类结果。如有关文献:[1]
X.Yang,K.Tang,X.Yao,“A Learning-to-Rank Approach to Software DefectPrediction,”IEEE Transactions on Reliability,2015,64(1):234-246.指出,如果只按照有无缺陷来分配有限的测试资源,可能会造成资源分配的浪费。如果我们能够准确的预测出缺陷个数,使软件测试人员主要关注那些拥有更多缺陷的软件模块,就可使软件测试工作更为有效。因此,预测软件缺陷个数相比于单纯的预测软件模块是否有缺陷更利于优化软件测试资源的分配。目前为止,已有许多研究使用回归模型预测缺陷数目。一些学者研究了遗传编程,决策树回归以及多层感知器进行缺陷数目的预测,结果表明这些模型具有良好的性能。有关文献:[2]M.Chen,Y.Ma,“An empirical study on predicting defectnumbers,”28th International Conference on Software Engineering and KnowledgeEngineering,2015:397-402.Chen等人使用六种回归算法来构建缺陷数目预测模型,最后发现,使用决策树回归构建的模型在多数情况下具有最高的预测准确率。在另一个相似的研究中,有关文献:[3]S.S.Rathore,S.Kumar,“Predicting number of faults insoftware system using genetic programming,”Procedia Computer Science,2015,62:303-311.Rathore等人提出了另一种实验方法来评估六种回归算法。结果发现决策树回归,多层感知和线性回归在多数情况下取得最佳性能。
然而,这些回归算法具有不同的预测能力,算法的性能会因为数据集的不同而不同,实验证明没有一种算法可以在所有情况下有取得最佳性能。此外,这些回归模型的性能仍然容易受到不相关的、冗余的模型特征的影响。
(3)回归技术
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系以及多个自变量对因变量的影响。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
1)线性回归。线性回归是一种用于对因变量与一个或多个独立变量之间的线性关系进行建模的统计方法。一个线性回归模型如下式所示:
Y=b0+b1x1+b2x2+…+bnxn
其中Y是因变量,x1,x2,...,xn是独立变量,b1,b2,...,bn是独立变量的回归系数,b0是误差项。
2)岭回归。当自变量之间有高度相关关系时,即使最小二乘法是无偏的,它们的方差也会很大。岭回归实际上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。最小二乘法如下式所示:
XB=Y
当X列满秩时,有
B=X+Y=(XTX)-1XTY
X+表示X的广义逆。当XTX的行列式接近于0时,岭回归为其主对角元素都加上了一个数k,降低矩阵为奇异的风险。如下式所示:
B(k)=(XTX+kI)-1XTY
随着k的增大,B(k)中各元素bi(k)的绝对值均趋于不断变小,它们相对于正确值bi的偏差也越来越大。k趋于无穷大时,B(k)趋于0。b(k)随k的改变而变化的轨迹,就称为岭迹。
3)决策树回归。它通过学习从数据特征推断的简单决策树来预测目标变量的值。决策树从根节点自上而下构建,并使用分割标准将数据分成包含具有相似值的实例的子集。选择最大化减少预期误差的属性作为根节点。该过程在非叶分支上递归运行,直到所有数据被处理。
4)梯度boosting回归。它以弱预测模型(通常是决策树)的形式产生预测模型,像其他提升方法一样的阶段性方式构建模型。它允许优化任意可微分损失函数。在每个阶段,回归树适合于给定损失函数的负梯度。
5)最近邻回归。最近邻回归是基于k最近邻的算法,并且一个实例的回归值是根据其最邻近的标签的平均值来计算的。基本的最近邻回归使用均匀权重:即本地邻域中的每个点对查询点的分类均一致。在某些情况下,加权点可能是有利的,使得附近点对远程点的贡献更多。
6)多层感知器回归。多层感知器是生物神经网络工作中的预测算法,它由一系列以层的形式相互连接权重的处理元件组成,利用一种反向传播来增加网络。多层感知器回归模型如下式所示:
netk=w1kx1+w2kx2+…+wnkxn+bk
Ok=f(netk)
其中Ok是因变量,x1,x2,...,xn是独立变量,w1k,w2k,...,wnk是与每个输入层相关联的权重,函数f(netk)是激活函数。
发明内容
本发明提供的技术方案是一种基于特征选择和集成学习的软件缺陷个数预测方法,包括以下步骤:
步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记软件模块中缺陷的个数。
步骤2,提取软件模块中与软件缺陷有关的特征,提取了20个属性特征:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc)。这20个特征形成了原始的特征集S={A1,A2,…,A20}。在提取n个软件模块的特征和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),…,(xn,yn)},其中xi=(a1,a2,…,a20)是从第i个软件模块中提取出的20维的特征向量值,yi是第i个软件模块的缺陷个数。
步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x)。这些基础的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。每个基本的回归模型预测给定模块的缺陷个数。然后构建集成回归模型
Figure BDA0001303927960000041
其中
Figure BDA0001303927960000042
并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的n个软件模块进行预测,计算得到该集成回归模型在缺陷数据集D上的预测准确率。预测准确率采用均方根误差RMSE表示,计算公式为:
Figure BDA0001303927960000051
其中yi表示对第i个软件模块的缺陷个数真实值,
Figure BDA0001303927960000052
表示第i个软件模块的缺陷个数预测值。
步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征,具体包括:
步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1
步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中n个软件模块进行预测时的RMSE值。
步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用。因此,则保留当前的特征子集Sk-1,然后重复步骤5.1、5.2、5.3。如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’。
步骤6,通过以D为训练集在特征选择后的特征子集S’上训练出m个基础回归模型h1,h2,…,hm。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模
Figure BDA0001303927960000053
其中
Figure BDA0001303927960000054
并且wi(i=1,…,m)是基础回归模型的权重,将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
步骤7,预测待预测的软件模块的缺陷个数。
步骤7.1,提取待预测的软件模块中的特征S’,形成这个软件模块的特征向量值x’。
步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值x’带入到步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。
针对现有的软件缺陷个数预测模型具有不同的预测能力,预测的性能会根据数据集的不同而不同的问题,而且这些模型的性能也容易受到软件缺陷个数预测数据集中不相关的、冗余的特征的影响的问题,因此本发明利用集成学习技术将多个回归模型相结合来预测软件缺陷个数,相比于单个的回归模型,提高了软件缺陷个数预测的准确性。并在此基础上利用包裹式的特征选择方法通过评估每个特征对回归模型性能的贡献来滤除掉软件缺陷个数预测数据集中不相关的、冗余的特征,得到一个新的特征集,该特征集对于建立软件缺陷个数预测模型更为有效,以此提高了预测的准确性。
附图说明
图1本发明实施例的基于特征选择和集成学习的软件缺陷个数预测流程图。
图2本发明实施例的基于包裹式的特征选择方法示例图。
具体实施方式
本发明设计的基于特征选择和集成学习的软件缺陷个数预测方法流程图见附图1,所有步骤可由本领域技术人员采用计算机软件技术实现流程自动运行。实施例具体实现过程如下:
步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。然后标记软件模块中缺陷的个数。
步骤2,提取软件模块的属性特征,为了阐述方便,假设在实施例中提取了5个属性特征:A1,A2,A3,A4,A5
本实施例在提取5个模块的度量属性和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)},其中xi是表示从第i个软件模块中提取的5维特征向量,xi=(a1,a2,a3,a4,a5),yi是第i个软件模块的缺陷个数。
缺陷数据集中包含的模块如下:X1={(3.0,1.0,0.0,8.0,14.0),5},X2={(13.0,1.0,0.0,1.0,17.0),4},X3={(4.0,1.0,0.0,4.0,4.0),5},X4={(10.0,1.0,0.0,6.0,31.0),0},X5={(2.0,0.367,15.143,3.0,1.1429),0}。
步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x)。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模型
Figure BDA0001303927960000061
其中
Figure BDA0001303927960000062
并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。因此,针对步骤2形成的缺陷数据集D,利用集成学习技术构建的回归模型为:
H(x)=1/6×[h1(a1,a2,a3,a4,a5)+h2(a1,a2,a3,a4,a5)+h3(a1,a2,a3,a4,a5)+h4(a1,a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的五个软件模块进行预测,求得第一个软件模块的缺陷个数预测值为c1=4,第二个软件模块的缺陷个数预测值为c2=3,第三个软件模块的缺陷个数预测值为c3=0,第四个软件模块的缺陷个数预测值为c4=2,第五个软件模块的缺陷个数预测值为c5=3,计算得到该集成回归模型在缺陷数据集D上的预测准确率,该预测准确率采用均方根误差RMSE表示,其计算公式为:
Figure BDA0001303927960000071
其中yi表示对第i个软件模块的缺陷个数真实值,
Figure BDA0001303927960000072
表示第i个软件模块的缺陷个数预测值。通过该公式计算出了本实施例训练出的集成回归模型在缺陷数据集D上的rmse=1.51。
步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征。
步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1。本实施例中首先对原始特征集S={a1,a2,a3,a4,a5}滤除掉一个特征后,有5种不同的特征子集:{a2,a3,a4,a5}、{a1,a3,a4,a5}、{a1,a2,a4,a5}、{a1,a2,a3,a5}、{a1,a2,a3,a4}。
步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中软件模块进行预测时的RMSE值。本实施例中利用{a2,a3,a4,a5}这个特征子集构建集成回归模型:
H1(x)=1/6×[h1(a2,a3,a4,a5)+h2(a2,a3,a4,a5)+h3(a2,a3,a4,a5)+h4(a2,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a3,a4,a5}这个特征子集构建集成回归模型:
H2(x)=1/6×[h1(a1,a3,a4,a5)+h2(a1,a3,a4,a5)+h3(a1,a3,a4,a5)+h4(a1,a3,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a4,a5}这个特征子集构建集成回归模型:
H3(x)=1/6×[h1(a1,a2,a4,a5)+h2(a1,a2,a4,a5)+h3(a1,a2,a4,a5)+h4(a1,a2,a4,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a3,a5}这个特征子集构建集成回归模型:
H4(x)=1/6×[h1(a1,a2,a3,a5)+h2(a1,a2,a3,a5)+h3(a1,a2,a3,a5)+h4(a1,a2,a3,a5)+h5(a1,a2,a3,a4,a5)+h6(a1,a2,a3,a4,a5)]
利用{a1,a2,a3,a4}这个特征子集构建集成回归模型:
H5(x)=1/6×[h1(a1,a2,a3,a4)+h2(a1,a2,a3,a4)+h3(a1,a2,a3,a4)+h4(a1,a2,a3,a4)+h5(a1,a2,a3,a4)+h6(a1,a2,a3,a4)]
计算这五个集成回归模型对缺陷数据集D中软件模块进行预测时的RMSE值。对于集成回归模型H1(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c2=2,c3=3,c4=0,c5=1,求得rmse1=1.14;对于集成学习回归模型H2(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=3.00,c4=2,c5=2,求得rmse2=0.55;对于集成学习回归模型H3(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=0,c2=1,c3=3,c4=3,c5=2,求得rmse3=1.30;对于集成学习回归模型H4(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=2,c2=3,c3=2,c4=3,c5=0,求得rmse4=1.22;对于集成学习回归模型H5(x),预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=3,c3=3,c4=2,c5=2,求得rmse5=0.84。
步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用。因此,则保留当前的特征子集Sk-1,则重复步骤5.1、5.2、5.3。如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’。
在本实施例中由于在特征子集{a1,a3,a4,a5}上训练得到的集成回归模型具有最小的RMSE值,且该值小于在原始特征集S={a1,a2,a3,a4,a5}上训练得到的集成回归模型的RMSE值,所以在第一次迭代时删除掉a2这个特征。重复步骤5.1、5.2、5.3,继续选择滤除一个特征,有4种不同的特征子集:{a3,a4,a5}、{a1,a4,a5}、{a1,a3,a5}和{a1,a3,a4},使用这4种不同的特征子集构建集成回归模型:
H1(x)’=1/6×[h1(a3,a4,a5)+h2(a3,a4,a5)+h3(a3,a4,a5)+h4(a3,a4,a5)+h5(a3,a4,a5)+h6(a3,a4,a5)]
H2(x)’=1/6×[h1(a1,a4,a5)+h2(a1,a4,a5)+h3(a1,a4,a5)+h4(a1,a4,a5)+h5(a1,a4,a5)+h6(a1,a4,a5)]
H3(x)’=1/6×[h1(a1,a3,a5)+h2(a1,a3,a5)+h3(a1,a3,a5)+h3(a1,a3,a5)+h5(a1,a3,a5)+h6(a1,a3,a5)]
H4(x)’=1/6×[h1(a1,a3,a4)+h2(a1,a3,a4)+h3(a1,a3,a4)+h3(a1,a3,a4)+h4(a1,a3,a4)+h6(a1,a3,a4)]
计算各自的缺陷个数及回归误差:对于集成学习回归模型H1(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=2,c3=3,c4=4,c5=0,求得rmse1’=1.68;对于集成学习回归模型H2(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=2,c4=4,c5=3,求得rmse2’=0.71;对于集成学习回归模型H3(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=4,c2=3,c3=3,c4=1,c5=3,求得rmse3’=1.09;对于集成学习回归模型H4(x)’,预测缺陷数据集D中5个软件模块的缺陷个数分别为c1=3,c2=3,c3=2,c4=4,c5=4,求得rmse4’=0.84。
由于在特征子集{a1,a4,a5}上可以达到最小的RMSE值为0.71,这一个值大于了在特征子集{a1,a3,a4,a5}上训练得到的RMSE值,这说明在对特征子集{a1,a3,a4,a5}滤除一个特征后RMSE的值反而升高,因此停止特征选择步骤,得到筛选后的特征子集S’为{a1,a3,a4,a5}。
步骤6,通过以D为训练集在特征选择后的特征子集S’={a1,a3,a4,a5}上训练出m个基础回归模型h1,h2,…,hm。这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归。然后构建集成回归模型
Figure BDA0001303927960000091
其中
Figure BDA0001303927960000092
并且wi(i=1,…,m)是基础回归模型的权重。简单起见,本发明中我们将权重设置为1/m。由于缺陷数量必须是非负整数,因此本发明对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数。
步骤7,预测待预测的软件模块的缺陷个数。
步骤7.1,对待预测的软件模块提取A1,A3,A4,A5这四个特征,形成如下软件模块数据:X6={(0.6,4.2,7.8,3),?},“?”表示这个软件模块待预测。
步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值xi=(0.6,4.2,7.8,3)带入步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。最终计算结果为3.23,由于缺陷个数必为整数,因此四舍五入得到最后的缺陷个数为3。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

Claims (1)

1.一种基于特征选择和集成学习的软件缺陷个数预测方法,其特征在于,包括以下步骤:
步骤1,挖掘软件历史数据,从中抽取出n个有用的软件模块;软件模块粒度根据实际应用场景,可设置为文件、包、类或函数;然后标记软件模块中缺陷的个数;
步骤2,提取软件模块中与软件缺陷有关的特征,提取了19个属性特征:加权方法数,继承树深度,孩子数,对象类之间的耦合度,类的响应,内聚缺乏度,传入耦合,传出耦合,公开方法数,代码行数,数据访问度量,聚合度量,功能抽象度量,方法间的内聚度,继承耦合,方法间耦合,平均方法复杂度,最大McCabe环形复杂度,平均McCabe环形复杂度;这19个特征形成了原始的特征集S={A1,A2,…,A19};在提取n个软件模块的特征和缺陷个数后形成了缺陷数据集D={(x1,y1),(x2,y2),…,(xn,yn)},其中xi=(a1,a2,…,a19)是从第i个软件模块中提取出的19维的特征向量值,yi是第i个软件模块的缺陷个数;
步骤3,首先通过以D为训练集在原始特征集S上训练出m个基础回归模型h1(x),h2(x),…,hm(x);这些基础的回归模型包含了线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归;每个基本的回归模型预测给定模块的缺陷个数;然后构建集成回归模型H(x):
Figure FDA0002207579870000011
其中
Figure FDA0002207579870000012
并且wi(i=1,…,m)是基础回归模型的权重;将权重设置为1/m;由于缺陷数量必须是非负整数,因此对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数;
步骤4,利用步骤3中训练出的集成回归模型H(x)对缺陷数据集D中的n个软件模块进行预测,计算得到该集成回归模型在缺陷数据集D上的预测准确率;预测准确率采用均方根误差RMSE表示,计算公式为
Figure FDA0002207579870000013
其中yi表示对第i个软件模块的缺陷个数真实值,
Figure FDA0002207579870000014
表示第i个软件模块的缺陷个数预测值;
步骤5,采用基于包裹式的特征选择方法来滤除不相关和冗余的特征,具体包括:
步骤5.1,从当前特征子集Sk(k为当前特征子集中包含的特征个数)中滤除掉一个特征,由于Sk中的每个特征都是可以被滤除的,所以对当前特征子集Sk滤除掉一个特征后,有k个不同的特征子集Sk-1
步骤5.2,基于这k个不同的特征子集Sk-1,训练出k个不同的集成回归模型,分别计算这k个不同的集成回归模型对原始缺陷数据集D中n个软件模块进行预测时的RMSE值;
步骤5.3,如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值小于在原始特征子集Sk上训练得到的RMSE值,则说明在特征子集Sk-1上训练得到的集成回归模型具有更高的准确率,当前的特征子集Sk-1相比于原始的特征子集Sk更有用;因此,则保留当前的特征子集Sk-1,然后重复步骤5.1、5.2、5.3;如果基于特征子集Sk-1上训练得出的拥有最低的RMSE值的集成回归模型的RMSE值大于在原始特征子集Sk上训练得到的RMSE值,则说明在原始特征子集Sk上训练得到的集成回归模型具有更高的准确率,原始的特征集Sk相比于当前的特征子集Sk-1更有用,则停止特征选择步骤,得到筛选后的特征子集S’;
步骤6,通过以D为训练集在特征选择后的特征子集S’上训练出m个基础回归模型h1,h2,…,hm;这些基本的回归模型包含了在背景技术中介绍的线性回归、岭回归、决策树回归、梯度boosting回归、最近邻回归和多层感器知回归;然后构建集成回归模型H(x’):
Figure FDA0002207579870000021
其中
Figure FDA0002207579870000022
并且wi(i=1,…,m)是基础回归模型的权重,将权重设置为1/m;由于缺陷数量必须是非负整数,因此对预测的故障个数进行适当的调整:若预测的故障个数为负,则设置为零;若预测的故障数为小数,则四舍五入为整数;
步骤7,预测待预测的软件模块的缺陷个数;
步骤7.1,提取待预测的软件模块中的特征S’,形成这个软件模块的特征向量值x’;
步骤7.2,将步骤7.1得到的待预测的软件模块的特征向量值x’带入到步骤6中训练的集成回归模型中,求得该软件模块的缺陷个数。
CN201710375644.2A 2017-05-24 2017-05-24 一种基于特征选择和集成学习的软件缺陷个数预测方法 Expired - Fee Related CN107247666B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710375644.2A CN107247666B (zh) 2017-05-24 2017-05-24 一种基于特征选择和集成学习的软件缺陷个数预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710375644.2A CN107247666B (zh) 2017-05-24 2017-05-24 一种基于特征选择和集成学习的软件缺陷个数预测方法

Publications (2)

Publication Number Publication Date
CN107247666A CN107247666A (zh) 2017-10-13
CN107247666B true CN107247666B (zh) 2020-03-10

Family

ID=60016676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710375644.2A Expired - Fee Related CN107247666B (zh) 2017-05-24 2017-05-24 一种基于特征选择和集成学习的软件缺陷个数预测方法

Country Status (1)

Country Link
CN (1) CN107247666B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107346286B (zh) * 2017-07-03 2020-05-12 武汉大学 一种基于核主成分分析和极限学习机的软件缺陷预测方法
CN107391365B (zh) * 2017-07-06 2020-10-13 武汉大学 一种面向软件缺陷预测的混合特征选择方法
CN107391370B (zh) * 2017-07-13 2020-05-12 武汉大学 一种基于数据过采样和集成学习的软件缺陷数目预测方法
CN107832219B (zh) * 2017-11-13 2020-08-25 北京航空航天大学 基于静态分析和神经网络的软件故障预测技术的构建方法
CN109947652A (zh) * 2019-03-26 2019-06-28 中山大学 一种软件缺陷预测的改进排序学习方法
CN111311302A (zh) * 2020-01-08 2020-06-19 重庆邮电大学 一种基于多源数据驱动的房产智能评估方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104965787A (zh) * 2015-07-06 2015-10-07 南京航空航天大学 一种基于三支决策的两阶段软件缺陷预测方法
CN105653450A (zh) * 2015-12-28 2016-06-08 中国石油大学(华东) 基于改进遗传算法与Adaboost结合的软件缺陷数据特征选择方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9619363B1 (en) * 2015-09-25 2017-04-11 International Business Machines Corporation Predicting software product quality

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104965787A (zh) * 2015-07-06 2015-10-07 南京航空航天大学 一种基于三支决策的两阶段软件缺陷预测方法
CN105653450A (zh) * 2015-12-28 2016-06-08 中国石油大学(华东) 基于改进遗传算法与Adaboost结合的软件缺陷数据特征选择方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"软件缺陷分布预测技术及应用研究";单纯;《中国博士学位论文全文数据库(电子期刊)》;20160715;I138-15 *

Also Published As

Publication number Publication date
CN107247666A (zh) 2017-10-13

Similar Documents

Publication Publication Date Title
CN107247666B (zh) 一种基于特征选择和集成学习的软件缺陷个数预测方法
US10311044B2 (en) Distributed data variable analysis and hierarchical grouping system
CN107391369B (zh) 一种基于数据筛选和数据过采样的跨项目缺陷预测方法
Chien et al. A system for online detection and classification of wafer bin map defect patterns for manufacturing intelligence
WO2019165673A1 (zh) 一种报销单风险预测方法、装置、终端设备及存储介质
CN110335168B (zh) 基于gru优化用电信息采集终端故障预测模型的方法及系统
CN110008259A (zh) 可视化数据分析的方法及终端设备
CN108345544A (zh) 一种基于复杂网络的软件缺陷分布影响因素分析方法
TWI684139B (zh) 基於自動學習的基地台異常之預測的系統與方法
CN107133176A (zh) 一种基于半监督聚类数据筛选的跨项目缺陷预测方法
CN111859047A (zh) 一种故障解决方法及装置
Palacios et al. Unsupervised technique for automatic selection of performance indicators in self-organizing networks
Pradeep et al. Optimal Predictive Maintenance Technique for Manufacturing Semiconductors using Machine Learning
Sandhu et al. A density based clustering approach for early detection of fault prone modules
CN112732690B (zh) 一种用于慢病检测及风险评估的稳定系统及方法
WO2021115269A1 (zh) 用户集群的预测方法、装置、计算机设备和存储介质
Yao et al. Cross-project dynamic defect prediction model for crowdsourced test
Joolfoo et al. A Systematic Review of Algorithms applied for Telecom Churn Prediction
CN112598118B (zh) 有监督学习的标注异常处理方法、装置、存储介质及设备
TWM568442U (zh) Golden flow grouping system
Ravikumaran et al. Prediction of Chronic and Non-Chronic Kidney disease using Modified DBN with Map and Reduce Framework
KR102636461B1 (ko) 인공지능 모델 학습을 위한 오토 레이블링 자동화 방법, 장치 및 시스템
US20240104348A1 (en) Temporal-Aware and Local-Aggregation Graph Neural Networks
CN112381215B (zh) 一种面向自动机器学习的自适应搜索空间生成方法与装置
US20230342622A1 (en) Methods and Systems for Detecting Causes of Observed Outlier Data

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200310

Termination date: 20210524