CN111428142B - 一种基于随机森林分类器的代码评审人推荐系统及方法 - Google Patents
一种基于随机森林分类器的代码评审人推荐系统及方法 Download PDFInfo
- Publication number
- CN111428142B CN111428142B CN202010373726.5A CN202010373726A CN111428142B CN 111428142 B CN111428142 B CN 111428142B CN 202010373726 A CN202010373726 A CN 202010373726A CN 111428142 B CN111428142 B CN 111428142B
- Authority
- CN
- China
- Prior art keywords
- code
- review
- file
- recommendation
- reviewer
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/243—Classification techniques relating to the number of classes
- G06F18/24323—Tree-organised classifiers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于随机森林分类器的代码评审人推荐系统及方法,本系统包括:输入模块、计算模块、模型训练模块、推荐结果输出模块,同时提出一种基于随机森林分类器的代码评审人推荐方法,包括输入项目历史代码评审记录;根据历史代码评审记录,挖掘人员活跃度、代码变更和文件权重特征;以项目历史评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,将训练集输入随机森林模型中训练分类模型;从待评审代码变更中抽取特征,输入分类器,输出概率最高的N个类别作为推荐评审人。本发明实现了在大型项目中,根据历史评审记录,为待评审代码变更推荐合适的评审人,为评审人选择提供参考依据并节约沟通成本。
Description
技术领域
本发明涉及软件开发技术领域,具体是一种基于随机森林分类器的代码评审人推荐系统及方法。
背景技术
代码评审作为保障代码质量的一种重要手段,其重要地位在大多数软件公司中日益凸显,然而,选择评审人的过程通常需要耗费一定的沟通时间,如何及时找到合适的评审人成为了代码评审实践中的一个重要的问题,有时候评审人的选择不够合理可能会为后续交付带来许多问题。合适的代码评审人员需要对提交的代码有一定的相关知识储备和熟悉程度,同时,大型项目通常会涉及大量的开发人员,如何从大量候选人中选择合适的评审人成为了软件开发实践中的一个困难。
目前的评审人推荐方法主要包括两类:基于既定规则的推荐方法和基于机器学习的推荐方法。基于规则的方法通常只能从较为单一的角度挖掘评审人选择规律用于推荐,其推荐效果通常不够理想;而基于机器学习的推荐方法虽然可以从多角度综合分析评审人选择策略,提高推荐效果,但目前常用的评审人推荐规则却难以融入机器学习模型中。目前有研究尝试将最常用的基于文件路径相似度的推荐规则作为一个特征融入机器学习模型中,但在将规则转化为特征时,都存在特征维度过大的问题,极大增加了计算复杂度。
所以人们需要一种方便、高效的基于随机森林分类器的代码评审人推荐系统及方法来解决上述问题。
发明内容
本发明的目的在于提供一种基于随机森林分类器的代码评审人推荐系统,以解决现有技术中的问题。
为实现上述目的,本发明提供如下技术方案:
一种基于随机森林分类器的代码评审人推荐系统,包含:
输入模块,所述输入模块用于获取项目历史代码评审记录;
计算模块,所述计算模块用于根据项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征;
模型训练模块,所述模型训练模块用于在随机森林分类器中,以项目历史代码评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,训练分类模型;
推荐结果输出模块,所述推荐结果输出模块用于从所述项目历史代码评审记录中抽取特征,输入到随机森林分类器中,输出评审概率最高的N个类别作为推荐分类,每个推荐分类对应的评审人即推荐评审人,其中N为小于等于评审人总数的任意正整数。
优选地,所述输入模块中项目历史代码评审记录是与软件项目匹配的代码提交日志和代码评审日志,所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;所述代码评审日志包括:评审人、评审时间。
进一步地,所述计算模块包括人员活跃度特征计算单元、代码变更特征计算单元和文件权重特征计算单元:
所述人员活跃度特征计算单元,是根据所述项目历史代码评审记录,用于计算软件开发者在近一个月内进行代码提交的次数、参与代码评审的次数、当次代码提交时间与最近一次代码提交时间之间的时间差,组成一个向量,作为人员活跃度特征;
所述代码变更特征计算单元,根据所述项目历史代码评审记录,对代码提交日志内的分支进行编码,将分支编码与新增代码行数、删减代码行数进行结合,组成一个向量,作为代码变更特征;
所述文件权重特征计算单元,用于文件权重特征的计算,根据所述项目历史代码评审记录,计算所述项目历史代码评审记录中包含的每一个系统文件路径对应的权重,所得权重值组成一个向量,作为文件权重特征;
对所述代码提交日志内的分支进行编码包括:
数据层次划分单元,所述数据层次划分单元用于将代码提交日志内文本型的分支数据按照层次进行划分,组成一个向量;
标签转化单元,所述标签转化单元用于对向量中的每一维进行标签编码转化为数值型的特征;
所述文件权重特征计算单元包括:
路径层次划分单元,所述路径层次划分单元用于将项目历史代码评审记录中文本型的系统文件路径按照路径层次划分成多个路径名;
权重计算单元,所述权重计算单元用于将项目历史代码评审记录中包含的所有系统文件路径按照路径层次划分为多个子路径名作为语料库,利用TF-IDF算法,计算每一个系统文件路径名在语料库中的权重值,对每一个系统文件路径中包含的子路径名权重值进行求和作为文件路径权重值,将一条项目历史代码评审记录中包含的所有文件路径权重值组合为一个向量,作为该评审记录的文件权重特征。
进一步地,所述模型训练模块用于对项目历史代码评审记录中每一条文本型项目历史代码评审记录,通过计算模块转化为数值型数据,所述数值型数据构成一个特征向量,所得结果包含人员活跃度特征、代码变更特征和文件权重特征,将该结果作为训练集,输入随机森林分类器中进行训练。
进一步地,所述推荐结果输出模块用于输出推荐评审人,包括:
特征输入单元,所述特征输入单元用于从待评审的代码提交日志和代码评审日志中抽取代码变更信息、人员信息、文件路径信息,将代码变更信息进行编码,转化为代码变更特征,并结合历史代码评审记录计算人员活跃度特征、文件权重特征,输入到训练好的随机森林分类器中;
结果输出单元,所述结果输出单元用于计算输出所述待评审代码变更特征在所述随机森林分类器中属于各分类标签的概率,从中选出概率最高的N个分类作为推荐分类,每个推荐分类对应的评审人作为推荐评审人,其中N为自定义的小于等于评审人总数的任意正整数。
为实现上述目的,本发明还提供了一种基于随机森林分类器的代码评审人推荐方法,包括:
步骤210,获取项目历史代码评审记录;
步骤220,根据步骤210中项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征;
步骤230,以项目历史代码评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,输入随机森林分类器中训练分类模型;
步骤240,从步骤210所述代码变更特征中抽取特征,输入到随机森林分类器中进行代码评审,所述随机森林分类器输出评审概率最高的N个类别作为推荐分类,每个推荐分类对应的评审人即推荐评审人,其中N为小于等于评审人总数的任意正整数。
步骤210中获取项目历史代码评审记录包括:
获取与软件项目匹配的代码提交日志,所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;
获取与软件项目匹配的代码评审日志,所述代码评审日志包括:评审人、评审时间。
进一步地,步骤220包括:
根据所述项目历史代码评审记录,计算软件开发者在近一个月内进行代码提交的次数、参与代码评审的次数、当次代码提交时间与最近一次代码提交时间之间的时间差组成一个向量,作为人员活跃度特征;
根据所述项目历史代码评审记录,对代码提交日志内的分支进行编码,将分支编码与新增代码行数、删减代码行数结合为一个向量,其结果作为代码变更特征;
根据所述项目历史代码评审记录,计算所述项目历史代码评审记录中包含的每一个系统文件路径对应的权重,所得权重值组成一个向量,其结果作为文件权重特征;
对所述代码提交日志内的分支进行编码步骤包括:
将代码提交日志内文本型的代码分支数据按照层次进行划分,组成一个向量;
对向量中的每一维进行标签编码转化为数值型的特征;
所述文件权重特征计算包括:
将项目历史代码评审记录中文本型的系统文件路径按照路径层次划分成多个路径名;
将项目历史代码评审记录中包含的所有系统文件路径按照路径层次划分为多个子路径名作为语料库,利用TF-IDF算法,计算每一个路径名在语料库中的权重值,对一个文件路径中包含的子路径名权重值进行求和作为文件路径权重值,将一条项目历史代码评审记录中包含的所有文件路径权重值组合为一个向量,作为该评审记录的文件权重特征;
将一个文件路径中包含的每一个路径名的权重值相加,作为该文件路径的文件权重值;
将项目历史代码评审记录中包含的所有文件权重值组合为一个向量,作为该评审记录的文件权重特征。
所述步骤230训练分类模型利用对项目历史代码评审记录中每一条文本型项目历史代码评审记录,通过所述计算模块320转化为数值型数据,该数值型数据构成一个特征向量,所得结果包含人员活跃度特征、代码变更特征和文件权重特征,该结果作为训练集,输入随机森林分类器中进行训练。
所述步骤240包括:
从待评审的代码提交日志和代码评审日志中抽取代码变更信息、人员信息、文件路径信息,将代码变更信息进行编码,转化为代码变更特征,并结合项目历史代码评审记录计算人员活跃度特征、文件权重特征,输入到训练好的随机森林分类器中;
计算并输出所述待评审代码变更特征在所述随机森林分类器中属于各分类标签的概率,从中选出概率最高的N个分类作为推荐分类,每个推荐分类对应的评审人作为推荐评审人,其中N为自定义的小于等于评审人总数的任意正整数。
与现有技术相比,本发明的有益效果是:本发明通过对各项目的历史代码评审记录进行分析,挖掘出代码变更特征、人员活跃度特征和文件权重特征,将训练数据输入随机森林模型训练分类模型,然后从待评审代码变更中抽取特征,输入分类器,输出概率最高的五个类别作为推荐评审人。实现了在大型项目中,根据历史评审记录,为待评审代码变更推荐合适的评审人,为评审人选择提供参考依据并节约沟通成本。
附图说明
为了使本发明的内容更容易被清楚地理解,下面根据具体实施例并结合附图,对本发明作进一步详细的说明。
图1为本发明实施例一中的一种基于随机森林分类器的代码评审人推荐系统架构图;
图2为本发明实施例一中的一种基于随机森林分类器的代码评审人推荐系统的代码评审人推荐方法流程图;
图3为本发明实施例二中的一种基于随机森林分类器的代码评审人推荐方法流程图;
图4为本发明实施例三中的一种基于随机森林分类器的代码评审人推荐方法的一种时序验证模型示意图;
图5为本发明实施例四中一种基于随机森林分类器的代码评审人推荐平台的案例流程图
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本文使用的术语“代码评审”是指专业人员通过阅读代码来检查源代码质量的活动。
本文使用的术语“代码评审人”是指执行代码评审过程的专业人员。
本文使用的术语“评审人推荐”是指在团队的可选评审人中,为待评审代码选择合适的评审人的过程。
本文使用的术语“代码提交人”是指提交代码变更的开发人员。
本文使用的术语“历史代码评审记录”是指与软件项目匹配的代码提交日志和代码评审日志中包含的开发者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合、评审人和评审时间。
本文使用的术语“代码变更”是指开发人员提交至版本管理系统中的一次代码提交中包含的所有源代码变更。
本文使用的术语“分类器”是指由机器学习分类模型构成的分类工具。
本文使用的术语“特征向量”是指机器学习分类模型中,由一系列参数构成的输入变量。
本文使用的术语“维度”是指机器学习分类模型中一个特征向量包含的参数个数。
本文使用的术语“标签”是指机器学习分类模型中的各个分类。
本文使用的术语“训练集”是指机器学习分类模型,用于训练分类模型的样本构成的数据集。
本文使用的术语“测试集”是指机器学习分类模型,用于测试分类模型效果的样本构成的数据集。
本文使用的术语“编码”是指机器学习分类模型,将文本型数据转化为模型可识别的数值型数据的过程。
本文使用的术语“TF-IDF”(term frequency-inverse document frequency,词频-逆向文件频率)算法是一种用于信息检索与文本挖掘的常用加权技术,如果某个关键字在一个数据集中出现的频率高,并且在其他数据集中很少出现,则认为该关键字具有很好的类别区分能力,适合用来分类。
为了便于理解,将本发明实施例的主要发明构思进行简述。需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
请参阅图1,本发明实施例中提出了一种基于森林分类器的代码评审人推荐系统,包括输入模块310、计算模块320、模型训练模块330和推荐结果输出模块340。
本发明实施例的技术方案,通过将评审人推荐问题转化为一个机器学习的多分类任务,对项目的历史评审日志和历史代码变更日志的分析,从中挖掘出所述项目的人员信息、代码变更信息和文件路径信息,并转化为人员活跃度特征、代码变更特征和文件权重特征,将所述项目中包含的所有评审记录转化为特征向量,并作为数据集,输入随机森林模型中,训练随机森林分类器;从项目历史代码评审记录中抽取特征,输入随机森林分类器,推荐出概率最高的五个评审人,实现了一种基于随机森林分类器的代码评审人推荐系统,根据历史评审记录,自动化地为待评审代码变更推荐合适的评审人。
输入模块310,用于获取项目历史代码评审记录,所述历史代码评审记录包括从与软件项目匹配的代码提交日志和代码评审日志中获取的人员信息、代码变更信息和文件路径信息,具体包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合、代码评审人、评审时间,本发明实施例中将这些数据整合为一条代码评审记录样本,并所述项目的所有历史评审记录样本写入CSV格式的文件中。
计算模块320,用于根据项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征,所述文件权重特征包含一个维度数量与代码变更中包含文件数量相同的向量,将每一条历史评审记录样本转化为一个由数值型数据构成的特征向量;
所述计算模块320,包括:
代码变更特征单元,用于将每一条代码评审记录中包含的多层次的文本型分支数据,通过分层的标签编码转化为一个维度为分支层次数的数值型分支向量,将分支向量与新增代码行数、删减代码行数进行结合,组成一个向量,作为代码变更特征;
人员活跃度特征计算单元,用于针对每一条代码评审记录,计算出其对应的代码提交人的人员活跃度特征,包括:
对于每一条代码评审记录对应的代码提交人,计算其在近一个月内进行代码提交的次数;
对于每一条代码评审记录对应的代码提交人,计算其在近一个月内进行代码评审的次数;
对于每一条代码评审记录对应的代码提交人,计算当前代码提交与其最近一次代码提交时间之间的时间差;
对于每一条代码评审记录中的代码提交时间,将其转化为时间戳,即格林威治时间戳,并进行归一化处理;
文件权重特征计算单元,用于针对每一条代码评审记录,计算出其中包含的每一个文件路径对应的文件权重;
图2为一种文件权重特征计算方法流程图,适用于根据代码评审历史记录,计算待评审代码变更中文件权重特征的情况,具体包括如下步骤:
步骤110,将每一条评审记录中包含的所有文件路径,按照路径层次划分为多个子路径名,具体的,在划分时,不同的系统中存在不同的文件路径层次分割符如“/”或“\\”,需要根据不同情况进行调整;
步骤120,提供了一种基于权重计算方法TF-IDF,计算每一个子路径的权重值的方法。具体的,给定一个语料库,每一个关键词的TF-IDF权重值的计算方法如下:
在上述计算方法中,将每个历史评审记录视为一篇文档,将所有历史评审记录以及待评审代码变更中包含的所有子文件路径作为语料库,对于待评审代码变更中包含的每一个子文件路径名,套用TF-IDF权重计算公式,计算该子路径名的权重,具体计算方式如下:
其中,Cs,pr指子路径s在当前代码提交中出现的次数,Cpr为当前代码提交包含的总词数,N为总代码提交数,Ns为语料库中包含子路径s的代码提交数;
步骤130,计算待评审代码变更中每一个文件路径的权重值,形成文件权重特征向量,每一个文件路径的文件权重值为其包含的每一个子路径的TF-IDF权重之和,具体计算方式如下:
其中,Ws为文件路径fp中包含的子路径的TF-IDF权重,Weightfp即为路径权重特征,对于一个代码变更,其文件权重特征为一个由其包含的各文件路径的权重特征值构成的向量,示例性的,对于一个包含fp1,fp2,和fp3三个文件的代码变更,其文件路径权重特征向量为[Weightfp1,Weightfp2,Weightfp3]。
通过对各代码变更中包含的文件路径进行拆分,基于TF-IDF算法,对每一个子路径名进行权重计算,随后用子路径的权重之和代表文件路径的权重,并将所含每个文件路径的权重值构成的向量作为代码变更的文件权重特征;实现了将文件路径相似度特征融入基于机器学习的评审人推荐模型中,通过计算各文件路径之间的权重值来衡量文件之间的相似度,并将其转化为一个维度数与代码变更包含的文件数相同的低维度文件相似度特征,作为评审推荐模型中的一维特征;
计算模块320将输出一系列由数值型数据构成的特征向量,向量中包含的具体特征如表1,表中N1为代码变更中分支的层次数,N2为代码变更中包含的文件数;
表1
模拟训练模块330,用于在随机森林分类器中,以项目历史评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,训练随机森林分类模型,具体包含:
参数调优单元,用于调整随机森林模型中的决策树数目N、属性数目K,以优化模型的推荐效果,所述参数调优单元可用Scikit-Learn实现随机森林模型的参数调整;
模型训练单元,用于依据最优参数,将所有历史评审记录对应的特征向量作为训练集,输入随机森林模型中,训练随机森林分类器。
推荐结果输出模块340,用于从待评审代码变更中抽取特征,输入分类器,输出概率最高的N个类别作为推荐分类,对应的评审人即推荐评审人,其中N为小于等于评审总人数的任意正整数,所述推荐结果输出模块340包括:
特征输入单元,用于计算待评审代码中的人员活跃度特征、代码变更特征和文件权重特征,输入训练好的分类模型中,所述特征输入单元,具体用于:
抽取待评审代码中的代码提交者、提交时间、分支、新增代码行数、删减代码行数和文件路径集合;
结合历史评审记录,计算待评审代码中对应的代码提交者的活跃度特征、代码变更特征和文件权重特征,组成一个特征向量;
将特征向量输入训练好的分类器中,计算其属于每个分类的概率,对概率进行排序,输出概率最高的N个分类,作为推荐评审人,其中N是小于等于评审人总数的任意正整数;
结果输出单元,用于计算待评审代码变更属于各类别的概率,输出概率最高的N个分类,作为推荐评审人,其中N是小于等于评审人总数的任意正整数。
实施例二
请参阅图3所示,本实施例的技术方案提出了一种基于随机森林分类器的代码评审人推荐方法,该方法根据历史代码评审记录为待评审代码推荐合适的评审人,节约了无推荐情况下所需的沟通时间,具体步骤如下:
步骤210,获取项目历史代码评审记录,所述历史代码评审记录包括:
获取与所述软件项目匹配的代码提交日志,所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;
获取与所述软件项目匹配的代码评审日志,所述代码评审日志包括:评审人、评审时间;
步骤220,根据项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征;
基于历史代码评审记录,将其分为三类数据:人员信息、代码变更信息、文件路径信息,具体的,人员信息包括:代码提交人、评审人、提交时间和评审时间,首先,对代码提交人和评审人根据id,利用标签编码进行统一编码,标签编码对每一个特征项,按照其在列表中的索引进行直接编码,例如将三个代码提交人[“cwx30311”,“kwx46621”,“g0028937”]直接编码为[0,1,2],其次,对每一个代码提交人,计算其在近一个月内进行代码提交的次数、近一个月内参与代码评审的次数、代码提交人当次代码提交时间、以及当前代码提交与最近一次代码提交时间之间的时间差,作为人员活跃度特征,其中代码提交时间是形如“2019/11/1 20:12”的文本型数据,需要将其转化为时间戳,即格林威治时间戳,计算方式为从1970/01/01 00:00:00至当前时间的总毫秒数,由于时间戳的绝对值过大,与其他特征形成了数量级上的差异,本实施例中对时间戳数据进行了归一化处理,具体计算方法如下:
其中,x表示当前时间戳,max表示数据集中的最大时间戳,min表示数据集中的最小时间戳;
所述变更信息包括:分支、新增代码行数、删减代码行数,其中,分支一个包含多层路径的文本型数据,为了体现不同层次间的关系,首先对分支数据按照层次进行划分,例如数据集中包含三个分支[“BS/main/Backup”,“BS/main/Movie”,“HW/main/Movie”],将按照层次将划分为三维分支特征,第一维包含[“BS”,“HW”],第二维包含[“main”],第三维包含[“Backup”,“Movie”],然后对三个维度的分支特征分别进行标签编码。表2为示例数据集中的分支数据,表3为编码后的分支特征,结合分支特征、新增代码行数、删减代码行数即为所求代码变更特征;
表2
ID | Branch |
0 | BS/main/Backup |
1 | BS/main/Movie |
2 | HW/main/Movie |
表3
ID | Branch1 | Branch2 | Branch3 |
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
2 | 1 | 0 | 1 |
文件路径信息指由每一次代码变更中涉及的所有文件路径组成的集合,对于每一个文件路径,首先将其按照路径层次划分为多个子路径名,例如“tests/auto/undo/undo.pro”将划分为“tests”,“auto”,“undo”和“undo.pro”,然后利用常用的权重计算方法TF-IDF,计算每一个子路径的权重值,具体的,给定一个语料库,每一个关键词的TF-IDF权重值由词频和逆向文件频率两个部分构成,所述词频度量了关键词在语料库中出现在频率,所述逆向文件频率度量了关键词在语料库中的重要性,在本实施例中,首先将历史代码评审记录中包含的所有文件路径按照层次划分,并将所有子路径名的集合作为语料库,然后对每一个代码提交中的包含的文件路径按照层次进行划分,并对其中包含的每一个子路径计算其TF-IDF权重,具体计算方法如下:
其中,Cs,pr指子路径s在当前代码提交中出现的次数,Cpr为当前代码提交包含的总词数,N为总代吗提交数,Ns为料库中包含子路径s的代码提交数;
每一个文件路径的文件权重值为其包含的每一个子路径的TF-IDF权重之和,具体计算方法如下:
其中,Ws为文件路径fp中包含的子路径的TF-IDF权重,Weight即为路径权重特征。
步骤230,在随机森林分类器中,以项目历史评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,训练分类模型;
利用标签编码将每一条文本型历史评审记录转化为由数值型数据构成的特征向量,结合人员活跃度特征、代码变更特征和文件权重特征作为数据训练集,输入随机森林分类器中。
步骤240,从待评审代码变更中抽取特征,输入分类器,输出概率最高的N个类别作为推荐分类,对应的评审人即推荐评审人;
对于一个待评审代码变更,从中抽取代码提交人、提交时间、分支、新增代码行数、删减代码行数和文件路径集合,并结合历史评审记录,计算出人员活跃度特征、代码变更特征和文件权重特征,组成一个特征向量,将向量输入训练好的随机森林分类器中,计算其属于各类别的概率,并将概率从大到小排序,选出前N个分类,作为推荐结果,其中N为小于等于评审人总数的任意正整数。
实施例三
参照图4,本实施例提供了一种利用时序验证模型,评估实施例二中基于随机森林分类器的代码评审人推荐方法的效果;
本实施例中,使用时序模型对方法进行验证,将处理后的历史代码评审记录作为数据集,按时间序列划分为训练集和测试集,如图4所示,首先将数据集按评审时间进行排序,并划分为N个时间片,N取决于该项目的第一次代码评审到数据收集之间的时间间隔,示例性的,项目A的第一次代码评审时间为2019年1月,在2019年11月,也就是第一次提交的10个月之后收集了数据,当以“月”为时间片时,将会把项目A包含的所有记录划分为10个时间片,然后,将基于划分好的N个时间片进行训练集和测试集的划分,模型的验证将分为N-1轮进行;第一轮中,将以第一个时间片的数据,即第一个月的数据作为训练集,将第二个月的数据作为测试集;第二轮中,将以第一轮中的全部数据,即前两个月的数据作为训练集,以第三个月的数据作为测试集;随着时间的推移,均以类似的方法为其构造训练集和测试集;最后一轮时,将以前N-1个月的数据作为训练集,以最后一个月的数据作为测试集;而最终的模型性能,将以N-1轮得到的平均性能进行衡量,由于时间片的变化,每一轮中涉及的评审人列表也将发生改变,在本实施例中,在每一轮验证进行之前都会对评审人列表(即分类模型类别)进行更新,列表中包含在当月之前参与过评审任务的所有评审人,而对于测试集对应时间片中新增的评审人则不会添加到当月的评审人列表中,但会加入下一轮推荐列表中。
本实施例中使用Top-k Accuracy、Top-k Recall和Top-kMRR作为评估指标,其中参数k包含三种取值:1、3、5,以验证分类效果,在分类时,不只输出一个分类作为结果,而是引入Top-k的概念,对样本属于每个分类的概率进行排序,并输出概率最高的k个分类,作为推荐结果,Top-k Accuracy的计算公式如下:
其中,R是测试集中包含的代码变更样本,|R|指测试集中包含的代码变更样本数。isTrue(r,k)表示推荐结果中是否包含真实结果,对于一个代码变更样本,如果分类器给出的Top-k个推荐结果中,包含其真实分类结果,则函数isTrue(r,k)返回1,否则返回0;
Top-k Recall的计算公式如下:
/>
其中,t为分类标签,为类别t的召回率,Count(t,k)为Top-k个推荐结果中包含类别t的样本数,函数isTrue(i,t,k)表示推荐结果中包含类别t的样本是否推荐正确,对于一个代码变更i,如果其推荐分类中包含类别t,且其真实类别为t,则返回1,否则返回0,分类器的最终召回率为每个分类召回率的平均值;
Top-k MRR的计算公式如下:
其中,函数rank(r,k)将返回真实分类结果在推荐分类结果中的索引,如果真实分类不包含在推荐分类中,则将视为0。具体的,如果第一个推荐分类是真实分类,那么/>推荐分类是真实分类,那么/>为/>由于Top-1 MRR与Top-1 Accuracy在数值上相同,本实施例中不计Top-1 MRR;
本实施例中选择了8个企业项目的历史代码评审记录作为数据集,表4为本实施例所述评审人推荐方法在该数据集上的验证结果。
表4
实施例四
基于上述原理,利用基于随机森林分类器的代码评审人推荐方法搭建一个实例化平台,其工作过程如图5所示,帮助用户完成具体的代码评审推荐过程,具体如下:
输入模块310用于获取项目历史代码评审记录,包括:
获取与软件项目匹配的代码提交日志,所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;
获取与软件项目匹配的代码评审日志,所述代码评审日志包括:评审人、评审时间。
计算模块320用于根据项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征,实现方式如下:
根据所述项目历史代码评审记录,计算软件开发者在近一个月内进行代码提交的次数、参与代码评审的次数、当次代码提交时间与最近一次代码提交时间之间的时间差,组成一个向量,作为人员活跃度特征;
根据所述项目历史代码评审记录,对代码提交日志内的分支进行编码,将分支编码与新增代码行数、删减代码行数进行结合,组成一个向量,其结果作为代码变更特征;
根据所述项目历史代码评审记录,计算所述项目历史代码评审记录中包含的每一个系统文件路径对应的权重,所得权重值组成一个向量,作为文件权重特征。
模型训练模块330用于在随机森林分类器中,以项目历史评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,训练分类模型,利用对项目历史代码评审记录中每一条文本型项目历史代码评审记录,通过所述计算模块320转化为数值型数据,该数值型数据构成一个特征向量,所得结果包含人员活跃度特征、代码变更特征和文件权重特征,所述结果作为训练集,输入随机森林分类器中进行训练。
推荐结果输出模块340用于从待评审的代码提交日志和代码评审日志中抽取代码变更信息、人员信息、文件路径信息,将代码变更信息进行编码,转化为代码变更特征,并结合项目历史代码评审记录计算人员活跃度特征、文件权重特征,输入到训练好的随机森林分类器中;
输出所述待评审代码变更属于各分类的概率,从中选出概率最高的N个分类作为推荐分类,每个推荐分类对应的评审人作为推荐评审人,其中N为自定义的小于等于评审人总数的任意正整数。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (10)
1.一种基于随机森林分类器的代码评审人推荐系统,其特征在于,包括:
输入模块(310),所述输入模块(310)用于获取项目历史代码评审记录;
计算模块(320),所述计算模块(320)用于根据项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征;
模型训练模块(330),所述模型训练模块(330)用于在随机森林分类器中,以项目历史评审记录的评审人作为分类标签,将计算好的特征向量作为数据集,训练分类模型;
推荐结果输出模块(340),所述推荐结果输出模块(340)用于从待评审代码变更中抽取特征,输入到随机森林分类器中,输出评审概率最高的N个类别作为推荐分类,每个推荐分类对应的评审人即推荐评审人,其中N为小于等于评审人总数的任意正整数。
2.根据权利要求1所述的一种基于随机森林分类器的代码评审人推荐系统,其特征在于,所述输入模块(310)用于获取项目历史代码评审记录,所述项目历史代码评审记录是与软件项目匹配的代码提交日志和代码评审日志;
所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;所述代码评审日志包括:评审人、评审时间。
3.根据权利要求2所述的一种基于随机森林分类器的代码评审人推荐系统,其特征在于,所述计算模块(320)包括人员活跃度特征计算单元、代码变更特征计算单元和文件权重特征计算单元:
所述人员活跃度特征计算单元,根据所述项目历史代码评审记录,计算软件开发者在近一个月内进行代码提交的次数、参与代码评审的次数、当次代码提交时间与最近一次代码提交时间之间的时间差,组成一个向量,作为人员活跃度特征;
所述代码变更特征计算单元,根据所述项目历史代码评审记录,对代码提交日志内的分支进行编码,将分支编码与新增代码行数、删减代码行数进行结合,组成一个向量,作为代码变更特征;
所述文件权重特征计算单元,用于文件权重特征的计算,根据所述项目历史代码评审记录,计算所述项目历史代码评审记录中包含的每一个系统文件路径对应的权重,所得权重值组成一个向量,作为文件权重特征;
对所述代码提交日志内的分支进行编码包括:
数据层次划分单元,所述数据层次划分单元用于将代码提交日志内文本型的分支数据按照层次进行划分,组成一个向量;
标签转化单元,所述标签转化单元用于对向量中的每一维进行标签编码转化为数值型的特征;
所述文件权重特征计算单元包括:
路径层次划分单元,所述路径层次划分单元用于将项目历史代码评审记录中文本型的系统文件路径按照路径层次划分成多个路径名;
权重计算单元,所述权重计算单元用于将项目历史代码评审记录中包含的所有系统文件路径按照路径层次划分为多个子路径名作为语料库,利用TF-IDF算法,计算每一个系统文件路径名在语料库中的权重值,对每一个系统文件路径中包含的子路径名权重值进行求和作为文件路径权重值,将一条项目历史代码评审记录中包含的所有文件路径权重值组合为一个向量,作为该评审记录的文件权重特征。
4.根据权利要求3所述的一种基于随机森林分类器的代码评审人推荐系统,其特征在于,所述模型训练模块(330)用于对项目历史代码评审记录中每一条文本型项目历史代码评审记录,通过所述计算模块(320)转化为数值型数据,该数值型数据构成一个特征向量,所得结果包含人员活跃度特征、代码变更特征和文件权重特征,所述结果作为训练集,输入随机森林分类器中进行训练。
5.根据权利要求3所述的一种基于随机森林分类器的代码评审人推荐系统,其特征在于,所述推荐结果输出模块(340)用于输出推荐评审人,包括:
特征输入单元,所述特征输入单元用于从待评审的代码提交日志和代码评审日志中抽取代码变更信息、人员信息、文件路径信息,将代码变更信息进行编码,转化为代码变更特征,并结合历史代码评审记录计算人员活跃度特征、文件权重特征,输入到训练好的随机森林分类器中;
结果输出单元,所述结果输出单元用于计算输出所述待评审代码变更特征在所述随机森林分类器中属于各分类标签的概率,从中选出概率最高的N个分类作为推荐分类,每个推荐分类对应的评审人作为推荐评审人,其中N为自定义的小于等于评审人总数的任意正整数。
6.一种基于随机森林分类器的代码评审人推荐方法,其特征在于,包括以下步骤:
步骤210,获取项目历史代码评审记录;
步骤220,根据步骤210中项目历史代码评审记录,挖掘人员活跃度特征、代码变更特征和文件权重特征;
步骤230,以项目历史代码评审记录的评审人作为分类标签,将步骤220中得到的特征向量作为数据集,输入随机森林分类器中训练分类模型;
步骤240,从待评审代码中抽取特征,输入到随机森林分类器中进行代码评审,所述随机森林分类器输出评审概率最高的N个类别作为推荐分类,每个推荐分类对应的评审人即推荐评审人,其中N为小于等于评审人总数的任意正整数。
7.根据权利要求6所述的一种基于随机森林分类器的代码评审人推荐方法,其特征在于,所述步骤210中获取项目历史代码评审记录包括:
获取与软件项目匹配的代码提交日志,所述代码提交日志包括:代码提交者、提交时间、分支、新增代码行数、删减代码行数、文件路径集合;
获取与软件项目匹配的代码评审日志,所述代码评审日志包括:评审人、评审时间。
8.根据权利要求7所述的一种基于随机森林分类器的代码评审人推荐方法,其特征在于,所述步骤220包括以下步骤:
根据所述项目历史代码评审记录,计算软件开发者在近一个月内进行代码提交的次数、参与代码评审的次数、当次代码提交时间与最近一次代码提交时间之间的时间差组成一个向量,作为人员活跃度特征;
根据所述项目历史代码评审记录,对代码提交日志内的分支进行编码,将分支编码与新增代码行数、删减代码行数结合为一个向量,其结果作为代码变更特征;
根据所述项目历史代码评审记录,计算所述项目历史代码评审记录中包含的每一个系统文件路径对应的权重,所得权重值组成一个向量,其结果作为文件权重特征;
对所述代码提交日志内的分支进行编码步骤包括:
将代码提交日志内文本型的代码分支数据按照层次进行划分,组成一个向量;
对向量中的每一维进行标签编码转化为数值型的特征;
所述文件权重特征计算包括:
将项目历史代码评审记录中文本型的系统文件路径按照路径层次划分成多个路径名;
将项目历史代码评审记录中包含的所有系统文件路径按照路径层次划分为多个子路径名作为语料库,利用TF-IDF算法,计算每一个路径名在语料库中的权重值,对一个文件路径中包含的子路径名权重值进行求和作为文件路径权重值,将一条项目历史代码评审记录中包含的所有文件路径权重值组合为一个向量,作为该评审记录的文件权重特征;
将一个文件路径中包含的每一个路径名的权重值相加,作为该文件路径的文件权重值;
将项目历史代码评审记录中包含的所有文件权重值组合为一个向量,作为该评审记录的文件权重特征。
9.根据权利要求8所述的一种基于随机森林分类器的代码评审人推荐方法,其特征在于,所述步骤230中训练分类模型利用对项目历史代码评审记录中每一条文本型项目历史代码评审记录,根据步骤220转化为数值型数据,所述数值型构成一个特征向量,所得结果包含人员活跃度特征、代码变更特征和文件权重特征,该结果作为训练集,输入随机森林分类器中进行训练。
10.根据权利要求8所述的一种基于随机森林分类器的代码评审人推荐方法,其特征在于,所述步骤240包括:
从待评审代码提交日志和代码评审日志中抽取代码变更信息、人员信息、文件路径信息,将代码变更信息进行编码,转化为代码变更特征,并结合项目历史代码评审记录计算人员活跃度特征、文件权重特征,输入到训练好的随机森林分类器中;
计算并输出所述待评审代码变更特征在所述随机森林分类器中属于各分类标签的概率,从中选出概率最高的N个分类作为推荐分类,每个推荐分类对应的评审人作为推荐评审人,其中N为自定义的小于等于评审人总数的任意正整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010373726.5A CN111428142B (zh) | 2020-05-06 | 2020-05-06 | 一种基于随机森林分类器的代码评审人推荐系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010373726.5A CN111428142B (zh) | 2020-05-06 | 2020-05-06 | 一种基于随机森林分类器的代码评审人推荐系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111428142A CN111428142A (zh) | 2020-07-17 |
CN111428142B true CN111428142B (zh) | 2023-07-28 |
Family
ID=71552428
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010373726.5A Active CN111428142B (zh) | 2020-05-06 | 2020-05-06 | 一种基于随机森林分类器的代码评审人推荐系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111428142B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813399B (zh) * | 2020-07-23 | 2022-05-31 | 平安医疗健康管理股份有限公司 | 基于机器学习的审核规则处理方法、装置及计算机设备 |
CN112182221B (zh) * | 2020-10-12 | 2022-04-05 | 哈尔滨工程大学 | 一种基于改进随机森林的知识检索优化方法 |
CN112416765B (zh) * | 2020-11-18 | 2024-02-09 | 天翼安全科技有限公司 | 代码评审方法、装置、设备及介质 |
CN114924956A (zh) * | 2022-05-13 | 2022-08-19 | 北京百度网讯科技有限公司 | 代码评审方法、装置、设备和介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122391B (zh) * | 2017-03-06 | 2021-02-23 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于历史记录的代码审核人推荐方法 |
CN107807978B (zh) * | 2017-10-26 | 2021-07-06 | 北京航空航天大学 | 一种基于协同过滤的代码评审者推荐方法 |
CN109002283B (zh) * | 2018-06-14 | 2021-07-27 | 南京航空航天大学 | 一种基于文件路径分析的代码审查者推荐方法 |
-
2020
- 2020-05-06 CN CN202010373726.5A patent/CN111428142B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111428142A (zh) | 2020-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111428142B (zh) | 一种基于随机森林分类器的代码评审人推荐系统及方法 | |
JP2021504789A (ja) | Esg基盤の企業評価遂行装置及びその作動方法 | |
CN103309886A (zh) | 一种基于交易平台的结构化信息搜索方法和装置 | |
CN112801530A (zh) | 一种基于语意拆分的智能评审系统及工作方法 | |
CN111899090B (zh) | 企业关联风险预警方法及系统 | |
CN112464094A (zh) | 信息推荐方法、装置、电子设备及存储介质 | |
CN112463774B (zh) | 文本数据的去重方法、设备及存储介质 | |
CN113283795B (zh) | 基于二分类模型的数据处理方法及装置、介质、设备 | |
CN112052396A (zh) | 课程匹配方法、系统、计算机设备和存储介质 | |
CN113051291A (zh) | 工单信息的处理方法、装置、设备及存储介质 | |
CN112000656A (zh) | 基于元数据的智能化数据清洗方法及装置 | |
CN111506504A (zh) | 基于软件开发过程度量的软件安全性缺陷预测方法及装置 | |
CN110222192A (zh) | 语料库建立方法及装置 | |
Bhambri | A CAD system for software effort estimation | |
CN115982429B (zh) | 一种基于流程控制的知识管理方法及系统 | |
CA3092332A1 (en) | System and method for machine learning architecture for interdependence detection | |
Hsieh et al. | Improve fidelity and utility of synthetic credit card transaction time series from data-centric perspective | |
Fajri et al. | Implementation of business intelligence to determine evaluation of activities (Case Study Indonesia Stock Exchange) | |
Yang et al. | Data preparation for machine learning in rock engineering | |
CN114879945A (zh) | 面向长尾分布特征的多样化api序列推荐方法及装置 | |
CN113159419A (zh) | 一种群体特征画像分析方法、装置、设备及可读存储介质 | |
Manning et al. | Volume and Direction of the Atlantic Slave Trade, 1650-1870: Estimates by Markov Chain Carlo Analysis | |
CN117312991B (zh) | 一种分类识别系统的构建方法及其相关设备 | |
CN117708759B (zh) | 定位企业所属产业链环节的方法及装置 | |
Malik et al. | Machine Learning in Big Data handling: Challenges and Prospects |
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 | ||
CB03 | Change of inventor or designer information |
Inventor after: Ma Jinyu Inventor after: Zhang He Inventor after: Yang Lanxin Inventor after: Rong Guoping Inventor after: Shao Dong Inventor before: Ma Jinyu Inventor before: Zhang He Inventor before: Yang Lanxing Inventor before: Rong Guoping Inventor before: Shao Dong |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |