掌桥专利:专业的专利平台
掌桥专利
首页

一种利用模型驱动和深度神经网络相结合的代码生成方法

文献发布时间:2023-06-19 13:26:15


一种利用模型驱动和深度神经网络相结合的代码生成方法

技术领域

本发明涉及一种代码生成方法,尤其是一种利用模型驱动和深度神经网络相结合的代码生成方法。

背景技术

开发软件产品需要开发人员对所用到的编程语言十分熟悉。快速学习掌握一个新的编程语言时间成本很高、难度也比较大。

目前,代码自动生成的研究领域有两种常见的研究方向:

1)为了减轻开发人员的负担,利用模型驱动开发工具生成代码。其需要复杂细致的建模才能生成功能复杂的代码,这是一个非常耗时的工作;

2)利用自然描述的需求生成具体的代码片段。其难以生成结构复杂的代码,尤其是长结构依赖关系的获取;对代码结构的考虑不充分,仅有对AST树局部父子节点信息的考虑;当前生成代码粒度很小,大多数为单行python代码。

现有技术中对两种方法的研究一直是并行、分开的,但是它们之间存在一定的联系。可以利用模型驱动方法生成代码框架,关注代码宏观的逻辑结构,解决基于自然语言的代码生成中的长距离依赖和代码粒度较小的问题;利用自然语言需求描述生成代码片段,关注代码微观的功能,解决模型驱动代码生成中代码细节信息不丰富的问题。由此可以看出,为了尽可能达到生成功能复杂且可用代码的目标,将二种方法联合起来综合利用,是一个可行的研究思路和方法。

发明内容

为解决背景技术中存在的问题,本发明提供一种利用模型驱动和深度神经网络相结合的代码生成方法。

实现上述目的,本发明采取下述技术方案:一种利用模型驱动和深度神经网络相结合的代码生成方法,所述方法是通过可视化建模工具、深度神经网络模型以及代码验证器完成的,所述方法包括如下步骤:

S1:使用活动图对目标需求建模后,自动生成逻辑结构代码;

S2:利用训练好的深度神经网络模型完成自然语言需求描述到具体功能代码的生成。

与现有技术相比,本发明的有益效果是:

本发明依靠两种代码生成各自的优点,弥补对方的不足,即利用模型驱动解决基于自然语言的代码生成中的长距离依赖和代码粒度较小的问题;又基于自然语言的生成解决模型驱动代码生成中代码细节信息不丰富的问题,对功能复杂的代码既可以保证逻辑的正确性以及长结构的正确性,又可以一定程度保证代码细节的正确性。

附图说明

图1是本发明总体构建及工作流程的示意图;

图2是深度神经网络模型训练的流程图;

图3是模型驱动逻辑代码生成的流程图;

图4是利用已训练模型预测生成代码的流程图。

具体实施方式

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

一种利用模型驱动和深度神经网络相结合的代码生成方法,所述方法是通过可视化建模工具、深度神经网络模型以及代码验证器完成的,

所述可视化建模工具用于对活动图进行建模以及绘制可视化的代码逻辑。

所述深度神经网络模型用于对自然语言需求进行转换,并生成需求对应的预测代码片段。

所述代码验证器用于对所述方法生成的代码进行语法以及功能正确性验证。

所述方法包括如下步骤:

S1:使用活动图对目标需求建模后,自动生成逻辑结构代码;

S101:根据训练集中的自然语言及其对应的代码片段,利用数据集的样本训练深度神经网络模型;深度网络模型采用Transformer模型,其整体架构是Encoder-Deocer架构。Transformer模型是一种只基于attention结构来处理序列的模,它是Vaswani A,Shazeer N,Parmar N,et al.等人在Proceedings of the 31st InternationalConference on Neural Information Processing Systems.(2017:6000-6010)中发表的Attention is all you need中提出的。

S10101:对训练集中给定的代码片段进行向量化表示,利用解析工具将其对应的代码解析成抽象语法树;

S10102:依据编程语言的语法规则和action转换规则将AST转换成action序列,并将action序列向量化表示;

S10103:将向量化的自然语言描述和action序列送入深度神经网络模型进行训练。

S102:开发简易可视化活动图建模工具,给出建模语言的形式化表达,依据代码生成规则,利用代码生成算法,将活动图中的节点与代码之间形成对应关系,将代码语句合并成完整的逻辑框架代码,绘制程序的活动图;

S10201:定义活动图的图元表示形式和图元间next关系;

S10202:基于定义的活动图的图元表示和连接关系,开发具有拖拽绘图功能的简易可视化建模工具;

S10203:利用可视化建模工具,绘制活动图表达程序逻辑;

S10204:通过遍历活动图中的节点以及各节点之间的执行顺序,生成代码框架的执行逻辑。

采用文浩等人在软件工程(2021,24(08):34-38+30)发表的基于活动图与顺序图的自动代码生成中提出的活动图环识别算法和活动图代码生成算法。

S103:在所需的代码行输入自然语言的需求描述N_input,提交到训练好的深度神经网络模型。

S2:利用训练好的深度神经网络模型完成自然语言需求描述到具体功能代码的生成。

S201:利用深度神经网络模型预测生成代码,将预测代码填入需求位置,进而形成最终完整的代码需求;

S20101:对S103提交的自然语言描述N_input相似的自然语言片段N_L以及N_S;N_L句法级token序列上获取的编辑距离相似度Lexical similarity最大值自然语言片段,N_S是根据语义向量选择的余弦相似度Semantic similarity最大值自然语言片段:

利用N_L、N_S作为对N_input的增强数据,共同送入深度神经网络模型预测action序列;

S20102:将action序列映射回抽象语法树,利用解析工具将抽象语法树还原成代码,并将其加入到原来的自然语言描述位置。

S202:将完整代码送入代码验证器,对代码的词法、语法以及语义进行正确性度量;利用提供的语法分析器分析语法正确性,利用测试用例通过率验证功能正确性。

S20201:将最终生成的代码进行词法分析,测试生成代码的词法正确性。采用BLUE值进行度量,最BLEU作为词汇相似度的度量结果;

S20202:静态检查生成的代码,以检查其语法是否符合可执行标准。

S20203:利用测试用例通过率验证功能正确性,将最终生成的代码,根据预先确定的测试用例,计算测试用例通过率Pt:

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同条件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

相关技术
  • 一种利用模型驱动和深度神经网络相结合的代码生成方法
  • 基于API接口和脚本定义相结合的可视化代码生成方法
技术分类

06120113678812