CN107133176A - 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 - Google Patents

一种基于半监督聚类数据筛选的跨项目缺陷预测方法 Download PDF

Info

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
Application number
CN201710322848.XA
Other languages
English (en)
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 CN201710322848.XA priority Critical patent/CN107133176A/zh
Publication of CN107133176A publication Critical patent/CN107133176A/zh
Pending legal-status Critical Current

Links

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2415Classification 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/24155Bayesian classification

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>&amp;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>&amp;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>&amp;mu;</mi> <mrow> <mi>k</mi> <mi>Y</mi> </mrow> </msub> <mo>,</mo> <msub> <mi>&amp;sigma;</mi> <mrow> <mi>k</mi> <mi>Y</mi> </mrow> </msub> </mrow> <mo>)</mo> </mrow> <mo>=</mo> <msubsup> <mi>&amp;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>&amp;pi;</mi> </mrow> </msqrt> <msub> <mi>&amp;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>&amp;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>&amp;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>&amp;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>&amp;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>&amp;mu;</mi> <mrow> <mi>k</mi> <mi>N</mi> </mrow> </msub> <mo>,</mo> <msub> <mi>&amp;sigma;</mi> <mrow> <mi>k</mi> <mi>N</mi> </mrow> </msub> </mrow> <mo>)</mo> </mrow> <mo>=</mo> <msubsup> <mi>&amp;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>&amp;pi;</mi> </mrow> </msqrt> <msub> <mi>&amp;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>&amp;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>&amp;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,即该软件模块为有缺陷的软件模块。
CN201710322848.XA 2017-05-09 2017-05-09 一种基于半监督聚类数据筛选的跨项目缺陷预测方法 Pending CN107133176A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949653B1 (en) * 2012-08-03 2015-02-03 Symantec Corporation Evaluating high-availability configuration

Patent Citations (1)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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) 一种基于数据筛选和数据过采样的跨项目缺陷预测方法
Chien et al. A system for online detection and classification of wafer bin map defect patterns for manufacturing intelligence
CN107346286B (zh) 一种基于核主成分分析和极限学习机的软件缺陷预测方法
Mesquita et al. Classification with reject option for software defect prediction
Pascarella et al. Re-evaluating method-level bug prediction
CN108345544A (zh) 一种基于复杂网络的软件缺陷分布影响因素分析方法
US20170090916A1 (en) Analysis method and analysis apparatus
CN112364352B (zh) 可解释性的软件漏洞检测与推荐方法及系统
Chang et al. Integrating in-process software defect prediction with association mining to discover defect pattern
US11704186B2 (en) Analysis of deep-level cause of fault of storage management
CN107247666A (zh) 一种基于特征选择和集成学习的软件缺陷个数预测方法
CN105701013A (zh) 基于互信息的软件缺陷数据特征选择方法
CN107391365A (zh) 一种面向软件缺陷预测的混合特征选择方法
Zheng et al. An automatic data process line identification method for dam safety monitoring data outlier detection
Ilkhani et al. Extraction test cases by using data mining; reducing the cost of testing
CN114781532A (zh) 机器学习模型的评估方法、装置、计算机设备及介质
CN117319452B (zh) 应用于硫酸钡制备下的安全巡检方法及系统
Koch et al. Static spreadsheet analysis
Horvath New methods on the way to intelligent modeling in computer integrated engineering
CN109635008A (zh) 一种基于机器学习的设备故障检测方法
CN112199287B (zh) 基于强化混合专家模型的跨项目软件缺陷预测方法
Pei et al. Towards policy retrieval for provenance based access control model
CN106326472B (zh) 一种侦查信息完整性验证方法

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