首页> 中国专利> 一种基于机器学习的代码评审意见质量评估系统及方法

一种基于机器学习的代码评审意见质量评估系统及方法

摘要

本发明公开了一种基于机器学习的自动代码评审意见质量评估方法,本方法包括:评估准则的建立、数据收集及处理、模型架构及训练、模型维护;以及公开了一种基于该评估方法构建的交互式代码评审意见质量评估系统,所述系统包含由收集管理标注数集或未标注数据集的数据管理模块;收集管理预训练模型或分类模型的模型管理模块;对模型进行训练、预训练的模型训练模块及对单条数据或数据文件进行推理的数据推理模块构成;本发明不仅消除了代码评审意见质量评估中的主观性与不一致性,还实现了高精度高效率的代码评审质量评估过程自动化,提高了代码评审活动的效率。

著录项

  • 公开/公告号CN113326376A

    专利类型发明专利

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

    原文格式PDF

  • 申请/专利权人 南京大学;

    申请/专利号CN202110593291.X

  • 申请日2021-05-28

  • 分类号G06F16/35(20190101);G06F16/33(20190101);G06F40/211(20200101);G06F40/253(20200101);G06F40/284(20200101);G06F40/30(20200101);G06N20/00(20190101);

  • 代理机构32464 南京明杰知识产权代理事务所(普通合伙);

  • 代理人张文杰

  • 地址 210093 江苏省南京市栖霞区仙林大道163号

  • 入库时间 2023-06-19 12:24:27

说明书

技术领域

本发明涉及软件开发技术领域,具体为一种基于机器学习的代码评审意见质量评估系统及方法。

背景技术

代码评审对于提升代码质量、提高员工代码水平、培养企业文化氛围有重要作用。当前业界通常以经验总结、最佳实践对代码评审活动进行指导。然而在实际生产过程中,代码评审质量难以被有效度量,代码评审活动本身也难以达到企业期望的效果。因此,以合理、准确且便捷的方式对代码评审质量进行量化评估并形成反馈,与最佳实践结合提高代码评审活动效果是当前业界亟需解决的问题;代码评审活动包含多个步骤,代码评审质量也需要从多个维度进行度量。其中部分指标如代码修改率、代码评审积压情况可以使用较为简单的规则进行度量。然而,评审意见质量,即评审者针对提交代码所撰写文本的质量,难以使用简单的规则进行评估。评审意见是评审者和开发者在代码评审活动中的直接沟通渠道,是代码评审重要组成部分。无法有效合理地评估评审意见质量就难以评估代码评审质量。因此合理并准确地评估评审意见质量,是提升代码评审活动效果过程中必不可少的关键步骤。

基于以上问题,亟于提出一种基于机器学习的代码评审意见质量评估系统及方法,本方法包括:评估准则的建立、数据收集及处理、模型架构及训练、模型维护;本系统包括由收集管理标注数集或未标注数据集的数据管理模块,收集管理预训练模型或分类模型的模型管理模块,对模型进行训练、预训练的模型训练模块及对单条数据或数据文件进行推理的数据推理模块构成;本发明不仅消除了代码评审意见质量评估中的主观性与不一致性,还实现了高精度高效率的代码评审质量评估过程自动化,提高了代码评审活动的效率。

发明内容

本发明的目的在于提供一种基于机器学习的代码评审意见质量评估系统及方法,以解决上述背景技术中提出的问题。

为了解决上述技术问题,本发明提供如下技术方案:一种基于机器学习的代码评审意见质量评估方法,其特征在于,评估方法包括如下步骤:

S100:制定代码评审意见质量评估的标准;

S200:根据步骤S100制定的评估标准,进行评审意见的收集及处理,得到评审意见样本;

S300:利用机器学习算法,构建出一个用于自动化代码评审意见质量评估模型,模型内包含自然语言语义特征抽取器及分类器;自然语言语义特征抽取器将步骤S200得到的代码评审意见样本进行特征向量提取;分类器基于提取的特征向量将代码评审意见样本进行分类,输出分类结果;

S400:将步骤S200中得到的评审意见样本对步骤S300中构建的模型进行训练;得到一个训练完成的模型;

S500:对步骤S400中得到的训练完成的模型进行维护;

S600:对模型进行推理接口的编写,模型是指步骤S400中得到的模型或者步骤S500中得到的模型;

S700:上传评审意见至步骤S600中推理接口编写完成的模型,模型支持以多种形式上传评审意见;使用推理接口对上传的评审意见进行推理,得到最终的评审意见质量评估结果;

