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

基于领域模型的代码生成方法、装置、设备、介质及产品

文献发布时间:2024-01-17 01:20:32


基于领域模型的代码生成方法、装置、设备、介质及产品

技术领域

本申请实施例涉及软件开发技术领域,特别涉及一种基于领域模型的代码生成方法、装置、设备、介质及产品。

背景技术

在项目开发过程中,需要编程人员编写大量的代码以实现项目中的业务运行逻辑。

为了提高代码编写工作的效率,相关技术中,采用代码生成工具协助项目开发,从而解决代码编写效率低的问题。目前代码生成工具生成代码的步骤主要是获取领域模型对应的结构化描述信息,将结构化描述信息写入至代码生成工具中的代码模板中直接生成代码。

但代码生成工具中的代码模板都已预定义,且基于领域模型解析得到的结构化描述信息生成的代码可能不符合团队规范,或在生成代码后依然需要大量的人力去进行优化调整,因此,如何在保证生成代码质量的前提下提高代码生成效率,是亟待解决的重要问题。

发明内容

本申请提供了一种基于领域模型的代码生成方法、装置、设备、介质及产品,所述技术方案如下。

根据本申请的一方面,提供了一种基于领域模型的代码生成方法,所述方法包括以下步骤。

对领域模型进行数据解析,得到所述领域模型对应的结构化描述信息,所述领域模型是指包括领域内的至少两个类以及所述至少两个类之间的关联关系,所述结构化描述信息包括以实例形式描述所述领域模型的格式化语句。

基于预训练深度学习模型对所述结构化描述信息进行数据配置,得到领域特定语言DSL,所述DSL包括对所述结构化描述信息进行数据配置后得到的受限于所述领域的语言。

基于所述DSL进行代码生成,得到所述领域模型对应的第一代码。

根据本申请的一方面,提供了一种基于领域模型的代码生成装置,所述装置包括以下模块。

数据解析模块,用于对领域模型进行数据解析,得到所述领域模型对应的结构化描述信息,所述领域模型用于表示领域内的至少两个类以及所述至少两个类之间的关联关系,所述结构化描述信息包括以实例形式描述所述领域模型的格式化语句。

数据配置模块,用于基于预训练深度学习模型对所述结构化描述信息进行数据配置,得到领域特定语言DSL,所述DSL包括对所述结构化描述信息进行数据配置后得到的受限于所述领域的语言。

代码生成模块,用于基于所述DSL进行代码生成,得到所述领域模型对应的第一代码。

在一些实施例中,所述数据配置模块,还用于基于所述预训练深度学习模型对所述结构化描述信息进行所述数据配置,得到所述结构化描述信息对应的配置信息,所述配置信息是指对所述结构化描述信息进行补充的信息。

在一些实施例中,所述数据配置模块,还用于将所述配置信息嵌入至所述结构化描述信息中,得到所述DSL。

在一些实施例中,所述结构化描述信息包括实体类信息,所述配置信息包括类配置信息;所述数据配置模块,还用于基于所述预训练深度学习模型对所述实体类信息中的变量进行所述数据配置,得到所述实体类信息对应的所述类配置信息。

在一些实施例中,所述实体类信息中的变量包括实体类变量名称,所述类配置信息包括实体类变量翻译名称;所述数据配置模块,还用于基于所述预训练深度学习模型对所述实体类变量名称进行翻译,得到所述实体类变量名称对应的所述实体类变量翻译名称。

在一些实施例中,所述数据配置模块,还用于将所述实体类变量翻译名称替换所述结构化描述信息中的所述实体类变量名称,得到所述DSL。

在一些实施例中,所述实体类信息中的变量包括实体类变量类型,所述类配置信息包括实体类变量配置类型;所述数据配置模块,还用于基于所述预训练深度学习模型对所述实体类变量类型进行补充或修改,得到所述实体类变量类型对应的所述实体类变量配置类型。

其中,所述实体类变量类型是指实体类变量对应的数据类型;所述实体类变量配置类型是指所述实体类在所述预训练深度学习模型补充或修改后对应的数据类型。

在一些实施例中,所述数据配置模块,还用于将所述实体类变量配置类型补充或替换所述结构化描述信息中的所述实体类变量类型,得到所述DSL。

在一些实施例中,所述结构化描述信息包括函数信息,所述配置信息包括函数配置信息;所述数据配置模块,还用于基于所述预训练深度学习模型对所述函数信息中的变量进行所述数据配置,得到所述函数信息对应的所述函数配置信息。

在一些实施例中,所述函数信息中的变量包括函数名称,所述函数配置信息包括函数翻译名称;所述数据配置模块,还用于基于所述预训练深度学习模型对所述函数名称进行翻译,得到所述函数名称对应的所述函数翻译名称。

在一些实施例中,所述数据配置模块,还用于将所述函数翻译名称替换所述结构化描述信息中的所述函数名称,得到所述DSL。

在一些实施例中,所述函数信息中的变量包括函数返回类型,所述函数配置信息包括函数返回配置类型;所述数据配置模块,还用于基于所述预训练深度学习模型对所述函数返回类型进行补充或修改,得到所述函数返回类型对应的所述函数返回配置类型。

其中,所述函数返回类型是指函数返回的数据的数据类型。

在一些实施例中,所述数据配置模块,还用于将所述函数返回配置类型补充或替换所述结构化描述信息中的所述函数返回类型,得到所述DSL。

在一些实施例中,所述函数信息中的变量包括函数参数类型,所述函数配置信息包括函数参数配置类型;所述数据配置模块,还用于基于所述预训练深度学习模型对所述函数参数类型进行选择,得到所述函数参数类型对应的所述函数参数配置类型。

其中,所述函数参数类型是指函数调用的参数的种类。

在一些实施例中,所述数据配置模块,还用于将所述函数参数配置类型补充至所述结构化描述信息中的所述函数参数类型,得到所述DSL。

在一些实施例中,所述代码生成模块,还用于基于所述预训练深度学习模型对所述第一代码进行更新,得到第二代码。

其中,所述第二代码是指对所述第一代码进行更新后得到的代码。

在一些实施例中,所述代码生成模块,还用于响应于所述预训练深度学习模型基于所述结构化描述信息和全局变量对所述第一代码中的待更新代码进行补充,得到所述第二代码。

其中,所述全局变量是指所述第一代码中的固定配置参数。

根据本申请的另一方面,提供了一种计算机设备,该计算机设备包括:处理器和存储器,存储器中存储有至少一条计算机程序,至少一条计算机程序由处理器加载并执行以实现如上方面所述的基于领域模型的代码生成方法。

根据本申请的另一方面,提供了一种计算机存储介质,计算机可读存储介质中存储有至少一条计算机程序,至少一条计算机程序由处理器加载并执行以实现如上方面所述的基于领域模型的代码生成方法。

根据本申请的另一方面,提供了一种计算机程序产品,上述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机程序由计算机设备的处理器从所述计算机可读存储介质读取并执行,使得所述计算机设备执行如上方面所述的基于领域模型的代码生成方法。

本申请提供的技术方案带来的有益效果至少包括:

通过对领域模型进行数据解析,得到领域模型对应的结构化描述信息;基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL;基于DSL进行代码生成,得到领域模型对应的第一代码。本申请通过预训练深度学习模型对领域模型对应的结构化描述信息进行数据配置,并基于结构化描述信息和数据配置后的配置信息进行代码生成,通过利用预训练深度学习模型对领域模型对应的结构化描述信息进行数据配置,避免了人力对结构化描述信息进行优化调整,极大地提高了代码生成效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请一个示例性实施例提供的一种基于领域模型的代码生成方法的示意图;

