【技术实现步骤摘要】
一种代码自动生成质量评估方法
[0001]本专利技术涉及一种代码自动生成质量评估方法,属于代码自动生成质量评估领域。
技术介绍
[0002]在基于机器学习的代码自动生成的研究过程中,HindleA等人将传统的N
‑
Gram模型应用到代码自动生成的研究中,使用语言模型N
‑
Gram进行代码预测,实验通过MRR评估代码自动生成的质量。Hellendoorn VJ等人在语言模型的基础上加入“缓存”机制来维护程序的局部信息,通过对比循环神经网络与带有“缓存”机制的N
‑
Gram,发现代码的局部性特征对于token的预测有极大的帮助,使用循环神经网络进行代码预测时使用MRR对生成代码质量进行评估。Nguyen TT等人使用一种统计语言模型SLAMC(A Novel Statistical Semantic Language Model For Source Code),在语言模型的基础上加入“缓存”机制来维护程序的局部信息。实验结果表明,加入“缓存”机制的模型捕获了源代码中的局部规律,实验使用Top
‑
K的Precision对模型生成代码准确性进行评估。RaychevV等人使用N
‑
gram模型与循环神经网络结合,在JavaAPI调用级别进行代码补全,利用N
‑
Gram模型对程序中的API调用序列建模,从而对API的调用序列进行预测。该研究通过分析Top
‑
K个推荐代码的Precision来评估模型的效 ...
【技术保护点】
【技术特征摘要】
1.一种代码自动生成质量评估方法,其特征在于:所述方法步骤如下:Step1、基于代码自动生成数据和程序员行为数据抽取特征项并进行标注,作为数据集D;Step2、使用数据集D中代码上下文进行预训练,生成代码符号向量;Step3、根据代码上下文建立多维语法树;Step4、通过特征检测器在多维语法树中进行特征提取,将提取到的特征通过全连接神经网络映射到代码自动生成质量属性;Step5、使用全连接神经网络输出的代码质量属性对代码自动生成质量进行评估。2.根据权利要求1所述的代码自动生成质量评估方法,其特征在于:所述Step1具体如下:Step1.1、定义代码自动生成质量属性集合A,初始化代码自动生成数据和程序员行为数据,执行Step1.2;Step1.2、基于代码自动生成数据和程序员行为数据抽取与代码质量属性相关的特征项、抽取通用特征项并进行标注,作为数据集D,执行Step2。3.根据权利要求1所述的代码自动生成质量评估方法,其特征在于:所述Step2具体如下:Step2.1、将数据集D中所有代码上下文Codecontext存入代码code,执行Step2.2;Step2.2、将code转换为语法树tree,初始化节点队列sample_queue=[tree],初始化节点类型集合node_type=[],节点代码集合node_code=[],执行Step2.3;Step2.3、判断sample_queue是否为空,若sample_queue为空,执行Step2.9,否则执行Step2.4;Step2.4、将sample_queue队首元素出队,并将队首元素表示为node,执行Step2.5;Step2.5、将node节点类型存入node_type,执行Step2.6;Step2.6、判断node节点是否含有子节点,是则执行Step2.7,否则执行Step2.8;Step2.7、将node节点的子节点加入队列sample_queue中,执行Step2.3;Step2.8、将node节点所表示的代码存入node_code中,执行Step2.3;Step2.9、对node_code中的元素进行去重,执行Step2.10;Step2.10、以node_code作为词典,将code进行分词,并以空格进行分隔,执行Step2.11;Step2.11、初始化窗口windows=8,start=0,训练样本集合vec_train=[],训练样本标签集合vec_label=[],执行Step2.12;Step2.12、以node_code为词典,将分词后的code转换为one
‑
hot序列,并将其表示为code_one_hot,执行Step2.13;Step2.13、判断start是否小于code序列长度,是执行Stpe2.14,否则执行Step2.17;Step2.14、序列line=code_one_hot中起始点为start,长度为windows的序列,执行Step2.15;Step2.15、将line中start处的元素存入vec_train,将line中除start处以外的元素存入vec_label,执行Step2.16;Step2.16、start=start+1,执行Step2.13;
Step2.17、初始化全连接神经网络,使用vec_train与vec_label训练代码符号向量,执行Step3。4.根据权利要求3所述的代码自动生成质量评估方法,其特征在于:所述Step3具体如下:Step3.1、输入数据集D,执行Step3.2;Step3.2、将数据集D中所有文件路径存入file中并去重,初始化文件路径个数f=0,样本samples=[],执行Step3.3;Step3.3、判断f是否小于file中文件路径个数,是则执行Step3.4,否则执行Step4;其中,一条代码自动生成数据和程序员行为数据对应一个文件路径;Step3.4、将第f个文件路径file[f]中代码上下文解析为语法树root,将数据集D中文件路径为file[f]与代码质量属性相关的特征项存入records,代码自动生成质量标注存入label,执行Step3.5;Step3.5、初始化节点队列queue=[root];根节点字段root_josn={'node':root节点类型,'code':root节点表示的代码,'children':[],'record':None};节点队列字段queue_json=[root_json];f+=1,执行Step3.6;Step3.6、判断queue是否不为空,是则执行Step3.7,否则执行Step3.3;Step3.7、当前节点current_node=queue队首元素,并将queue队首元素出队;当前节点字段current_node_json=queue_json=[root_json],执行Step3.8;Step3.8、孩子节点children=current_node子节点列表,将children存入queue,c=0,执行Step3.9;Step3.9、判断c是否小于children节点个数,是则执行Step3.10,否则执行Step3.3;Step3.10、初始化记录re=None,num=0,rc=0,执行Step3.11;Step3.11、判断rc是否小于records个数,是则执行Step3.12,否则执行Step3.15;其中,一条代码自动生成数据和程序员行为数据对应的records个数取值为1;Step3.12、判断children[c]代码是否等于数据集D中生成代码内容,是则执行Step3.13,否则执行Step3.14;Step3.13、re=数据集D中生成代码内容为children[c]的与代码质量属性相关的特征项,子树datum={'tree':root_json,'label':label[num]},num+=1,将datum添加到samples中,执行Step3.15;Step3.14、rc=rc+1,执行Step3.11;Step3.15、孩子节点字段child_json={'node':children[c]节点类型,'code':children[c]中生成代码内容,'children':[],'record':re},执行Step3.16;Step3.16、将child_json添加到current_node_json['children']中,rc+=1,c+=1,执行S...
【专利技术属性】
技术研发人员:姜瑛,张晓江,汤守国,李凌宇,丁家满,汪海涛,
申请(专利权)人:昆明理工大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。