本发明专利技术提供一种代码坏味道检测方法和装置,可用于金融领域或其他领域,该方法包括:对获取的待检代码类进行特征提取得到该待检代码类的文本特征和结构特征;将该文本特征和该结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将该代码坏味道检测模型的输出作为该待检代码类的坏味道检测结果。其中,在考虑代码的结构特征的基础上,进一步考虑了代码的语义特征,能够提高代码坏味道检测的查准率和查全率。
【技术实现步骤摘要】
代码坏味道检测方法和装置
本专利技术涉及软件工程
,尤其涉及一种代码坏味道检测方法和装置。
技术介绍
随着互联网行业软件开发的规模越来越大,对软件质量和管理的要求也越来越高,开发人员需要对愈发庞大复杂的程序框架进行扩展和维护,花在代码结构梳理与改善上的时间也越来越多。因此,迫切需要采取一些优化措施来提高代码的可复用性、可理解性与维护性,软件重构应运而生。软件重构的关键步骤之一是明确需要重构的代码片段。为了帮助开发人员确定需在程序中的何处进行重构操作,Fowler等人提出了代码坏味道的概念,意指这些由于设计缺陷或者不良的编码习惯而引入程序的、影响软件结构和质量的程序代码。代码的坏味道是代码之中潜在问题的警示信号,虽然并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。代码的坏味道包括数据类、特征依恋、长方法等。测试代码坏味道是指单元测试代码中的不良编程实践(例如,测试用例的组织方式,实现方式以及彼此之间的交互方式),它们表明测试源代码中潜在的设计问题。目前,研究人员提出了一系列的自动或半自动的方法以从代码中检测这些代码坏味道。目前的主要代码坏味道检测方法和工具,包括JDeodorant、iPlasma和PMD等,主要依靠代码度量和启发式规则来检测各种各样的代码坏味道。由于代码度量并不能完全反应代码的质量,简单的启发式规则也不足以准确描述代码度量与代码坏味道检查结果之间的复杂映射关系;且代码度量的选择带有强烈的主观性,选中的代码度量项可能并非最佳选择。因此这些检测方法的查准率和查全率都不够理想,目前难以在工业界广泛应用。
技术实现思路
针对现有技术中的问题,本专利技术提供一种代码坏味道检测方法和装置、电子设备以及计算机可读存储介质,能够至少部分地解决现有技术中存在的问题。为了实现上述目的,本专利技术采用如下技术方案:第一方面,提供一种代码坏味道检测方法,包括:对获取的待检代码类进行特征提取得到该待检代码类的文本特征和结构特征;将该文本特征和该结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将该代码坏味道检测模型的输出作为该待检代码类的坏味道检测结果。进一步地,该代码坏味道检测模型包括:文本输入层、结构输入层、LSTM层、第一Dense全连接层、Merge融合层、第二Dense全连接层以及输出层;该文本输入层的输入端用于接收该文本特征,输出端连接该LSTM层;该结构输入层的输入端用于接收该结构特征,输出端连接该第一Dense全连接层;该LSTM层的输出端和该第一Dense全连接层的输出端连接该Merge融合层的输入端,该Merge融合层的输出端连接该第二Dense全连接层的输入端,该第二Dense全连接层的输出端连接该输出层。进一步地,还包括:建立一代码坏味道检测模型;对开源软件代码进行反重构并自动生成标签得到样本数据;对该样本数据中的每个样本进行文本特征提取和结构特征提取得到训练样本集;应用该训练样本集对建立的代码坏味道检测模型进行训练。进一步地,还包括:对开源的代码坏味数据集进行文本特征提取和结构特征提取得到测试样本集;应用该测试样本集对该代码坏味道检测模型进行测试。进一步地,该结构特征包括:WMC类内圈复杂度、TCC类内内聚性、FEW类访问外部类属性的个数、AFTD使用外部属性的个数、LAA用本地属性的值/上方法使用所有属性的值、NOPA类的公共属性的个数、NOPA类的访问器的个数、NProtM类的公共成员个数、BOvR基类方法覆盖率。进一步地,该待检代码类包括多个代码行,采用Word2vector的Skip-Gram模型提取各代码行的语义特征向量,将各代码行的语义特征向量组合得到该文本特征。第二方面,提供一种代码坏味道检测装置,包括:文本结构特征提取模块,对获取的待检代码类进行特征提取得到该待检代码类的文本特征和结构特征;代码坏味道检测模块,将该文本特征和该结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将该代码坏味道检测模型的输出作为该待检代码类的坏味道检测结果。进一步地,该代码坏味道检测模型包括:文本输入层、结构输入层、LSTM层、第一Dense全连接层、Merge融合层、第二Dense全连接层以及输出层;该文本输入层的输入端用于接收该文本特征,输出端连接该LSTM层;该结构输入层的输入端用于接收该结构特征,输出端连接该第一Dense全连接层;该LSTM层的输出端和该第一Dense全连接层的输出端连接该Merge融合层的输入端,该Merge融合层的输出端连接该第二Dense全连接层的输入端,该第二Dense全连接层的输出端连接该输出层。第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行该程序时实现上述的代码坏味道检测方法的步骤。第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的代码坏味道检测方法的步骤。本专利技术提供的代码坏味道检测方法和装置,该方法包括:对获取的待检代码类进行特征提取得到该待检代码类的文本特征和结构特征;将该文本特征和该结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将该代码坏味道检测模型的输出作为该待检代码类的坏味道检测结果。其中,在考虑代码的结构特征的基础上,进一步考虑了代码的语义特征,能够提高代码坏味道检测的查准率和查全率,可用于金融领域或其他领域。另外,该代码坏味道检测模型基于LSTM,利用深度学习擅长特征选择以及建立复杂映射关系的特点提取出文本信息,同时结合多个结构度量项,综合评判待检测程序是否包含代码坏味,不仅为开发者节省大量软件维护和拓展的时间精力成本,延长软件的生命周期,还能够通过改善代码逻辑来增强代码理解,以便更好地从中发现程序缺陷。再者,本专利技术中对开源软件代码进行反重构并自动生成标签得到样本数据,解决训练数据集需要手工构造、耗时巨大且规模偏小、难以发挥深度学习的问题。为让本专利技术的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1为本专利技术实施例中的服务器S1与客户端设备B1之间的架构示意图;图2为本专利技术实施例中的服务器S1、客户端设备B1及数据库服务器S2之间的架构示意图;图3是本专利技术实施例中的代码坏味道检测方法的流程示意图一;图4示出了本专利技术实施例中代码坏味道检测模型的具体结构;图5是本专利技术实施例中的代码坏味道检测方法的流程示意本文档来自技高网...
【技术保护点】
1.一种代码坏味道检测方法,其特征在于,包括:/n对获取的待检代码类进行特征提取得到所述待检代码类的文本特征和结构特征;/n将所述文本特征和所述结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将所述代码坏味道检测模型的输出作为所述待检代码类的坏味道检测结果。/n
【技术特征摘要】
1.一种代码坏味道检测方法,其特征在于,包括:
对获取的待检代码类进行特征提取得到所述待检代码类的文本特征和结构特征;
将所述文本特征和所述结构特征作为预测样本,输入预训练的代码坏味道检测模型,并将所述代码坏味道检测模型的输出作为所述待检代码类的坏味道检测结果。
2.根据权利要求1所述的代码坏味道检测方法,其特征在于,所述代码坏味道检测模型包括:文本输入层、结构输入层、LSTM层、第一Dense全连接层、Merge融合层、第二Dense全连接层以及输出层;
所述文本输入层的输入端用于接收所述文本特征,输出端连接所述LSTM层;所述结构输入层的输入端用于接收所述结构特征,输出端连接所述第一Dense全连接层;所述LSTM层的输出端和所述第一Dense全连接层的输出端连接所述Merge融合层的输入端,所述Merge融合层的输出端连接所述第二Dense全连接层的输入端,所述第二Dense全连接层的输出端连接所述输出层。
3.根据权利要求2所述的代码坏味道检测方法,其特征在于,还包括:
建立一代码坏味道检测模型;
对开源软件代码进行反重构并自动生成标签得到样本数据;
对所述样本数据中的每个样本进行文本特征提取和结构特征提取得到训练样本集;
应用所述训练样本集对建立的代码坏味道检测模型进行训练。
4.根据权利要求3所述的代码坏味道检测方法,其特征在于,还包括:
对开源的代码坏味数据集进行文本特征提取和结构特征提取得到测试样本集;
应用所述测试样本集对所述代码坏味道检测模型进行测试。
5.根据权利要求1至4任一项所述的代码坏味道检测方法,其特征在于,所述结构特征包括:WMC类内圈复杂度、TCC类内内聚性、FEW类访问外部类属性的个数、AFTD使用外部属性的个数、LAA用本地属性的值/上方法使用所有属性...
【专利技术属性】
技术研发人员:王妍,金冶,李伟,高卓,
申请(专利权)人:中国工商银行股份有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。