克隆代码(Code Clone)是指在语法或语义特征上相同或相似的代码段[1]。克隆代码与软件工程中各类问题相关,如软件质量与软件演化等[2]。克隆代码具有双重影响性[3],复制无缺陷的代码可降低编写新代码的潜在风险,节省开发时间与成本。然而复制含有bug的代码可能会导致bug繁殖或引入新bug。因此,如果能在已有克隆检测和克隆演化的基础上,合理预测克隆代码的有害性,将在软件开发和维护过程中起到作用。
由于克隆代码的普遍性以及对软件质量的重要影响,克隆相关研究已成为软件工程研究领域的活跃分支[4]。研究者在克隆检测研究基础上开展了克隆演化、克隆重构及克隆管理等研究,在克隆管理方面,国内研究者使用机器学习进行了克隆代码的有害性预测探索[5-6]。在软件正式发布前,预先识别出潜在的有害克隆,并提供给开发人员相关参考信息,将辅助开发人员及时修正由克隆造成的错误,降低克隆代码给软件系统引入新bug的可能性,提高软件整体质量。
机器学习方法被广泛用于克隆代码的有害性预测中,而数据的平衡性对预测起着至关重要的作用,在预测过程中数据分类不平衡会严重影响预测效果。分类不平衡是指不同类别间样本数量分布不均衡的现象,当这两类样本数量比例相差悬殊时,表现出分类不平衡问题。在实际应用中,分类不平衡问题也是普遍存在的,如银行系统中的异常交易检测、天然气管道泄漏勘测、网页分类、癌症诊断等。克隆代码有害性预测就是一个典型的分类问题,将克隆代码分为有害类(少数类)和无害类(多数类)。机器学习预测模型往往以提高整体的分类准确率为目标,然而在分类不平衡情况下,可能就会忽略对少数类的识别,而这些少数类恰恰包含有害性预测中的关键信息。
本文以解决克隆代码中有害类与无害类数据的分类不平衡问题,提高有害性预测效果为目标,提出了一种改进的随机下采样的K-Balance算法。实验结果表明本文提出的方法能有效解决数据分类不平衡情况下的有害性预测问题,同时,在此方法上基本模型Naive Bayes较集成模型Random Forest的时间效率和准确度方面表现更优。
1 相关工作 1.1 克隆代码有害性目前,对克隆代码的有害性评价尚未建立系统性的评价体系,对克隆代码有害性的界定十分模糊,相关的评价方法并非基于统一的“有害性标准”。因此,关于克隆代码有害性方面的研究较少。Wang等[5]进行了“克隆操作”有害性的研究,该研究使用贝叶斯网络对收集的样本进行学习,然后预测克隆操作的有害性。李智超[6]基于支持向量机进行了克隆代码有害性预测研究,该研究认为“一致变化”的克隆是有害的,而绝大多数研究者认为“不一致变化”才是引起程序错误的主要原因。例如Bakota[7]研究发现超过50%的有害克隆是由不一致变化引起的。
Bakota等[8]通过实验证明克隆坏味与克隆代码不一致修改有关。Juergebs等[9]发现不一致变化中有将近1/3的变化是被无意地引入,而一半的无意不一致变化会导致程序出错。Bakota[7] 和Bettenburg等[1]通过对克隆的变化模式进行分析,发现克隆的不一致改变有时会引起程序错误。Barbour等[10]发现克隆的后期繁殖与软件错误有非常密切的关联,结论是不一致改变模式与其他改变模式相比存在更大的风险。综上所述,国内外的研究大部分表明,发生过不一致修改的克隆代码和程序错误有关。
图 1是不一致的bug修复引发错误的例子。图 1左侧的代码片段1和3是一对克隆代码,右侧的代码片段2、4分别是1、3在下一版本中具有映射关系的对应克隆代码片段。从图中可以看出,克隆片段1向克隆片段2演化的过程中,含有bug并对其进行了修复,但是,该克隆的克隆副本3向克隆片段4演化的过程中存在的bug并没有得到一致性的修复,这种不一致修改会给软件带来bug。
本文从程序的健壮性与正确性角度出发,将不一致改变的克隆代码鉴定为有害克隆代码。首先,需要作一致性改变的克隆代码,却发生了不一致性修改,而遗忘这种一致性的修改又会导致克隆群中发生不一致改变,这极大可能会导致程序错误,从而在软件系统中引入潜在的bug。因此,本文将不一致改变的克隆代码鉴定为有害克隆代码。
1.2 分类不平衡解决方法到目前为止,基于数据层面和算法层面,已有许多解决不平衡分类问题的方法被提出。基于数据层面的方法包含一些重采样技术、操纵数据集来修正不平衡分布,例如随机上/下采样和少数样本合成过采样技术(Synthetic Minority Over-sampling TEchnique,SMOTE) [11]。这些方法简单而有效,但是它们的有效性很大程度上依赖于特定的数据集和训练算法[12];基于算法层面的方法通过修正自身的训练机制来提高对少数类分类的精确度,包括单分类学习[13]和代价敏感性学习算法[14]。但是算法层面的方法不同的学习算法需要不同的对待,大多数情况下我们并不知道针对特定的问题哪个数据算法是最好的选择。除了上述的数据和算法两个层面的方法,集成学习[15-16]用来组合一些分类器来处理不平衡数据,例如AdaBoost[17-18]、Bagging[19] 。集成学习方法在处理不平衡数据时能够有效地提高整体表现[20-21],但是集成学习内部算法较为复杂,训练时间较长。
因此,如何提高对分类不平衡数据的预测效果是亟需解决的问题,本文提出一种基于随机下采样(Random Under-Sampling,RUS)的自动选择调整类不平衡比例参数的K-Balance算法,通过分析训练过程中分类器的表现自动搜索一个最适合的采样比率,降低两类数据不平衡程度,提高了有害类的分类性能;最后,应用分类器集成方法改善了不平衡数据的整体分类效果。
1.3 随机下采样RUS方法是通过随机地去掉一些多数类样本来减小多数类的规模,以便提高少数类的分类性能。缺点是会丢失多数类的一些重要信息,不能够充分利用已有的信息。
使用复杂的采样技术在解决分类不平衡问题上并不能提供明显的优势。Mani等[22]提出随机下采样的解决策略要胜过一些复杂的下采样策略。Seiffert等[23]开展了一次关于对比四种不同的数据采样方法和两种代价敏感学习策略的实验研究。他们注意到随机下采样的方法在所有的方法中表现得最好。因此,本文采用随机下采样减少负类的数目,重新构造数据集以便正负类数目达到理想比例值,即这个数据集对结果产生的噪声影响是最少的。
本文所提出的方法不增加正类样本的数量,因此不会出现过拟合学习的现象。此外,以往的随机下采样可能会筛选掉一些潜在有用的数据,而这些数据对分类学习过程是至关重要的,同时去除的样本数也没有一个合适的比例说明。基于此本文的方法有一个正负类样本比例参数的搜索过程,这个过程最大限度地保留了正类样本中的重要信息,同时降低了样本数量,减少了训练花费的时间。
2 改进的RUS算法K-Balance为了减少克隆有害性样本空间中有害无害类数据分类不平衡的现象,本文采用一种基于RUS的自动选择调整类不平衡比例参数的解决策略重新取样构建样本空间数据集的方法。本文的总体技术路线如图 2所示。
首先原不平衡数据集中无害类与有害类的比值为K,保留原始不平衡率为K的数据集,同时构造一组分类不平衡率值从1~K不断变化的数据集。采用六种不同的分类算法,三种基本模型和三种集成模型,这两种模型包含的六种机器学习方法都是针对处理不平衡数据时相对具有较好的效果和稳定性的方法。应用以上模型对两种不同的数据集进行预测,根据分类效果的受试者工作特征曲线下方面积(Area Under ROC(Receive Operating Characteristic) Curve,AUC)值进行评估。
2.1 分类不平衡率定义若有一个样本数据集D={X1,X2,…,Xn},n为包含的样本数,正类(有害类)样本数为N1,负类(无害类)样本数为N2。定义分类不平衡率(Imbalanced Classification Rate,ICR)为:
ICR=N2/N1
ICR值就越大,说明该数据集的分类不平衡程度越高;反之越低。
2.2 克隆代码有害性特征样本构建克隆代码的历史行为数据中隐含着大量与有害性相关的行为模式,数据样本必须围绕克隆代码有害性变量来组建。本文结合在预研阶段开展的克隆检测、克隆家系等方面的研究[24-26],将能够表征克隆代码有害性的特征分成两大类,通过不同方法提取出这些特征后,完成特征样本空间的构建,两大类特征具体包括静态特征和演化特征。
1) 静态特征。
静态特征是最重要的软件代码特征之一,从代码自身角度反映发生bug的倾向程度。这一类特征最早被提出,易于提取,且被大量研究证实十分有效,因此在业界获得了广泛的应用。静态特征包括代码行数、Halstead度量、圈复杂度、注释比例、分支语句比例、函数深度、可维护性指数、参数个数、文件分布等,其中Halstead度量又包含H(计算程序长度)、N(程序长度)、V(程序容量)、D(难度)、E(精力)、T(程序撰写时间)、B(交付错误数量),共15维特征指标,如表 1所示。
本文使用本团队的克隆检测工具FCD[24]对开源软件进行检测,获取软件系统中的克隆代码,并通过代码度量工具SourceMonitor从检测结果中提取克隆代码6种静态特征,其余静态特征通过词法分析进行提取。
2) 演化特征。
本文主要分析可能与克隆代码有害性相关的演化特征,具体包括:克隆寿命、克隆演化频率以及克隆演化模式三大类。选择这三大类演化特征的原因是因为该类特征不仅仅考虑克隆代码在某一版本中所呈现的特征,而是将克隆在生命周期内的变化过程和变化类型等信息进行了呈现,这将有助于分析克隆代码在何时被引入、何时消失以及克隆代码经历过各类演化模式的数量等。同时,克隆代码的演化特征反映了克隆代码在软件系统演化过程中做出的改变对软件质量的影响,这类特征将有助于分析克隆代码的有害性。本文共提出了3种演化特征,这些特征也将作为克隆代码有害性的度量指标,上述特征如表 2所示。
以上三种演化特征使用克隆函数提取器FCG[26]进行获取,进而对软件前n-1个版本的克隆代码进行有害性标注。在获取克隆代码静态和演化特征之后,得到有害性特征样本数据集D,见表 3。
在获得克隆有害性样本数据集D后,需要将数据集D划分为只包含正类或负类的两个数据集,保留正类数据集中的所有样本,然后依次从负类数据集中取出和正类数据集成不同比例的样本数据,即ICR=1,2,…,k。当抽取比例为k时,数据集仍存在数量不足N1样本数据,则将其加入比例为k的数据集中,最终将原数据集转化为一组分类不平衡率依次递增的新数据集D*。数据采样过程如图 3所示。
图 3(a)表示ICR=1时的正负类样本构建过程,黑色点为正类样本,灰色点为负类样本。图 3(b)表示ICR=2时正负类样本构建过程,构建过程以此类推,直到ICR=k。
2.4 克隆代码有害性预测本文选取六种使用比较广泛且预测性能较好的机器学习模型,包括基本机器学习模型和集成学习模型。基本机器学习模型有Naive Bayes(朴素贝叶斯) 、C4.5(一种决策树算法)和Ripper(命题规则学习)。集成学习模型有AdaBoost(提升集成学习)、Bagging(装袋集成学习)和Random Forest(随机森林)。
将新数据集D*应用到预测模型中进行预测,每组ICR比率值按照图 2过程取出全部正类样本N1,再从负类样本中取出N1*ICR数量的样本,对负类样本进行采样放回的方法,重复图 2实验100次,对100组相同ICR值下的样本数据取平均AUC值作为最终预测效果,最后得到一组不同ICR值下的AUC平均值,记为集合S={AUC1,AUC2,…,AUCk}(AUC取100次重复实验平均值用来降低随机误差)。通过观察集合S的变化分布图,找出当AUC值取最大时所对应数据集的ICR比例值,进而可以根据ICR值决定样本数据集的规模大小。
本文选择的评估验证方法为交叉验证方法。此方法的基本思想就是把输入数据集划分为训练集和测试集,测试集对于分类器是不可见的,并与通过训练集产生的输出进行交叉验证。一个最简单的交叉验证方法是2折交叉验证,即随机地把数据集划分为测试集和训练集。2折交叉的一个扩展就是K折交叉验证(K-fold cross-validation),随机地把数据集分成K个子集,包括K-1份训练子集和1份测试子集,交叉验证重复K次,每个子样本验证一次。实验采取K=10,即10折交叉验证来评估克隆有害性预测模型的性能,平均10次的性能指标作为最终评估值。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,可以调参和防止过度拟合,提高泛化性。
3 实验结果及分析 3.1 实验数据本文选取了7款不同C语言软件中170个发布版本作为实验数据,这7款软件功能不同,规模不一且持续更新。如此选取考虑了软件系统中有害和无害类数据的差异。目标软件信息如表 4所示。
在表 4中列举了7款C开源软件基本信息,从前期预研工作中可以很容易得到克隆家系和克隆演化模式,将发生不一致变化的样例标记为少数类,其他变化标记为多数类。每款数据集都包含有不同数量的样例数(Ins),少数类样本数量(Min)。多数类样本数量(Maj)以及类不平衡比例(ICR)。ICR值从5.8~47.6逐渐升高,即有害类样本占总样本的比例逐渐降低。每个数据样本中包含15维静态特征和3维演化特征和一个标注样本是否有害的类标签,不平衡数据集如表 5所示。
精确度是分类问题中常用的评价指标,它反映分类器对数据集的整体分类性能,但不能反映不平衡数据集的分类性能。鉴于无害的克隆代码类对准确率标准影响大于有害的克隆代码类,更加关注有害克隆代码对性能指标的影响。针对不平衡数据集,本文采用受试者工作特征(Receiver Operating Characteristic,ROC)曲线下覆盖的面积AUC性能作为本实验的评价指标,对原始样本数据和经过K-Balance方法得到的样本数据预测结果进行对比分析,实现对克隆有害性预测模型的性能评估。
查全率度量分类器正确预测的有害类的比例,如果分类器的查全率高,则很少将正类误分为无害类。实际上,查全率的值就等于真正类率(True Positive Rate,TPR),负正类率(False Positive Rate,FPR)就表示把无害的克隆预测为有害的克隆比例。需要说明的是,由于本文更关注分类结果是有害的克隆代码,因此,将真正类率、负正类率的定义如下:
真正类率:
$TPR=TP/(TP+FN)$ | (1) |
负正类率:
$TPR=FP/(TN+FP)$ | (2) |
由于评价的机器学习方法都是基于二分类模型的,即将结果分成正类(Min)或负类(Maj),所以本文引入ROC曲线来形象地分析在不同精度临界值情况下预测结果的变化。ROC曲线模型如图 4所示。
ROC曲线的X轴表示FPR(负正类率),Y轴表示TPR(真正类率)。ROC曲线上的一组点是通过调整分类器决策阈值得到的,ROC曲线越凸越靠近左上方,表示对应的分类器一般化能力越强。AUC是指ROC曲线下面包括的面积,即ROC曲线的积分,AUC能以定量的方式表示该ROC曲线对应的分类器的一般化能力。理想情况下,TPR应该接近1,FPR应该接近0。
3.3 实验结果及分析在Weka[27]学习平台下,分别采用Naive Bayes、C4.5、Ripper、AdaBoost、Bagging和Random Forest 6种分类器分别在数据集D*上进行实验。算法中采用的参数均为Weka默认参数。
图 5共包含7个子图,每个子图表示一款软件在不同的ICR 值下六种机器学习方法预测的AUC平均值。
从图 5中可以得出以下几点结论:
1) 从图 5 (a)中,可以清晰地观察到fdisk是这7款软件中无害类样本与有害类样本比例最小的样本数据。当K=3时,Naive Bayes和Random Forest分类的效果表现相差无几,但是前者花费的训练时间远远低于后者。同时可以观察到Naive Bayes在K取任何值下,其不平衡分类效果远远超过集成学习模型Adaboost与Bagging方法。这也再次验证了本团队前期[28]使用贝叶斯预测是具有可行性的。
2) 在所有的图中,集成类学习方法的AUC值整体表现都好过三种基本学习方法。三种集成学习方法中随机森林的表现最好,三种基本学习方法中朴素贝叶斯的表现较好。
3) 随着不平衡比例ICR值的逐渐增大,选取不同的K值,对C4.5和Ripper的分类性能影响波动较大,而对于集成模型来说,对ICR值敏感性较小。从图 5(g)观察到,当ICR值很大时,K值选取对Bagging的干扰较为明显。
4) 从AUC值变化折线图中,针对某一款软件,采用任何一种学习方法预测,可以很直观地选取出能使该不平衡数据集达到最好分类效果的K值。
从上述结论中可以得到:集成学习算法在处理本研究下的不平衡数据问题时效果较好,但算法时间效率远低于Naive Bayes和C4.5。在一定的K值范围内,某些基本分类器的性能表现要好过构造一个复杂的集成模型算法,并且训练及测试时间很短。处理不平衡数据问题时,并不是数据集越趋近于平衡,预测效果就越好,也并不是K值越大,分类器的效果就越差。
在表 7中,应用本文中的方法选取K值之后获得数据集称为K-Balance数据集。Orig列代表原始不平衡数据集,K-Balance列代表选取K值之后能使AUC值达到最大的数据集。
表中最后一行Avg表示每种机器学习方法采用D和D*数据集进行预测得出的AUC值平均提高的百分点。从实验数据看出,K-Balance数据集在六种分类算法中预测效果都比在Orig原数据集上效果要好,提高了2.62个百分点~36.70个百分点。表中fdisk在这两种数据集预测前后AUC变化不大,应用本文采样方法之后C4.5预测结果甚至出现了下降。出现此现象的原因是fdisk数据集中的样本数较少,分类不平衡比例相对较低。然后基于该方法下采样之后,数据样本数更加稀少,严重影响了分类效果。最后发现,Naive Bayes与K-Balance、Random Forest与K-Balance这两种组合的分类效果要比C4.5+K-Balance、Ripper+K-Balance、AdaBoost+K-Balance、Bagging+K-Balance分类效果好。其中Ripper+K-Balance组合的效果最差。
图 6中列出了六种分类算法和四种不平衡数据处理方法组合的最佳平均AUC值。
从图 6中可以得出以下结论:
1) 不平衡数据对C4.5、Ripper的预测影响较大,而集成算法和Naive Bayes对不平衡数据的敏感程度较低。
2) 本文提出的K-Balance方法与单纯的随机下采样方法RUS、基于上采样的SMOTE方法相比,在5种学习方法中的效果对比都有明显的提升。在Random Forest的预测表现上也与其上述两种方法相差无几。
从上述的结果中,可以得知,面对二分类不平衡数据分类时,本文提出的方法能够有效地提高分类器的表现,其效果也比一些常用的不平衡数据处理方法要好。
4 结语针对克隆代码有害性预测中有害类与无害类呈现出的严重分类不平衡问题,本文提出一种改进的随机下采样算法K-Balance算法。该方法通过ICR值从无害类中随机抽样与有害类构造K个不同比例的数据集,找出关键参数K的最佳取值。从实验结果可以看出,本文提出的方法能有效地提高对二分类不平衡数据分类的整体表现,同时该方法与其他不平衡数据处理方法相比也有较好的表现。基本模型Naive Bayes与集成模型Random Forest在该方法的表现胜过其他学习算法,而Naive Bayes算法的时间效率更低。
本文的研究工作仍存在一些不足,例如文中所用到的克隆有害性特征包括静态与动态特征共18维,这些特征中可能包含大量的不相关的特征,此类特征可能会影响预测结果准确性。在未来研究工作中,拟对原本“粗糙”的特征进行分析、筛选和优化,得到与预测克隆代码有害性相关程度较高的有害性特征,以便更准确且全面地预测克隆的有害性。
[1] | BETTENBURG N, SHANG W, IBRAHIM W, et al. An empirical study on inconsistent changes to code clones at release level[C]//Proceedings of the 200916th Working Conference on Reverse Engineering. Piscataway, NJ:IEEE, 2009:85-94. |
[2] | KOSCHKE R. Seventh international workshop on software clones[EB/OL].[2016-02-15]. http://softwareclones.org/iwsc2013/. |
[3] | ROY C K. Detection and analysis of near-miss software clones[C]//Proceedings of the 2009 IEEE International Conference on Software Maintenance. Washington, DC:IEEE Computer Society, 2009:447-450. |
[4] | 梅宏, 王千祥, 张路, 等. 软件分析技术进展[J]. 计算机学报, 2009, 32 (9) : 1697-1710. ( MEI H, WANG Q X, ZHANG L, et al. Software analysis technology progress[J]. Chinese Journal of Computers, 2009, 32 (9) : 1697-1710. ) |
[5] | WANG X, DANG Y, ZHANG L, et al. Can I clone this piece of code here?[C]//Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering. New York:ACM, 2012:170-179. |
[6] | 李智超.基于支持向量机的克隆代码有害性评价方法研究[D].哈尔滨:哈尔滨工业大学,2013:15-17. ( LI Z C. Research on SVM-based evaluation method of clone code harmfulness[D]. Harbin:Harbin Institute of Technology, 2013:15-17. ) |
[7] | BAKOTA T. Tracking the evolution of code clones[C]//SOFSEM 2011:Proceedings of the 37th Conference on Current Trends in Theory and Practice of Computer Science, LNCS 6543. Berlin:Springer, 2011:86-98. |
[8] | BAKOTA T, FERENC R, GYIMOTHY T. Clone smells in software evolution[C]//ICSM 2007:Proceedings of the 2007 IEEE International Conference on Software Maintenance. Piscataway, NJ:IEEE, 2007:24-33. |
[9] | JUERGEBS E, DEISSENBOECK F, HUMMEL B, et al. Do code clones matter?[C]//ICSE 2009:Proceedings of the 31st International Conference on Software Engineering. Piscataway, NJ:IEEE, 2009:485-495. |
[10] | BARBOUR L, KHOMH F, ZOU Y. An empirical study of faults in late propagation clone genealogies[J]. Journal of Software:Evolution and Process, 2013, 25 (11) : 1139-1165. doi: 10.1002/smr.v25.11 |
[11] | CHAWLA N V, BOWYER K W, HALL L O, et al. SMOTE:synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2011, 16 (1) : 321-357. |
[12] | ESTABROOKS A, JO T, JAPKOWICZ N. A multiple resampling method for learning from imbalanced data sets[J]. Computational Intelligence, 2004, 20 (1) : 18-36. doi: 10.1111/coin.2004.20.issue-1 |
[13] | JAPKOWICZ N, MYERS C, GLUCK M A. A novelty detection approach to classification[C]//IJCAI'95:Proceedings of the 14th International Joint Conference on Artificial Intelligence. San Francisco, CA:Morgan Kaufmann Publishers, 1995:518-523. |
[14] | ZHOU Z H, LIU X Y. Training cost-sensitive neural networks with methods addressing the class imbalance problem[J]. IEEE Transactions on Knowledge and Data Engineering, 2006, 18 (1) : 63-77. doi: 10.1109/TKDE.2006.17 |
[15] | HO T K, HULL J J, SRIHARI S N. Decision combination in multiple classifier systems[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 1994, 16 (1) : 66-75. doi: 10.1109/34.273716 |
[16] | ROKACH L. Ensemble-based classifiers[J]. Artificial Intelligence Review, 2010, 33 (1/2) : 1-39. |
[17] | WANG S, CHEN H., YAO X. Negative correlation learning for classification ensembles[C]//Proceedings of the 2010 IEEE International Joint Conference on Neural Networks. Piscataway, NJ:IEEE, 2010:2893-2900. |
[18] | WANG S, YAO X. Using class imbalance learning for software defect prediction[J]. IEEE Transactions on Reliability, 2013, 62 (2) : 434-443. doi: 10.1109/TR.2013.2259203 |
[19] | BREIMAN L. Bagging predictors[J]. Machine Learning, 1996, 24 (2) : 123-140. |
[20] | BROWN G, WYATT J L, TINO P. Managing diversity in regression ensembles[J]. Journal of Machine Learning Research, 2005, 6 (1) : 1621-1650. |
[21] | TANG E K, SUGANTHAN P N, YAO X. An analysis of diversity measures[J]. Machine Learning, 2006, 65 (1) : 247-271. doi: 10.1007/s10994-006-9449-2 |
[22] | MANI I, ZHANG B J. KNN approach to unbalanced data distributions:a case study involving information extraction[C]//Proceedings of the 2003 Workshop on Learning from Imbalanced Datasets Ⅱ. Washington DC:ICML, 2003:42-48. |
[23] | SEIFFERT C, KHOSHGOFTAAR T M, HULSE J V, et al. A comparative study of data sampling and cost sensitive learning[C]//Proceedings of the 2008 IEEE International Conference on Data Mining Workshops. Washington, DC:IEEE Computer Society, 2008:46-52. |
[24] | 侯敏, 张丽萍, 史庆庆, 等. 基于后缀数组检测函数克隆[J]. 计算机应用研究, 2014, 31 (4) : 1082-1085. ( HOU M, ZHANG L P, SHI Q Q, et al. Detecting code clone based on suffix array[J]. Application Research of Computers, 2014, 31 (4) : 1082-1085. ) |
[25] | 张瑞霞, 张丽萍, 王春晖, 等. 基于主题建模技术的克隆群映射方法[J]. 计算机工程与设计, 2015, 36 (6) : 1524-1529. ( ZHANG R X, ZHANG L, WANG C H, et al. Clone group mapping method based on topic modeling[J]. Journal of Computer Engineering and Design, 2015, 36 (6) : 1524-1529. ) |
[26] | 涂颖, 张丽萍, 王春晖, 等. 基于软件多版本演化提取克隆谱系[J]. 计算机应用, 2015, 35 (4) : 1169-1173. ( TU Y, ZHANG L P, WANG C H, et al. Clone genealogies extraction based on software evolution over multiple versions[J]. Journal of Computer Applications, 2015, 35 (4) : 1169-1173. ) |
[27] | WITTEN I H, FRANK E. Data Mining:Practical Machine Learning Tools and Techniques[M]. San Francisco, CA: Morgan Kaufmann Publishers, 2005 : 206 -207. |
[28] | 张丽萍, 张瑞霞, 王欢, 等. 基于贝叶斯网络的克隆代码有害性预测[J]. 计算机应用, 2016, 36 (1) : 260-265. ( ZHANG L P, ZHANG R X, WANG H, et al. Harmfulness prediction of clone code based on Bayesian network[J]. Journal of Computer Applications, 2016, 36 (1) : 260-265. ) |