图2是本申请一个示例性实施例提供的计算机系统的架构示意图;

图3是本申请一个示例性实施例提供的基于领域模型的代码生成方法的流程图;

图4是本申请一个示例性实施例提供的基于领域模型的代码生成方法的另一流程图;

图5是本申请一个示例性实施例提供的选择领域模型的示意图;

图6是本申请一个示例性实施例提供的对领域模型进行数据解析得到的结构化描述信息的示意图;

图7是本申请一个示例性实施例提供的对结构化描述信息进行数据配置的示意图;

图8是本申请一个示例性实施例提供的对实体类信息中的变量进行数据配置的示意图;

图9是本申请一个示例性实施例提供的对实体类信息进行数据配置后的示意图;

图10是本申请一个示例性实施例提供的对函数信息中的变量进行数据配置的示意图;

图11是本申请一个示例性实施例提供的对函数信息进行数据配置后的示意图;

图12是本申请一个示例性实施例提供的第一代码的示意图;

图13是本申请一个示例性实施例提供的第二代码的示意图;

图14是本申请一个示例性实施例提供的领域模型中不同类之间的映射关系的示意图;

图15是本申请一个示例性实施例提供的代码生成工具的分层结构示意图;

图16是本申请一个示例性实施例提供的基于领域模型的代码生成框架的示意图;

图17是本申请一个示例性实施例提供的基于领域模型的代码生成装置的框图;

图18是本申请一个示例性实施例提供的计算机设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。

首先对本申请实施例涉及的若干个名词进行简介。

领域:用于指示领域模型所能解决问题的范围。比如,研究的范围是整个系统,则领域模型就是针对这个系统而言。研究的问题是系统的一部分,则领域模型就限定在指定的范围内。

领域模型:是指包括领域内的至少两个类以及至少两个类之间的关联关系的可视化表示模型,或,领域模型是对领域内的概念类或现实世界中实体类(对象)的可视化表示,用于发掘重要的业务领域概念,并建立业务领域概念之间的关系,领域模型可以整理业务中的概念以及关系,因此一般通过对领域模型开发程序,来实现业务中的业务功能,或,领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,领域模型中描述的是业务中涉及到的实体类及实体类相互之间的关系。

类:是对实体进行抽象归类得到的统称,比如,实体为:小红、小李,将其抽象归纳后得到的类为:人。

关联关系:用于表示至少两个类之间的联系。关联关系包括关联关系、依赖关系、聚合关系、组合关系、继承关系中的至少一种,但不限于此,本申请实施例对此不作具体限定。

数据解析:是指将一种数据格式转换为另一种更易读的数据格式的过程,或,将一种类型数据转换为不同类型数据的方法,例如,接收数据为超文本标记语言(Hyper TextMarkup Language,HTML)格式,将获取的HTML格式转换为可读性更强的数据格式,比如,JavaScript对象表示法(JavaScript Object Notation,JSON)格式、逗号分隔的值(Comma-Separated Values,CSV)格式或表格。

数据配置:包括对结构化描述信息中的信息进行翻译、补充、替换、修改中的至少一种操作。

本申请实施例提供了一种基于领域模型的代码生成方法的示意图,如图1所示,该方法应用于代码生成工具,该方法可以由计算机设备中的代码生成工具执行,计算机设备可以是终端或服务器。

示例性地,代码生成工具20对领域模型10进行数据解析,得到领域模型10对应的结构化描述信息30,代码生成工具20基于预训练深度学习模型40对结构化描述信息30进行数据配置,得到领域特定语言(Domain Specific Language,DSL)50;代码生成工具20基于DSL50进行代码生成,得到领域模型10对应的第一代码60,代码生成工具20基于预训练深度学习模型40对第一代码60进行更新,得到第二代码70。

领域用于指示领域模型10所能解决问题的范围。比如,研究的范围是整个系统,则领域模型10就是针对这个系统而言。研究的问题是系统的一部分,则领域模型10就限定在指定的范围内。

领域模型10是指包括领域内的至少两个类以及至少两个类之间的关联关系的可视化表示模型,或,领域模型10是对领域内的概念类或现实世界中实体类(对象)的可视化表示,用于发掘重要的业务领域概念,并建立业务领域概念之间的关系,领域模型可以整理业务中的概念以及关系,因此一般通过对领域模型开发程序,来实现业务中的业务功能,或,领域模型10是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,领域模型10中描述的是业务中涉及到的实体类及实体类相互之间的关系。

类是指对实体进行抽象归类得到的,比如,实体为:小红、小李,将其抽象归纳后得到的类为:人。

关联关系用于表示至少两个类之间的联系。

可选地,关联关系包括关联关系、依赖关系、聚合关系、组合关系、继承关系中的至少一种,但不限于此,本申请实施例对此不作具体限定。

关联关系是指至少两个类之间的静态关系,比如,人和身份证之间的关系。

依赖关系是指至少两个类之间的动态关系,比如,人用抹布擦桌子,人和抹布之间就是依赖关系。

聚合关系是指至少两个类之间的整体和部分关系,即整体类不在了,部分类仍然存在,比如,班级没了,学生依然存在。

组合关系是指至少两个类之间的组合关系,即第一类不在了,第二类就不完整了,比如,小鸟为第二类,翅膀为第一类,翅膀不在了,小鸟就不完整了。

结构化描述信息30是指以实例形式描述领域模型10的格式化语句。

例如,领域模型10为序列图,将序列图数据解析为每个实例对应的且能够被代码生成工具20识别的格式化语句。

数据解析是指将一种数据格式转换为另一种更易读的数据格式的过程,或,将一种类型数据转换为不同类型数据的方法,例如,接收数据为HTML格式,将获取的HTML格式转换为可读性更强的数据格式,比如,JSON格式、CSV格式或表格。

DSL50是指对结构化描述信息30进行数据配置后得到的受限于领域的语言。

数据配置包括对结构化描述信息30中的信息进行翻译、补充、替换、修改中的至少一种操作。

在一些实施例中,领域模型10用统一建模语言(Unified Modeling Language,UML)来表示,UML是一种用来对软件密集系统进行可视化建模的语言,可以清晰的反映出实体类之间的需求关系。

可选地,UML包括:用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图、包图、组合结构图、交互概览图等,但不限于此,本申请实施例对此不作具体限定。

用例图是指从用户角度描述用户需求的图,从而描述系统的外部交互。

类图是指描述系统内静态结构的图。

对象图是指描述系统内多个对象在某一时刻的状态的图。

状态图是指描述系统的动态特性的图。

活动图是指描述系统中业务实现用例的工作流程的图。

序列图是指描述系统中对象之间发送信息的顺序的图,同时显示对象之间的交互。

协作图是指描述系统中对象之间的协作关系的图。

构件图是指系统的静态实现视图。

部署图是指系统中软、硬件之间的物理体系结构图,从而描述系统的物理节点。

包图是指对构成系统模型元素进行分组整理的图。

组合结构图用于表示系统中类或构建内部结构的图。

交互概览图用于表示多个交互之间的控制关系的图。

示例性地,以领域模型10为序列图为例,代码生成工具20基于预训练深度学习模型40对结构化描述信息30进行数据配置,得到结构化描述信息30对应的配置信息;代码生成工具20将配置信息嵌入至结构化描述信息30,得到DSL50。

数据配置包括对结构化描述信息30中的信息进行翻译、补充、替换、修改中的至少一种操作。

