CN107133176A - 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 - Google Patents
一种基于半监督聚类数据筛选的跨项目缺陷预测方法 Download PDFInfo
- Publication number
- CN107133176A CN107133176A CN201710322848.XA CN201710322848A CN107133176A CN 107133176 A CN107133176 A CN 107133176A CN 201710322848 A CN201710322848 A CN 201710322848A CN 107133176 A CN107133176 A CN 107133176A
- Authority
- CN
- China
- Prior art keywords
- mrow
- software module
- project
- msub
- history
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2415—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
- G06F18/24155—Bayesian classification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于半监督聚类数据筛选的跨项目缺陷预测方法,该方法利用半监督聚类算法对软件模块数据进行聚类发现子簇;随后,收集所有生成的簇中与本项目历史软件模块类标号相同的所有的跨项目历史软件模块即为筛选后的跨项目软件模块数据;最后基于筛选后的跨项目软件模块数据和所有的本项目历史软件模块数据利用朴素贝叶斯分类算法建立跨项目缺陷预测模型,预测待预测的本项目软件模块数据。本发明能够使跨项目软件预测模型避免受到不相关跨项目软件模块数据的影响,充分利用跨项目历史软件模块信息和本项目历史软件模块信息,增强了跨项目软件缺陷预测模型的性能。
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,挖掘本项目软件历史仓库,从中抽取出有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数等。标注所有的本项目软件模块是否有缺陷,标记有缺陷的软件模块的类标号为Y,标记无缺陷的软件模块的类标号为N;
步骤2,抽取本项目现有的待预测的软件模块。这些待预测的本项目软件模块标记为“?”;
步骤3,提取本项目软件模块的度量属性,提取了20个度量属性:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc);
步骤4,由于在一个项目刚进行开发时,本项目历史软件模块数据很少,不能训练本项目缺陷预测模型。因此需要借用跨项目历史软件模块数据。从跨项目软件历史仓库中抽取有用的软件模块,将有缺陷的软件模块标记为Y,无缺陷的软件模块标记为N;
步骤5,提取跨项目所有软件模块与步骤3中相同的20个度量属性;
步骤6,对所有跨项目软件模块数据和所有本项目软件模块数据执行半监督聚类,获得筛选后的跨项目软件模块数据。执行以下子步骤,
步骤6.1,标记所有跨项目软件模块和所有本项目软件模块未为访问,随机选择一个未被访问的已被标记为Y或N的本项目历史软件模块,将其边界权值赋为0,并将其余未被访问所有本项目软件模块和所有跨项目软件模块的边界权值赋为无穷。边界权值定义了两个实例密度相连的最小半径值;
步骤6.2,循环选择未被访问的已被标记为Y或N的本项目历史软件模块创建簇,并逐渐扩充簇,直至所有的已被标记为Y或N的本项目历史软件模块均有其所属簇。每次循环中,选择边界权值最小的软件模块加入簇,一旦在当前簇中出现类标号不同的本项目历史软件模块,表明两个需要被分离的簇即将被连接,此时停止对簇的扩充,将当前簇中所有软件模块标记为已访问,并重新选择下一个未被访问的已被标记为Y或N的本项目历史软件模块创建簇;利用边界权值计算公式更新所有未被访问的软件模块的边界权值,以推动循环;当所有已被标记为Y或N的本项目历史软件模块均有所属簇,半监督聚类过程结束;
步骤6.3,获得筛选后的跨项目软件模块。在步骤6.2中产生的每个簇中一定会包含已被标记为Y或N的本项目历史软件模块,有可能包含已被标记为Y或N的跨项目历史软件模块,有可能包含标记为“?”的待预测本项目软件模块。选择所有生成的簇中与本项目历史软件模块类标号相同的所有跨项目历史软件模块即为筛选后的跨项目软件模块数据;
步骤7,对通过半监督聚类算法筛选出的跨项目软件模块数据和本项目历史软件模块数据混合形成混合训练集D,训练出朴素贝叶斯预测模型。由于软件模块属于有缺陷的类(Y)和无缺陷的类(N)的先验概率未知,则假定两个类是等概率的,因此训练朴素贝叶斯算法模型只需对混合训练集D计算类标号为Y的软件模块在每个特征Ak上的均值μkY和标准差σkY,计算类标号为N的软件模块在每个特征Ak上的均值μkN和标准差σkN;
步骤8,用训练得到的预测模型预测待预测的本项目软件模块X;
步骤8.1,计算待预测本项目软件模块X有缺陷的后验概率:
计算待预测本项目软件模块X无缺陷的后验概率:
步骤8.2,判定待预测的本项目软件模块是否有缺陷。如果P(X|N)>P(X|Y),朴素贝叶斯分类方法判断其类标号为N,即该软件模块为无缺陷的软件模块。如果P(X|N)<P(X|Y),朴素贝叶斯分类方法判断其类标记为Y,即该软件模块为有缺陷的软件模块。
相对于国内外已有的跨项目软件缺陷预测方法,本发明针对跨项目软件缺陷预测中大量不相关的跨项目软件模块数据损害了跨项目软件缺陷预测模型性能的问题,提出了一种基于半监督聚类数据筛选的跨项目缺陷预测方法。首先,该方法结合全部本项目历史软件模块、全部跨项目历史软件模块和全部待预测的本项目软件模块;然后,利用半监督聚类算法对这些模块数据进行聚类发现子簇;随后,收集所有生成的簇中与本项目历史软件模块类标号相同的所有的跨项目历史软件模块即为筛选后的跨项目软件模块数据;最后基于筛选后的跨项目软件模块数据和所有的本项目历史软件模块数据利用朴素贝叶斯分类算法建立跨项目缺陷预测模型,预测待预测的本项目软件模块数据。因此本发明具有如下优点:能够利用半监督聚类算法筛选出真正和本项目模块数据相似的跨项目软件模块数据,使跨项目软件预测模型避免受到不相关跨项目软件模块数据的影响,充分利用跨项目历史软件模块信息和本项目历史软件模块信息,增强了跨项目软件缺陷预测模型的性能。
附图说明
图1本发明实施例的基于半监督聚类数据筛选的跨项目缺陷预测流程图。
图2本发明实施例的本项目实例和跨项目实例在20维空间上的分布图。
图3本发明实施例的本项目实例和跨项目实例聚类结果图。
具体实施方式
本发明设计的基于半监督聚类数据筛选的跨项目缺陷预测方法流程实施例具体实现过程如下:
步骤1,挖掘本项目软件历史仓库,从中抽取出有用的软件模块。软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数等。标注所有的本项目软件模块是否有缺陷,标记有缺陷的软件模块的类标号为Y,标记无缺陷的软件模块的类标号为N。
步骤2,抽取本项目现有的待预测的软件模块。这些待预测的本项目软件模块标记为“?”。
步骤3,提取本项目软件模块的度量属性,提取了20个度量属性:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc)。
在经过了步骤1-3后,本实施例假设在提取度量属性和标记类标号后形成了8个本项目模块数据:
X1={13,2,0,18,112,76,3,17,1,0.88,1000,1,1,0.4,0.3,1,1,75.8,10,5.2,N},
X2={10,3,0,11,17,33,3,11,9,0.56,79,1,0,0.67,0.267,1,1,6.7,3,1.1,Y},
X3={13,1,0,66,13,78,66,1,13,2,13,0,0,0,0.369,0,0,0,1,1,Y},
X4={17,1,0,84,17,136,80,7,17,2,17,0,0,0,0.222,0,0,0,1,1,Y},
X5={0,1,0,27,0,0,26,1,0,2,0,0,0,0,0,0,0,0,0,0,?},
X6={2,3,0,3,7,1,0,3,1,2,24,0,0,0.833333333,0.667,1,1,11,1,0.5,?},
X7={5,3,0,8,31,2,1,8,3,0.5,122,1,1,0.8,0.4,0,0,23,3,1.2,?},
X8={26,1,1,10,47,0,5,5,24,0.08,236,1,1,0,0.258,0,0,8.038,2,1,N}
步骤4,由于在一个项目刚进行开发时,本项目历史软件模块数据很少,不能训练本项目缺陷预测模型。因此需要借用跨项目历史软件模块数据。从跨项目软件历史仓库中抽取有用的软件模块,将有缺陷的软件模块标记为Y,无缺陷的软件模块标记为N。
步骤5,提取跨项目所有软件模块与步骤3中相同的20个度量属性。
在经过了步骤4-5后,本实施例假设在提取度量属性和标记类标号后形成了14个跨项目软件模块数据:
X9={3,1,0,8,14,3,3,5,3,2,85,0,0,0,0.5,0,0,27.33333333,9,3.3333,Y},
X10={13,1,0,1,17,64,0,1,12,0.917,117,1,0,0,0.462,0,0,7.462,3,1.38,N},
X11={4,1,0,4,4,6,2,2,4,2,4,0,0,0,1,0,0,0,1,1,N},
X12={10,1,0,6,31,1,0,6,9,0.5,156,1,1,0,0.355555556,0,0,14.4,1,0.8,Y},
X13={7,1,0,6,19,7,0,6,6,0.75,117.0,1,2,0,0.367,0,0,15.143,3,1.1429,N},
X14={38,1,0,30,155,485,0,30,34,0.9,1564,1,7,0,0.14,0,0,39.6,7,1.5,Y},
X15={25,1,0,13,74,0,0,13,23,0.444,901,1,2,0,0.2,0,0,34.92,1,0.92,Y},
X16={13,1,0,19,56,54,0,19,11,0.9,224,1,4,0,0.17,0,0,15.54,4,1.1538,Y},
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,0.29,N},
X18={7,1,0,4,7,21,2,2,7,2,7,0,0,0,0.357142857,0,0,0,1,1,Y},
X19={4,1,0,2,4,6,2,0,4,2,4,0,0,0,0.875,0,0,0,1,1,N},
X20={35,1,0,29,12,0,373,0,29,31,0.9,1250,1,5,0,0.17,0,0,34.1,5,1.2,Y},
X21={8,1,0,16,21,14,13,3,8,0.81,111,1,0,0,0.35,1,1,12.5,7,1.875,Y},
X22={11,1,0,8,18,13,7,1,11,0.775,130,1,1,0,0.29,1,1,10.45,7,1.36,N},
这22个本项目软件模块数据和跨项目软件模块数据可以形成如图2所示的在20维空间上的分布图。约定:“○”表示类标号为Y的跨项目软件模块,“●”表示类标号为N的跨项目软件模块,“△”表示类标号为Y的本项目软件模块,表示类标号为N的本项目软件模块,表示需要预测的本项目软件模块。
步骤6,对所有跨项目软件模块数据和所有本项目软件模块数据执行半监督聚类,获得筛选后的跨项目软件模块数据。执行以下子步骤,
步骤6.1,标记所有跨项目软件模块和所有本项目软件模块未为访问,随机选择一个未被访问的已被标记为Y或N的本项目历史软件模块,将其边界权值赋为0,并将其余未被访问所有本项目软件模块和所有跨项目软件模块的边界权值赋为无穷。边界权值定义了两个实例密度相连的最小半径值。
步骤6.2,循环选择未被访问的已被标记为Y或N的本项目历史软件模块创建簇,并逐渐扩充簇,直至所有的已被标记为Y或N的本项目历史软件模块均有其所属簇。每次循环中,选择边界权值最小的软件模块加入簇,一旦在当前簇中出现类标号不同的本项目历史软件模块,表明两个需要被分离的簇即将被连接,此时停止对簇的扩充,将当前簇中所有软件模块标记为已访问,并重新选择下一个未被访问的已被标记为Y或N的本项目历史软件模块创建簇;利用边界权值计算公式更新所有未被访问的软件模块的边界权值,以推动循环;当所有已被标记为Y或N的本项目历史软件模块均有所属簇,半监督聚类过程结束。在本实施例中,首先,X3由于边界权值为0被加入簇C1,以X3为中心,更新剩余的未被访问的软件模块的边界权值,继续选取边界权值最小的模块加入簇C1,此时X13被加入簇C1,以X13为中心,再次更新剩余的未被访问的软件模块的边界权值,重复寻找边界权值最小的软件模块加入簇C1,并以新加入簇的软件模块为中心更新剩余软件模块的边界权值,于是X7,X9,X12,X14也被加入簇C1。直至选择到X8,由于其类标号与X3不同,停止对簇C1的扩充。同以上步骤,重新创建新的簇。最终,如图3,我们创建了3个簇C1,C2,C3。
步骤6.3,获得筛选后的跨项目软件模块。在步骤6.2中产生的每个簇中一定会包含已被标记为Y或N的本项目历史软件模块,有可能包含已被标记为Y或N的跨项目历史软件模块,有可能包含标记为“?”的待预测本项目软件模块。选择所有生成的簇中与本项目历史软件模块类标号相同的所有跨项目历史软件模块即为筛选后的跨项目软件模块数据。本实施例中所有的本项目软件模块数据和所有的跨项目软件模块数据最终被聚类为三个簇,即C1={X3,X7,X9,X12,X13,X14},C2={X1,X8,X10,X11,X17},C3={X2,X4,X6,X15,X16,X20,X21,X22}。在簇C1中,跨项目软件模块X9,X12,X14由于与本公司历史软件模块X3的类标号相同,被选入最终的训练集中,而跨项目软件模块X13由于与本公司历史软件模块X3的类标号不同而被抛弃不予采用。簇C2、C3的数据筛选同C1。因此最终的跨项目软件模块训练集包含模块X9,X10,X11,X12,X14,X15,X16,X17,X20,X21。
步骤7,对通过半监督聚类算法筛选出的跨项目软件模块数据和本项目历史软件模块数据混合形成混合训练集D,训练出朴素贝叶斯预测模型。由于软件模块属于有缺陷的类(Y)和无缺陷的类(N)的先验概率未知,则假定两个类是等概率的,因此训练朴素贝叶斯算法模型只需对混合训练集D计算类标号为Y的软件模块在每个特征Ak上的均值μkY和标准差σkY,计算类标号为N的软件模块在每个特征Ak上的均值μkN和标准差σkN。本实施例中D={X1,X2,X3,X4,X8,X9,X10,X11,X12,X14,X15,X16,X17,X20,X21},求得类标号为Y的软件模块在特征A1上的均值μ1Y=17.2和标准差σ1Y=11.12。同理求得类标号为N的软件模块在特征A1上的均值μ1N和标准差σ1N,类标号为Y的软件模块在特征A2上的均值μ2Y和标准差σ2Y,类标号为N的软件模块在特征A2上的均值μ2N和标准差σ2N,…,类标号为Y的软件模块在特征A20上的均值μ20Y和标准差σ20Y,类标号为N的软件模块在特征A20上的均值μ20N和标准差σ20N。
步骤8,用训练得到的预测模型预测待预测的本项目软件模块X。
步骤8.1,计算待预测本项目软件模块X有缺陷的后验概率:
计算待预测本项目软件模块X无缺陷的后验概率:
本实施例预测待预测本项目模块X6是否有缺陷,其特征A1的值为2。按照公式计算出同样计算出P(x2|Y)…P(x20|Y),P(x1|N),P(x2|N)…,P(x20|N),于是P(X6|N)=7.084701372070163E-25。
步骤8.2,判定待预测的本项目软件模块是否有缺陷。如果P(X|N)>P(X|Y),朴素贝叶斯分类方法判断其类标号为N,即该软件模块为无缺陷的软件模块。如果P(X|N)<P(X|Y),朴素贝叶斯分类方法判断其类标记为Y,即该软件模块为有缺陷的软件模块。本实施例步骤8.1中求得软件模块X6的P(X6|Y)=3.172014388856017E-32,P(X6|N)=7.084701372070163E-25,由于P(X6|N)>P(X6|Y),朴素贝叶斯分类方法判断其类标记为N,即预测该软件模块为无缺陷的软件模块。
Claims (1)
1.一种基于半监督聚类数据筛选的跨项目缺陷预测方法,其特征是,包括以下步骤:
步骤1,挖掘本项目软件历史仓库,从中抽取出有用的软件模块;软件模块粒度可根据实际应用场景,可设置为文件、包、类或函数等;标注所有的本项目软件模块是否有缺陷,标记有缺陷的软件模块的类标号为Y,标记无缺陷的软件模块的类标号为N;
步骤2,抽取本项目现有的待预测的软件模块;这些待预测的本项目软件模块标记为“?”;
步骤3,提取本项目软件模块的度量属性,提取了20个度量属性:加权方法数(wmc),继承树深度(dit),孩子数(noc),对象类之间的耦合度(cbo),类的响应(rfc),内聚缺乏度(lcom),传入耦合(ca),传出耦合(ce),公开方法数(npm),代码行数(loc),数据访问度量(dam),聚合度量(moa),功能抽象度量(mfa),方法间的内聚度(cam),继承耦合(ic),方法间耦合(cbm),平均方法复杂度(amc),最大McCabe环形复杂度(max_cc),平均McCabe环形复杂度(avg_cc);
步骤4,由于在一个项目刚进行开发时,本项目历史软件模块数据很少,不能训练本项目缺陷预测模型;因此需要借用跨项目历史软件模块数据;从跨项目软件历史仓库中抽取有用的软件模块,将有缺陷的软件模块标记为Y,无缺陷的软件模块标记为N;
步骤5,提取跨项目所有软件模块与步骤3中相同的20个度量属性;
步骤6,对所有跨项目软件模块数据和所有本项目软件模块数据执行半监督聚类,获得筛选后的跨项目软件模块数据;执行以下子步骤,
步骤6.1,标记所有跨项目软件模块和所有本项目软件模块未为访问,随机选择一个未被访问的已被标记为Y或N的本项目历史软件模块,将其边界权值赋为0,并将其余未被访问所有本项目软件模块和所有跨项目软件模块的边界权值赋为无穷;边界权值定义了两个实例密度相连的最小半径值;
步骤6.2,循环选择未被访问的已被标记为Y或N的本项目历史软件模块创建簇,并逐渐扩充簇,直至所有的已被标记为Y或N的本项目历史软件模块均有其所属簇;每次循环中,选择边界权值最小的软件模块加入簇,一旦在当前簇中出现类标号不同的本项目历史软件模块,表明两个需要被分离的簇即将被连接,此时停止对簇的扩充,将当前簇中所有软件模块标记为已访问,并重新选择下一个未被访问的已被标记为Y或N的本项目历史软件模块创建簇;利用边界权值计算公式更新所有未被访问的软件模块的边界权值,以推动循环;当所有已被标记为Y或N的本项目历史软件模块均有所属簇,半监督聚类过程结束;
步骤6.3,获得筛选后的跨项目软件模块;在步骤6.2中产生的每个簇中一定会包含已被标记为Y或N的本项目历史软件模块,有可能包含已被标记为Y或N的跨项目历史软件模块,有可能包含标记为“?”的待预测本项目软件模块;选择所有生成的簇中与本项目历史软件模块类标号相同的所有跨项目历史软件模块即为筛选后的跨项目软件模块数据;
步骤7,对通过半监督聚类算法筛选出的跨项目软件模块数据和本项目历史软件模块数据混合形成混合训练集D,训练出朴素贝叶斯预测模型;由于软件模块属于有缺陷的类(Y)和无缺陷的类(N)的先验概率未知,则假定两个类是等概率的,因此训练朴素贝叶斯算法模型只需对混合训练集D计算类标号为Y的软件模块在每个特征Ak上的均值μkY和标准差σkY,计算类标号为N的软件模块在每个特征Ak上的均值μkN和标准差σkN;
步骤8,用训练得到的预测模型预测待预测的本项目软件模块X;
步骤8.1,计算待预测本项目软件模块X有缺陷的后验概率:
<mrow>
<mi>P</mi>
<mrow>
<mo>(</mo>
<mrow>
<mi>X</mi>
<mo>|</mo>
<mi>Y</mi>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mi>P</mi>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>|</mo>
<mi>Y</mi>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mi>g</mi>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>,</mo>
<msub>
<mi>&mu;</mi>
<mrow>
<mi>k</mi>
<mi>Y</mi>
</mrow>
</msub>
<mo>,</mo>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>Y</mi>
</mrow>
</msub>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mfrac>
<mn>1</mn>
<mrow>
<msqrt>
<mrow>
<mn>2</mn>
<mi>&pi;</mi>
</mrow>
</msqrt>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>Y</mi>
</mrow>
</msub>
</mrow>
</mfrac>
<msup>
<mi>e</mi>
<mrow>
<mo>-</mo>
<msup>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>-</mo>
<msub>
<mi>&mu;</mi>
<mrow>
<mi>k</mi>
<mi>Y</mi>
</mrow>
</msub>
</mrow>
<mo>)</mo>
</mrow>
<mn>2</mn>
</msup>
<mo>/</mo>
<mn>2</mn>
<msup>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>Y</mi>
</mrow>
</msub>
<mn>2</mn>
</msup>
</mrow>
</msup>
<mo>;</mo>
</mrow>
计算待预测本项目软件模块X无缺陷的后验概率:
<mrow>
<mi>P</mi>
<mrow>
<mo>(</mo>
<mrow>
<mi>X</mi>
<mo>|</mo>
<mi>N</mi>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mi>P</mi>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>|</mo>
<mi>N</mi>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mi>g</mi>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>,</mo>
<msub>
<mi>&mu;</mi>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
<mo>,</mo>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
<mo>)</mo>
</mrow>
<mo>=</mo>
<msubsup>
<mi>&Pi;</mi>
<mrow>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</msubsup>
<mfrac>
<mn>1</mn>
<mrow>
<msqrt>
<mrow>
<mn>2</mn>
<mi>&pi;</mi>
</mrow>
</msqrt>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
</mfrac>
<msup>
<mi>e</mi>
<mrow>
<mo>-</mo>
<msup>
<mrow>
<mo>(</mo>
<mrow>
<msub>
<mi>x</mi>
<mi>k</mi>
</msub>
<mo>-</mo>
<msub>
<mi>&mu;</mi>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
</mrow>
<mo>)</mo>
</mrow>
<mn>2</mn>
</msup>
<mo>/</mo>
<mn>2</mn>
<msup>
<msub>
<mi>&sigma;</mi>
<mrow>
<mi>k</mi>
<mi>N</mi>
</mrow>
</msub>
<mn>2</mn>
</msup>
</mrow>
</msup>
<mo>;</mo>
</mrow>
步骤8.2,判定待预测的本项目软件模块是否有缺陷;如果P(X|N)>P(X|Y),朴素贝叶斯分类方法判断其类标号为N,即该软件模块为无缺陷的软件模块;如果P(X|N)<P(X|Y),朴素贝叶斯分类方法判断其类标记为Y,即该软件模块为有缺陷的软件模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710322848.XA CN107133176A (zh) | 2017-05-09 | 2017-05-09 | 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710322848.XA CN107133176A (zh) | 2017-05-09 | 2017-05-09 | 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107133176A true CN107133176A (zh) | 2017-09-05 |
Family
ID=59731669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710322848.XA Pending CN107133176A (zh) | 2017-05-09 | 2017-05-09 | 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107133176A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107346286A (zh) * | 2017-07-03 | 2017-11-14 | 武汉大学 | 一种基于核主成分分析和极限学习机的软件缺陷预测方法 |
CN107391365A (zh) * | 2017-07-06 | 2017-11-24 | 武汉大学 | 一种面向软件缺陷预测的混合特征选择方法 |
CN110175726A (zh) * | 2019-06-18 | 2019-08-27 | 中国人民解放军国防科技大学 | 一种基于迁移性分析的跨项目缺陷预测方法 |
CN110825644A (zh) * | 2019-11-11 | 2020-02-21 | 南京邮电大学 | 一种跨项目软件缺陷预测方法及其系统 |
CN112148605A (zh) * | 2020-09-22 | 2020-12-29 | 华南理工大学 | 一种基于谱聚类的半监督学习的软件缺陷预测方法 |
CN112199287A (zh) * | 2020-10-13 | 2021-01-08 | 北京理工大学 | 基于强化混合专家模型的跨项目软件缺陷预测方法 |
CN113919449A (zh) * | 2021-12-15 | 2022-01-11 | 国网江西省电力有限公司供电服务管理中心 | 基于精准模糊聚类算法的居民电力数据聚类方法及装置 |
CN114791886A (zh) * | 2022-06-21 | 2022-07-26 | 纬创软件(武汉)有限公司 | 一种软件问题跟踪方法和系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8949653B1 (en) * | 2012-08-03 | 2015-02-03 | Symantec Corporation | Evaluating high-availability configuration |
-
2017
- 2017-05-09 CN CN201710322848.XA patent/CN107133176A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8949653B1 (en) * | 2012-08-03 | 2015-02-03 | Symantec Corporation | Evaluating high-availability configuration |
Non-Patent Citations (2)
Title |
---|
BURAK TURHAN ET AL.: "Empirical evaluation of the effects of mixed project data on learning defect predictors", 《INFORMATION AND SOFTWARE TECHNOLOGY》 * |
廖胜平: "基于半监督学习的软件缺陷预测方法研究", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107346286B (zh) * | 2017-07-03 | 2020-05-12 | 武汉大学 | 一种基于核主成分分析和极限学习机的软件缺陷预测方法 |
CN107346286A (zh) * | 2017-07-03 | 2017-11-14 | 武汉大学 | 一种基于核主成分分析和极限学习机的软件缺陷预测方法 |
CN107391365A (zh) * | 2017-07-06 | 2017-11-24 | 武汉大学 | 一种面向软件缺陷预测的混合特征选择方法 |
CN107391365B (zh) * | 2017-07-06 | 2020-10-13 | 武汉大学 | 一种面向软件缺陷预测的混合特征选择方法 |
CN110175726A (zh) * | 2019-06-18 | 2019-08-27 | 中国人民解放军国防科技大学 | 一种基于迁移性分析的跨项目缺陷预测方法 |
WO2021093140A1 (zh) * | 2019-11-11 | 2021-05-20 | 南京邮电大学 | 一种跨项目软件缺陷预测方法及其系统 |
CN110825644A (zh) * | 2019-11-11 | 2020-02-21 | 南京邮电大学 | 一种跨项目软件缺陷预测方法及其系统 |
CN112148605A (zh) * | 2020-09-22 | 2020-12-29 | 华南理工大学 | 一种基于谱聚类的半监督学习的软件缺陷预测方法 |
CN112148605B (zh) * | 2020-09-22 | 2022-05-20 | 华南理工大学 | 一种基于谱聚类的半监督学习的软件缺陷预测方法 |
CN112199287A (zh) * | 2020-10-13 | 2021-01-08 | 北京理工大学 | 基于强化混合专家模型的跨项目软件缺陷预测方法 |
CN113919449A (zh) * | 2021-12-15 | 2022-01-11 | 国网江西省电力有限公司供电服务管理中心 | 基于精准模糊聚类算法的居民电力数据聚类方法及装置 |
CN113919449B (zh) * | 2021-12-15 | 2022-03-15 | 国网江西省电力有限公司供电服务管理中心 | 基于精准模糊聚类算法的居民电力数据聚类方法及装置 |
CN114791886A (zh) * | 2022-06-21 | 2022-07-26 | 纬创软件(武汉)有限公司 | 一种软件问题跟踪方法和系统 |
CN114791886B (zh) * | 2022-06-21 | 2022-09-23 | 纬创软件(武汉)有限公司 | 一种软件问题跟踪方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107133176A (zh) | 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 | |
US11093519B2 (en) | Artificial intelligence (AI) based automatic data remediation | |
CN107391369B (zh) | 一种基于数据筛选和数据过采样的跨项目缺陷预测方法 | |
CN107346286B (zh) | 一种基于核主成分分析和极限学习机的软件缺陷预测方法 | |
Li et al. | Integrating ensemble-urban cellular automata model with an uncertainty map to improve the performance of a single model | |
Pascarella et al. | Re-evaluating method-level bug prediction | |
CN108345544A (zh) | 一种基于复杂网络的软件缺陷分布影响因素分析方法 | |
US20170090916A1 (en) | Analysis method and analysis apparatus | |
CN107247666A (zh) | 一种基于特征选择和集成学习的软件缺陷个数预测方法 | |
CN107391365A (zh) | 一种面向软件缺陷预测的混合特征选择方法 | |
US11704186B2 (en) | Analysis of deep-level cause of fault of storage management | |
Chang et al. | Integrating in-process software defect prediction with association mining to discover defect pattern | |
CN105701013A (zh) | 基于互信息的软件缺陷数据特征选择方法 | |
Zhang | Financial data anomaly detection method based on decision tree and random forest algorithm | |
Ye et al. | Hydrologic time series anomaly detection based on flink | |
CN114781532A (zh) | 机器学习模型的评估方法、装置、计算机设备及介质 | |
Mendia et al. | A novel approach for the detection of anomalous energy consumption patterns in industrial cyber‐physical systems | |
CN110378569A (zh) | 产业关系链构建方法、装置、设备及存储介质 | |
Koch et al. | Static spreadsheet analysis | |
Zhang et al. | Importance Degree Evaluation of Spare Parts Based on Clustering Algorithm and Back‐Propagation Neural Network | |
CN115688169A (zh) | 一种数据分类分级方法、系统、介质及计算机设备 | |
CN112199287B (zh) | 基于强化混合专家模型的跨项目软件缺陷预测方法 | |
AU2022204049A1 (en) | Utilizing topology-centric monitoring to model a system and correlate low level system anomalies and high level system impacts | |
Wang et al. | Novel SKU classification approach for autonomous inventory planning | |
Shao et al. | Research on Cross‐Company Defect Prediction Method to Improve Software Security |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170905 |
|
RJ01 | Rejection of invention patent application after publication |