该方法可以有效消除代码评审意见质量评估中的主观性与不一致性。

进一步的,S100的工作流程如下:

S101:从相关专业领域中召集专家组成专家团队,相关专业领域包括工业界和学术界;

S102:让步骤S101中组成的专家团队使用包括头脑风暴或德菲尔的方法对代码评审意见质量评估的标准进行制定;

S103:对步骤S102制定得到的评估标准进行验证、修改;

S104:重复步骤S102和步骤S103,直到步骤S101中组成的专家团队对制定的评估标准达成一致;

该过程能保证最终制定出来的标准具有科学性、严谨性和代表性,消除了代码评审意见质量评估中的主观性与不一致性。

进一步的,S200的工作流程如下:

S201:召集人员组成数据收集团队,数据收集是指代码评审意见的收集;

S202:根据步骤S100制定的评估标准对数据收集团队进行培训;

S203:数据收集团队在培训结束后,去往相关单位中开展代码评审意见的收集工作,相关单位包括公司、学校、开源项目;

S204:数据收集团队对步骤S203收集到的代码评审意见进行标注,标注的内容以步骤 S100制定的评估标准为依据;标注的内容包括将代码评审意见的情感倾向分为积极、中立、消极;

S205:对步骤S204中的标注进行审查与排错;

S206:对步骤S204中的标注进行一致性检验,一致性检验的方法包括卡方检验法,即,针对数据收集团队中不同人员对同一份代码评审意见的标注结果,使用卡方检验法进行一次性检验;

S207:重复步骤S204-S206直到代码评审意见的标注结果达到一致性检验标准;

S208:将满足步骤S207的代码评审意见进行处理,得到代码评审意见样本,处理包括:去除样本中的无效字符、将样本中的英文转化为全小写、使用正则表达式与领域词典对样本中的英文、代码片段进行抽取和切分;

上述过程使得最终得到的评审意见样本具有代表性和精准性,为企业评估代码评审质量降低成本,为代码评审提供可靠支撑,帮助企业加速软件开发周期。

进一步的,S400的过程如下:

S410:将步骤S200得到的评审意见样本使用预训练算法针对步骤S300中的模型进行领域预训练;

S420:设置未进行标注的评审意见样本数量阈值,若在进行预训练时,出现未进行标注的高质量评审意见样本数量大于阈值,且步骤S300中的模型泛化性能差的情况,通过使用半监督学习方法提升模型效果;若出现未进行标注的低质量评审意见样本数量不大于阈值,或步骤S300中的模型已有较强泛化性能的情况,则不使用半监督学习方法。

进一步的,步骤S500的工作流程如下:

S501:定期采取新的评审意见,将新的评审意见加入步骤S400中对领域预训练进行数据更新;

S502:定期采取新的评审意见,将新的评审意见按步骤S200进行收集和标注,得到新的新的评审意见样本,将新的评审意见样本对步骤S300中模型的分类器进行数据更新;

上述S400和S500的工作流程设置可实现高精度高效率的代码评审质量评估过程自动化,提高代码评审活动的效率。

为实现上述方法,本发明还提出了一种基于机器学习的代码评审意见质量评估系统,其特征在于,包括:

数据管理模块,数据管理模块用于供用户进行数据的上传、删除、修改及查询;以便后续使用系统进行自动化模型训练及推理;

模型管理模块,模型管理模块用于供用户进行模型的上传、删除、修改及查询;为以便后续使用系统进行自动化模型训练及推理;

数据推理模块,数据推理模块用于根据用户上传的数据,使用上传的模型或训练的模型进行数据推理,返回用户请求的结果;

模型训练模块,模型训练模块用于根据用户上传的数据,对上传的模型进行训练,并能自动将训练完成的模型自动保存至模型管理模块进行管理。

进一步的,数据管理模块包括:

数据上传单元,数据上传单元用于供用户将外部第三方或自定义的数据上传至系统进行储存与管理;

数据浏览单元,数据搜索单元用于供用户浏览系统内已上传数据的各类属性,同时能帮助用户对已上传数据进行编辑。

进一步的,模型管理模块包括:

模型上传单元,模型上传单元用于供用户将外部第三方或自定义模型上传至系统进行储存与管理;

模型浏览单元,模型浏览单元用于供用户浏览工具内已上传模型的各类属性,同时能帮助用户对已上传模型进行编辑。

进一步的,数据推理模块包括:

数据推理单元,数据推理单元用于供用户输入文本或上传数据文件,使用系统内上传的模型或完成训练的模型进行推理,得到用户请求的推理结果;