需要说明的是,领域模型10中的序列图是整个序列图中的节选部分,仅作为示例性展示,不作具体限定。

配置信息是指针对结构化描述信息30进行翻译、补充、替换、修改操作后得到的信息。例如,配置信息是指将结构化描述信息30中的中文翻译为英文的英文、将结构化描述信息30中未填写区域的数据进行补充后的补充信息、将结构化描述信息30中已填写区域的数据进行修改后的修改信息。

结构化描述信息30包括实体类信息、函数信息中的至少一种。配置信息包括类配置信息、函数配置信息中的至少一种。

实体类信息是指序列图中的实体类的属性信息。

函数信息是指序列图内的函数,比如,在领域模型10为停车系统的序列图时,停车系统中的函数包括扣费函数、计时函数中的至少一种,但不限于此,本申请实施例对此不作具体限定。

针对结构化描述信息30中的实体类信息。

代码生成工具20基于预训练深度学习模型40对实体类信息中的变量进行数据配置,得到实体类信息对应的类配置信息;代码生成工具20将类配置信息嵌入至结构化描述信息30与,得到DSL50。

实体类信息中的变量包括实体类变量名称和实体类变量类型中的至少一种。代码生成工具20基于预训练深度学习模型40对实体类变量名称和实体类变量类型中的至少一种进行数据配置,得到类配置信息。

可选地,对实体类信息中的变量进行数据配置的方式包括以下方式中的至少一种,但不限于此。

基于预训练深度学习模型40对领域模型10中的实体类变量名称进行翻译,得到实体类变量翻译名称,比如,将领域模型10中的实体类变量名称由中文翻译为英文。

基于预训练深度学习模型40对领域模型10中的实体类变量类型进行补充或修改,得到实体类变量配置类型。

基于预训练深度学习模型40对领域模型10中的实体类生成模式进行选择;可选地,生成模式包括生成数据序列化协议文件(protocol buffer,pb)和生成类文件中的至少一种。

pb文件是一种表示模型结构的二进制文件,不带有源代码。

示例性地,代码生成工具20在确定类配置信息后,代码生成工具20将类配置信息嵌入至结构化描述信息30中,得到DSL50。

可选地,代码生成工具20在确定类配置信息后,代码生成工具20将实体类变量翻译名称和实体类变量配置类型中的至少一种嵌入至结构化描述信息30中,得到DSL50。

针对结构化描述信息30中的函数信息。

代码生成工具20基于预训练深度学习模型40对函数信息中的变量进行数据配置,得到函数信息对应的函数配置信息;代码生成工具20将函数配置信息嵌入至结构化描述信息30,得到DSL50。

函数信息中的变量包括函数名称、函数返回类型和函数参数类型中的至少一种。代码生成工具20基于预训练深度学习模型40对函数名称、函数返回类型和函数参数类型中的至少一种进行数据配置,得到函数配置信息。

函数返回类型是指函数返回的数据的数据类型。

可选地,数据类型包括整数类型、小数类型、字符类型、布尔类型中的至少一种,但不限于此,本申请实施例对此不作具体限定。

函数参数类型是指函数调用的参数的种类。比如,以停车系统为例,函数参数类型包括车牌号、车身编号中的至少一种,但不限于此,本申请实施例对此不作具体限定。

可选地,对函数信息中的变量进行数据配置的方式包括以下方式中的至少一种,但不限于此。

基于预训练深度学习模型40对领域模型10中的函数名称进行翻译,得到函数翻译名称,比如,将领域模型10中的函数名称由中文翻译为英文。

基于预训练深度学习模型40对领域模型10中的函数返回类型进行补充或修改,得到函数返回配置类型;比如,确定函数返回的数据类型为整型变量int。

基于预训练深度学习模型40对领域模型10中的函数参数类型进行选择;比如,以停车扣费为例,输入的函数参数类型为车牌号。

示例性地,代码生成工具20在确定函数配置信息后,代码生成工具20将函数配置信息嵌入至结构化描述信息30中,得到DSL50。

可选地,代码生成工具20在确定函数配置信息后,代码生成工具20将函数翻译名称、函数返回配置类型和函数参数配置类型中的至少一种嵌入至结构化描述信息30中,得到DSL50。

需要说明的是,DSL50可以是将函数配置信息嵌入至结构化描述信息30中得到的,或,将类配置信息嵌入至结构化描述信息30中得到的,或,将函数配置信息和类配置信息同时嵌入至结构化描述信息30中得到的,本申请实施例对此不作具体限定。

示例性地,代码生成工具20在确定DSL50后,代码生成工具20将DSL50输入至代码生成工具20中的代码模板进行代码生成,得到领域模型10对应的第一代码60。

在一些实施例中,由于生成的第一代码60可能不太完美,在第一代码60包括许多缺失的内容,需要利用预训练深度学习模型40强大的推理能力对第一代码60进行完善。代码生成工具20基于预训练深度学习模型40对第一代码60进行更新,得到第二代码70;其中,第二代码70是指对第一代码60中的变量参数和日志中的至少一种进行更新后得到的代码。

例如,如图1所示,第一代码60中被框起来的部分中缺失内容,代码生成工具20通过预训练深度学习模型40对第一代码60中被框起来的部分进行更新,得到更新后的第二代码70。

代码生成工具20响应于预训练深度学习模型40基于结构化描述信息30中的函数输入参数、结构化描述信息中的实体类信息中的变量和全局变量对第一代码60进行更新,得到第二代码70。

其中,结构化描述信息30中的函数输入参数、实体类信息中的变量可通过对领域模型10进行数据解析中得到,全局变量是指第一代码60中的固定配置参数。

需要说明的是,代码生成工具20中的预训练深度学习模型40是通过插件的形式进行应用的,即,代码生成工具20是使用预训练深度学习模型40时,仅需调用预训练深度学习模型40对应的插件接口即可。

综上所述,本实施例提供的方法,通过对领域模型进行数据解析,得到领域模型对应的结构化描述信息;基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL;基于DSL进行代码生成,得到领域模型对应的第一代码。本申请通过预训练深度学习模型对领域模型对应的结构化描述信息进行数据配置,并基于结构化描述信息和数据配置后的配置信息进行代码生成,通过利用预训练深度学习模型强大的推断能力对领域模型对应的结构化描述信息进行数据补充,避免了人力对结构化描述信息进行优化调整,极大地提高了代码生成效率。

图2示出了本申请一个实施例提供的计算机系统的架构示意图。该计算机系统可以包括:终端100和服务器200。

终端100可以是诸如手机、平板电脑、车载终端(车机)、可穿戴设备、个人计算机(Personal Computer,PC)、掌部图像识别语音交互设备、掌部图像识别家电、车载终端、飞行器、无人售货终端等电子设备。终端100中可以安装运行目标应用程序的客户端,该目标应用程序可以是参考代码生成功能的应用程序,也可以是提供有代码生成功能的其他应用程序,本申请对此不作限定。另外,本申请对该目标应用程序的形式不作限定,包括但不限于安装在终端100中的应用程序(Application,App)、小程序等,还可以是网页形式。

服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工掌部图像识别平台等基础云计算服务的云服务器。服务器200可以是上述目标应用程序的后台服务器,用于为目标应用程序的客户端提供后台服务。

其中,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。

在一些实施例中,上述服务器还可以实现为区块链系统中的节点。区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链,本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。

终端100和服务器200之间可以通过网络进行通信,如有线或无线网络。

图3是本申请一个示例性实施例提供的基于领域模型的代码生成方法的流程图。该方法可以由代码生成工具执行。该方法包括以下步骤。

