CN116302043B - 代码维护问题检测方法、装置、电子设备及可读存储介质 - Google Patents

代码维护问题检测方法、装置、电子设备及可读存储介质 Download PDF

Info

Publication number
CN116302043B
CN116302043B CN202310596575.3A CN202310596575A CN116302043B CN 116302043 B CN116302043 B CN 116302043B CN 202310596575 A CN202310596575 A CN 202310596575A CN 116302043 B CN116302043 B CN 116302043B
Authority
CN
China
Prior art keywords
code
maintenance
classification model
preset
target
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.)
Active
Application number
CN202310596575.3A
Other languages
English (en)
Other versions
CN116302043A (zh
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.)
Shenzhen Mingyuan Cloud Technology Co Ltd
Original Assignee
Shenzhen Mingyuan Cloud Technology Co Ltd
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 Shenzhen Mingyuan Cloud Technology Co Ltd filed Critical Shenzhen Mingyuan Cloud Technology Co Ltd
Priority to CN202310596575.3A priority Critical patent/CN116302043B/zh
Publication of CN116302043A publication Critical patent/CN116302043A/zh
Application granted granted Critical
Publication of CN116302043B publication Critical patent/CN116302043B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种代码维护问题检测方法、装置、电子设备及可读存储介质,涉及计算机技术领域,所述代码维护问题检测方法包括:将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列;若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型。本申请解决了代码的维护更新效率低的技术问题。

Description

