首页> 中国专利> 一种异质集成的自承认技术债务自动检测方法

一种异质集成的自承认技术债务自动检测方法

摘要

本发明公开了一种异质集成的自承认技术债务自动检测方法,分为两个阶段,包括模型的训练阶段和预测阶段。在训练阶段,进行数据集的预处理、特征提取后基于GBDT、SGD和DT三种学习算法对SATD训练样本进行学习以训练组件学习器,三种学习算法一共训练了3个组件学习器。在预测阶段,使用训练好的组件学习器进行预测,根据3个组件学习器以“少数服从多数”进行投票,如果是自承认技术债务会被标记为“positive”,否则标记为“negative”;最终根据每个组件学习器的投票结果进行判断,以投票多者为最终的结果。本发明的异质集成学习方法,比现有技术方法在查准率,查全率以及F1得分等指标都有着明显提高。

著录项

  • 公开/公告号CN113313184A

    专利类型发明专利

  • 公开/公告日2021-08-27

    原文格式PDF

  • 申请/专利权人 西北工业大学;

    申请/专利号CN202110632822.1

  • 申请日2021-06-07

  • 分类号G06K9/62(20060101);G06N3/04(20060101);G06N3/08(20060101);

  • 代理机构61204 西北工业大学专利中心;

  • 代理人金凤

  • 地址 710072 陕西省西安市友谊西路127号

  • 入库时间 2023-06-19 12:22:51

说明书

技术领域

本发明属于软件技术领域,具体涉及一种自承认技术债务自动检测方法。

背景技术

技术债务作为一种隐喻,指的是在软件开发过程中开发人员采用了非最优的解决方案,从而导致的将来昂贵的维护问题。在短期内可能会获得收益,但从长远来看,由于各种原因引入的技术债务,例如截止日期压力、低质量代码、不良的软件过程等,在维护阶段要花费巨大的精力来处理它所带来的问题。目前,技术债务的研究主要聚焦于识别、分析和管理。其中,技术债务识别是至关重要的问题。

早期技术债务识别是基于模式的识别,例如代码气味。紧接着出现了自承认技术债务识别。自承认技术债务(SATD)是开发人员使用源代码注释进行记录,并有意引入的技术债务。研究人员已经手动提取了62种模式用于识别自承认技术债务,然而基于62种模式的识别对于海量的数据集需耗费巨大的人力,并且使用62种模式识别SATD时会产生误判,并且研究显示误判率高达20%以上,此外基于模式的方法会耗费很大的人力物力,并且很难自动化。为了解决这一问题,自然语言处理和集成文本挖掘为自动识别自承认技术债务提供了可能。

Maldonado提出了运用自然语言处理进行自动识别SATD,重点关注了设计债务和需求债务的识别,通过建立一个NLP的最大熵分类器,提取大量注释来训练最大熵分类器,因此没有进行特征选择,从而使得训练分类器时比较耗时,且SATD识别的准确度不高,并且只能自动识别出部分自承认技术债务,如设计和需求自承认技术债务。

自承认技术债务还包括了缺陷债务、文件债务和测试债务。采用集成文本挖掘将文本挖掘和复合分类器结合起来用于识别SATD,能够比自然语言处理的方法识别出更多种类的自承认技术债务,并且可以提高分类器效率和SATD识别的准确度。但是现有研究中的集成学习多为同质集成学习,相比于异质集成学习,泛化能力较弱,分类性能一般。且存在三个问题,一是进行特征选择虽然可以降低维度,但是容易过滤掉重要特征。二是进行的是同质集成方法,也即组件学习器使用的是同一种算法,在泛化能力上弱于异质集成方法。三是在训练组件学习器时,每一个组件学习器学习的是一个项目的数据,而任务中项目之间有着较大的差异性,这就造成难以预测测试项目的真实标签。

发明内容

为了克服现有技术的不足,本发明提供了一种异质集成的自承认技术债务自动检测方法,分为两个阶段,包括模型的训练阶段和预测阶段。在训练阶段,进行数据集的预处理、特征提取后基于GBDT、SGD和DT三种学习算法对SATD训练样本进行学习以训练组件学习器,三种学习算法一共训练了3个组件学习器。在预测阶段,使用训练好的组件学习器进行预测,根据3个组件学习器以“少数服从多数”进行投票,如果是自承认技术债务会被标记为“positive”,否则标记为“negative”;最终根据每个组件学习器的投票结果进行判断,以投票多者为最终的结果。本发明的异质集成学习方法,比现有技术方法在查准率,查全率以及F1得分等指标都有着明显提高。

本发明解决其技术问题所采用的技术方案包括如下步骤:

步骤1:数据集预处理;

采用公开的源代码注释数据集,将源代码注释数据集中的每一条注释过滤掉非英文字符,只保留英文字母并且将所有英文字母转换成小写字母并移除停止词;

步骤2:特征提取;