步骤302:对领域模型进行数据解析,得到领域模型对应的结构化描述信息。

领域模型是指领域内的至少两个类以及至少两个类之间的关联关系的可视化表示模型,或,领域模型是对领域内的概念类或现实世界中实体类(对象)的可视化表示,用于发掘重要的业务领域概念,并建立业务领域概念之间的关系,领域模型可以整理业务中的概念以及关系,因此一般通过对领域模型开发程序,来实现业务中的业务功能,或,领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,领域模型中描述的是业务中涉及到的实体类及实体类相互之间的关系。

领域用于指示领域模型所能解决问题的范围。比如,研究的范围是整个系统,则领域模型就是针对这个系统而言。研究的问题是系统的一部分,则领域模型就限定在指定的范围内。

类是指对实体进行抽象归类得到的,比如,实体为:小红、小李,将其抽象归纳后得到的类为:人。

关联关系用于表示至少两个类之间的联系。

可选地,关联关系包括关联关系、依赖关系、聚合关系、组合关系、继承关系中的至少一种,但不限于此,本申请实施例对此不作具体限定。

结构化描述信息包括以实例形式描述领域模型的格式化语句。

例如,领域模型为序列图,将序列图数据解析为每个实例对应的且能够被代码生成工具识别的格式化语句。

数据解析是指将一种数据格式转换为另一种更易读的数据格式的过程,或,将一中类型数据转换为不同类型数据的方法,例如,接收数据为HTML格式,将获取的HTML格式转换为可读性更强的数据格式,比如,JSON格式、CSV格式或表格。

可选地,代码生成工具对领域模型进行数据解析的方式包括:代码生成工具自身对领域模型进行数据解析,或,代码生成工具调用插件中的数据解析插件进行数据解析,但不限于此。

在一些实施例中,领域模型用UML来表示,UML是一种用来对软件密集系统进行可视化建模的语言,可以清晰的反映出实体类之间的需求关系。

可选地,UML包括:用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图、包图、组合结构图、交互概览图等,但不限于此,本申请实施例对此不作具体限定。

用例图是指从用户角度描述用户需求的图,从而描述系统的外部交互。类图是指描述系统内静态结构的图。对象图是指描述系统内多个对象在某一时刻的状态的图。状态图是指描述系统的动态特性的图。活动图是指描述系统中业务实现用例的工作流程的图。序列图是指描述系统中对象之间发送信息的顺序的图,同时显示对象之间的交互。协作图是指描述系统中对象之间的协作关系的图。构件图是指系统的静态实现视图。部署图是指系统中软、硬件之间的物理体系结构图,从而描述系统的物理节点。包图是指对构成系统模型元素进行分组整理的图。组合结构图用于表示系统中类或构建内部结构的图。交互概览图用于表示多个交互之间的控制关系的图。

步骤304:基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL。

代码生成工具中的预训练深度学习模型是通过插件的形式进行应用的,即,代码生成工具是使用预训练深度学习模型时,仅需调用预训练深度学习模型对应的插件接口即可。

预训练深度学习模型插件的类型包括翻译模型插件、数据解析模型插件、单侧生成模型插件中的至少一种,但不限于此,本申请实施例对此不作具体限定。

DSL包括对结构化描述信息进行数据配置后得到的受限于领域的语言。

数据配置是指对结构化描述信息中的信息进行翻译、补充、替换、修改中的至少一种操作。

步骤306:基于DSL进行代码生成,得到领域模型对应的第一代码。

代码是指程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。

第一代码是指代码生成工具基于领域模型对应的DSL自动生成的代码。

示例性地,在确定DSL后,代码生成工具将DSL输入至代码生成工具中的代码模板进行代码生成,得到领域模型对应的第一代码。

综上所述,本实施例提供的方法,通过对领域模型进行数据解析,得到领域模型对应的结构化描述信息;基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL;基于DSL进行代码生成,得到领域模型对应的第一代码。本申请通过预训练深度学习模型对领域模型对应的结构化描述信息进行数据配置,并基于结构化描述信息和数据配置后的配置信息进行代码生成,通过利用预训练深度学习模型强大的推断能力对领域模型对应的结构化描述信息进行数据补充,避免了人力对结构化描述信息进行优化调整,极大地提高了代码生成效率。

图4是本申请一个示例性实施例提供的基于领域模型的代码生成方法的另一流程图。该方法可以由代码生成工具执行。该方法包括以下步骤。

步骤402:对领域模型进行数据解析,得到领域模型对应的结构化描述信息。

领域模型是指领域内的至少两个类以及至少两个类之间的关联关系的可视化表示模型,或,领域模型是对领域内的概念类或现实世界中实体类(对象)的可视化表示,用于发掘重要的业务领域概念,并建立业务领域概念之间的关系,领域模型可以整理业务中的概念以及关系,因此一般通过对领域模型开发程序,来实现业务中的业务功能,或,领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,领域模型中描述的是业务中涉及到的实体类及实体类相互之间的关系。

领域用于指示领域模型所能解决问题的范围。

类是指对实体进行抽象归类得到的。

关联关系用于表示至少两个类之间的联系。

结构化描述信息包括以实例形式描述领域模型的格式化语句。

数据解析是指将一种数据格式转换为另一种更易读的数据格式的过程,或,将一中类型数据转换为不同类型数据的方法,例如,接收数据为HTML格式,将获取的HTML格式转换为可读性更强的数据格式,比如,JSON格式、CSV格式或表格。

可选地,代码生成工具对领域模型进行数据解析的方式包括:代码生成工具自身对领域模型进行数据解析,或,代码生成工具调用插件中的数据解析插件进行数据解析,但不限于此。

在一些实施例中,领域模型用UML来表示,UML是一种用来对软件密集系统进行可视化建模的语言,可以清晰的反映出实体类之间的需求关系。

示例性地,如图5所示出的选择领域模型的示意图,以停车系统为例,在基于领域模型进行代码生成前,需要进行领域模型的选择,并填写一些相关的项目信息,项目信息包括:项目名称、项目路径、错误码的前缀、开机时的IP地址、推送路径和开启预训练深度学习模型的令牌。

示例性地,如图6所示出的对领域模型进行数据解析得到的结构化描述信息的示意图,以停车系统为例,在结构化描述信息中显示有领域模型中的实体类对应的名称、实体类对应的英文名称和生成模式。在代码生成工具对领域模型进行数据解析后,生成的结构化描述信息中的实体类对应的英文名称(未填写)和生成模式。此外,在用户界面中还显示有预训练深度学习模型对应的插件接口601,通过触发预训练深度学习模型对应的插件接口601实现对结构化描述信息中的数据进行补充。

步骤404:基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL。

代码生成工具中的预训练深度学习模型是通过插件的形式进行应用的,即,代码生成工具是使用预训练深度学习模型时,仅需调用预训练深度学习模型对应的插件接口即可。

预训练深度学习模型插件的类型包括翻译模型插件、数据解析模型插件、单侧生成模型插件中的至少一种,但不限于此,本申请实施例对此不作具体限定。

DSL包括对结构化描述信息进行数据配置后得到的受限于领域的语言。

数据配置是指对结构化描述信息中的信息进行翻译、补充、替换、修改中的至少一种操作。

示例性的,代码生成工具基于预训练深度学习模型对结构化描述信息进行数据配置,得到结构化描述信息对应的配置信息;代码生成工具将配置信息嵌入至结构化描述信息,得到DSL。

示例性地,如图7所示出的对结构化描述信息进行数据配置的示意图,以停车系统为例,在代码生成工具对领域模型进行数据解析后,在结构化描述信息中显示有领域模型中的实体类对应的名称、实体类对应的英文名称(未填写)和生成模式。此外,在用户界面中还显示有预训练深度学习模型对应的插件接口701。响应于预训练深度学习模型对应的插件接口701上的触发操作,代码生成工具基于预训练深度学习模型对结构化描述信息进行数据配置,得到结构化描述信息对应的配置信息,配置信息是指在结构化描述信息中填充的信息,比如,各个实体类的名称对应的英文名称。

配置信息是指对结构化描述信息进行补充的信息。

在一些实施例中,结构化描述信息包括实体类信息、函数信息中的至少一种。配置信息包括类配置信息、函数配置信息中的至少一种。

实体类信息是指序列图中的实体类的属性信息,比如,在领域模型为停车系统的序列图时,实体类包括停车、收费人员、车辆、车主、车辆类别、车主等级、排班、时间段、泊位、接收状态变化中的至少一种,但不限于此,本申请实施例对此不作具体限定,实体类的属性信息包括实体类变量名称、实体类生成模式和关联存储表中的至少一种。

函数信息是指序列图内的函数,比如,在领域模型为停车系统的序列图时,停车系统中的函数包括扣费函数、计时函数中的至少一种,但不限于此,本申请实施例对此不作具体限定。

将配置信息嵌入到结构化描述信息包括将配置信息与结构化描述信息进行拼接、利用配置信息替换结构化描述信息中的信息、利用配置信息补充结构化描述信息中的信息、利用配置信息修改结构化描述信息中的信息。

针对结构化描述信息中的实体类信息。

示例性地,代码生成工具基于预训练深度学习模型对实体类信息中的变量进行数据配置,得到实体类信息对应的类配置信息;代码生成工具将类配置信息嵌入到结构化描述信息,得到DSL。

实体类信息中的变量包括实体类变量名称和实体类变量类型中的至少一种。代码生成工具基于预训练深度学习模型对实体类变量名称和实体类变量类型中的至少一种进行数据配置,得到类配置信息。

可选地,结构化描述信息包括实体类信息,配置信息包括类配置信息;代码生成工具基于预训练深度学习模型对实体类变量名称进行翻译,得到实体类变量名称对应的实体类变量翻译名称,比如,将领域模型中的实体类变量名称由中文翻译为英文。

代码生成工具将实体类变量翻译名称替换结构化描述信息中的实体类变量名称,得到DSL。

可选地,实体类信息中的变量包括实体类变量类型,类配置信息包括实体类变量配置类型;代码生成工具基于预训练深度学习模型对实体类变量类型进行补充或修改,得到实体类变量类型对应的实体类变量配置类型。

实体类变量类型是指实体类对应的数据类型。

实体类变量配置类型是指实体类在预训练深度学习模型补充或修改后对应的数据类型。

代码生成工具将实体类变量配置类型补充或替换结构化描述信息中的实体类变量类型,得到DSL。

示例性地,如图8所示出的对实体类信息中的变量进行数据配置的示意图,以停车系统为例,在用户界面中还显示有预训练深度学习模型对应的插件接口801,在对结构化描述信息中的各个实体类进行数据配置后,针对每一个具体的实体类中的变量进行数据配置,在选择具体的实体类为“泊位”后,实体类“泊位”中包含成员变量和与实体类“泊位”关联的实体类。响应于预训练深度学习模型对应的插件接口801上的触发操作,代码生成工具基于预训练深度学习模型对实体类“泊位”进行数据配置,得到类配置信息。在对实体类“泊位”进行数据配置后,如图9所示出的对实体类信息进行数据配置后的示意图,实体类“泊位”对应的结构化描述信息中未填写的实体类变量英文名称和实体类变量类型均得到了补充。

需要说明的是,代码生成工具在确定类配置信息后,代码生成工具可以将实体类变量翻译名称和实体类变量配置类型中的至少一种嵌入至结构化描述信息中,得到DSL。

针对结构化描述信息中的函数信息。

示例性地,结构化描述信息包括函数信息,配置信息包括函数配置信息;代码生成工具基于预训练深度学习模型对函数信息中的变量进行数据配置,得到函数信息对应的函数配置信息;代码生成工具将函数配置信息嵌入到结构化描述信息,得到DSL。

函数信息中的变量包括函数名称、函数返回类型和函数参数类型中的至少一种。代码生成工具基于预训练深度学习模型对函数名称、函数返回类型和函数参数类型中的至少一种进行数据配置,得到函数配置信息。

函数返回类型是指函数返回的数据的数据类型。

可选地,数据类型包括整数类型、小数类型、字符类型、布尔类型中的至少一种,但不限于此,本申请实施例对此不作具体限定。

函数参数类型是指函数调用的参数的种类。比如,以停车系统为例,函数参数类型包括车牌号、车身编号中的至少一种,但不限于此,本申请实施例对此不作具体限定。

可选地,函数信息中的变量包括函数名称,函数配置信息包括函数翻译名称;代码生成工具基于预训练深度学习模型对函数名称进行翻译,得到函数翻译名称,比如,将领域模型中的函数名称由中文翻译为英文。

代码生成工具将函数翻译名称替换结构化描述信息中的函数名称,得到DSL。

可选地,函数信息中的变量包括函数返回类型,函数配置信息包括函数返回配置类型;代码生成工具基于预训练深度学习模型对领域模型中的函数返回类型进行补充或修改,得到函数返回配置类型;比如,确定函数返回的数据类型为整型变量int。

代码生成工具将函数返回配置类型补充或替换结构化描述信息中的函数返回类型,得到DSL。

可选地,函数信息中的变量包括函数参数类型,函数配置信息包括函数参数配置类型;代码生成工具基于预训练深度学习模型对领域模型中的函数参数类型进行选择,得到函数参数类型对应的函数参数配置类型;函数参数类型是指函数调用的参数的种类。比如,以停车扣费为例,选择输入的函数参数类型为车牌号。

示例性地,如图10所示出的对函数信息中的变量进行数据配置的示意图,以停车系统为例,在用户界面中还显示有预训练深度学习模型对应的插件接口1001,在对结构化描述信息中的实体类中的变量进行数据配置后,针对结构化描述信息的函数信息中的变量进行数据配置,在选择实体类为“排班”后,显示实体类“排班”对应的函数。函数中包括函数名称、函数返回类型和函数参数类型。响应于预训练深度学习模型对应的插件接口1001上的触发操作,代码生成工具基于预训练深度学习模型对函数信息中的变量进行数据配置,得到函数信息对应的函数配置信息。在对函数信息进行数据配置后,如图11所示出的对函数信息进行数据配置后的示意图,函数信息对应的结构化描述信息中未填写的函数名称、函数返回类型和函数参数类型中均得到了数据补充。

示例性地,代码生成工具在确定函数配置信息后,代码生成工具将函数配置信息嵌入至结构化描述信息中,得到DSL。

可选地,代码生成工具在确定函数配置信息后,代码生成工具将函数翻译名称、函数返回配置类型和函数参数配置类型中的至少一种嵌入至结构化描述信息中,得到DSL。

需要说明的是,DSL可以是将函数配置信息嵌入至结构化描述信息中得到的,或,将类配置信息嵌入至结构化描述信息中得到的,或,将函数配置信息和类配置信息同时嵌入至结构化描述信息中得到的,本申请实施例对此不作具体限定。

步骤406:基于DSL进行代码生成,得到领域模型对应的第一代码。

代码是指程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。

