首页> 中国专利> 一种基于数理统计的自承认技术债检测方法

一种基于数理统计的自承认技术债检测方法

摘要

本发明提供了一种基于数理统计的自承认技术债检测方法,包括:获取源代码注释数据集,用于预训练深度学习语言分类模型,源代码注释数据集包括源代码注释和源代码注释的技术债标签;模型包括关键词匹配模型和利用源代码注释数据集完成预训练的深度学习语言分类模型;根据源代码注释中的关键词数理统计结果,以及检测环境的约束条件选择模型中的一个执行自承认技术债的检测;将新的待检测注释数据输入到S2选择的模型中执行自承认技术债的检测,输出的结果为新的待检测注释数据是否为自承认技术债的结果。本发明根据不同检测环境和待检测数据集特点,选择合适的模型,综合发挥不同类别检测模型的优势,达到了更好的检测效果。

著录项

  • 公开/公告号CN116662172A

    专利类型发明专利

  • 公开/公告日2023-08-29

    原文格式PDF

  • 申请/专利权人 吉林大学;

    申请/专利号CN202310624963.8

  • 发明设计人 包铁;袁梦;彭涛;甘露;宋伟;

    申请日2023-05-30

  • 分类号G06F11/36(2006.01);G06F40/216(2020.01);G06N3/045(2023.01);

  • 代理机构北京慕达星云知识产权代理事务所(特殊普通合伙) 11465;

  • 代理人李冉

  • 地址 130012 吉林省长春市前进大街2699号

  • 入库时间 2024-01-17 01:25:44

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-09-15

    实质审查的生效 IPC(主分类):G06F11/36 专利申请号:2023106249638 申请日:20230530

    实质审查的生效

  • 2023-08-29

    公开

    发明专利申请公布

说明书

技术领域

本发明属于软件工程技术领域,涉及一种基于数理统计的自承认技术债检测方法。

背景技术

在软件开发过程中开发人员想要在短时间内获得高质量的服务或产品。然而,由于时间压力、市场竞争和开发成本等因素的影响,开发人员想要在实践中同时实现所有这些目标是具有挑战性的。因此,开发人员面对这种两难问题必须要做出权衡。Cunningham提出的技术债务正是用来描述开发人员在软件开发期间在短期目标和长期代码质量之间的权衡。技术债务是为了实现一些短期目标而采取的次优解决方案。通常这些方案能够使项目在短期内更快地被完成,但却引入了额外的软件维护成本并且会对产品质量产生负面的影响。从短期来看,完成当前的开发任务并且能够满足当前的用户需求。但从长远来看,次优的代码质量存在着一些隐患。如果这些债务得不到偿还,它们可能会对软件的整体质量造成严重损害,并导致未来的一系列长期缺陷。

当前的技术债可以被分为两大类,一类是由开发者在不知情的情况下无意间欠下的技术债,如架构的衰退或架构漂移。另一类则是由开发者有意引入的自承认技术债。

自承认技术债的概念是由Potdar和Shihab基于技术债务提出的,是开发人员有意引入并在代码注释中标记的技术债务。

相关文献显示,自承认技术债尽管比例不高但非常常见。相关人员进行了一项实证研究,自承认技术债的存在不仅与软件质量息息相关,同时随着时间的推移,系统软件会越来越难以更改。因此自承认技术债的研究对软件质量的改进工作是十分重要的,迫切需要识别和修复自承认技术债。

对于检测模型大致可以分为两类。一类利用了深度学习模型。另一类利用了非深度学习(如关键词匹配)的模型。实际上,无论是哪一种模型在检测过程中都存在自身的优势。如深度学习模型的检测效果较好,一些模型可以利用相关的解释性工具得到容易理解的结果。非深度模型相比于深度学习模型使用的计算资源更少,实现更轻松。但其检测结果不够精准并且缺少可靠性。

因此,如何提供一种能够结合深度学习和非深度学习两类模型优势的基于数理统计的自承认技术债检测方法是本领域技术人员亟需解决的问题。

发明内容

有鉴于此,本发明提出了一种基于数理统计的自承认技术债检测方法,在提高检测效率的同时,有效发挥模型优势并提高计算资源的利用率。

为了实现上述目的,本发明采用如下技术方案:

本发明公开了一种基于数理统计的自承认技术债检测方法,包括如下步骤:

S1:数据集的获取:获取源代码注释数据集,用于预训练深度学习语言分类模型,所述源代码注释数据集包括源代码注释和源代码注释的技术债标签;

S2:模型的选择:模型包括关键词匹配模型和利用源代码注释数据集完成预训练的深度学习语言分类模型;根据源代码注释中的关键词数理统计结果,以及检测环境的约束条件选择所述模型中的一个执行自承认技术债的检测;

