一种基于数据筛选和数据过采样的跨项目缺陷预测方法转让专利

申请号 : CN201710571098.X

文献号 : CN107391369B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 余啸刘进伍蔓崔晓晖张建升井溢洋

申请人 : 武汉大学

摘要 :

本发明公开了一种基于数据筛选和数据过采样的跨项目缺陷预测方法,设计了合理的数据筛选和数据不平衡处理策略,利用层次聚类算法筛选出真正和本项目模块数据相似的跨项目历史软件模块数据,使跨项目软件缺陷预测模型避免受到不相关跨项目历史软件模块数据的影响,然后利用过采样方法增加有缺陷的软件模块数据得到分类相对平衡的新数据集,使跨项目软件缺陷预测模型避免受到不平衡的训练数据集的影响。本发明的技术方案具有简单高效的特点,能够较好地提高跨项目软件缺陷预测模型的性能。

权利要求 :

1.一种基于数据筛选和数据过采样的跨项目缺陷预测方法,其特征在于,包括以下步骤:步骤1:抽取跨项目历史软件模块,标注所有的跨项目历史软件模块是否有缺陷,标记有缺陷的历史软件模块的类标号为Y,标记无缺陷的历史软件模块的类标号为N;

步骤2:提取跨项目历史软件模块的度量属性;

步骤3:抽取本项目待预测软件模块,标记为“?”;

步骤4:提取本项目待预测软件模块的度量属性;

步骤5:对所有跨项目历史软件模块数据和所有本项目待预测软件模块数据执行凝聚型层次聚类AGENES算法,获得筛选后的跨项目历史软件模块数据;

步骤5的具体实现包括以下子步骤:

步骤5.1:设置终止簇数目,将所有跨项目历史软件模块数据和所有本项目待预测软件模块数据中的每一个软件模块单独当作为一个簇;

步骤5.2:循环找到欧式距离最小的两个簇,合并成新簇,直到簇数达到终止簇数目的预设值;

步骤5.3:选择包含本项目待预测软件模块的簇中的所有跨项目历史软件模块数据,即为筛选后的跨项目历史软件模块数据;

步骤6:对筛选后的跨项目历史软件模块数据进行过采样,使跨项目历史软件模块数据平衡;

步骤6的具体实现包括以下子步骤:

步骤6.1:搜索类标号为Y的筛选后的跨项目历史软件模块Xi在同一个簇中的k个类标号也为Y的近邻软件模块,记为Xi(near);

步骤6.2:设定数据集的过采样倍率m,m

0与1之间的某一随机数,xi’为从Xi的k个缺陷数目也大于0的近邻软件模块Xi(near)中随机选择的m个软件模块中的一个软件模块Xi’的19维的度量属性向量;新合成的软件模块Xinew的类标号为Y;

步骤6.3:对全部的T个类标号为Y的筛选后的跨项目历史软件模块重复步骤6.1和6.2的操作,共合成m×T个新的软件模块;

步骤7:令通过步骤5产生的筛选后的跨项目历史软件模块数据和通过步骤6产生的新合成的软件模块数据为训练集D,基于训练集D训练出朴素贝叶斯预测模型;

步骤8:用训练得到的朴素贝叶斯预测模型预测本项目待预测软件模块X;

步骤8的具体实现包括以下子步骤:

步骤8.1:计算本项目待预测软件模块X有缺陷的后验概率:

其中xk为软件

模块X在第k个度量属性上的值;

计算本项目待预测软件模块X无缺陷的后验概率:

其中xk为软件

模块X在第k个度量属性上的值;

其中,类标号为Y的软件模块在每个度量属性Ak上的均值为μkY和标准差为σkY,类标号为N的软件模块在每个度量属性Ak上的均值为μkN和标准差为σkN;

步骤8.2:判定本项目待预测软件模块X是否有缺陷;

如果P(X|N)>P(X|Y),朴素贝叶斯分类方法判断其类标号为N,即该软件模块为无缺陷的软件模块;

如果P(X|N)

2.根据权利要求1所述的基于数据筛选和数据过采样的跨项目缺陷预测方法,其特征在于:步骤1中,历史软件模块粒度根据实际应用场景,设置为文件、包、类或函数。

3.根据权利要求1所述的基于数据筛选和数据过采样的跨项目缺陷预测方法,其特征在于:步骤2中,提取了19个度量属性,分别为加权方法数wmc、继承树深度dit、孩子数noc、对象类之间的耦合度cbo、类的响应rfc、内聚缺乏度lcom、传入耦合ca、传出耦合ce、公开方法数npm、代码行数loc、数据访问度量dam、聚合度量moa、功能抽象度量mfa、方法间的内聚度cam、继承耦合ic、方法间耦合cbm、平均方法复杂度amc、最大McCabe环形复杂度max_cc、平均McCabe环形复杂度avg_cc。

4.根据权利要求1所述的基于数据筛选和数据过采样的跨项目缺陷预测方法,其特征在于:步骤7中,由于软件模块属于有缺陷的类和无缺陷的类的先验概率未知,则假定两个类是等概率的,因此训练朴素贝叶斯算法模型只需对通过步骤5产生的筛选后的跨项目历史软件模块数据和通过步骤6产生的新合成的软件模块数据为训练集D计算类标号为Y的软件模块在每个度量属性Ak上的均值μkY和标准差σkY,计算类标号为N的软件模块在每个度量属性Ak上的均值μkN和标准差σkN。

说明书 :

一种基于数据筛选和数据过采样的跨项目缺陷预测方法

技术领域

[0001] 本发明属于软件缺陷预测技术领域,特别是涉及一种基于数据筛选和数据过采样的跨项目缺陷预测方法。

背景技术

[0002] (1)软件缺陷预测技术
[0003] 软件已经成为影响国民经济、军事、政治乃至社会生活的重要因素。高可靠和复杂的软件系统依赖于其采用的软件的可靠性。软件的缺陷是导致相关系统出错、失效、崩溃甚至机毁人亡的潜在根源。所谓缺陷,到目前为止,学术界,产业界有很多相关的术语和定义,比如故障、缺陷、bug、错误、失误、失效、失败等。根据ISO 9000对缺陷的定义为:满足与预期或者规定用途有关的要求,缺陷是软件中已经存在的一个部分,可以通过修改软件而消除。然而软件技术发展至今,任何检验、验证手段都不可能发现并排除所有的缺陷,软件作为一种无形的产物,虽然不会磨损用坏,却随时可能因为我们不易查知的原因出现故障甚至失效。事实上,从第一个软件诞生,就伴随出现软件缺陷的检测和预测技术。检测技术在于发现缺陷,而预测技术则在于预测还未发现的缺陷。
[0004] 20世纪70年代,出现了利用统计学习技术,根据历史数据以及已经发现的缺陷等软件度量数据预测软件系统的缺陷数目及类型。缺陷预测技术的目的在于统计计算机软件系统的缺陷数,以决定系统是否可以交付使用。缺陷预测技术为软件质量的提高和保证起着非常重要的作用,同时也促进了软件工程技术向前大大的发展了一步。
[0005] 软件缺陷预测过程的第一步是收集和标注软件模块。一个软件模块能够被标记为有缺陷和无缺陷。第二步,抽取软件模块的度量属性。到目前为止,研究人员从不同的角度提出了许多软件度量属性,而与软件缺陷预测密切相关的度量属性主要有代码度量、McCabe度量和Halstead度量三种。代码度量是最直接、应用最普遍的度量属性。通过对程序进行简单的计数,可以得到相关代码的度量值。它包含总行数(LOC)、空白行数目(LOCb)、注释行数目(LOCc)、代码行数目(LOCe)和代码和注释总数目(LOCec)(文献1)。软件复杂性通过程序结构的复杂性表现出来,而程序结构的复杂性主要值的是模块内部程序的复杂性。MaCabe度量的正是模块内部程序的复杂性。它由三种度量组成,分别为环形复杂度(Cyclomatic Complexity)、基本复杂度(Essential Complexity)和设计复杂度(Design Complexity)。Halstead度量不仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐述程序语言的等级高低。Halstead度量方法充分考虑了程序中出现的算子和操作数,它包括软件长度(N)、容量(V)、级别(L)、难度(D)、工作量(E)、时间(T)、误差估计(B)、程序消息(I)等度量。第三步,建立缺陷预测模型,缺陷预测模型本质上属于模式识别的范畴。而缺陷预测模型的建立过程就是通过一定的机器学习算法来搭建模型结构并确定度量属性之间依赖强度的过程,即为模型的结构学习和参数学习过程。第四步,通过模型预测结果,由于建立好的缺陷预测模型可以通过自身模型结构和模型参数来量化描述度量属性与预测结果之间的因果关系,这样给定一个软件模块的度量属性数据集,使用训练好的预测模型就可以得到该模块是否存在缺陷,即完成软件缺陷预测的过程。
[0006] (2)跨项目软件缺陷预测技术
[0007] 到目前为止,许多高效的软件缺陷预测方法已经被提出,通常利用软件模块的历史数据并运用统计分析、机器学习以及机器学习联合统计分析等技术来进行预测。但它们通常仅限于本项目的缺陷预测。当有足够的历史数据可用来建立缺陷预测模型时,本项目的缺陷预测效果很好。但对于一些新的项目来说,项目内的历史数据是非常有限且不具有高可信度的,所以本项目缺陷预测很难顺利进行。跨项目软件缺陷预测是解决项目初期缺乏历史数据来构建模型的有效途径。它通过利用一个或多个已有的其他项目(称之为跨项目)数据来训练预测模型,然后将模型应用到本项目,从而解决本项目没有足够的历史数据来训练模型的问题。
[0008] 文献:[1]包晓露,王小娟,贾有良、申来安。软件测试基础:方法与度量[M].北京:人民邮电出版社,2007:74-76.

发明内容

[0009] 相对于国内外已有的跨项目软件缺陷预测方法,本发明针对跨项目软件缺陷预测中大量不相关的跨项目历史软件模块数据损害了跨项目软件缺陷预测模型性能的问题和跨项目历史软件模块数据类不平衡的问题,提出了一种基于数据筛选和数据过采样的跨项目缺陷预测方法。
[0010] 本发明所采用的技术方案是:一种基于数据筛选和数据过采样的跨项目缺陷预测方法,其特征在于,包括以下步骤:
[0011] 步骤1:抽取跨项目历史软件模块,标注所有的跨项目历史软件模块是否有缺陷,标记有缺陷的历史软件模块的类标号为Y,标记无缺陷的历史软件模块的类标号为N;
[0012] 步骤2:提取跨项目历史软件模块的度量属性;
[0013] 步骤3:抽取本项目待预测软件模块,标记为“?”;
[0014] 步骤4:提取本项目待预测软件模块的度量属性;
[0015] 步骤5:对所有跨项目历史软件模块数据和所有本项目待预测软件模块数据执行凝聚型层次聚类AGENES算法,获得筛选后的跨项目历史软件模块数据;
[0016] 步骤6:对筛选后的跨项目历史软件模块数据进行过采样,使跨项目历史软件模块数据平衡;
[0017] 步骤7:令通过步骤5产生的筛选后的跨项目历史软件模块数据和通过步骤6产生的新合成的软件模块数据为训练集D,基于训练集D训练出朴素贝叶斯预测模型;
[0018] 步骤8:用训练得到的朴素贝叶斯预测模型预测本项目待预测软件模块X。
[0019] 本发明设计了合理的数据筛选和数据不平衡处理策略,利用层次聚类算法筛选出真正和本项目模块数据相似的跨项目历史软件模块数据,使跨项目软件缺陷预测模型避免受到不相关跨项目历史软件模块数据的影响,然后利用过采样方法增加有缺陷的软件模块数据得到分类相对平衡的新数据集,使跨项目软件缺陷预测模型避免受到不平衡的训练数据集的影响。本发明的技术方案具有简单高效的特点,能够较好地提高跨项目软件缺陷预测模型的性能。