第一代码是指代码生成工具基于领域模型对应的DSL自动生成的代码。

示例性地,在确定DSL后,代码生成工具将DSL输入至代码生成工具中的代码模板进行代码生成,得到领域模型对应的第一代码。

步骤408:基于预训练深度学习模型对第一代码进行更新,得到第二代码。

第二代码是指对第一代码中的部分代码或全部代码进行更新得到的。

可选地,对第一代码中进行更新的内容包括参数填充、日志补充、监测上报补充、根据注释代码生成、优化代码中的至少一种,但不限于此,本申请实施例对此不作具体限定。

在一些实施例中,由于生成的第一代码可能不太完美,在第一代码中包括缺失的内容,可以利用预训练深度学习模型强大的推理能力对第一代码进行完善。代码生成工具基于预训练深度学习模型对第一代码进行更新,得到第二代码。

代码生成工具响应于预训练深度学习模型基于结构化描述信息和全局变量对第一代码中的待更新代码进行补充,得到第二代码。

其中,全局变量是指第一代码中的固定配置参数。

代码生成工具响应于AI模基于结构化描述信息中的函数输入参数、结构化描述信息中的实体类信息中的变量和全局变量对第一代码进行更新,得到第二代码。

其中,结构化描述信息中的函数输入参数、实体类信息中的变量可通过对领域模型进行数据解析中得到。

示例性的,如图12所示出的第一代码的示意图,以停车系统为例,在用户界面中还显示有预训练深度学习模型对应的插件接口1201,在代码生成工具将DSL输入至代码生成工具中的代码模板进行代码生成,得到领域模型对应的第一代码后,会发现生成的第一代码不太完美,在第一代码中被虚线框起来的位置出现代码缺失或错误,因此,通过实线框框选中出现代码缺失或错误的位置,响应于预训练深度学习模型对应的插件接口1201上的触发操作,代码生成工具基于预训练深度学习模型对第一代码中被实线框框选中的代码进行更新,得到更新后的第二代码。如图13所示出的第二代码的示意图,从图中可以看到:被虚线框起来的位置处的代码缺失或错误应景得到了更新。

在一些实施例中,获取领域模型,预训练深度学习模型对领域模型进行数据解析,得到领域模型对应的结构化描述信息;预训练深度学习模型直接对结构化描述信息进行代码生成,得到领域模型对应的代码。

在一些实施例中,在获取第二代码后,基于预训练深度学习模型对第二代码进行错误检查,得到第二代码中的错误代码的位置;在确定第二代码中的错误代码的位置后,基于预训练深度学习模型对第二代码中的错误代码进行自动修复,得到更新错误代码后的第二代码。

可选地,错误检查包括检查代码的引用错误(Range Error)、参数错误(ReferenceError)、语法错误(Syntax Error)、类型错误(Type Error)、编码错误(URI Error)中的至少一种,但不限于此,本申请实施例对此不作具体限定。

可选地,在确定第二代码中的错误代码的位置后,选中错误代码所在的功能代码段,基于预训练深度学习模型对功能代码段中的错误代码进行自动修复,得到更新错误代码后的第二代码。

可选地,在选中错误代码所在的功能代码段后,预训练深度学习模型结合被选中的功能代码段之外的上下文代码段,基于第二代码的运行逻辑对功能代码段中的错误代码进行自动修复,得到更新错误代码后的第二代码。

示例性地,基于预训练深度学习模型按照第二代码的运行逻辑对第二代码中的单个功能代码段依次进行错误检查;在对第二代码中的单个功能进行错误检查且单个功能代码段没有错误的情况下,基于预训练深度学习模型按照第二代码的运行逻辑对至少两个相邻的功能代码段进行错误检查,直至在运行整个第二代码时没有错误。

例如,第二代码中是由10个单一功能的功能代码段构成,根据运行逻依次运行该10个单一功能的功能代码段便可实现第二代码的功能,在检查第二代码中的错误代码时,基于预训练深度学习模型按照第二代码的运行逻辑依次运行每个功能代码段;在各个单一功能的功能代码段均运行正常的情况下,基于预训练深度学习模型按照第二代码的运行逻辑对两个相邻的功能代码段进行错误检查,即每次运行两个功能代码段,从而检测两个功能代码段之间的运行逻辑错误,比如,对功能代码段1和功能代码段2同时运行,或对功能代码段2和功能代码段3同时运行;重复上述步骤,直至一次性运行10个单一功能的功能代码段。

综上所述,本实施例提供的方法,通过对领域模型进行数据解析,得到领域模型对应的结构化描述信息;基于预训练深度学习模型对结构化描述信息进行数据配置,得到领域特定语言DSL;基于DSL进行代码生成,得到领域模型对应的第一代码。本申请通过预训练深度学习模型对领域模型对应的结构化描述信息进行数据配置,并基于结构化描述信息和数据配置后的配置信息进行代码生成,通过利用预训练深度学习模型强大的推断能力对领域模型对应的结构化描述信息进行数据补充,避免了人力对结构化描述信息进行优化调整,极大地提高了代码生成效率。

本实施例提供的方法,通过预训练深度学习模型对结构化描述信息进行数据配置,得到配置信息,并将配置信息嵌入到结构化描述信息,得到用于进行代码生成的DSL,通过利用预训练深度学习模型强大的推断能力对领域模型对应的结构化描述信息进行数据补充,避免了人力对结构化描述信息进行优化调整,提高了研发效能。

本实施例提供的方法,通过预训练深度学习模型对结构化描述信息中的实体类信息、函数信息进行补充、翻译,充分发挥了预训练深度学习模型强大的计算、推断能力,避免了人力对结构化描述信息进行填充,提高了研发效能。

本实施例提供的方法,在生成第一代码后,通过利用预训练深度学习模型对第一代码中的代码进行更新、优化,提升了代码生成工具的代码生成质量。

本实施例提供了一种低耦合、可扩张的代码生成工具的分层架构,只需要选择好领域模型,然后由预训练深度学习模型辅助生成DSL,代码生成工具基于DSL生成质量稳定的第一代码,然后继续由预训练深度学习模型进一步完善第一代码,得到第二代码。本申请充分发挥了预训练深度学习模型的强大推理功能,极大的减少了工作量,同时极大的规避了仅通过预训练深度学习模型直接生成代码造成的质量不可控的问题。

图14是本申请一个示例性实施例提供的领域模型中不同类之间的映射关系的示意图。该方法可以由代码生成工具执行。

代码生成工具的服务框架对外接口1401通用网关接口(Common GatewayInterface,CGI)进行连接,CGI是指一个服务器主机提供信息服务的标准接口。图中的,一个用例对应一个控制类1402,一个消息对应一个方法,一个类对应一个实体类1403,一个外系统对应一个边界类1404,需要存储的实体对应一个仓储类。用例是指系统中的一个功能,例如,以停车系统为例,停车系统包括停车收费功能、查账单功能、查空位功能中的至少一种,但不限于此,其中,一项功能对应一个控制类1402,在控制类1402对应的功能中包括实体类1403之间的关联关系,比如,控制类A为停车收费功能,实体类2为泊位,实体类6为停车计算费用,即,在需要实现停车收费功能时,确定停车的泊位,之后停车开始计算费用。边界类1404是指与代码生成工具外接的外系统。

上述映射关系实现为代码生成工具,如图15所示出的代码生成工具的分层结构示意图,其中协议栈1501用于定义代码生成引擎1502输入的格式化结构,例如,协议栈1501定义输入代码生成引擎1502的领域模型为图片格式。