数据推理单元能够以交互式的方式进行单句文本的输入,并支持以文件形式上传数据,能够自主定义推理过程中使用的模型,推理进度将会实时显示在该数据推理单元中,推理结果在展示在系统页面上的同时会自动打包为文件提供下载。

进一步的,模型训练模块包括:

模型预训练单元,模型预训练单元用于供用户将已上传至系统内的模型利用数据进行领域预训练;模型预训练单元能够以交互式的形式进行模型的预训练,同时能够自主定义训练过程中使用的参数、模型、数据集,并在训练过程中能够实时显示训练进度及验证指标,同时完成训练后能将自动保存至模型管理单元进行管理;

模型分类训练单元,模型分类训练单元用于供用户将已上传至系统内的模型或已完成训练的模型或已完成预训练的模型利用数据集进行分类训练;模型分类训练单元能够以交互式的方式进行模型的分类训练,同时能够自主定义训练过程中使用参数、模型、数据集,并在训练过程中能够实时显示训练进度及验证指标,同时完成训练后能将自动保存至模型管理单元进行管理;

模型训练模块的设置是为利用输入数据进行模型训练,使得用户可自主选择训练使用模型、数据及机器学习算法所需要的超参数。

与现有技术相比,本发明所达到的有益效果是:本发明提供的一种基于机器学习的自动化代码评审意见质量评估系统和方法,通过使用机器学习、深度学习等方法,能够以高精度自动化对代码评审意见进行评估,辅助企业在代码评审活动中获得反馈;在软件的整个工作过程中,本发明提供的方法与系统为企业评估代码评审质量降低成本,为代码评审提供可靠支撑,帮助企业加速软件开发周期。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1是一种基于机器学习的代码评审意见质量评估系统结构示意图;

图2是一种基于机器学习的代码评审意见质量评估方法示意图。

具体实施方式

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

本文使用的术语“机器学习”为,一算法用于研究计算机模拟或使用人类认知行为来获取新知识或新技能以及不断重组现有知识以提高个人绩效的方式;它是人工智能的中坚力量,也是使计算机变得智能化的基本方式,该应用程序涵盖了人工智能的所有领域他们中的大多数使用推理而不是演绎。

本文使用的术语“头脑风暴方法”,原指精神病人的精神错乱状态,后被用指一种自由无限制的群体决策方法,该方法目的在于产生新观念及创新设想。该方法通常使用无限制的自由联想、讨论,仅记录新观点而不批评来激励人们的创造力与联想能力。

本文使用术语“德菲尔方法”,是一种匿名调查方法,通常使用问卷的方式,以匿名的形式像领域专家等角色收集意见,并根据意见数据整理归纳统计,再反馈给各专家,重复该过程以达到意见统一。该方法能够在信息收集过程中获得独立意见,避免了因为群体心理、社会角色等主观因素导致的偏差。

本文使用术语“BERT”,为一种自然语言预训练模型,该模型设计了两个预训练任务,用于在大量自然语言样本中学习语言间的关系,预训练任务分别为Masked LanguageModel 预Next Sentence Predict。该预训练模型在各项自然语言任务中都取得了大幅领先于传统自然语言预训练模型的成绩。是当下工业界与学术界的主流模型。

本文使用术语“预训练”,指首先在大量通用语料库上训练模型,学习通用语言知识,然后有针对性地对任务执行迁移训练;常用的word2vec或GloVe词向量以及当前的BERT系列都是典型的预训练语言模型;预训练方法是使用大量未标记的语料库设计任务进行自我监督学习,自我监督学习也是一种监督学习,但是标签来自数据本身;

Masked Language Model,即遮罩语言模型,是一种预训练算法,该算法用于学习字、词间的语义、语法、句法关系。该算法通过随机遮盖、替换、交换序列中的部分单词或者字,并使用其他未被随机遮盖、替换、交换的单词或者字,预测这部分单词或者字,通过最大化该条件概率对模型进行优化;

Next Sentece Predict,即句序预测,是一种预训练算法,该算法用于学习句子之间的关系。该算法随机抽取两个句子,训练模型判断句子B是否为句子A的后一句,通过最大化该条件概率对模型进行优化。

本文使用术语“有监督学习”,为机器学习的一种训练方法,该训练方法通过使用人工标注的方法为数据准备正确答案。在训练过程中通过计算模型输出结果与正确答案的误差,使用反向传播算法,对模型参数进行更新,达到训练模型的效果。

本文使用术语“反向传播”,反向传播为监督学习的一种参数更新方法,在计算完模型输出结果与正确答案之间的误差后,使用链式法则,计算模型参数相对误差的梯度,根据梯度及人工设置的学习率等超参数对模型进行参数的更新。