代码维护问题检测方法、装置、电子设备及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码维护问题检测方法、装置、电子设备及可读存储介质。
背景技术
在软件开发中,对第一代码文件的维护更新是一个非常重要的过程。软件开发人员经常需要面对大量的第一代码文件,这些第一代码文件如果不进行维护和更新则会导致代码文件无法适配新的需求、功能缺陷增多以及存在代码冗余度高等问题。通常情况下,对前端代码可维护性分析往往是通过人工逐条浏览原始代码以进行代码评审,分析出代码文件中存在的各种问题,再对代码进行复杂的修改,其中涉及的工作量十分巨大,导致代码的维护更新效率较为低下。
发明内容
本申请的主要目的在于提供一种代码维护问题检测方法、装置、电子设备及可读存储介质,旨在解决代码的维护更新效率低的技术问题。
为实现上述目的,本申请提供一种代码维护问题检测方法,所述代码维护问题检测方法包括:
将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
可选地,所述将各所述第一代码块转换成对应的第一特征向量序列的步骤包括:
删除各所述第一代码块中的注释和空白段,获得各目标代码块;
通过预设的Java Script(脚本语言)解析器将各所述目标代码块转换成对应的抽象语法树;
将各所述抽象语法树转换成对应的第一特征向量序列。
可选地,所述将各所述抽象语法树转换成对应的第一特征向量序列的步骤包括:
对各所述抽象语法树的各节点进行深度优先遍历,并将遍历到的各节点进行编码,生成各所述节点分别对应的特征向量;
基于各所述节点的深度优先遍历顺序,将各所述抽象语法树中的各节点对应的特征向量组合成第一特征向量序列。
可选地,在所述将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题的步骤之前,所述方法还包括:
将第二代码文件拆分为多个第二代码块,并将各所述第二代码块转换成对应的第二特征向量序列;
获取各所述第二代码块分别对应的维护标签;
根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
可选地,所述根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型的步骤包括:
基于预设的支持向量机算法,构建预设二分类模型;
将各所述第二代码块分别对应的第二特征数据输入所述预设二分类模型,获得预测值;
根据各所述第二代码块对应的预测值和维护标签确定所述预设二分类模型的预测精度;
根据所述预测精度对所述预设二分类模型的模型参数进行优化,获得目标二分类模型,其中,所述模型参数至少包括偏置值和权值向量。
可选地,在所述将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型的步骤之前,所述方法还包括:
基于预设的k均值聚类算法构建预设多分类模型;
将多个存在维护问题的第二代码文件对应的多个第二代码块转换成对应的第二特征向量序列;
根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
可选地,所述根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型的步骤包括:
基于预设簇数量,初始化所述预设多分类模型的多个聚类中心;
将各所述第二特征数据分配到各所述聚类中心对应的簇;
根据各簇的特征数据更新对应聚类中心,返回执行步骤:将各所述第二特征数据分配到各所述聚类中心对应的簇,直至聚类中心不再发生变化或迭代更新次数达到预设次数;
获取各所述聚类中心分别对应的维护问题类型标签,并将各所述维护问题类型标签添加到所述预设多分类模型中,获得目标多分类模型。
本申请还提供一种代码维护问题检测装置,所述代码维护问题检测装置应用于代码维护问题检测设备,所述代码维护问题检测装置包括:
文件转换模块,用于将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
二分类模块,用于将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
多分类模块,用于若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
本申请还提供一种电子设备,所述电子设备为实体设备,所述电子设备包括:存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的所述代码维护问题检测方法的程序,所述代码维护问题检测方法的程序被处理器执行时可实现如上述的代码维护问题检测方法的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有实现代码维护问题检测方法的程序,所述代码维护问题检测方法的程序被处理器执行时实现如上述的代码维护问题检测方法的步骤。
本申请还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述的代码维护问题检测方法的步骤。
本申请提供了一种代码维护问题检测方法、装置、电子设备及可读存储介质,首先将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列,再将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题,若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。本申请的技术方案通过先判断第一代码文件是否存在维护问题,进而对存在维护问题的第一代码文件进行进一步分类,确定具体的维护问题类型,无需对不存在维护问题的第一代码文件进行详细检测,提高了第一代码文件的维护问题检测效率,而且本技术方案还利用了训练好的目标二分类模型和目标多分类模型来进行代码文件维护问题的检测,克服了需要人工进行评审的技术缺陷,实现了代码维护问题检测的自动化,提高了代码的维护更新效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请代码维护问题检测方法第一实施例的流程示意图;
图2为本申请代码维护问题检测方法第二实施例的流程示意图;
图3为本申请代码维护问题检测方法第三实施例的流程示意图;
图4为本申请实施例中代码维护问题检测装置的组成结构示意图;
图5为本申请实施例中代码维护问题检测方法涉及的硬件运行环境的设备结构示意图。
本申请目的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本申请保护的范围。
实施例一
在软件开发的工作流程中,代码的可维护性是代码质量的一个非常重要的评判标准。软件开发人员经常需要面对大量的代码,这些代码难以维护和更新,导致代码质量下降、功能缺陷增多、代码冗余度高等问题。已有的前端代码可维护性分析方案往往人工进行代码评审,对代码进行复杂的分析和修改,需要逐条阅读代码文件内容,其中的工作量巨大,效率低下。因此,本申请实施例通过研发一种基于人工智能的前端代码可维护性分析工具,具有自动化、高效性和准确性等优点,能够有效提高前端开发人员的工作效率和代码质量,具有广泛的应用价值。
本申请实施例提供一种代码维护问题检测方法,在本申请代码维护问题检测方法的第一实施例中,参照图1,所述代码维护问题检测方法包括:
步骤S10,将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
步骤S20,将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
步骤S30,若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
在本申请实施例中,需要说明的是,所述第一代码文件为需要进行代码维护问题检测的前端原始代码文件,可以来自于各种开源项目、商业项目、个人项目等。在对所述第一代码文件进行划分时,其划分标准可以根据用户需求自行设置,例如按函数划分、按类划分或按语句划分均可,比如某个函数对应的多条语句划分为一个代码块,可以以一种划分标准划分,也可以多种划分标准组合划分。其中,每个代码块可以转换成对应的抽象语法(AST,abstract syntax code)树,特征向量序列中包括代码块对应的抽象语法树中的每个节点对应的向量,用于表征代码块的结构特征。
此外,所述目标二分类模型可以为支持向量机模型,用于进行二分类以判断各代码块中是否存在维护问题,不存在维护问题的代码块即为可维护性好的代码块,存在维护问题的代码块即为可维护性差的代码块,其中训练目标二分类模型的维护标签是通过人工在训练用的样本数据(多个代码块)中标注得到。特征数据中的注释是指代码块中是否具有注释,若有,则特征值为1,若没有,则特征值为0,拼写错误比例是指错误拼写的单词数量与单词的总数量之间的比值,中文字符占比是指删除注释后的代码块中的中文字符数量与字符总数量之间的比值。本申请实施例的技术方案中,将注释、拼写错误比例、中文字符占比以及第一特征向量序列共同作为代码块的特征数据在四个特征维度的特征向量,以便根据第一特征数据和目标二分类模型和目标多分类模型对代码块存在的维护问题作出准确预测。
另外,所述目标多分类模型可以为一种K-Means(k均值)聚类算法模型,用于确定各代码块中的具体维护问题类型,从而确定存在维护问题的第一代码文件中的各维护问题类型,所述维护问题类型至少包括代码行数过多、命名不规范、代码无注释、可读性差、依赖关系复杂、代码重复、扩展性差以及不合适的全局变量等,每个代码块对应一个维护问题类型,检测得到的维护问题类型各代码块对应的最主要的维护问题类型,每个第一代码文件包括多个代码块,则也可以具备多个维护问题类型。
作为一种示例,若需要进一步检测其他维护问题类型,则可在得到所述第一代码文件中的各维护问题类型之后,人工修复所述第一代码文件对应的维护问题后再次执行步骤S10至步骤S30,以对除已修复的维护问题类型以外的维护问题进行检测。
作为另一种示例,当所述第一代码文件的行数超过300行时,输出所述第一代码文件存在文件级别的维护问题,并继续执行步骤S10至步骤S30,具体地,维护问题为代码行数过多,以第一时间提醒用户当前检测的第一代码文件存在的维护问题。
作为另一种示例,在获得所述第一代码文件中存在的维护问题类型后,向用户推送所述第一代码文件的各维护问题类型的信息,以供用户参考便于对存在维护问题的代码文件进行维护与更新。
作为一种示例,步骤S10至步骤S30包括:根据预设划分标准将需要检测的第一代码文件划分为多个第一代码块,其中,所述预设划分标准至少包括按函数划分、按类划分或按语句划分中的一种;通过预设的Java Script解析器将各所述第一代码块转换成对应的抽象语法树,基于各所述抽象语法树的深度优先遍历顺序,将各所述抽象语法树的各节点转换成由各所述节点对应的向量组成的第一特征向量序列;将各所述第一代码块的各维度的特征向量组成的第一特征数据输入预设的目标二分类模型,通过所述目标二分类模型对各所述第一代码块是否存在维护问题的情况进行预测,获得预测结果,其中,所述预测结果为不存在维护问题或存在维护问题,各所述维度的特征向量至少包括各所述第一代码块的注释存在情况、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述预测结果为包括存在维护问题或不存在维护问题,所述目标二分类模型是通过多个代码块以及各代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;若所述预测结果为不存在维护问题,则输出所述预测结果;若所述预测结果为存在维护问题,则将所述第一代码文件对应的各第一代码块的第一特征数据分别输入预设的目标多分类模型,通过所述目标多分类模型对各所述第一代码块的维护问题类型进行预测,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
其中,所述将各所述第一代码块转换成对应的第一特征向量序列的步骤包括:
步骤S11,删除各所述第一代码块中的注释和空白段,获得各目标代码块;
步骤S12,通过预设的Java Script解析器将各所述目标代码块转换成对应的抽象语法树;
步骤S13,将各所述抽象语法树转换成对应的第一特征向量序列。
在本申请实施例中,需要说明的是,本申请实施例提供了一种将各代码块转换成对应的第一特征向量序列的方法,首先需要删除代码块中的注释和空白段,是为了避免代码块中的注释内容对转换生成的抽象语法树产生影响,所述抽象语法树表征了代码块的逻辑结构特征,而注释是对代码块语句的注释,所述目标代码块即为去除了注释和空白段之后的代码块。另外,所述第一特征向量序列中包括向量,每个向量对应所述抽象语法树中的一个节点,用于表征所述抽象语法树的结构特征,即代码块的结构特征,具体地,所述第一特征向量序列中各向量的排列顺序以所述抽象语法树中的各节点的深度排序顺序为准,即通过序列模型的方法来进行抽象语法树到特征向量序列之间的转换。此外,所述JavaScript解析器主要用于将代码块进行压缩转换,生成对应的抽象语法树,以便于更清晰地得到代码块中各语句之间的逻辑结构,从而提取代码块的结构特征。
作为一种示例,步骤S11至步骤S13包括:删除各所述第一代码块中的注释和空白段,获得各所述第一代码块分别对应的目标代码块;将各所述目标代码块输入预设的JavaScript解析器,通过所述Java Script解析器对各所述目标代码块进行解析,生成各所述目标代码块分别对应的抽象语法树,各所述抽象语法树包括多个节点;将各所述抽象语法树中的各节点分别进行编码,获得各所述节点对应的向量;基于各所述节点在抽象语法树中的深度位置将各所述向量进行排序,获得各所述第一代码块分别对应的第一特征向量序列。
具体地,所述将各所述抽象语法树转换成对应的第一特征向量序列的步骤包括:
步骤S131,对各所述抽象语法树的各节点进行深度优先遍历,并将遍历到的各节点进行编码,生成各所述节点分别对应的特征向量;
步骤S132,基于各所述节点的深度优先遍历顺序,将各所述抽象语法树中的各节点对应的特征向量组合成第一特征向量序列。
在本申请实施例中,需要说明的是,本申请实施例提供了一种将抽象语法树转换成特征向量序列的方法,具体用到了深度优先遍历的方法,即父节点和子节点之间先遍历父节点,在进行各节点的遍历时,先遍历深度低的节点,再遍历深度高的节点,其中,距离抽象语法树的距离越远,节点的深度越高。此外,在对各节点进行编码时,可以应用常见的编码模型,例如单词编码(Embedding)模型,这种编码模型是通过神经网络训练优化得到的,能表达单词之间的相关性,实现了通过用低维向量将文本信息编码成数值形式的向量,便于后续的二分类模型和多分类模型对数值形式的向量进行处理,得到更准确的预测结果。
作为一种示例,步骤S131至步骤S132包括:基于各所述抽象语法树中各节点的深度对各所述节点进行深度优先遍历,并将遍历到的各节点输入单词编码模型,通过所述单词编码对各所述节点中的文本信息进行编码,生成对应的数值形式的特征向量;根据各所述节点的深度,将各所述抽象语法树中各节点对应的特征向量进行排序,并组合生成第一特征向量序列。
本申请实施例提供了一种代码维护问题检测方法,首先将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列,再将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题,若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。本申请实施例的技术方案通过先判断第一代码文件是否存在维护问题,进而对存在维护问题的第一代码文件进行进一步分类,确定具体的维护问题类型,无需对不存在维护问题的第一代码文件进行详细检测,提高了第一代码文件的维护问题检测效率,而且本技术方案还利用了训练好的目标二分类模型和目标多分类模型来进行代码文件维护问题的检测,克服了需要人工进行评审的技术缺陷,实现了代码维护问题检测的自动化,提高了代码的维护更新效率。
实施例二
进一步地,基于本申请第一实施例,在本申请另一实施例中,与上述实施例一相同或相似的内容,可以参考上文介绍,后续不再赘述。在此基础上,在所述将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题的步骤之前,参照图2,所述代码维护问题检测方法还包括:
步骤A10,将第二代码文件拆分为多个第二代码块,并将各所述第二代码块转换成对应的第二特征向量序列;
步骤A20,获取各所述第二代码块分别对应的维护标签;
步骤A30,根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
在本申请实施例中,需要说明的是,本申请实施例提供了一种构建并训练二分类模型的方法,以对第一代码文件的可维护性进行预测,判断所述第一代码文件是否存在维护问题,实现对待检测的第一代码文件的初步筛查,区分开不存在维护问题和存在维护问题的第一代码文件,即筛选出可维护性差的第一代码文件以便进行下一步的维护问题类型检测。从而通过分步检测来提高第一代码文件维护问题检测的效率。
其中,步骤A10中将第二代码文件拆分成代码块以及将代码块转换成特征向量序列的过程与步骤S11至步骤S13的过程类似,具体实施过程和细节可参照上一实施例,在此不做赘述。此外,所述维护标签用于表征各代码块是否存在维护问题,在训练二分类模型的过程中,各第二代码块对应的维护标签是由人工进行标注的。第二代码文件即为训练用到的样本数据,是从各种开源项目、商业项目、个人项目等收集的,其中,收集到的第二代码文件应该尽可能地覆盖不同的编码风格和编程语言,以使得训练出来的目标二分类模型的适应性更强,能对更多类型的代码文件进行处理。
作为一种示例,步骤A10至步骤A30包括:根据预设划分标准将获取到的多个第二代码文件分别划分为多个第二代码块,其中,所述预设划分标准至少包括按函数划分、按类划分或按语句划分中的一种;通过预设的Java Script解析器将各所述第二代码块转换成对应的抽象语法树,基于各所述抽象语法树的深度优先遍历顺序,将各所述抽象语法树的各节点转换成由各所述节点对应的向量组成的第二特征向量序列;初始化预设二分类模型的模型参数,其中,所述模型参数包括权值向量和偏置值;将各所述第二代码文件对应的第二特征数据输入所述预设二分类模型中,获得各所述第二代码文件对应的预测值,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列;获取各所述第二代码文件对应的维护标签,根据各所述预测值和对应的维护标签确定所述预设二分类模型的预测精度;对所述预设二分类模型的模型参数优化,并返回执行步骤:将各所述第二代码文件对应的第二特征数据输入所述预设二分类模型中,获得各所述第二代码文件对应的预测值,直至所述预设二分类模型的预测精度达到预设阈值,停止对所述预设二分类模型的训练,并将所述预设二分类模型设置为目标二分类模型。
其中,所述根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型的步骤包括:
步骤A31,基于预设的支持向量机算法,构建预设二分类模型;
步骤A32,将各所述第二代码块分别对应的第二特征数据输入所述预设二分类模型,获得预测值;
步骤A33,根据各所述第二代码块对应的预测值和维护标签确定所述预设二分类模型的预测精度;
步骤A34,根据所述预测精度对所述预设二分类模型的模型参数进行优化,获得目标二分类模型,其中,所述模型参数至少包括偏置值和权值向量。
作为一种示例,所述预设二分类模型的函数公式为:f(x) = sign(w · x + b),其中,sign为符号函数,w为权值向量,b是偏置值,x为样本,w·x表示w和x的内积。在几何意义上,线性方程w·x+b=0对应于特征空间Rn中的一个超平面S(可以同时存在多个超平面),超平面将特征空间分成两部分,位于两侧的点分别为正负两类。其中w是超平面的法向量,b是超平面的截距线性方程w·x+b=0对应于特征空间Rn中的一个超平面S(可以同时存在多个超平面),超平面S将特征空间Rn划分为两部分,位于超平面两侧的点分别为正负两类样本。其中,w是超平面的法向量,b是超平面的截距,上述的对预设二分类模型进行训练的过程,也就是寻找一个最佳的超平面的过程。对于一个新的样本,其预测值为 f(/>),结果只有两种,要么是正样本(即 f(/>)=1)要么是负样本(即 f(/>)=-1),由 f(/>) 的正负号决定,若为正号,则所述样本xi不存在维护问题,即代码块的可维护性好;若为负号,则所述样本xi存在维护问题,即代码块的可维护性差。
作为一种示例,步骤A31至步骤A34包括:基于预设的支持向量机算法,构建预设二分类模型的函数公式为:f(x) = sign(w · x + b),其中,sign为符号函数,w为权值向量,b是偏置值,x为样本,w·x表示w和x的内积。根据预设的权值向量和偏置值初始化所述预设二分类模型的模型参数;将各第二代码文件的第二特征数据划分为训练集和测试集,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列;将所述训练集中的特征数据输入所述预设二分类模型,通过所述预设二分类模型对所述训练集中的各样本的维护问题存在情况进行预测,获得各所述样本对应的预测值,其中,每个样本对应一代码块;基于各所述样本对应的维护标签和预测值,计算所述预设二分类模型的预测精度,具体地,所述预测精度等于预测值与维护标签一致的样本数量与进行预测的总样本数量的比值;调整所述预设二分类模型的模型参数以使得所述预设二分类模型的预测精度提高,其中,所述模型参数包括权值向量和偏置值;将所述测试集中的特征数据输入所述预设二分类模型,获得当前预测值并基于所述当前预测值以及测试集中的样本的维护标签确定所述预设二分类模型的当前预测精度;判断所述当前预测精度是否高于预设精度阈值,若是,则将所述预设二分类模型设置为目标二分类模型;若否,则返回执行步骤:将所述训练集中的特征数据输入所述预设二分类模型,通过所述预设二分类模型对所述训练集中的各样本的维护问题存在情况进行预测,获得各所述样本对应的预测值。
本申请实施例提供了一种在所述将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题的步骤之前,训练目标二分类模型的方法,首先将第二代码文件拆分为多个第二代码块,并将各所述第二代码块转换成对应的第二特征向量序列,再获取各所述第二代码块分别对应的维护标签,进而根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型,本申请实施例通过结合人工标注的维护标签和多个第二代码文件来进行目标二分类模型的有监督训练,从而获得能准确区分存在维护问题的代码文件和不存在维护问题的代码文件的目标二分类模型,实现了自动化筛选,提高了代码文件的维护问题的检测效率。
实施例三
进一步地,基于本申请第一实施例和第二实施例,在本申请另一实施例中,与上述实施例一相同或相似的内容,可以参考上文介绍,后续不再赘述。在此基础上,在所述将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型的步骤之前,参照图3,所述代码维护问题检测方法还包括:
步骤B10,基于预设的k均值聚类算法构建预设多分类模型;
步骤B20,将多个存在维护问题的第二代码文件对应的多个第二代码块转换成对应的第二特征向量序列;
步骤B30,根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
在本申请实施例中,需要说明的是,对基于k均值聚类算法构建的预设多分类模型进行训练是一个无监督训练的过程,具体过程是先通过聚类算法以及初始的聚类中心来分配第二代码文件的第二特征数据到各聚类中心对应的簇,再不断更新各聚类中心,使得聚类中心的分布趋向稳定,得到稳定后的各聚类中心分别对应的各簇的数据,即训练完成。然后通过人工对各簇数据进行标注以确定各聚类中心分别对应的维护问题类型标签,以供在训练完成的目标多分类模型对各代码块的维护问题类型进行预测时,将各聚类中心的簇的样本数据分类为对应的维护问题类型。相比有监督训练,采用k均值聚类算法进行的无监督训练无需对每个训练用的样本数据(第二代码文件)进行逐一标注,节省了工作量,只需要根据分类完成后的各簇特征数据中标注各聚类中心对应的维护问题类型标签即可。
此外,所述步骤B20的实施步骤可以参照实施例一的具体细节,在此不做赘述。
作为一种示例,本申请实施例中所应用到的第二代码文件可以是在上一实施例中用到的已标注存在维护问题的第二代码文件。
作为一种示例,步骤B10至步骤B30包括:基于K-Means聚类算法和预设簇数量,初始化多个聚类中心,获得预设多分类模型;获取多个第二代码文件,其中,所述第二代码文件是从各种开源项目、商业项目、个人项目等收集的存在维护问题的代码文件,所述第二代码文件覆盖了不同的编码风格和不同类型的编程语言,以使得训练得到的目标多分类模型的适应性更强,能对更多类型的代码文件进行准确分类;根据预设划分标准将获取到的多个第二代码文件分别划分为多个第二代码块,其中,所述预设划分标准至少包括按函数划分、按类划分或按语句划分中的一种;通过预设的Java Script解析器将各所述第二代码块转换成对应的抽象语法树,基于各所述抽象语法树的深度优先遍历顺序,将各所述抽象语法树的各节点转换成由各所述节点对应的向量组成的第二特征向量序列;通过将各所述第二代码块的第二特征数据输入所述预设多分类模型中对所述预设多分类模型进行训练以优化各聚类中心,获得训练完成后的预设多分类模型,其中,所述第二特征数据包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列;根据训练完成后的预设多分类模型中各聚类中心分别对应的簇数据,获取各簇数据对应的聚类中心对应的维护问题类型标签,其中,所述维护问题类型标签是通过人工标注得到;将各所述维护问题类型标签添加到训练完成后的预设多分类模型的各聚类中心,获得目标多分类模型。
其中,所述根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型的步骤包括:
步骤B31,基于预设簇数量,初始化所述预设多分类模型的多个聚类中心;
步骤B32,将各所述第二特征数据分配到各所述聚类中心对应的簇;
步骤B33,根据各簇的特征数据更新对应聚类中心,返回执行步骤:将各所述第二特征数据分配到各所述聚类中心对应的簇,直至聚类中心不再发生变化或迭代更新次数达到预设次数;
步骤B34,获取各所述聚类中心分别对应的维护问题类型标签,并将各所述维护问题类型标签添加到所述预设多分类模型中,获得目标多分类模型。
在本申请实施例中,需要说明的是,在对所述预设多分类模型进行初始化时,可以设样本数据(各第二代码块的特征数据)为= {/>,/>, ...,/>},其中i表示样本序号,/>表示第i个样本,/>表示样本的数量。设聚类中心为/>,其中/>∈{1,2,...,K},K表示簇的总数量,则初始化的聚类中心包括/>=/>(/>=1,2,...,K),j表示聚类中心序号。在将各所述第二特征数据(样本数据)分配到簇时,参照下述分配公式:
其中,表示样本/>到聚类中心/>的欧几里得距离的平方,/>表示取距离最近的聚类中心所在的簇。
在更新聚类中心时,参照如下更新公式
= (1//>) * Σ(/>);
其中,表示更新后的聚类中心,/>表示第/>个簇中样本的个数,Σ(/>)表示所有样本的和。
作为一种示例,步骤B31至步骤B34包括:获取用户预设的簇数量,并初始化所述预设多分类模型的多个聚类中心,所述聚类中心的数量等于所述簇数量;根据预设的数据分配公式将存在维护问题的各第二日代码块分别对应的第二特征数据分配到各所述聚类中心对应的簇中,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列;根据预设的更新公式以及各簇的特征数据,对各簇的聚类中心进行更新;判断各所述聚类中心在更新前和更新后是否有变化,若有,则返回执行步骤B32至步骤B33,直至达到预设迭代更新次数;若没有变化,则停止更新聚类中心;获取更新后的各聚类中心分别对应的簇中的特征数据的维护问题类型标签,其中,所述维护问题类型标签是通过人工标注得到;将各所述维护问题类型标签添加到所述预设多分类模型中,获得目标多分类模型。
本申请实施例提供了一种在所述将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型的步骤之前的目标多分类模型的训练方法,本申请实施例首先基于预设的k均值聚类算法构建预设多分类模型,再将多个存在维护问题的第二代码文件对应的多个第二代码块转换成对应的第二特征向量序列,进而根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。本申请实施例通过结合存在维护问题的代码块作为训练数据,基于k均值聚类算法进行无监督训练,无需人工对每个代码块进行标注,提高了目标多分类模型训练效率,得到的目标多分类模型能识别可维护性差的代码文件中存在为可维护性问题,进一步检测了代码文件的具体维护问题类型,更便于开发人员进行代码更新和修改。
实施例四
本申请实施例还提供一种代码维护问题检测装置,所述代码维护问题检测装置应用于代码维护问题检测设备,参照图4,所述代码维护问题检测装置包括:
文件转换模块101,用于将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
二分类模块102,用于将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
多分类模块103,用于若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
可选地,所述文件转换模块101还用于:
删除各所述第一代码块中的注释和空白段,获得各目标代码块;
通过预设的Java Script解析器将各所述目标代码块转换成对应的抽象语法树;
将各所述抽象语法树转换成对应的第一特征向量序列。
可选地,所述文件转换模块101还用于:
对各所述抽象语法树的各节点进行深度优先遍历,并将遍历到的各节点进行编码,生成各所述节点分别对应的特征向量;
基于各所述节点的深度优先遍历顺序,将各所述抽象语法树中的各节点对应的特征向量组合成第一特征向量序列。
可选地,所述二分类模块102还用于:
将第二代码文件拆分为多个第二代码块,并将各所述第二代码块转换成对应的第二特征向量序列;
获取各所述第二代码块分别对应的维护标签;
根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
可选地,所述二分类模块102还用于:
基于预设的支持向量机算法,构建预设二分类模型;
将各所述第二代码块分别对应的第二特征数据输入所述预设二分类模型,获得预测值;
根据各所述第二代码块对应的预测值和维护标签确定所述预设二分类模型的预测精度;
根据所述预测精度对所述预设二分类模型的模型参数进行优化,获得目标二分类模型,其中,所述模型参数至少包括偏置值和权值向量。
可选地,所述多分类模块103还用于:
基于预设的k均值聚类算法构建预设多分类模型;
将多个存在维护问题的第二代码文件对应的多个第二代码块转换成对应的第二特征向量序列;
根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
可选地,所述多分类模块103还用于:
基于预设簇数量,初始化所述预设多分类模型的多个聚类中心;
将各所述第二特征数据分配到各所述聚类中心对应的簇;
根据各簇的特征数据更新对应聚类中心,返回执行步骤:将各所述第二特征数据分配到各所述聚类中心对应的簇,直至聚类中心不再发生变化或迭代更新次数达到预设次数;
获取各所述聚类中心分别对应的维护问题类型标签,并将各所述维护问题类型标签添加到所述预设多分类模型中,获得目标多分类模型。
本申请提供的代码维护问题检测装置,采用上述实施例中的代码维护问题检测方法,解决了代码的维护更新效率低的技术问题。与现有技术相比,本申请实施例提供的代码维护问题检测装置的有益效果与上述实施例提供的代码维护问题检测方法的有益效果相同,且该代码维护问题检测装置中的其他技术特征与上一实施例方法公开的特征相同,在此不做赘述。
实施例五
本申请实施例提供一种电子设备,电子设备包括:至少一个处理器;以及,与至少一个处理器通信链接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述实施例一中的代码维护问题检测方法。
下面参考图5,其示出了适于用来实现本公开实施例的电子设备的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(personal digital assistant,个人数字助理)、PAD(平板电脑)、PMP(Portable MediaPlayer,便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,电子设备可以包括处理装置(例如中央处理器、图形处理器等),其可以根据存储在只读存储器(ROM,read only memory)中的程序或者从存储装置加载到随机访问存储器(RAM,random access memory)中的程序而执行各种适当的动作和处理。在RAM中,还存储有电子设备操作所需的各种程序和数据。处理装置、ROM以及RAM通过总线彼此相连。输入/输出(I/O)接口也链接至总线。
通常,以下系统可以链接至I/O接口:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置;包括例如液晶显示器(LCD,liquid crystaldisplay)、扬声器、振动器等的输出装置;包括例如磁带、硬盘等的存储装置;以及通信装置。通信装置可以允许电子设备与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种系统的电子设备,但是应理解的是,并不要求实施或具备所有示出的系统。可以替代地实施或具备更多或更少的系统。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置从网络上被下载和安装,或者从存储装置被安装,或者从ROM被安装。在该计算机程序被处理装置执行时,执行本公开实施例的方法中限定的上述功能。
本申请提供的电子设备,采用上述实施例中的代码维护问题检测方法,解决了代码的维护更新效率低的技术问题。与现有技术相比,本申请实施例提供的电子设备的有益效果与上述实施例一提供的代码维护问题检测方法的有益效果相同,且该电子设备中的其他技术特征与上一实施例方法公开的特征相同,在此不做赘述。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式的描述中,具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
实施例六
本实施例提供一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,计算机可读程序指令用于执行上述实施例一中的代码维护问题检测的方法。
本申请实施例提供的计算机可读存储介质例如可以是U盘,但不限于电、磁、光、电磁、红外线、或半导体的系统、系统或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电链接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM,ErasableProgrammable Read-Only Memory或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、系统或者器件使用或者与其结合使用。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读存储介质可以是电子设备中所包含的;也可以是单独存在,而未装配入电子设备中。
上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被电子设备执行时,使得电子设备:将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN,local area network)或广域网(WAN,Wide Area Network)—链接到用户计算机,或者,可以链接到外部计算机(例如利用因特网服务提供商来通过因特网链接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该单元本身的限定。
本申请提供的计算机可读存储介质,存储有用于执行上述代码维护问题检测方法的计算机可读程序指令,解决了代码的维护更新效率低的技术问题。与现有技术相比,本申请实施例提供的计算机可读存储介质的有益效果与上述实施例提供的代码维护问题检测方法的有益效果相同,在此不做赘述。
实施例七
本申请还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述的代码维护问题检测方法的步骤。
本申请提供的计算机程序产品解决了代码的维护更新效率低的技术问题。与现有技术相比,本申请实施例提供的计算机程序产品的有益效果与上述实施例提供的代码维护问题检测方法的有益效果相同,在此不做赘述。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利处理范围内。

Claims (9)

1.一种代码维护问题检测方法,其特征在于,所述代码维护问题检测方法包括:
将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到,所述维护问题类型至少包括代码行数超量、命名不规范、代码无注释、可读性差、依赖关系复杂、代码重复、扩展性差以及不合适的全局变量;
其中,所述将各所述第一代码块转换成对应的第一特征向量序列的步骤包括:
删除各所述第一代码块中的注释和空白段,获得各目标代码块;
通过预设的Java Script解析器将各所述目标代码块转换成对应的抽象语法树,各所述抽象语法树包括多个节点;
将各所述抽象语法树中的各节点分别进行编码,获得各所述节点对应的向量;
基于各所述节点在抽象语法树中的深度位置将各所述向量进行排序,获得各所述第一代码块分别对应的第一特征向量序列。
2.如权利要求1所述代码维护问题检测方法,其特征在于,所述将各所述抽象语法树转换成对应的第一特征向量序列的步骤包括:
对各所述抽象语法树的各节点进行深度优先遍历,并将遍历到的各节点进行编码,生成各所述节点分别对应的特征向量;
基于各所述节点的深度优先遍历顺序,将各所述抽象语法树中的各节点对应的特征向量组合成第一特征向量序列。
3.如权利要求1所述代码维护问题检测方法,其特征在于,在所述将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题的步骤之前,所述方法还包括:
将第二代码文件拆分为多个第二代码块,并将各所述第二代码块转换成对应的第二特征向量序列;
获取各所述第二代码块分别对应的维护标签;
根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
4.如权利要求3所述代码维护问题检测方法,其特征在于,所述根据各所述第二代码块分别对应的第二特征数据以及维护标签对预设二分类模型进行训练,获得目标二分类模型的步骤包括:
基于预设的支持向量机算法,构建预设二分类模型;
将各所述第二代码块分别对应的第二特征数据输入所述预设二分类模型,获得预测值;
根据各所述第二代码块对应的预测值和维护标签确定所述预设二分类模型的预测精度;
根据所述预测精度对所述预设二分类模型的模型参数进行优化,获得目标二分类模型,其中,所述模型参数至少包括偏置值和权值向量。
5.如权利要求1所述代码维护问题检测方法,其特征在于,在所述将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型的步骤之前,所述方法还包括:
基于预设的k均值聚类算法构建预设多分类模型;
将多个存在维护问题的第二代码文件对应的多个第二代码块转换成对应的第二特征向量序列;
根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型,其中,所述第二特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第二特征向量序列。
6.如权利要求5所述代码维护问题检测方法,其特征在于,所述根据各所述第二代码块的第二特征数据对所述预设多分类模型进行无监督训练,获得目标多分类模型的步骤包括:
基于预设簇数量,初始化所述预设多分类模型的多个聚类中心;
将各所述第二特征数据分配到各所述聚类中心对应的簇;
根据各簇的特征数据更新对应聚类中心,返回执行步骤:将各所述第二特征数据分配到各所述聚类中心对应的簇,直至聚类中心不再发生变化或迭代更新次数达到预设次数;
获取各所述聚类中心分别对应的维护问题类型标签,并将各所述维护问题类型标签添加到所述预设多分类模型中,获得目标多分类模型。
7.一种代码维护问题检测装置,其特征在于,所述代码维护问题检测装置包括:
文件转换模块,用于将第一代码文件拆分为多个第一代码块,并将各所述第一代码块转换成对应的第一特征向量序列;
二分类模块,用于将各所述第一代码块的第一特征数据输入预设的目标二分类模型以判断所述第一代码文件是否存在维护问题,其中,所述第一特征数据至少包括注释、拼写错误比例、中文字符占比以及所述第一特征向量序列,所述目标二分类模型是通过多个代码块以及多个代码块对应的维护标签训练得到,所述维护标签包括存在维护问题和不存在维护问题;
多分类模块,用于若是,则将各所述第一代码块的第一特征数据输入预设的目标多分类模型,获得所述第一代码文件中存在的维护问题类型,其中,所述目标多分类模型是通过多个存在维护问题的代码文件训练得到,所述维护问题类型至少包括代码行数超量、命名不规范、代码无注释、可读性差、依赖关系复杂、代码重复、扩展性差以及不合适的全局变量;
所述文件转换模块还用于:删除各所述第一代码块中的注释和空白段,获得各目标代码块;通过预设的Java Script解析器将各所述目标代码块转换成对应的抽象语法树,各所述抽象语法树包括多个节点;将各所述抽象语法树中的各节点分别进行编码,获得各所述节点对应的向量;基于各所述节点在抽象语法树中的深度位置将各所述向量进行排序,获得各所述第一代码块分别对应的第一特征向量序列。
8.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信链接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至6中任一项所述的代码维护问题检测方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有实现代码维护问题检测方法的程序,所述实现代码维护问题检测方法的程序被处理器执行以实现如权利要求1至6中任一项所述代码维护问题检测方法的步骤。
CN202310596575.3A 2023-05-25 2023-05-25 代码维护问题检测方法、装置、电子设备及可读存储介质 Active CN116302043B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310596575.3A CN116302043B (zh) 2023-05-25 2023-05-25 代码维护问题检测方法、装置、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310596575.3A CN116302043B (zh) 2023-05-25 2023-05-25 代码维护问题检测方法、装置、电子设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN116302043A CN116302043A (zh) 2023-06-23
CN116302043B true CN116302043B (zh) 2023-10-10

Family

ID=86838196

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310596575.3A Active CN116302043B (zh) 2023-05-25 2023-05-25 代码维护问题检测方法、装置、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN116302043B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106021410A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 一种基于机器学习的源代码注释质量评估方法
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN111837109A (zh) * 2019-11-22 2020-10-27 深圳海付移通科技有限公司 一种代码质量和缺陷的分析方法、服务器及存储介质
CN112579469A (zh) * 2020-12-29 2021-03-30 中国信息安全测评中心 一种源代码缺陷检测方法与装置
CN112989348A (zh) * 2021-04-15 2021-06-18 中国电子信息产业集团有限公司第六研究所 攻击检测方法、模型训练方法、装置、服务器及存储介质
CN113158627A (zh) * 2021-04-12 2021-07-23 微民保险代理有限公司 代码复杂度的检测方法及装置、存储介质、电子设备
CN113221960A (zh) * 2021-04-20 2021-08-06 西北大学 一种高质量漏洞数据收集模型的构建方法及收集方法
CN113448857A (zh) * 2021-07-09 2021-09-28 北京理工大学 一种基于深度学习的软件代码质量度量方法
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、系统、电子设备及储存介质
WO2022121146A1 (zh) * 2020-12-07 2022-06-16 中山大学 一种代码片段重要性的判断方法和装置
CN115017511A (zh) * 2022-04-28 2022-09-06 武汉工程大学 一种源代码漏洞检测方法、装置以及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11237805B2 (en) * 2019-07-09 2022-02-01 Disney Enterprises, Inc. Techniques for automatically detecting programming deficiencies

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106021410A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 一种基于机器学习的源代码注释质量评估方法
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN111837109A (zh) * 2019-11-22 2020-10-27 深圳海付移通科技有限公司 一种代码质量和缺陷的分析方法、服务器及存储介质
WO2022121146A1 (zh) * 2020-12-07 2022-06-16 中山大学 一种代码片段重要性的判断方法和装置
CN112579469A (zh) * 2020-12-29 2021-03-30 中国信息安全测评中心 一种源代码缺陷检测方法与装置
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN113158627A (zh) * 2021-04-12 2021-07-23 微民保险代理有限公司 代码复杂度的检测方法及装置、存储介质、电子设备
CN112989348A (zh) * 2021-04-15 2021-06-18 中国电子信息产业集团有限公司第六研究所 攻击检测方法、模型训练方法、装置、服务器及存储介质
CN113221960A (zh) * 2021-04-20 2021-08-06 西北大学 一种高质量漏洞数据收集模型的构建方法及收集方法
CN113448857A (zh) * 2021-07-09 2021-09-28 北京理工大学 一种基于深度学习的软件代码质量度量方法
CN115017511A (zh) * 2022-04-28 2022-09-06 武汉工程大学 一种源代码漏洞检测方法、装置以及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于SVM 的软件可维护性评估模型研究;陈雪娟 等;计算机工程与设计;第29卷(第3期);第566-616页 *

Also Published As

Publication number Publication date
CN116302043A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
CN107908635B (zh) 建立文本分类模型以及文本分类的方法、装置
US10430323B2 (en) Touchless testing platform
US11797607B2 (en) Method and apparatus for constructing quality evaluation model, device and storage medium
CN109582862B (zh) 点击率预估方法、介质、系统和计算设备
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN110245232B (zh) 文本分类方法、装置、介质和计算设备
CN111143556A (zh) 软件功能点自动计数方法、装置、介质及电子设备
CN112613306A (zh) 抽取实体关系的方法、装置、电子设备、及存储介质
CN116028868B (zh) 设备故障分类方法、装置、电子设备及可读存储介质
CN112347776B (zh) 医疗数据处理方法及装置、存储介质、电子设备
CN113761845A (zh) 一种文本生成方法、装置、存储介质及电子设备
CN116302043B (zh) 代码维护问题检测方法、装置、电子设备及可读存储介质
CN110826616A (zh) 信息处理方法及装置、电子设备、存储介质
CN115643094A (zh) 一种威胁情报融合方法、装置、电子设备及存储介质
CN115470790A (zh) 一种识别文件中的命名实体的方法和装置
CN114117445A (zh) 漏洞分类方法、装置、设备及介质
CN114297235A (zh) 风险地址识别方法、系统及电子设备
CN113836308A (zh) 网络大数据长文本多标签分类方法、系统、设备及介质
CN115729797A (zh) 代码相似函数检测方法、装置、电子设备及存储介质
CN113553309A (zh) 一种日志模板的确定方法、装置、电子设备及存储介质
CN112947928A (zh) 代码评价的方法、装置、电子设备和存储介质
CN117857388B (zh) 交换机运行信息检测方法、装置、电子设备与计算机介质
CN116880899B (zh) 任务信息关联方法、装置、电子设备和计算机可读介质
CN113112497B (zh) 一种基于零样本学习的工业外观缺陷检测方法、电子设备及存储介质
Ma et al. BLSTM-based source code vulnerability detection visualization system

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
GR01 Patent grant
GR01 Patent grant