代码生成引擎1502用于对协议栈1501规定的输入内容进行实现,代码生成引擎1502将输入的领域模型进行处理后根据需求填入到不同的模板中,生成C++、TS等代码。

引擎插件1503用于扩展代码生成引擎1502,通过为扩展代码生成引擎1502以插件形式进行扩展,比如,添加翻译插件、数据解析插件,从而使得代码生成引擎1502更灵活,支持更多的协议。最后,将代码生成引擎1502及引擎插件1503进行,得到代码生成工具1504。

图16是本申请一个示例性实施例提供的基于领域模型的代码生成框架的示意图。

开发者1601选择领域模型,例如,选择分析序列图和分析类图,在领域模型后,开发者1601填写一些生成代码所需的必要信息,例如,项目名称、项目路径、错误码的前缀、开机时的IP地址、推送路径和开启预训练深度学习模型的令牌等等。在获取领域模型后,代码生成工具1602对领域模型进行数据解析,得到领域模型对应的结构化描述信息。由于数据解析是抽象的,功能设计的是具体的,领域模型承载的信息不足以直接生成代码,因此需要人工补充信息。由于代码生成工具1602的分层架构是可扩展的,可以基于预训练深度学习模型1603提供的接口和代码生成引擎进行,添加至少一个的A插件辅助“人”来完成信息补充工作,减少人的工作量。

预训练深度学习模型1603对结构化描述信息进行数据配置,得到结构化描述信息对应的配置信息;预训练深度学习模型1603基于结构化描述信息和配置信息进行组合,得到DSL。

在获得DSL的情况下,代码生成工具1602基于DSL进行代码生成,得到领域模型对应的第一代码。

第三步生成的第一代码大多数是头文件定义、框架代码,很多函数实现并没有生成,原因是生成函数实现需要“人”补充大量的信息,这样和直接写代码效率提升并不明显,甚至直接写代码甚至比在工具配置后生成代码效率更高。因此继续交给预训练深度学习模型1603来完善代码,让预训练深度学习模型1603来生成第二代码。

在预训练深度学习模型1603来生成第二代码的过程中,代码生成工具1602基于函数的入参、类的成员变量以及全局变量对第一代码中的待更新代码进行补充,得到第二代码。结构化描述信息中的函数输入参数、实体类信息中的变量可通过对领域模型进行数据解析中得到。全局变量是指第一代码中的固定配置参数。预训练深度学习模型1603来生成第二代码的过程中需要实体类方法、边界类方法、基础库。由于在DSL生成第一代码后已经有了实体类方法的头文件,且已经将所有的外系统接口为边界类方法并且进行统一管理,因此边界类方法也可以很方便的得到;而且对于基础库预训练深度学习模型1603可以推导出使用正确的方法无需输入。也就是说,第一代码中的待更新代码,可以根据领域模型中的上下文信息生成。

比如,以停车系统为例,在停车收费功能下包括来车阶段和走车阶段,来车阶段和走车阶段的代码逻辑均归属于停车收费功能下,因此在更新走车阶段的代码时,预训练深度学习模型1603可基于停车收费功能中的其他内容信息进行更新。

上述实施例对预训练深度学习模型辅助代码生成工具基于领域模型生成代码的方法进行了描述,接下来将就预训练深度学习模型进行描述。

预训练深度学习模型的结构包括输入层、隐藏层和输出层。输入层接受输入数据,隐藏层处理数据并逐渐将其转化为分类或者输出,最后输出层将结果呈现出来。

具体来说,输入层通常由一组神经元组成,每个神经元可以接收数据或特征。隐藏层可以有多个,每层包括多个神经元,它们可以对输入层的数据进行处理,提取特征等。输出层通常也由一组神经元组成,每个神经元对应一个输出,例如分类结果或者数值预测。