请参阅图1-2,本发明提供技术方案:一种基于机器学习的代码评审意见质量评估方法,其特征在于,评估方法包括如下步骤:

S100:制定代码评审意见质量评估的标准,工作流程如下:

S101:从相关专业领域中召集专家组成专家团队,相关专业领域包括工业界和学术界;

S102:让步骤S101中组成的专家团队使用包括头脑风暴或德菲尔的方法对代码评审意见质量评估的标准进行制定;

S103:对步骤S102制定得到的评估标准进行验证、修改;

S104:重复步骤S102和步骤S103,直到步骤S101中组成的专家团队对制定的评估标准达成一致;

S200:根据步骤S100制定的评估标准,进行评审意见的收集及处理,得到评审意见样本,工作流程如下:

S201:召集人员组成数据收集团队,数据收集是指代码评审意见的收集;

S202:根据步骤S100制定的评估标准对数据收集团队进行培训;

S203:数据收集团队在培训结束后,去往相关单位中开展代码评审意见的收集工作,相关单位包括公司、学校、开源项目;

S204:数据收集团队对步骤S203收集到的代码评审意见进行标注,标注的内容以步骤 S100制定的评估标准为依据;标注的内容包括将代码评审意见的情感倾向分为积极、中立、消极;

S205:对步骤S204中的标注进行审查与排错;

S206:对步骤S204中的标注进行一致性检验,一致性检验的方法包括卡方检验法,即,针对数据收集团队中不同人员对同一份代码评审意见的标注结果,使用卡方检验法进行一次性检验;示例性地,针对不同人员对同一份的数据的标注结果,使用卡方检验法进行一次性检验;

S207:重复步骤S204-S206直到代码评审意见的标注结果达到一致性检验标准;

S208:将满足步骤S207的代码评审意见进行处理,得到代码评审意见样本,处理包括:去除样本中的无效字符、将样本中的英文转化为全小写、使用正则表达式与领域词典对样本中的英文、代码片段进行抽取和切分;

S300:利用机器学习算法,构建出一个用于自动化代码评审意见质量评估模型,模型内包含自然语言语义特征抽取器及分类器;自然语言语义特征抽取器将步骤S200得到的代码评审意见样本进行特征向量提取;示例性的,使用BERT作为自然语言语义特征提取器,进行特征提取;

分类器基于提取的特征向量将代码评审意见样本进行分类,输出分类结果;示例性的,使用多层感知机作为分类器进行分类并输出分类结果;

S400:将步骤S200中得到的评审意见样本对步骤S300中构建的模型进行训练;得到一个训练完成的模型,过程如下:

S410:将步骤S200得到的评审意见样本使用预训练算法针对步骤S300中的模型进行领域预训练;示例性的,使用BERT模型中的Masked Language Model及Next SentencePredict 预训练任务对模型进行领域预训练;

S420:设置未进行标注的评审意见样本数量阈值,若在进行预训练时,出现未进行标注的高质量评审意见样本数量大于阈值,且步骤S300中的模型泛化性能差的情况,通过使用半监督学习方法提升模型效果;若出现未进行标注的低质量评审意见样本数量不大于阈值,或步骤S300中的模型已有较强泛化性能的情况,则不使用半监督学习方法;示例性的,半监督学习方法采用虚拟对抗训练算法进行训练;

S500:对步骤S400中得到的训练完成的模型进行维护,工作流程如下:

S501:定期采取新的评审意见,将新的评审意见加入步骤S400中对领域预训练进行数据更新;

S502:定期采取新的评审意见,将新的评审意见按步骤S200进行收集和标注,得到新的新的评审意见样本,将新的评审意见样本对步骤S300中模型的分类器进行数据更新;

S600:对模型进行推理接口的编写,模型是指步骤S400中得到的模型或者步骤S500中得到的模型;

S700:上传评审意见至步骤S600中推理接口编写完成的模型,模型支持以多种形式上传评审意见;使用推理接口对上传的评审意见进行推理,得到最终的评审意见质量评估结果。

为实现以上方法,本发明还提供了一种基于机器学习的代码评审意见质量评估系统,包括:数据管理模块、模型管理模块、数据推理模块、模型训练模块;

数据管理模块用于供用户进行数据的上传、删除、修改及查询,以便后续使用系统进行自动化模型训练及推理;