使用基于词袋模型的BoW特征提取和能够提取语义信息的N-gram模型同时获取经过步骤1处理过的注释的文本特征,构成训练数据集;

步骤3:训练组件学习器;

将训练数据集分别输入三个并行的组件学习器;

第一个组件学习器由梯度提升决策树GBDT构成;

第二个组件学习器由随机梯度下降SGD构成;

第三个组件学习基于Bagging算法训练50棵决策树,每棵决策树都随机从原始样本中做有放回的采样,然后基于这些采样后的样本训练分类器,形成新的决策树模型DT;

分别对三个组件学习器进行训练,训练完成后,每个组件学习器输出当前输入分类为SATD或Non-SATD的结果,如果是SATD则标记为“positive”,否则标记为“negative”;

步骤4:使用Voting算法对三个组件学习器的输出结果进行投票,选择三个组件学习器输出结果占多数的类别作为最后预测结果;

步骤5:由步骤1到步骤4的处理过程构成最终用于预测的复合分类器;

步骤6:将待分类注释输入复合分类器,输出结果为该待分类注释数据是否为SATD的结果。

优选地,所述公开的源代码注释数据集为GitHub的8个项目,包括ArgoUML、Columba、Hibernate、JEdit、JFreeChart、JMeter、JRuby以及SQuirrel,该数据集为Maldonado和Shihab所整理的数据集。

本发明的有益效果如下:

本发明的异质集成学习方法,相比基于模式的方法需要人工总结模式以及低的识别效率,可以自动完成项目内预测和跨项目预测。此外,针对文发明挖掘方法进行特征选择可能会过滤重要特征以及基于单个项目使用一种学习算法训练一个分类器弱化了泛化能力。本发明所提出的方法在训练时不仅基于异质的集成提高了泛化能力,而且每种学习算法不再仅仅学习一个项目,而是学习整个训练项目。此外,本发明方法还可以用于项目内预测且预测的性能优于三层卷积池化叠加的CNN。

附图说明

图1为本发明方法框图。

图2为本发明实施例GitHub的8个项目的跨项目和项目内的ROC曲线,其中(a)跨项目,(b)项目内。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

如图1所示,一种异质集成的自承认技术债务自动检测方法,包括以下步骤:

1.数据集预处理;

实验数据集来源于GitHub的8个项目,包括ArgoUML、Columba、Hibernate、JEdit、JFreeChart、JMeter、JRuby以及SQuirrel,该数据集为Maldonado和Shihab等人整理的数据集,已被公开并广泛使用。因数据集注释句子存在许多无用字符,为此进行如下预处理:对于数据集的每一条注释,将非英文字母字符过滤掉,只保留英文字母并且将所有英文字母转换成小写字母,进行统一,以方便进行处理,然后移除了停止词。在处理数据集时,遇到类似于“a”,“can”等对文本分析是无助的,所以要移除。这样不仅可以有效减少数据文件的大小,而且可以提高运算效率。

2.特征提取

本实验特征提取使用的是BoW结合N-gram。

BoW(Bag of words model)假定对于一个文本,忽略其词序和语法、句法,将其仅仅看做是一个词集合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,例如注释句子“//XXX should throw an exception instead”和注释句子“//XXX addexception”使用BoW模型会表示为向量“[2,1,1,2,1,1]”和“[2,0,0,2,0,1]”。因此,仅用BoW提取注释文本特征会忽略注释句子中词的前后关系,使得分类器无法学习句子级语义。而N-gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列,每一个字节片段称为gram。这种方式提取特征能够提取连续的N个词,从而可以表示语义信息,例如上述的注释句子“//XXX should throw an exception instead”使用N-gram可以获取“XXX should”,“shouldthrow”,“throw a exception”等。因此,在特征提取时,同时使用BoW和N-gram来获取带有语义的注释句子文本特征,例如注释“//XXX add exception”可以获取诸如“XXX”,“add”,“exception”,“XXX add”,“add exception”这些特征。

3.训练组件学习器

梯度提升决策树(GBDT)是基于多棵决策树构成的一种同质集成模型,它通过梯度提升和回归决策树的组合方法,GBDT每轮的训练都建立在上一轮的训练的残差基础之上进行的,通过这种迭代构建多个弱学习器发挥集成性能。GBDT在训练时会根据注释的类别分别训练一个分类回归树。如在本发明任务中,存在SATD和Non-SATD两个类,在本实施例中标记SATD注释标签为1,Non-SATD注释标签为0。假设有一条标记为SATD的注释x,GBDT在第一轮训练中会训练两棵树,第一颗树的输入为(x,1),第二颗树的输入为(x,0),两棵树输出的预测值记为f

y

y