附图说明

[0020] 图1本发明实施例的流程图。
[0021] 图2本发明实施例的本项目待预测软件模块和跨项目历史软件模块在19维空间上的分布图。
[0022] 图3本发明实施例的本项目待预测软件模块和跨项目历史软件模块聚类结果图。
[0023] 图4本发明实施例的数据过采样后结果图。

具体实施方式

[0024] 为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
[0025] 请见图1,本发明提供的一种基于数据筛选和数据过采样的跨项目缺陷预测方法,包括以下步骤:
[0026] 步骤1:抽取跨项目历史软件模块;
[0027] 在一个项目刚进行开发时,由于没有任何历史软件模块数据,不能训练本项目缺陷预测模型。因此需要借用跨项目历史软件模块数据。因此抽取有用的跨项目历史软件模块,软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数。标注所有的跨项目历史软件模块是否有缺陷,标记有缺陷的软件模块的类标号为Y,标记无缺陷的软件模块的类标号为N。
[0028] 步骤2:提取跨项目历史软件模块的度量属性;
[0029] 提取了19个度量属性:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc)。其中,McCabe是一种度量内部程序的复杂性的方法。
[0030] 在经过了步骤1和步骤2后,本实施例假设在提取度量属性和标记类标号后形成了25个跨项目模块数据,每个软件模块数据由一个19维的度量属性向量xi=(x1i,x2i,x3i,x4i,x5i,x6i,x7i,x8i,x9i,x10i,x11i,x12i,x13i,x14i,x15i,x16i,x17i,x18i,x19i)和该模块的类标号组成:
[0031] X1={(13,2,0,18,112,76,3,17,1,0.88,1000,1,1,0.4,0.3,1,1,75.8,10),Y},[0032] X2={(10,3,0,11,17,33,3,11,9,0.56,79,1,0,0.67,0.267,1,1,6.7,3),Y},[0033] X3={(13,1,0,66,13,78,66,1,13,2,13,0,0,0,0.369,0,0,0,1),Y},
[0034] X4={(17,1,0,84,17,136,80,7,17,2,17,0,0,0,0.222,0,0,0,1),N},
[0035] X5={(0,1,0,27,0,0,26,1,0,2,0,0,0,0,0,0,0,0,0),Y},
[0036] X6={(2,3,0,3,7,1,0,3,1,2,24,0,0,0.833333333,0.667,1,1,11,1),N},[0037] X7={(5,3,0,8,31,2,1,8,3,0.5,122,1,1,0.8,0.4,0,0,23,3),N},
[0038] X8={(26,1,1,10,47,0,5,5,24,0.08,236,1,1,0,0.258,0,0,8.038,2),Y}[0039] X9={(3,1,0,8,14,3,3,5,3,2,85,0,0,0,0.5,0,0,27.33333333,9),Y},[0040] X10={(13,1,0,1,17,64,0,1,12,0.917,117,1,0,0,0.462,0,0,7.462,3),N},[0041] X11={(4,1,0,4,4,6,2,2,4,2,4,0,0,0,1,0,0,0,1),Y},
[0042] X12={(10,1,0,6,31,1,0,6,9,0.5,156,1,1,0,0.355555556,0,0,14.4,1),N},[0043] X13={(7,1,0,6,19,7,0,6,6,0.75,117.0,1,2,0,0.367,0,0,15.143,3),N};
[0044] X14={(38,1,0,30,155,485,0,30,34,0.9,1564,1,7,0,0.14,0,0,39.6,7),N},[0045] X15={(25,1,0,13,74,0,0,13,23,0.444,901,1,2,0,0.2,0,0,34.92,1),Y},[0046] X16={(13,1,0,19,56,54,0,19,11,0.9,224,1,4,0,0.17,0,0,15.54,4,),N},[0047] X17={(7,4,4,48,12,19,47,1,6,0.94,44,0.33,0,0.867,0.458,0,0,4.86,1),N},
[0048] X18={(28,1,0,27,28,378.0,24.0,3.0,28,2,28,0.0,0.0,0.0,0.228571429,0,0,0),N},
[0049] X19={(4.0,2.0,0,1,10,4.0,0.0,1.0,4.0,0.66,49.0,1.0,0,0.8125,0.43,1.0,1.0,11.0),N},
[0050] X20={(5,3,0.0,1,41,2,0,1.0,2.0,0.8333,236.0,1.0,0,0.88,0.35,1.0,2.0,45.6,2.0),N},
[0051] X21={(12.0,1.0,0,6,12,66,3,3.0,12.0,2.0,12.0,0.0,0.0,0.0,0.333,0.0,0.0,0.0,1.0),N},
[0052] X22={(16.0,1.0,0.0,18.0,23.0,98.0,15.0,3.0,16,0.92,122,1,3,0,0.17,1,1,6.1,6.0),N},
[0053] X23={(3.0,1.0,0.0,2.0,5.0,3.0,0.0,2.0,3.0,2.0,11.0,0.0,0.0,0.0,0.5,0.0,0,2.66,1),N},
[0054] X24={(2.0,1.0,0.0,1.0,6.0,1.0,1.0,0.0,2.0,2.0,20.0,0.0,0.0,0.0,0.5,0.0,0.0,9.0,1,N},
[0055] X25={(2.0,1.0,0.0,5.0,2.0,1.0,3.0,2.0,2.0,2.0,2.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1),N};
[0056] 步骤3:抽取本项目待预测软件模块,软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数,这些待预测软件模块标记为“?”;
[0057] 步骤4:提取本项目待预测软件模块与步骤2中相同的19个度量属性;
[0058] 在经过了步骤3和步骤4后,本实施例假设在提取度量属性和标记类标号后形成了5个本项目待预测软件模块数据:
[0059] X26={(7,1,0,4,7,21,2,2,7,2,7,0,0,0,0.357142857,0,0,0,1),?},
[0060] X27={(4,1,0,2,4,6,2,0,4,2,4,0,0,0,0.875,0,0,0,1),?},
[0061] X28={(35,1,0,29,12,0,373,0,29,31,0.9,1250,1,5,0,0.17,0,0,34.1,5),?},[0062] X29={(8,1,0,16,21,14,13,3,8,0.81,111,1,0,0,0.35,1,1,12.5,7),?},[0063] X30={(11,1,0,8,18,13,7,1,11,0.775,130,1,1,0,0.29,1,1,10.45,7),?}。
[0064] 这5个本项目待预测软件模块数据和25个跨项目历史软件模块数据可以形成如图2的本项目待预测软件模块和跨项目历史软件模块在19维空间上的分布图,约定:“●”表示类标号为Y的跨项目历史软件模块,“○”表示类标号为N的跨项目历史软件模块,“□”表示本项目待预测软件模块。
[0065] 步骤5:对所有跨项目历史软件模块数据和所有本项目待预测软件模块数据执行凝聚型层次聚类AGENES算法,获得筛选后的跨项目历史软件模块数据。执行以下子步骤:
[0066] 步骤5.1:设置终止簇数目,将所有跨项目历史软件模块数据和所有本项目待预测软件模块数据中的每一个软件模块单独当作为一个簇。本实施例中,设置终止簇数目为3,初始阶段,共30个软件模块即30个簇,记为C1、C2、…、C30;
[0067] 步骤5.2:循环找到欧式距离最小的两个簇,合并成新簇,直到簇数达到终止簇数目的预设值;
[0068] 本实施例中,首先找到距离最小的两个簇:C1={X1}与C3={X3},将两个簇合并成新簇C1’={X1,X3}。随后重复步骤再次找到距离最小的两个簇:C13={X13}与C30={X30},将两个簇合并成新簇C2’={X13,X30},最终,请见图3本发明实施例的本项目待预测软件模块和跨项目历史软件模块聚类结果图,本实施例中所有的本项目待预测软件模块数据和所有的跨项目历史软件模块数据最终被聚类为三个簇:C1={X1,X3,X8,X15,X16,X17,X19,X20,X23,X26,X29,X30},C2={X4,X10,X12,X22}和C3={X2,X5,X6,X7,X9,X11,X13,X14,X 18,X 21,X24,X 25,X27,X28};
[0069] 步骤5.3:选择包含本项目待预测软件模块的簇中的所有跨项目历史软件模块数据,即为筛选后的跨项目历史软件模块数据;
[0070] 请见图3,在本实施例中,簇C1包含本项目待预测软件模块X26,X29和X30,因此C1中的所有跨项目历史软件模块数据被选入,同理簇C3中,包含本项目待预测软件模块X27和X28,簇C3中的所有跨项目历史软件模块被选入。由于簇C2中没有包含本项目待预测软件模块,丢弃簇C2中所有跨项目历史软件模块数据。因此最终的筛选后的跨项目历史软件模块数据包含软件模块X1,X2,X3,X5,X6,X7,X8,X9,X11,X13,X14,X15,X16,X17,X 18,X19,X20,X 21,X23,X24,X 25。
[0071] 步骤6:对筛选后的跨项目历史软件模块数据进行过采样,使跨项目历史软件模块数据平衡。执行以下子步骤:
[0072] 步骤6.1:搜索类标号为Y的筛选后的跨项目历史软件模块Xi在同一个簇中的k个类标号也为Y的近邻软件模块,记为Xi(near);
[0073] 本实施例设k为3,以软件模块X8为例,搜寻X8的3个最近邻软件模块,尽管由图2可以看出,X8的3个最近邻软件模块分别为:X3、X5和X15。但是X5在层次聚类阶段被划分到不同的簇中,因此,X8在同一个簇中的3个类标号也为Y的近邻软件模块为X1,X3和X15,记为X8(near)={X1,X3,X15}。
[0074] 步骤6.2:设定数据集的过采样倍率m(m
[0075] 本实施例令过采样倍率m=1,即从X8的3个类标号也为Y的近邻X8(near)={X1,X3,X15}中随机选取1个软件模块进行插值操作合成新的软件模块。假设抽取的软件模块为X3,假设rand(0,1)函数取值为0.5,新的软件模块X31的19维的度量属性向量x31=x8+0.5×(x8-x3)=(19.5,1,0.5,38,30,39,36.5,3,18.5,1.04,124.5,0.5,0.5,0,0.3135,0,0,4.019,1.5)。新合成的软件模块X31的类标号为Y。
[0076] 步骤6.3:对全部的T个类标号为Y的筛选后的跨项目历史软件模块重复步骤6.1和6.2的操作,共合成m×T个新的软件模块;
[0077] 本实施例对全部的类标号为Y的筛选后的跨项目历史软件模块即X1,X2,X3,X5,X8,X9,X11,X15重复步骤6.1和6.2的操作,共合成了8个新的软件模块:
[0078] X31={(19.5,1,0.5,38,30,39,36.5,3,18.5,1.04,124.5,0.5,0.5,0,0.3135,0,0,4.019,1.5),Y},
[0079] X32={13.0,1.5,0.0,42.0,62.5,77.0,34.5,9.0,7.0,1.44,506.5,0.5,0.5,0.2,0.3345,0.5,0.5,37.9,5.5,Y},
[0080] X33={25.5,1.0,0.5,11.5,60.5,0.0,2.5,9.0,23.5,0.262,568.5,1.0,1.5,0.0,0.229,0.0,0.0,21.479,1.5,Y},
[0081] X34={19.0,1.5,0.0,15.5,93.0,38.0,1.5,15.0,12.0,0.662,950.5,1.0,1.5,0.2,0.25,0.5,0.5,55.36,5.5,Y},
[0082] X35={5.0,2.0,0.0,19.0,8.5,16.5,14.5,6.0,4.5,1.28,39.5,0.5,0.0,0.335,0.1335,0.5,0.5,3.35,1.5,Y},
[0083] X36={1.5,1.0,0.0,17.5,7.0,1.5,14.5,3.0,1.5,2.0,42.5,0.0,0.0,0.0,0.25,0.0,0.0,13.666666665,4.5,Y},
[0084] X37={3.5,1.0,0.0,6.0,9.0,4.5,2.5,3.5,3.5,2.0,44.5,0.0,0.0,0.0,0.75,0.0,0.0,13.666666665,5.0,Y},
[0085] X38={7.0,2.0,0.0,7.5,10.5,19.5,2.5,6.5,6.5,1.28,41.5,0.5,0.0,0.335,0.6335,0.5,0.5,3.35,2.0,Y};
[0086] 这5个本项目待预测软件模块数据、21个筛选后的跨项目历史软件模块数据和5个新合成的软件模块可以形成如图4所示的在19维空间上的分布图。
[0087] 步骤7:令通过步骤5产生的筛选后的跨项目历史软件模块数据和通过步骤6产生的新合成的软件模块数据为训练集D,基于训练集D训练出朴素贝叶斯预测模型;
[0088] 由于软件模块属于有缺陷的类(Y)和无缺陷的类(N)的先验概率未知,则假定两个类是等概率的,因此训练朴素贝叶斯算法模型只需对训练集D计算类标号为Y的软件模块在每个度量属性Ak上的均值μkY和标准差σkY,计算类标号为N的软件模块在每个度量属性Ak上的均值μkN和标准差σkN。本实施例中D={X1,X2,X3,X5,X6,X7,X8,X9,X11,X13,X14,X15,X16,X17,X 18,X19,X20,X 21,X23,X24,X 25,X31,X32,X 33,X34,X35,X 36,X37,X 38},求得类标号为Y的软件模块在第一个度量属性上的均值μ1Y=11.75和标准差σ1Y=8.67。同理求得类标号为N的软件模块在第一个度量属性上的均值μ1N和标准差σ1N,类标号为Y的软件模块在第二个度量属性上的均值μ2Y和标准差σ2Y,类标号为N的软件模块在第二个度量属性上的均值μ2N和标准差σ2N,…,类标号为Y的软件模块在第19个度量属性上的均值μ19Y和标准差σ19Y,类标号为N的软件模块在第19个度量属性上的均值μ19N和标准差σ19N。
[0089] 步骤8:用训练得到的朴素贝叶斯预测模型预测本项目待预测软件模块X;
[0090] 步骤8.1:计算本项目待预测软件模块X有缺陷的后验概率:
[0091] 其中xk为软件模块X在第k个度量属性上的值。
[0092] 计算本项目待预测软件模块X无缺陷的后验概率:
[0093]
[0094] 本实施例预测待预测本项目待预测软件模块X26是否有缺陷,其第一个度量属性的值为7。按照公式计算出:
[0095]
[0096] 同样计算出:
[0097] P(x2|Y),…,P(x19|Y),P(x1|N),P(x2|N),…,P(x19|N);
[0098] 于是:
[0099]
[0100]
[0101] 步骤8.2:判定本项目待预测软件模块X是否有缺陷;
[0102] 如果P(X|N)>P(X|Y),朴素贝叶斯分类方法判断其类标号为N,即该软件模块为无缺陷的软件模块;
[0103] 如果P(X|N)
[0104] 本实施例步骤8.1中求得软件模块X26的P(X26|Y)=3.02567716543e-19,P(X26|N)=6.27606977667e-29,由于P(X26|Y)>P(X26|N),朴素贝叶斯分类方法判断其类标号为Y,即预测该软件模块为有缺陷的软件模块。
[0105] 应当理解的是,本说明书未详细阐述的部分均属于现有技术。
[0106] 应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。