可选地,预训练深度学习模型包括卷积神经网络(Convolutional NeuralNetwork,CNN)、循环神经网络(Recurrent Neural Network,RNN)、生成模型(GenerativeAdversarial Networks,GANs、聊天生成预训练变压器(Chat Generative Pre-trainedTransformer,ChatGPT)、生成预训练变压器(Generative Pre-trained Transformer,GPT)中的至少一种,但不限于此,本申请实施例对此不作具体限定。

在解决上述技术问题中,采用预训练深度学习模型辅助代码生成平台进行代码的生成,接下来将就预训练深度学习模型的训练方法进行描述,预训练深度学习模型的训练方法由计算机设备执行。

计算机设备获取领域模型对应的结构化描述信息和标定配置信息;基于预训练深度学习模型对结构化描述信息进行数据配置,得到结构化描述信息对应的配置信息;基于配置信息和标定配置信息进行计算,得到训练损失函数值;计算机设备基于训练损失函数值对预训练深度学习模型的网络参数进行更新。标定配置信息是指人为标定的结构化描述信息对应的配置信息,或,标定配置信息是指用于评估预训练深度学习模型的数据配置能力的配置信息,或,标定配置信息是指结构化描述信息中理想的填充信息。

训练损失是指标定配置信息与预训练深度学习模型配置的配置信息的差异值,通过训练损失来衡量预训练深度学习模型的预测精确度性能。

模型参数更新是指对预训练深度学习模型里面的网络参数进行更新,或对预训练深度学习模型里面的各个网络模块的网络参数进行更新,或对预训练深度学习模型里面的各个网络层的网络参数进行更新,但不限于此,本申请实施例对此不作限定。

基于损失函数值,将损失函数值作为训练指标对预训练深度学习模型中的模型参数进行更新,直至损失函数值发生收敛,从而得到训练完成的预训练深度学习模型。

损失函数值发生收敛是指损失函数值不再发生改变,或,预训练深度学习模型训练时相邻两次迭代之间的误差差别小于预设值,或,预训练深度学习模型的训练次数达到预设次数中的至少一种,但不限于此,本申请实施例对此不作限定。

可选的,训练满足的目标条件可以为初始模型的训练迭代次数达到目标次数,技术人员可以预先设定训练迭代次数。或者,训练满足的目标条件可以为损失值满足目标阈值条件,如损失值小于0.00001,但不限于此,本申请实施例对此不作限定。

在一些实施例中,结构化描述信息包括实体类信息,配置信息包括类配置信息,标定配置信息包括标定类配置信息;计算机设备基于预训练深度学习模型对实体类信息中的变量进行数据配置,得到实体类信息对应的类配置信息;基于类配置信息和标定类配置信息进行计算,得到第一训练损失函数值。

在一些实施例中,结构化描述信息包括函数信息,配置信息包括函数配置信息,标定配置信息包括标定函数配置信息;计算机设备基于预训练深度学习模型对函数信息中的变量进行数据配置,得到函数信息对应的函数配置信息;基于函数配置信息和标定函数配置信息进行计算,得到第二训练损失函数值。

计算机设备基于第一训练损失函数值和/或第二训练损失函数值对预训练深度学习模型的网络参数进行更新。

可选地,实体类信息中的变量包括实体类变量名称、实体类变量类型中的至少一种,但不限于此。

可选地,函数信息中的变量包括函数名称、函数返回类型、函数参数类型中的至少一种,但不限于此。

图17示出了本申请一个示例性实施例提供的基于领域模型的代码生成装置的结构示意图。该装置可以通过软件、硬件或者两者的结合实现成为计算机设备的全部或一部分,该装置包括以下模块。

数据解析模块1701,用于对领域模型进行数据解析,得到所述领域模型对应的结构化描述信息,所述领域模型用于表示领域内的至少两个类以及所述至少两个类之间的关联关系,所述结构化描述信息包括以实例形式描述所述领域模型的格式化语句。

数据配置模块1702,用于基于预训练深度学习模型对所述结构化描述信息进行数据配置,得到领域特定语言DSL,所述DSL包括对所述结构化描述信息进行数据配置后得到的受限于所述领域的语言。

代码生成模块1703,用于基于所述DSL进行代码生成,得到所述领域模型对应的第一代码。

在一些实施例中,数据配置模块1702,用于基于所述预训练深度学习模型对所述结构化描述信息进行所述数据配置,得到所述结构化描述信息对应的配置信息,所述配置信息是指对所述结构化描述信息进行补充的信息;将所述配置信息嵌入至所述结构化描述信息中,得到所述DSL。

在一些实施例中,所述结构化描述信息包括实体类信息,所述配置信息包括类配置信息;数据配置模块1702,用于基于所述预训练深度学习模型对所述实体类信息中的变量进行所述数据配置,得到所述实体类信息对应的所述类配置信息。

在一些实施例中,所述实体类信息中的变量包括实体类变量名称,所述类配置信息包括实体类变量翻译名称;数据配置模块1702,用于基于所述预训练深度学习模型对所述实体类变量名称进行翻译,得到所述实体类变量名称对应的所述实体类变量翻译名称。

在一些实施例中,数据配置模块1702,用于将所述实体类变量翻译名称替换所述结构化描述信息中的所述实体类变量名称,得到所述DSL。

在一些实施例中,所述实体类信息中的变量包括实体类变量类型,所述类配置信息包括实体类变量配置类型;数据配置模块1702,用于基于所述预训练深度学习模型对所述实体类变量类型进行补充或修改,得到所述实体类变量类型对应的所述实体类变量配置类型。

其中,所述实体类变量类型是指实体类变量对应的数据类型;所述实体类变量配置类型是指所述实体类在所述预训练深度学习模型补充或修改后对应的数据类型。

在一些实施例中,数据配置模块1702,用于将所述实体类变量配置类型补充或替换所述结构化描述信息中的所述实体类变量类型,得到所述DSL。

在一些实施例中,所述结构化描述信息包括函数信息,所述配置信息包括函数配置信息;数据配置模块1702,用于基于所述预训练深度学习模型对所述函数信息中的变量进行所述数据配置,得到所述函数信息对应的所述函数配置信息。

在一些实施例中,所述函数信息中的变量包括函数名称,所述函数配置信息包括函数翻译名称;数据配置模块1702,用于基于所述预训练深度学习模型对所述函数名称进行翻译,得到所述函数名称对应的所述函数翻译名称。

在一些实施例中,数据配置模块1702,用于将所述函数翻译名称替换所述结构化描述信息中的所述函数名称,得到所述DSL。

在一些实施例中,所述函数信息中的变量包括函数返回类型,所述函数配置信息包括函数返回配置类型;数据配置模块1702,用于基于所述预训练深度学习模型对所述函数返回类型进行补充或修改,得到所述函数返回类型对应的所述函数返回配置类型。

其中,所述函数返回类型是指函数返回的数据的数据类型。

在一些实施例中,数据配置模块1702,用于将所述函数返回配置类型补充或替换所述结构化描述信息中的所述函数返回类型,得到所述DSL。

在一些实施例中,所述函数信息中的变量包括函数参数类型,所述函数配置信息包括函数参数配置类型;数据配置模块1702,用于基于所述预训练深度学习模型对所述函数参数类型进行选择,得到所述函数参数类型对应的所述函数参数配置类型。

其中,所述函数参数类型是指函数调用的参数的种类。

在一些实施例中,数据配置模块1702,用于将所述函数参数配置类型补充至所述结构化描述信息中的所述函数参数类型,得到所述DSL。

在一些实施例中,代码生成模块1703,用于基于所述预训练深度学习模型对所述第一代码进行更新,得到第二代码。

其中,所述第二代码是指对所述第一代码进行更新后得到的代码。

在一些实施例中,代码生成模块1703,用于响应于所述预训练深度学习模型基于所述结构化描述信息和全局变量对所述第一代码中的待更新代码进行补充,得到所述第二代码。

其中,所述全局变量是指所述第一代码中的固定配置参数。

在一些实施例中,代码生成模块1703,用于响应于所述预训练深度学习模型基于所述结构化描述信息中的函数输入参数、所述结构化描述信息中的实体类信息中的变量和所述全局变量中的至少一种对所述第一代码中的所述待更新代码进行补充,得到所述第二代码。

图18示出了本申请一示例性实施例示出的计算机设备1800的结构框图。该计算机设备可以实现为本申请上述方案中的服务器。所述图像计算机设备1800包括中央处理单元(Central Processing Unit,CPU)1801、包括随机存取存储器(Random Access Memory,RAM)1802和只读存储器(Read-Only Memory,ROM)1803的系统存储器1804,以及连接系统存储器1804和中央处理单元1801的系统总线1805。所述图像计算机设备1800还包括用于存储操作系统1809、应用程序1810和其他程序模块1811的大容量存储设备1806。

所述大容量存储设备1806通过连接到系统总线1805的大容量存储控制器(未示出)连接到中央处理单元1801。所述大容量存储设备1806及其相关联的计算机可读介质为图像计算机设备1800提供非易失性存储。也就是说,所述大容量存储设备1806可以包括诸如硬盘或者只读光盘(Compact Disc Read-Only Memory,CD-ROM)驱动器之类的计算机可读介质(未示出)。

不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、可擦除可编程只读寄存器(Erasable Programmable Read Only Memory,EPROM)、电子抹除式可复写只读存储器(Electrically-Erasable Programmable Read-Only Memory,EEPROM)闪存或其他固态存储其技术,CD-ROM、数字多功能光盘(Digital Versatile Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1804和大容量存储设备1806可以统称为存储器。

根据本公开的各种实施例,所述图像计算机设备1800还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即图像计算机设备1800可以通过连接在所述系统总线1805上的网络接口单元1807连接到网络1808,或者说,也可以使用网络接口单元1807来连接到其他类型的网络或远程计算机系统(未示出)。

所述存储器还包括至少一段计算机程序,所述至少一段计算机程序存储于存储器中,中央处理器1801通过执行该至少一段程序来实现上述各个实施例所示的基于领域模型的代码生成方法中的全部或部分步骤。

本申请实施例还提供一种计算机设备,该计算机设备包括处理器和存储器,该存储器中存储有至少一条程序,该至少一条程序由处理器加载并执行以实现上述各方法实施例提供的基于领域模型的代码生成方法。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现上述各方法实施例提供的基于领域模型的代码生成方法。

本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机程序由计算机设备的处理器从所述计算机可读存储介质读取并执行,使得所述计算机设备执行以实现上述各方法实施例提供的基于领域模型的代码生成方法。

可以理解的是,在本申请的具体实施方式中,涉及到的数据,历史数据,以及画像等与用户身份或特性相关的用户数据处理等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。

应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同切换、改进等,均应包含在本申请的保护范围之内。

相关技术
  • 基于网页标签的产品数据推送方法、装置、设备及介质
  • 基于区块链的理财产品推荐方法、装置、介质及电子设备
  • 基于模板的产品构建方法、装置、计算机设备及存储介质
  • 基于模型的产品构建方法、装置、计算机设备及存储介质
  • 基于图表的产品构建方法、装置、计算机设备及存储介质
  • 生成领域模型的方法、装置、设备、存储介质及程序产品
  • 一种代码生成方法、装置、计算机设备、存储介质及产品
技术分类

06120116140773