接着进行第二轮的训练,此时SATD输入为(x,y

梯度下降法是先随机给出参数的一组值,然后更新参数,使每次更新后的结构都能够让损失函数变小,最终达到最小即可。但是传统梯度下降算法在更新回归系数时要遍历整个数据集,它在训练数据特别庞大时,可能出现收敛过程非常慢,同时,如果误差曲面上有多个局极小值,那么不能保证这个过程会找到全局最小值。本发明使用梯度下降的一种变体被称为随机梯度下降SGD,成功应用于文本分类和自然语言处理。为此,引入了SGD分类器训练一个组件学习器。

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。但基于单一学习器很难发挥决策树的性能,而Bagging算法可以通过迭代训练数据集产生多棵决策树提升分类性能。因此我们基于Bagging算法训练50棵决策树,每棵决策树都随机从原始样本中做有放回的采样,然后基于这些采样后的样本训练分类器,通过这种方式形成了新的决策树模型DT,提高了原单一分类器的分类效果。我们将这一新的决策树模型作为一个组件学习器。

4.SATD预测阶段

根据各个组件学习器的结果复合成最终用于预测的复合分类器,通过各个组件学习器对标签的结果使用Voting算法进行投票。预测结果将由这些分类器投票决定,选择分类器投票结果中最多的类别作为最后预测结果。例如,若有2个组件学习器投票为SATD,而其他1个投票为非SATD,那么最终预测结果即为SATD。此外,为了广泛验证的方法的有效性,分别进行了项目内预测和跨项目预测,在项目内预测时,训练集为每个项目的90%的数据,剩下10%作为测试集。跨项目预测的训练集为7个项目,剩余的1个项目为测试集。

接下来进行查准率,查全率以及F1得分等指标的计算。表1展示了不同方法在查准率、查全率以及F1的结果,表格中加粗显示的为最优值,下划线的为最低值。基于模式的方法、NLP方法、TM方法以及本发明异质集成方法在8个项目上的查准率平均值分别为0.847,0.542,0.734以及0.892,从中可以看出本发明方法分类查准率有了很大提高,相比于其他三种方法分别提高了5.31%,64.58%,21.53%。在查全率上,基于模式,文本挖掘,自然语言处理以及本发明方法平均值分别为0.184,0.626,0.721和0.672。与基于模式和NLP方法相比本发明方法分别提高了265.22%和7.35%,然而,相比于TM方法本发明方法的查全率平均值降低了7.6%,但本发明方法仍然是有效的,第一这主要是因为在JEdit项目上本发明方法有着极低的查全率造成的,并且本发明方法的查准率远高于TM,提高了21.53%。第二,现有的所有方法没有任何一种可以兼顾查准率和查全率,而F1作为Precision和Recall的调和平均数能够真实的衡量出方法的有效性,因此以F1来度量方法的优异是客观的。在F1上,基于模式的方法F1得分的平均值为0.275,自然语言处理方法F1得分的平均值为0.576,使用文本挖掘方法F1得分的平均值为0.720,而本发明方法F1平均值为0.747,相比于前三种方法,本发明方法分别提高了171.64%,29.69%和3.75%,并且本发明方法在8个项目中的6个优于文本挖掘的方法。此外,还进行了项目内的比较,注意的是,基于模式的方法、NLP以及TM的方法无法进行项目内的预测,因为基于模式的方法是通过手动总结的62个模式进行的,难以进行项目内预测,NLP的方法需要足够的数据训练最大熵分类器,而项目内的数据量不足以训练一个分类器,TM的方法需要根据7项目训练7个子分类器,因而无法进行项目内预测。因此在项目内预测时选择了一种深度学习方法(CNN)作为基线方法。表2展示的是本发明方法与CNN方法在项目内预测的结果比较。本发明所提出的异质集成方法在项目内预测上优于CNN方法。相比使用卷积池化迭代提取特征结合sigmoid进行分类的CNN,本发明方法F1平均值提高了5.27%。

表1 四种方法跨项目预测的比较

表2 本发明方法与CNN方法项目内预测的比较

本发明方法的8个项目的TPR、TNR、FPR和FNR结果及其平均值如表3所示。本发明方法的TPR平均值为0.672,表明在注释中的SATD被正确预测为SATD的8个项目的平均概率为67.2%,即正类预测正确的平均概率。TNR的平均值高达0.992,非SATD正确预测为非SATD的平均概率为99.2%,也就是说对于非SATD本发明方法能很准确的预测到,即反类预测正确。FPR的平均值为0.008,表明非SATD被预测为SATD(误报)的平均概率为0.8%,即反类预测错误。同时FNR的平均值为0.328,表明有些是SATD的被预测为非SATD的平均概率为32.8%,即正类预测错误,这是不足的地方,同时这也可能与本发明方法的查全率不高有着直接关系。本发明方法8个项目的跨项目和项目内的ROC曲线如图2所示,跨项目预测的AUC平均值为0.83,项目内预测的AUC平均值为0.892。项目内预测因为不存在项目的唯一性问题也即同一个项目内注释差别不大,因此项目内预测的难度要小于跨项目预测。所有的测试项目的AUC值都在0.5以上且多个项目的AUC值在高于0.8。

表3 本发明方法的TPR,TNR,FPR和FNR

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号