S3:自承认技术债的检测:将新的待检测注释数据输入到S2选择的模型中执行自承认技术债的检测,输出的结果为所述新的待检测注释数据是否为自承认技术债的结果。

优选的,所述S1还包括数据集的预处理步骤:

对所述源代码注释进行预处理,包括:清除注释中标点符号和设定的指定符号,以及统一所述源代码注释的文本格式。

优选的,所述关键词匹配模型包括:

设定自承认技术债关键词;

在源代码注释中检索匹配所述自承认技术债关键词,若源代码注释中含有所述自承认技术债关键词,则当前源代码注释为自承认技术债;否则为非自承认技术债。

优选的,所述自承认技术债关键词包括:todo、XXX、fixme、hack中的一个或多个的组合。

优选的,所述深度学习语言分类模型包括:

以Bert模型为主干网络,包括预训练的Bert层、全连接层和输出层;

通过调节不同类的权重确定二元交叉熵损失函数,所述不同类包括自承认技术债和非自承认技术债;

利用所述源代码注释和源代码注释的技术债标签训练得到所述Bert模型的网络参数。

优选的,所述二元交叉熵损失函数的调整步骤包括:

确定初始二元交叉熵损失函数:LOSS(Y,T)=-∑iTilog(yi)

其中,y

自承认技术债的权重为:

非自承认技术债的权重为:

其中,n为自承认技术债的数量,m为非自承认技术债的数量。