其中,数据管理模块包括:数据上传单元,数据上传单元用于供用户将外部第三方或自定义的数据上传至系统进行储存与管理;数据浏览单元,数据浏览单元用于供用户浏览系统内已上传数据的各类属性,同时能帮助用户对已上传数据进行编辑;

数据管理模块使用表单工具,快速收集、管理数据的各项信息,同时该模块还将实时展示上传进度。示例性的,使用Vue框架搭建具备上传功能的Web页面,用户可以在该页面新建、上传、编辑、删除数据,可以设置数据用途,该服务将与数据推理及模型训练模块通信。在模型训练及数据推理请求数据时,数据管理服务将返回所请求数据的各项信息。数据处理单元负责针对代码评审意见样本进行针对性的处理,示例性的,针对英文样本,有英文扩充及英文映射方法,英文扩充方法使用正则表达式,将英文扩充进模型词典中;英文映射方法使用领域词典,将英文映射为特定的字符。针对代码片段,有代码切分及代码映射方法,代码切分方法使用正则表达式,按驼峰或下划线命名法将代码拆分为多个英文片段;代码映射方法使用正则表达式将代码映射为特定字符。经过实验总结,该方法能够提升机器算法效果约6%。

模型管理模块用于供用户进行模型的上传、删除、修改及查询,以便后续使用系统进行自动化模型训练及推理;

其中,模型管理模块包括:

模型上传单元,模型上传单元用于供用户将外部第三方或自定义模型上传至系统进行储存与管理;模型浏览单元,模型浏览单元用于供用户浏览工具内已上传模型的各类属性,同时能帮助用户对已上传模型进行编辑;

模型管理模块使用表单工具,快速收集、管理模型的各项信息,同时该模块还将实时展示上传进度。示例性的,使用Vue框架搭建具备上传功能的Web页面,用户可以在该页面新建、上传、编辑、删除数据,可以设置数据用途,该服务将与数据推理及模型训练模块通信。在模型训练及数据推理请求数据时,模型管理模块将返回所请求数据的各项信息。

数据推理模块用于根据用户上传的数据,使用上传的模型或训练的模型进行数据推理,返回用户请求的结果;

其中,数据推理模块包括:

数据推理单元,数据推理单元用于供用户输入文本或上传数据文件,使用系统内上传的模型或完成训练的模型进行推理,得到用户请求的推理结果;数据推理单元能够以交互式的方式进行单句文本的输入,并支持以文件形式上传数据,能够自主定义推理过程中使用的模型,推理进度将会实时显示在该数据推理单元中,推理结果在展示在系统页面上的同时会自动打包为文件提供下载;

数据推理模块使用表单工具交互式地收集各类推理需要信息,提供推理功能。示例性的,使用Vue框架搭建具备交互功能的WEB页面,使用Flask搭建可调用机器算法的API,用户可以者该页面自主输入数据或上传数据文件进行推理,能够自定义用于推理的模型及部分超参数,用户将可以在该页面实时获取推理进度。推理结束后,除了页面外还将会把推理结果打包为文件提供下载。

模型训练模块用于根据用户上传的数据,对上传的模型进行训练,并能自动将训练完成的模型自动保存至模型管理模块进行管理;

其中,模型训练模块包括:

模型预训练单元,模型预训练单元用于供用户将已上传至系统内的模型利用数据进行领域预训练;模型预训练单元能够以交互式的形式进行模型的预训练,同时能够自主定义训练过程中使用的参数、模型、数据集,并在训练过程中能够实时显示训练进度及验证指标,同时完成训练后能将自动保存至模型管理单元进行管理;模型分类训练单元,模型分类训练单元用于供用户将已上传至系统内的模型或已完成训练的模型或已完成预训练的模型利用数据集进行分类训练;模型分类训练单元能够以交互式的方式进行模型的分类训练,同时能够自主定义训练过程中使用参数、模型、数据集,并在训练过程中能够实时显示训练进度及验证指标,同时完成训练后能将自动保存至模型管理单元进行管理;

模型训练模块负责利用输入数据进行模型训练,用户可自主选择训练使用模型、数据及机器学习算法所需要的超参数。示例性的,使用Vue框架搭建具备交互功能的WEB页面,使用Flask搭建可调用机器学习算法的API。所述预训练单元使用机器学习算法对语言模型进行预训练,示例性的,使用BERT模型中的Masked Language Model及Next SentencePredict 预训练任务对模型进行领域预训练。分类训练单元使用机器学习算法对语言模型进行分类训练,示例性的,使用BERT模型结合线性分类器构建模型输出预测向量,与标注数据计算误差后,使用反向传播算法进行模型参数更新,训练过程中将实时显示。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号