将初始二元交叉熵改进为:LOSS(Y,T)=-(1-wight

优选的,采用Adam更新算法优化网络参数,包括学习率和衰减因子,预训练后确定的学习率和衰减因子分别为2e

优选的,所述S3中根据源代码注释中的关键词数理统计结果,以及检测环境的约束条件选择所述模型中的一个执行自承认技术债的检测包括以下模型选择策略:

策略一:统计新的待检测注释数据中设定自承认技术债关键词的数量Total

策略二:当检测环境的计算资源和计算能力不满足设定约束条件时,进一步判断H是否在策略一的所述决策范围内,若是则选择关键词匹配模型作为自承认技术债的检测模型;若否则按照策略三执行;

策略三:调整自承认技术债关键词的选择,并重新计算H,返回策略一。

优选的,所述策略一中的决策范围设置为[2.5%,7%]。

优选的,所述策略三中新增note和bug作为新的关键词计算H。

经由上述的技术方案可知,与现有技术相比,本发明具有以下增益效果:

本发明基于数理统计的分析结果,提出了一种自承认技术债检测模型的选择方法。在不同的检测环境和具有不同特征的待检测数据集下,在一种基于预训练的深度学习模型和一种基于关键词匹配的检测模型之间做出决策。本发明能够通过数理统计分析确定模型选择的决策条件,在不同情况下,最大化地发挥不同检测模型的优势,以达到高效检测自承认技术债的目的。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图;

图1是本发明实施例提供的一种基于数理统计的自承认技术债检测方法的流程图;

图2是本发明实施例提供的深度学习检测模型图;

图3是本发明实施例提供的模型选择策略一流程图;

图4是本发明实施例提供的模型选择策略总体流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参见图1,本发明实施例提出一种基于数理统计的自承认技术债检测方法,一种基于数理统计的自承认技术债检测方法,包括如下步骤:

S1:数据集的获取:获取源代码注释数据集,用于预训练深度学习语言分类模型,源代码注释数据集包括源代码注释和源代码注释的技术债标签;

S2:模型的选择:模型包括关键词匹配模型和利用源代码注释数据集完成预训练的深度学习语言分类模型;根据源代码注释中的关键词数理统计结果,以及检测环境的约束条件选择模型中的一个执行自承认技术债的检测;该方法能够充分发挥不同类型检测模型的优势;

S3:自承认技术债的检测:将新的待检测注释数据输入到S2选择的模型中执行自承认技术债的检测,输出的结果为新的待检测注释数据是否为自承认技术债的结果。

在具体执行时,S1采用已公开的十个项目的源代码注释数据集,该数据集进行了自承认技术债标签的手工标注。

在一个实施例中,S1还包括数据集的预处理步骤:

对源代码注释进行预处理,包括:清除注释中标点符号和设定的指定符号,以及统一源代码注释的文本格式。源代码注释为文本数据,文本格式包括源代码注释的大小写字体。

在一个实施例中,关键词匹配模型包括:

设定自承认技术债关键词;

在源代码注释中检索匹配自承认技术债关键词,若源代码注释中含有自承认技术债关键词,则当前源代码注释为自承认技术债;否则为非自承认技术债。

本实施例中,可以采用利用了一些集成开发环境分析总结的一种自承认技术债检测方法。检测方法包括两步:步骤一:确定待匹配的关键词为todo,XXX,fixme,hack;步骤二:检测源代码注释中是否含有待匹配关键词,若存在则认为该注释为自承认技术债,否则不是自承认技术债。

优选的,自承认技术债关键词包括:todo、XXX、fixme、hack中的一个或多个的组合。

在一个实施例中,参见图2,深度学习语言分类模型包括:

以Bert模型为主干网络,包括预训练的Bert层、全连接层和输出层;

通过调节不同类的权重确定二元交叉熵损失函数,不同类包括自承认技术债和非自承认技术债;

利用源代码注释和源代码注释的技术债标签训练得到Bert模型的网络参数。

本实施例通过改进的损失函数进行评估能够在一定程度上改善模型在类不平衡的源代码注释上的自承认技术债的检测效果。

在一个实施例中,二元交叉熵损失函数的调整步骤包括:

确定初始二元交叉熵损失函数:LOSS(Y,T)=-∑

其中,y

自承认技术债的权重为:

非自承认技术债的权重为:

其中,n为自承认技术债的数量,m为非自承认技术债的数量。数据集中的每一条数据都是一条注释,注释中有可能有SATD,也可能没有。从源代码的注释中提取了有效的数据集,n这个数量指的就是这个数据集中含有SATD的数据条数。

将初始二元交叉熵改进为:LOSS(Y,T)=-(1-weight

下面对以Bert模型为主干网络的深度学习语言分类模型的原理进行说明:

核心是Transformer来计算不同词之间的相关性。其过程如下:

源代码注释经过分词进行词嵌入后得到对应每一个词的词向量x

一组输入到其中的源代码注释向量x

经过激活函数(可以使用Softmax)得到与x

用到m个注意力头时,将每组Q,K,V中的每个变量经过矩阵运算分成q

Transformer具有多头注意力,它以不同的权重连接不同的自我注意力层。连接方式如下:

Multihead(O,K,V)=Concat(Attention

其中

其中d

Bert层从预处理数据中获得有用信息,以计算每个位置的“Embbeding编码器”。在“Transformer编码器”中进行12层自注意机制的计算后,每个源代码注释向量(单词)都能够在上下文中学习其他单词的信息。最后,选择一个计算的向量作为上下文的表示。该表示可以表示整个源代码注释,通过全连接层即可利用该表示检测该注释是否为自承认技术债。技术债标签作为训练中的监督信息,这里使用的Bert模型是一种监督学习方式,在训练过程中用到了技术债标签。

在一个实施例中,采用Adam更新算法优化网络参数,包括学习率和衰减因子,预训练后确定的学习率和衰减因子分别为2e

在一个实施例中,S3中根据源代码注释中的关键词数理统计结果,以及检测环境的约束条件选择模型中的一个执行自承认技术债的检测包括以下模型选择策略:

策略一:参见图3,统计新的待检测注释数据中设定自承认技术债关键词的数量Total

策略二:当检测环境的计算资源和计算能力不满足设定约束条件时,进一步判断H是否在策略一的决策范围内,若是则选择关键词匹配模型作为自承认技术债的检测模型;若否则按照策略三执行;

策略三:调整自承认技术债关键词的选择,并重新计算H,返回策略一。

模型选择策略总体流程图如图4所示。

本实施例中,策略一中的决策范围设置为[2.5%,7%]。

本实施例中,策略三中新增note和bug作为新的关键词计算H。

本发明将数理统计的分析结论作为决策条件,在一种深度学习模型和一种非深度学习模型之间进行检测模型的选择。根据不同检测环境和待检测数据集特点,选择合适的模型,综合发挥不同类别检测模型的优势,从而达到更好的检测效率。

本发明中的深度学习模型是一种基于预训练的语言分类模型。使用特殊的交叉熵损失函数来评估训练集的结果,以处理代码注释中类不平衡的问题。该模型准确率高但比较消耗计算资源。

本发明中使用的非深度学习模型是一种基于关键词匹配的检测模型。通过查询待检测注释中是否含有关键词来确定该注释是否为自承认技术债。该方法操作简单,但准确率低,可靠性较差。本发明能够综合发挥两类方法的优势,使自承认技术债的检测工作在任何环境下都能够高效进行。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

以上对本发明所提供的基于数理统计的自承认技术债检测方法进行了详细介绍,本实施例中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本实施例中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本实施例所示的这些实施例,而是要符合与本实施例所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号