CN117950671A - 代码生成方法、装置、电子设备及存储介质 - Google Patents

代码生成方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117950671A
CN117950671A CN202311245949.3A CN202311245949A CN117950671A CN 117950671 A CN117950671 A CN 117950671A CN 202311245949 A CN202311245949 A CN 202311245949A CN 117950671 A CN117950671 A CN 117950671A
Authority
CN
China
Prior art keywords
code
target
description information
logic
grammar
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.)
Pending
Application number
CN202311245949.3A
Other languages
English (en)
Inventor
程世军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mashang Consumer Finance Co Ltd
Original Assignee
Mashang Consumer Finance Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mashang Consumer Finance Co Ltd filed Critical Mashang Consumer Finance Co Ltd
Priority to CN202311245949.3A priority Critical patent/CN117950671A/zh
Publication of CN117950671A publication Critical patent/CN117950671A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供了一种代码生成方法、装置、电子设备及存储介质;方法包括:获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;对逻辑描述信息进行编译得到初始代码,并在初始代码中添加记录代码,得到候选代码;运行候选代码,得到候选代码的运行结果;若运行结果指示候选代码未实现目标逻辑功能,则从运行结果中提取候选代码的代码运行状态,运行状态是通过候选代码中的记录代码所记录的;基于代码运行状态对逻辑描述信息进行调整,得到目标描述信息,并对目标描述信息进行编译,得到能实现目标逻辑功能的目标代码。通过本申请,能够有效提高代码的生成效率。

Description

代码生成方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码生成方法、装置、电子设备及存储介质。
背景技术
互联网特别是移动互联网的快速发展,种类繁多的应用程序应运而生,各式各样的应用程序通过相应的代码实现其自身功能,代码的质量直接决定了应用程序的稳定性和可靠性。
相关技术中,对于代码的生成,通常是通过编程人员直接针对代码进行编写,并对编写完成的代码进行反复测试调优,以得到能够实现目标逻辑功能的代码,这样由于代码编写和测试调优会耗费大量时间,导致代码的生成效率较低。
发明内容
本申请实施例提供一种代码生成方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够有效提高代码的生成效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种代码生成方法,包括:
获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;
对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;
运行所述候选代码,得到所述候选代码的运行结果;
若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;
基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
本申请实施例提供一种代码生成装置,包括:
获取模块,用于获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;
编译运行模块,用于对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;运行所述候选代码,得到所述候选代码的运行结果;
提取模块,用于若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;
调整模块,用于基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
本申请实施例提供一种电子设备,包括:
存储器,用于存储计算机可执行指令或者计算机程序;
处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现本申请实施例提供的代码生成方法。
本申请实施例提供一种计算机可读存储介质,存储有计算机可执行指令,用于引起处理器执行时,实现本申请实施例提供的代码生成方法。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机可执行指令,处理器执行该计算机可执行指令,使得该电子设备执行本申请实施例上述的代码生成方法。
本申请实施例具有以下有益效果:
通过获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码,并在逻辑描述信息对应的初始代码中添加记录代码,运行所得到的候选代码,得到候选代码的运行结果,若运行结果指示候选代码未实现目标逻辑功能时,基于记录代码所记录得到的候选代码的代码运行状态,对逻辑描述信息进行调整,以得到能够实现目标逻辑功能的目标代码。如此,通过对候选代码的运行状态进行记录,在候选代码未实现目标逻辑功能时,通过代码运行状态,能够快速准确的确定逻辑描述信息导致的候选代码未实现目标逻辑功能的原因,以对逻辑描述信息进行精准调整,最终能够实现目标逻辑功能的目标代码,从而有效提高了代码的生成效率。
附图说明
图1是本申请实施例提供的代码生成系统的架构示意图;
图2是本申请实施例提供的用于生成代码的电子设备的结构示意图;
图3至图8是本申请实施例提供的代码生成方法的流程示意图;
图9是本申请实施例提供的代码生成方法的原理示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)代码(Code):是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。源代码是代码的分支,某种意义上来说,源代码相当于代码。现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。源代码是相对目标代码和可执行代码而言的。源代码就是用汇编语言和高级语言写出来的地代码。目标代码是指源代码经过编译程序产生的能被Cpu直接识别二进制代码。可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。
2)编译:利用编译程序从源语言编写的源程序产生目标程序的过程。用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。
3)逻辑描述信息:逻辑描述信息是指用于描述逻辑功能的信息,逻辑描述信息包括逻辑描述文本、逻辑描述语音、逻辑描述图等各种形式的用于描述逻辑功能的信息。
在本申请实施例的实施过程中,申请人发现相关技术存在以下问题:
相关技术中,对于代码的生成,通常是通过编程人员直接针对代码进行编写,并对编写完成的代码进行反复测试调优,以得到能够实现目标逻辑功能的代码,这样由于代码编写和测试调优会耗费大量时间,导致代码的生成效率较低。
本申请实施例提供一种代码生成方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够有效提高代码的生成效率,下面说明本申请实施例提供的代码生成系统的示例性应用。
参见图1,图1是本申请实施例提供的代码生成系统100的架构示意图,终端(示例性示出了终端400)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
终端400用于供用户使用客户端410,在图形界面410-1(示例性示出了图形界面410-1)显示目标代码。终端400和服务器200通过有线或者无线网络相互连接。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能电视、智能手表、车载终端等,但并不局限于此。本申请实施例提供的电子设备可以实施为终端,也可以实施为服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
在一些实施例中,服务器200获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码,对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;运行所述候选代码,得到所述候选代码的运行结果;若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码,并将目标代码发送至终端400。
在另一些实施例中,服务器200获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码,将记录代码和逻辑描述信息发送至终端400,终端400对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;运行所述候选代码,得到所述候选代码的运行结果;若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码,并将目标代码发送至服务器200。
在另一些实施例中,本申请实施例可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源。
参见图2,图2是本申请实施例提供的用于生成代码的电子设备500的结构示意图,其中,图2所示出的电子设备500可以是图1中的服务器200或者终端400,图2所示的电子设备500包括:至少一个处理器430、存储器450、至少一个网络接口420。电子设备500中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。
处理器430可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器430的一个或多个存储设备。
存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Me mory),易失性存储器可以是随机存取存储器(RAM,Random Access Memor y)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。
在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他电子设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi,Wireless Fidelity)、和通用串行总线(USB,Universal Serial Bus)等。
在一些实施例中,本申请实施例提供的代码生成装置可以采用软件方式实现,图2示出了存储在存储器450中的代码生成装置455,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块4551、编译运行模块4552、提取模块4553、调整模块4554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的代码生成装置可以采用硬件方式实现,作为示例,本申请实施例提供的代码生成装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的代码生成方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Progra mmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmabl e Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
在一些实施例中,终端或服务器可以通过运行计算机程序或计算机可执行指令来实现本申请实施例提供的代码生成方法。举例来说,计算机程序可以是操作系统中的原生程序(例如,专用的代码生成程序)或软件模块,例如,可以嵌入到任意程序(如即时通信客户端、相册程序、电子地图客户端、导航客户端)中的代码生成模块;例如可以是本地(Native)应用程序(APP,Applic ation),即需要在操作系统中安装才能运行的程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
将结合本申请实施例提供的服务器或终端的示例性应用和实施,说明本申请实施例提供的代码生成方法。
参见图3,图3是本申请实施例提供的代码生成方法的流程示意图,将结合图3示出的步骤101至步骤105进行说明,本申请实施例提供的代码生成方法可以由服务器或终端单独实施,或者由服务器及终端协同实施,下面将以服务器单独实施为例进行说明。
在步骤101中,获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码。
在一些实施例中,逻辑描述信息为用于描述目标逻辑功能的信息,逻辑描述信息是指用于描述逻辑功能的信息,逻辑描述信息包括逻辑描述文本、逻辑描述语音、逻辑描述图等各种形式的用于描述逻辑功能的信息。
在一些实施例中,上述记录代码为具有记录代码运行状态功能的代码段,记录代码通常需要附着于主代码运行,记录代码用于记录主代码的代码运行状态。
在一些实施例中,在上述步骤101之后,还可以通过如下方式对逻辑描述信息进行语法校验:对所述逻辑描述信息进行语法校验得到所述逻辑描述信息的语法校验结果;若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述逻辑描述信息进行语法修改,得到参考描述信息。
在一些实施例中,语法校验结果用于指示所述逻辑描述信息是否存在语法错误,语法校验,是用于验证信息是否具有语法错误的信息校验手段。
在一些实施例中,通过对存在语法错误的逻辑描述信息进行语法校验,所得到的参考描述信息能够在保留逻辑描述信息的目标逻辑功能的同时,对逻辑描述信息的语法错误进行修正,有效提高了生成代码的准确性。
在一些实施例中,上述对所述逻辑描述信息进行语法校验得到所述逻辑描述信息的语法校验结果,可以通过如下方式实现:获取标准语法规则,并对所述逻辑描述信息进行语法规则解析,得到所述逻辑描述信息的语法规则;若所述语法规则与所述标准语法规则不同,则生成所述逻辑描述信息存在所述语法错误的语法校验结果;若所述语法规则与所述标准语法规则相同,则生成所述逻辑描述信息不存在所述语法错误的语法校验结果。
在一些实施例中,所述第一校验结果,用于指示所述逻辑描述信息存在所述语法错误,所述第二校验结果,用于指示所述逻辑描述信息不存在所述语法错误。
在一些实施例中,标准语法规则,用于规范化定义语法的规则,标准语法规则中包括多条子标准规则,各子标准规则用于从相应的规则维度对语法进行规范化定义。
在一些实施例中,通过将逻辑描述信息的语法规则,与标准语法规则中的各子标准规则进行对比,得到各子标准规则的对比结果,子标准规则的对比结果,用于指示逻辑描述信息的语法规则中是否存在与子标准规则相同的语法规则,当各子标准规则的对比结果,存在至少一条指示逻辑描述信息的语法规则中不存在与子标准规则相同的语法规则时,则说明语法规则与标准语法规则不同,则生成所述逻辑描述信息不存在所述语法错误的语法校验结果,当各子标准规则的对比结果,均指示逻辑描述信息的语法规则中存在与子标准规则相同的语法规则时,则说明语法规则与所述标准语法规则相同,则生成所述逻辑描述信息不存在所述语法错误的语法校验结果。
如此,通过对存在语法错误的逻辑描述信息进行语法校验所得到的参考描述信息能够在保留逻辑描述信息的目标逻辑功能的同时,对逻辑描述信息的语法错误进行修正,有效提高了生成代码的准确性。
在步骤102中,对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码。
在一些实施例中,上述初始代码是逻辑描述信息对应的机器语言,候选代码包括初始代码和记录代码。
在一些实施例中,编译是利用编译程序从源语言编写的源程序产生目标程序的过程。用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。
在一些实施例中,参见图4,图4是本申请实施例提供的代码生成方法的流程示意图,图3所示出的步骤102可以通过图4所示出的步骤1021至步骤1022实现。
在步骤1021中,获取用于指示所述目标逻辑功能的代码标识符,并查询所述代码标识符在所述初始代码中的目标位置。
作为示例,当初始代码为“123456789”时,用于指示目标逻辑功能的代码标识符可以为“6”,代码标识符在初始代码中的目标位置可以为第6位。
在一些实施例中,上述步骤1021可以通过如下方式实现:针对所述初始代码中的每个字符,获取所述所述字符在所述初始代码中的位置,并将所述字符与所述代码标识符进行比较,得到比较结果;若所述比较结果指示所述字符与所述代码标识符相同,则将所述字符在所述初始代码中的位置,确定为所述目标位置。
承接上例,获取所述初始代码中的各所述字符分别在所述初始代码中的位置,例如,字符1在初始代码中的第1位置,字符2在初始代码中的第2位置,字符3在初始代码中的第3位置,字符4在初始代码中的第4位置,字符5在初始代码中的第5位置,字符6在初始代码中的第6位置,字符7在初始代码中的第7位置,字符8在初始代码中的第8位置,字符9在初始代码中的第9位置,将初始代码中的字符与代码标识符进行比较,得到各字符对应的比较结果;若比较结果指示字符(例如字符6)与代码标识符(字符6)相同,则将所述字符在所述初始代码中的第6位置,确定为所述目标位置。
如此,通过查询代码标识符在初始代码中的目标位置,从而在初始代码中,找到了添加记录代码的靶点,便于后续在靶点处添加记录代码,通过记录代码能够对靶点处的目标逻辑功能的实现进行检测,从而准确的确定出候选代码是否能够实现目标逻辑功能。
在步骤1022中,在所述初始代码中的所述目标位置处,添加所述记录代码,得到所述候选代码。
承接上例,目标位置为初始代码中的第6位置,在初始代码中的第6位置处,添加记录代码“asdf”,得到候选代码“12345asdf6789”。
如此,通过查询代码标识符在初始代码中的目标位置,从而在初始代码中,找到了添加记录代码的靶点,便于后续在靶点处添加记录代码,通过记录代码能够对靶点处的目标逻辑功能的实现进行检测,从而准确的确定出候选代码是否能够实现目标逻辑功能。
在一些实施例中,上述对逻辑描述信息进行编译得到初始代码,可以通过如下方式实现:若所述语法校验结果指示所述逻辑描述信息不存在语法错误,则对所述逻辑描述信息进行编译,得到所述初始代码;若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述参考描述信息进行编译,得到所述初始代码。
在一些实施例中,若所述语法校验结果指示所述逻辑描述信息不存在语法错误,则直接对逻辑描述信息进行编译就能够实现成功编译,若语法校验结果指示逻辑描述信息存在语法错误,可以对不存在逻辑错误的参考描述信息进行编译,得到初始代码。
如此,通过语法校验结果是否指示逻辑描述信息不存在语法错误,对逻辑描述信息或者参考描述信息进行编译,有效保证了编译的成功率,从而有效提高了代码的生成效率。
在步骤103中,运行所述候选代码,得到所述候选代码的运行结果。
在一些实施例中,上述步骤103可以通过如下方式实现:获取用于测试所述候选代码的输入参数,并基于所述输入参数,运行所述候选代码,得到所述候选代码针对所述输入参数的运行结果。
在一些实施例中,候选代码的输入参数用于测试候选代码是否能够实现目标逻辑功能,输入参数的运行结果用于指示候选代码是否能够实现所述目标逻辑功能。
在一些实施例中,在运行候选代码,得到候选代码的运行结果之后,还可以执行如下处理:获取所述目标逻辑功能针对所述输入参数的标准处理结果;结合所述标准处理结果和所述运行结果,确定所述运行结果的指示信息。
在一些实施例中,所述指示信息,用于指示所述候选代码是否能够实现所述目标逻辑功能。
在一些实施例中,上述结合标准处理结果和所述运行结果,确定所述运行结果的指示信息,可以通过如下方式实现:若所述标准处理结果与所述运行结果不同,则生成所述候选代码不能够实现所述目标逻辑功能的指示信息;若所述标准处理结果与所述运行结果相同,则生成所述候选代码能够实现所述目标逻辑功能的指示信息。
在一些实施例中,所述第一指示信息,用于指示所述候选代码未实现所述目标逻辑功能,所述第二指示信息,用于指示所述候选代码能够实现所述目标逻辑功能。
如此,通过获取用于测试候选代码的输入参数,并基于输入参数,运行候选代码,得到候选代码针对输入参数的运行结果,从而准确的确定出候选代码是否能够实现目标逻辑功能,从而确定是否需要对逻辑描述信息进行调整,以确定能够得到能够实现目标逻辑功能的代码,从而有效提高了生成代码的准确性。
在步骤104中,若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的。
在一些实施例中,代码运行状态用于客观反映记录代码所记录得到的候选代码的运行状态。
在一些实施例中,运行结果包括记录代码的第一运行结果,以及初始代码的第二运行结果,第一运行结果用于对初始代码的运行过程进行记录,第一运行结果就是运行记录代码所记录得到的候选代码的代码运行状态。
在一些实施例中,所述代码运行状态包括N个子运行状态,所述目标逻辑功能包括N个子逻辑功能,N个所述子运行状态与所述N个子逻辑功能一一对应,所述逻辑描述信息包括用于描述各子逻辑功能的子描述信息。
在一些实施例中,若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则所述N个子运行状态中目标子状态,所述目标子状态用于指示所述候选代码不能实现目标子逻辑功能;所述目标子状态与所述目标子逻辑功能是对应的。
在一些实施例中,若所述运行结果指示所述候选代码能够实现所述目标逻辑功能,则所述代码运行状态的各所述子运行状态,均指示所述候选代码能够实现相应的子逻辑功能的目标子状态。
如此,从所述运行结果中提取通过运行所述记录代码所记录得到的所述候选代码的代码运行状态,便于后续通过代码运行状态,对逻辑描述信息进行调整,得到目标描述信息,以基于目标描述信息确定出准确的能够实现目标逻辑功能的目标代码,从而有效提高了代码生成的准确性。
在步骤105中,基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
在一些实施例中,若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则说明所述代码运行状态的各所述子运行状态中,存在至少一个指示所述候选代码不能实现相应的子逻辑功能的目标子状态,则说明逻辑描述信息对应的目标子描述信息存在逻辑描述错误,此时可以针对性的仅对存在逻辑描述错误的目标子描述信息进行调整,以纠正目标子描述信息的逻辑描述错误,无需对全量的子描述信息进行调整,从而有效提高了代码的生成效率。
在一些实施例中,参见图5,图5是本申请实施例提供的代码生成方法的流程示意图,图3所示出的步骤105中的基于所述代码运行状态,对所述逻辑描述信息进行调整,得到目标描述信息可以通过图5所示出的步骤1051至步骤1052实现。
在步骤1051中,从所述逻辑描述信息的子描述信息中,确定各所述目标子状态对应的目标子描述信息。
在一些实施例中,上述步骤1051可以通过如下方式实现:针对逻辑描述信息中的各子描述信息分别执行以下处理:当子描述信息对应的子状态指示候选代码不能实现相应的子逻辑功能时,将子描述信息确定为目标子描述信息。
在步骤1052中,对所述逻辑描述信息中的所述目标子描述信息进行调整,得到所述目标描述信息。
在一些实施例中,上述步骤1052可以通过如下方式实现:响应于针对逻辑描述信息中的目标子描述信息的调整操作,对所述逻辑描述信息中的所述目标子描述信息进行调整,得到所述目标描述信息。
如此,若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则说明所述代码运行状态的各所述子运行状态中,存在至少一个指示所述候选代码不能实现相应的子逻辑功能的目标子状态,则说明逻辑描述信息对应的目标子描述信息存在逻辑描述错误,此时可以针对性的仅对存在逻辑描述错误的目标子描述信息进行调整,以纠正目标子描述信息的逻辑描述错误,无需对全量的子描述信息进行调整,从而有效提高了代码的生成效率。
在一些实施例中,在得到上述目标描述信息之后,还可以通过如下方式确定目标代码:对所述目标描述信息进行语法校验得到所述目标描述信息的语法校验结果;若所述目标描述信息的语法校验结果指示所述目标描述信息存在语法错误,则对所述目标描述信息进行语法修改,对修改后的目标描述信息进行编译,得到所述目标代码。
在一些实施例中,在一些实施例中,语法校验结果用于指示所述目标描述是否存在语法错误,语法校验,是用于验证信息是否具有语法错误的信息校验手段。
在一些实施例中,通过对存在语法错误的目标描述信息进行语法校验,所得到的参考描述信息能够在保留目标描述信息的目标逻辑功能的同时,对目标描述信息的语法错误进行修正,有效提高了生成代码的准确性。
在一些实施例中,上述对目标描述信息进行语法校验得到所述目标描述信息的语法校验结果,可以通过如下方式实现:获取标准语法规则,并对所述目标描述信息进行语法规则解析,得到所述目标描述信息的语法规则;若所述语法规则与所述标准语法规则不同,则生成所述逻辑描述信息存在所述语法错误的语法校验结果;若所述语法规则与所述标准语法规则相同,则将生成所述逻辑描述信息不存在所述语法错误的语法校验结果。
在一些实施例中,上述对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码,可以通过如下方式实现:若所述目标描述信息的语法校验结果指示所述目标描述信息不存在语法错误,则对所述目标描述信息进行编译,得到所述目标代码;若所述目标描述信息的语法校验结果指示所述目标描述信息存在语法错误,则对修改后的目标描述信息进行编译,得到所述目标代码。
如此,通过对存在语法错误的参考描述信息进行语法校验,所得到的目标描述信息能够在保留参考描述信息的目标逻辑功能的同时,对逻辑描述信息的语法错误进行修正,有效提高了生成代码的准确性。
在一些实施例中,上述对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码之后,还可以通过如下方式得到目标运行结果:响应于针对目标逻辑功能的触发操作,获取待处理参数;基于所述待处理参数,运行所述目标代码,得到所述目标代码针对所述待处理参数的目标运行结果。
在一些实施例中,上述响应于针对目标逻辑功能的触发操作,获取待处理参数,可以通过如下方式实现:响应于针对指示目标逻辑功能的功能控件或功能图标的触发操作,显示参数输入栏,接收针对参数输入栏的参数输入操作,生成所输入参数输入栏的待处理参数,上述目标逻辑功能是针对待处理参数进行功能处理的过程,目标运行结果用于指示待处理参数执行目标逻辑功能之后的处理结果。
在一些实施例中,目标运行结果和待处理参数之间的映射关系符合目标逻辑功能所指示的逻辑映射关系。
作为示例,当待处理参数x为12,目标逻辑功能为y=x+1时,对应的处理结果为y=13。
如此,通过获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码,并在逻辑描述信息对应的初始代码中添加记录代码,运行所得到的候选代码,得到候选代码的运行结果,若运行结果指示候选代码不能够实现目标逻辑功能时,基于记录代码所记录得到的候选代码的代码运行状态,对逻辑描述信息进行调整,以得到能够实现目标逻辑功能的目标代码。如此,通过对候选代码的运行状态进行记录,在候选代码未实现目标逻辑功能时,通过代码运行状态,能够快速准确的确定逻辑描述信息导致的候选代码未实现目标逻辑功能的原因,以对逻辑描述信息进行精准调整,最终能够实现目标逻辑功能的目标代码,从而有效提高了代码的生成效率。
下面,将说明本申请实施例在一个实际的代码生成的应用场景中的示例性应用。
通常业务系统都会存在灵活可变的逻辑,例如积分规则要求(以下V,K,P,S均为特征变量,X1,Y1,X2,Y2均为具体参数值):当客户会员类型(V)为普通会员时,本次消费额(P)满(X1)元,会员积分(S)按本次按消费额(P)*(Y1)%进行积分,本次消费额(P)满(X2)元,会员积分(S)按本次消费额(P)*(Y2)%进行积分。当客户会员类型为VIP会员时,本次消费额(P)满(X1)元,会员积分(S)按本次消费额(P)*(Y1+会员类型系数(K))%进行积分,本次消费额(P)满(X2)元按本次消费额(P)*(Y2+会员类型系数(K))%进行积分。通常这样的需求对于开发和测试并不难,但是对于类似的业务需求,经常变动参数值而要求调整业务逻辑,或者随着规则条目的增多要求满足更加灵活的业务逻辑时,往往需要开发人员对代码实现的规则逻辑进行修改,之后需要测试人员对修改之前的逻辑进行回归测试,对于修改后的逻辑进行功能测试,最后还需要运维人员对系统进行升级发布,可想而知这会耗费很大的人力。
因此应对类似以上的这种灵活多变的业务需求,通常都会使用规则策略进行实现,让系统维护人员或者决策分析人员可以在不需要开发人员对代码进行改动,也不需要对系统进行功能升级、发布的前提下进行灵活调整,而同样满足业务需求。
此外,以上虽然使用了决策规则引擎来实现了灵活规则的调整来满足业务需求,但是对于业务逻辑的走向、中间特征变量的变化轨迹以及整个策略的链路,没有一个可视化、可追溯的工具进行分析,特别是在排查整个规则流程未按预期所期望的链路进行流转时,无法判断是哪里出现了问题。另一方面,在决策规则运行一段时间之后,规则分析人员需要统计每个规则的流转分布情况时,也没有一个好的手段进行统计分析,因此缺失进一步决策的依据。
本申请实施例针对以上两个业务痛点进行优化,在尽可能减少人力成本的同时,使复杂多变的业务规则可以进行灵活调整、排错分析,使数据可视化展示,让决策者可以根据数据分布进行分析决策等。
在一些实施例中,参见图6,图6是本申请实施例提供的代码生成方法的流程示意图,本申请实施例提供的代码生成方法可以通过图6所示出的步骤201至步骤209实现。
在步骤201中,规则编辑。
在一些实施例中,根据业务需求描述的业务逻辑,定义出与之相应的一系列条件判断分支,主要包含“判断分支”、“循环分支”,当给定的输入参数满足判断分支的判定条件或循环分支的循环条件时,对特定的特征变量执行更改用于改变特定特征变量的值,进而达到类似“当给定的输入参数满足某种条件时,执行相应的代码逻辑,从而得到期望结果”这样一种规则策略定义。规则编辑通常是借助于可视化流程图进行绘制,让策略的定义所见即所得。
在一些实施例中,参见图7,图7是本申请实施例提供的规则编辑的流程示意图,图6所示出的步骤201可以通过图7所示出的步骤2011至步骤2014实现。
在步骤2011中,规则编写。
作为示例,规则编辑用流程图的形式进行描述业务需求定义的业务处理逻辑,主要包含“判断分支”、“循环分支”、“变量计算”。当给定的输入参数满足判断分支的判定条件或循环分支的循环条件时,对特定的特征变量执行更改用于改变特征变量的值。例如积分规则要求(以下V,K,P,S均为特征变量,X1,Y1,X2,Y2均为具体参数值):当客户会员类型(V)为普通会员时,本次消费额(P)满(X1)元,会员积分(S)按本次按消费额(P)*(Y1)%进行积分,本次消费额(P)满(X2)元,会员积分(S)按本次消费额(P)*(Y2)%进行积分。当客户会员类型为VIP会员时,本次消费额(P)满(X1)元,会员积分(S)按本次消费额(P)*(Y1+会员类型系数(K))%进行积分,本次消费额(P)满(X2)元按本次消费额(P)*(Y2+会员类型系数(K))%进行积分,以上业务需求可描述为如下两级规则:
第1级规则:IF(V=普通会员)=>isVIP=FALSE;IF(V=VIP会员)=>isVIP=TRUE。
第2级规则:IF(isVIP==FALSE);IF(P>=X1)=>S=P*(Y1/100);IF(P>=X2)=>S=P*(Y2/100);IF(isVIP==TRUE);IF(P>=X1)=>S=P*((Y1+K)/100);IF(P>=X2)=>S=P*((Y2+K)/100)。进一步令X1=1000,X2=500,Y1=6,Y2=5,以上规需的业务规则细化如下:
第1级规则:IF(V=普通会员)=>isVIP=FALSE;IF(V=VIP会员)=>isVI P=TRUE;
第2级规则:IF(isVIP==FALSE);IF(P>=1000)=>S=P*(6/100);IF(P>=500)=>S=P*(5/100);IF(isVIP==TRUE);IF(P>=1000)=>S=P*((6+K)/100);IF(P>=500)=>S=P*((5+K)/100)。
在步骤2012中,语法校验,通过则执行步骤2013,不通过则执行步骤2011。
在一些实施例中,可视化规则编辑的流程图需要转化成计算机能够识别的计算机语言才能够被计算机执行,语法校验的目的是校验流程图生成的计算机语言的正确性,必须满足计算机语言的语法规则才能保证执行不产生错误。当语法校验不通过则说明流程图编辑不正确,需要修改流程图直到通过语法校验的检查。
在步骤2013中,规则转化,数据埋点。
作为示例,规则转化处理:第一、把语法校验通过的流程图处理逻辑转换成能够被计算机执行的源代码供后续执行,具体实施过程如下:
每个规则都被定义成一个子函数,每个子函数内包含了该规则的条件处理逻辑,例如:如果满足条件(P>=X1),则执行代码逻辑(S=P*(Y1/100)),否则执行代码逻辑(S=P*(Y2/100))。每个规则都定义得有一个优先级,值越小优先级越高。所有规则都按优先级包含在一个主规则里,我们称之为主函数,规则的执行实质上是以输入参数并调用主函数并按优先级执行主函数内各个子函数的过程,在各个子函数执行过程中根据不通的判定条件选择不同的执行路线,并对特征变量进行计算和赋值,并最终产生输出结果。
在转化为源代码的过程中额外添加一些埋点数据,当执行规则时会把这些提前埋点好的数据当成参数传递到回调处理函数供其加工和处理,具体的实施过程如下:当进行规则转化时对规则本身的脚本数据进行匹配,常规匹配条件为规则脚本里的关键点(判断-IF,循环-FOR,计算或赋值,ASSIGN),当匹配到如上关键字时,会在规则转化成源代码的基础上增加额外的代码执行片段(称之为埋点),当规则真正执行时,会实时传递执行过程中对应的关键点的条件参数到回调执行函数进行处理(其处理过程通常以为后续排查问题关键,例如计录判断所在行号、记录满足判断的条件表达式和结果值、记录赋值的变量类型和变量值等)。
在步骤2014中,规则存储。
作为示例,因语法校验和规则转化比较耗时,规则存储即把规则转化与数据埋点生成的源代码进行保存,在后续规则执行阶段直接调用而不需要重复处理规则转化等比较耗时的操作。
在步骤202中,规则转化。
在一些实施例中,规则转化的目的是可视化策略编辑定义的处理流程,转化为计算机能够识别的程序语言,最终按策略定义的逻辑执行相应的代码逻辑。
作为示例,执行规则的过程是把输入的变量,按照规则定义的逻辑计算条件选择对应的分支执行流程,最终产生期望的输出结果。例如“第1步-规则编辑”小节描述的积分规则以及“第2步-参数输入”小节描述的参数输入:会员类型(V)=VIP会员,本次消费额(P)=888,当会员类型系数(K)为2时,会员积分计算结果为S=P*((5+K)/100)=888*((5+2)/100)=62.16。
在步骤203中,数据埋点。
在一些实施例中,列的观测点代码,即所谓的“数据埋点”,当程序语言执行过程中执行到数据埋点的代码时,便可用当前数据埋点位置的上下文参数(例如:开始时间、所处位置、当前特征变量列表、当前特征变量列表里每个变量的值)进行调用“回调处理函数”,从而记录程序执行时的当前快照现场数据。
作为示例,埋点数据的处理伴随着执行规则的过程,每执行一个规则,或者进行了规则里的一次条件判断,或者进行了一次变量的更改等,都可以传递上下文参数到回调处理函数进行处理。例如“第1步-规则编辑”小节描述的积分规则,某个会员的会员类型(V)为VIP会员,本次消费额(P)为888元,会员类型系数(K)为2,根据规则的定义,该会员会满足第1级规则的第二条分支(是否VIP为TRUE)和满足第二级规则的第二条分支(本次消费额>=500),这样就产生了规则的执行链路轨迹。此外每个规则里的判断条件生效或者变量被更改赋值等,都可以作为埋点参数发起回调处理函数调用,用于记录当前规则执行的一份快照。
在一些实施例中,把回调处理函数处理后的埋点结果进行保存,便于后续读取,用于测试、排错与统计分析等。
在步骤204中,参数输出。
在一些实施例中,对输入变量后执行规则产生最终的执行结果进行输出和存储,供后续业务使用与分析等。例如“规则编辑”小节描述的积分规则以及“执行规则”小节描述的会员积分计算,最终对会员积分S=62.16进行保存。
在步骤205中,规则执行。
在一些实施例中,以运行计算机程序代码来执行规则编辑所定义的业务逻辑。
在一些实施例中,参见图8,图8是本申请实施例提供的规则编辑的流程示意图,图6所示出的步骤205可以通过图8所示出的步骤2051至步骤2059实现。
在步骤2051中,加载规则。
在一些实施例中,规则存储保存的规则,为执行规则做提前准备。
在步骤2052中,参数输入。
在一些实施例中,规则编辑时在每个规则里定义了许多参数,规则的执行依赖条件的判断来选择执行的分支,而条件的判断依赖参数输入给特征变量赋值,参数输入即把规则内定义的特征变量全部赋予具体的变量值。例如“第1步-规则编辑”小节描述的积分规则,某个会员的会员类型(V)为VIP会员,本次消费额(P)为888元,则参数输入如下:V=VIP会员,P=888。
在步骤2053中,执行规则。
在一些实施例中,执行规则的过程是把输入的变量,按照规则定义的逻辑计算条件选择对应的分支执行流程,最终产生期望的输出结果。例如“第1步-规则编辑”小节描述的积分规则以及“第2步-参数输入”小节描述的参数输入:会员类型(V)=VIP会员,本次消费额(P)=888,当会员类型系数(K)为2时,会员积分计算结果为S=P*((5+K)/100)=888*((5+2)/100)=62.16。
在步骤2054中,输出埋点结果。
在一些实施例中,把回调处理函数处理后的埋点结果进行保存,便于后续读取,用于测试、排错与统计分析等。
在步骤2055中,埋点数据处理。
在一些实施例中,规则里的一次条件判断,或者进行了一次变量的更改等,都可以传递上下文参数到回调处理函数进行处理。例如“第1步-规则编辑”小节描述的积分规则,某个会员的会员类型(V)为VIP会员,本次消费额(P)为888元,会员类型系数(K)为2,根据规则的定义,该会员会满足第1级规则的第二条分支(是否VIP为TRUE)和满足第二级规则的第二条分支(本次消费额>=500),这样就产生了规则的执行链路轨迹。此外每个规则里的判断条件生效或者变量被更改赋值等,都可以作为埋点参数发起回调处理函数调用,用于记录当前规则执行的一份快照。
在步骤2056中,输出规则执行结果。
在一些实施例中,对输入变量后执行规则产生最终的执行结果进行输出和存储,供后续业务使用与分析等。例如“第1步-规则编辑”小节描述的积分规则以及“第2步-执行规则”小节描述的会员积分计算,最终对会员积分S=62.16进行保存。
在步骤2057中,更改、校验、转化、存储规则。
在步骤2058中,判断结果是否正确。
在一些实施例中,输出规则的执行结果有可能与预期产生的结果不符,通常这种情况发生在初期测试阶段,需要人为进行跟进与排查,排查到问题之后需要重新进行规则编辑,改变输入的变量等进行重新处理,直到输出的规则执行结果与预期结果一致。
在步骤2059中,埋点结果可视化分析。
在一些实施例中,埋点结果可视化分析作为测试阶段排查规则产生错误的有效手段,同时也作为生产环境进行阶段性统计与分析的有效工具,例如:统计一段时间内不同的输入变量具体命中了哪些规则以及这些规则被命中的概率等。
在步骤206中,输出埋点结果。
在一些实施例中,规则的执行需要以参数输入作为前提,策略的判定条件或循环分支的循环条件需要根据参数输入具体参数值并赋值给对应的特征变量来进行判断是否满足条件。输入不同的参数产生的策略判定条件会有所不同,导致规则的执行走到不同的分支逻辑进而产生不同的输出结果。
在一些实施例中,对数据埋点定义的回调处理函数,在执行的过程中传递的上下文参数进行进一步加工处理并记录和存储。
在步骤207中,测试和排错。
在一些实施例中,在规则编辑时有可能会产生人为引发的逻辑错误,或者对参数输入的特征变量进行计算时因计算错误而产生错误的中间结果,进一步以该错误的中间结果来进行条件语句或循环语句的判定,之后产生错误的规则策略最终执行结果。而要测试与排查这样的最终错误结果所产生的原因,就依赖以上输出的埋点结果数据,把记录的埋点结果数据以可视化的展现方式进行展示,按整个规则策略的执行轨迹和变量的变化轨迹进一步排查找到错误原因。
在一些实施例中,在初期测试阶段,需要人为进行跟进与排查,排查到问题之后需要重新进行规则编辑,改变输入的变量等进行重新处理,直到输出的规则执行结果与预期结果一致。
在步骤208中,输出规则执行结果。
在一些实施例中,根据参数输入来执行规则转化后的程序代码产生相对应的最终结果输出。
在步骤209中,决策分析。
在一些实施例中,对输出规则的执行结果进行进一步分析与统计等,便于决策人员进行分析与决策,进而不断优化规则策略逻辑。
在一些实施例中,参见图9,图9是本申请实施例提供的决策分析的原理示意图,参数输入记录了执行规则之前的所有输入的参数,当点击可视化界面上的参数输入模块时,会展现参数对应的特征变量名称以及本参数的具体值。执行链路轨迹,对于某次执行规则所经过的链路进行突出展示,规则执行的先后以层级划分,每一层级内并列存在多个规则,每个规则对应不同的业务场景,当输入的参数满足规则的判定条件表明命中了这个规则,会执行规则里定义的分支代码。图9示例说明了:第一级的规则12表达的业务场景为判断客户是否为VIP客户,进一步地,第二级的规则23表达的业务场景为计算客户的积分,另外还有第三、第四……、第M层规则。查看埋点结果,规则策略在执行过程中,由数据埋点传参到回调处理函数对埋点数据进行加工与存储,查看埋点结果则是把加工与存储后的数据进行回放显示。本案例的埋点结果存储了规则的执行轨迹以及每个规则内满足判定条件时的判定变量值与变量更改值等快照数据,这些快照数据为测试或排错规则的正确性提供了强有力的依据。查看结果输出,结果输出记录了执行规则之后的所有返回结果,当点击可视化界面上的结果输出模块时,会展现最终结果的特征变量名称以及具体值。
本申请实施例在编辑好可视化规则之后进行代码转化时提前进行一系列数据埋点操作,并定义好数据埋点产生的上下文数据的回调处理函数,用于加工和处理埋点数据,使埋点数据最终以可视化方式进行展示,同时也记录了每次输入参数时的规则执行轨迹,使最终的规则策略的执行可以根据埋点结果进行追溯和分析。在规则编辑的初期可以快速排查和论证规则编写的正确性,让测试人员很方便的排查问题所在,在生产运行阶段,可以让运维人员以可视化方段跟踪策略的执行轨迹来排查生产问题,当埋点数据记录一段时间后,更能让决策者可以根据数据分布进行分析决策等。
可以理解的是,在本申请实施例中,涉及到的逻辑描述信息等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面继续说明本申请实施例提供的代码生成装置455的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器450的代码生成装置455中的软件模块可以包括:获取模块4551,用于获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;编译运行模块4552,用于对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;运行所述候选代码,得到所述候选代码的运行结果;提取模块4553,用于若所述运行结果指示所述候选代码不能够实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;调整模块4554,用于基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
在一些实施例中,上述编译运行模块,还用于获取用于指示所述目标逻辑功能的代码标识符,并查询所述代码标识符在所述初始代码中的目标位置;在所述初始代码中的所述目标位置处,添加所述记录代码,得到所述候选代码。
在一些实施例中,上述编译运行模块,还用于针对所述初始代码中的每个字符,获取所述字符在所述初始代码中的位置,并将所述字符与所述代码标识符进行比较,得到比较结果;若所述比较结果指示所述字符与所述代码标识符相同,则将所述字符在所述初始代码中的位置,确定为所述目标位置。
在一些实施例中,上述代码生成装置,还包括:语法校验模块,用于对所述逻辑描述信息进行语法校验得到所述逻辑描述信息的语法校验结果;若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述逻辑描述信息进行语法修改,得到参考描述信息;上述编译模块,还用于若所述语法校验结果指示所述逻辑描述信息不存在语法错误,则对所述逻辑描述信息进行编译,得到所述初始代码;若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述参考描述信息进行编译,得到所述初始代码。
在一些实施例中,上述语法校验模块,还用于获取标准语法规则,并对所述逻辑描述信息进行语法规则解析,得到所述逻辑描述信息的语法规则;若所述语法规则与所述标准语法规则不同,则生成所述逻辑描述信息存在所述语法错误的语法校验结果;若所述语法规则与所述标准语法规则相同,则生成所述逻辑描述信息不存在所述语法错误的语法校验结果。
在一些实施例中,上述编译运行模块,还用于获取用于测试所述候选代码的输入参数,并基于所述输入参数,运行所述候选代码,得到所述候选代码针对所述输入参数的运行结果。上述代码生成装置,还包括:指示模块,用于获取所述目标逻辑功能针对所述输入参数的标准处理结果;结合所述标准处理结果和所述运行结果,确定所述运行结果的指示信息,所述指示信息,用于指示所述候选代码是否能够实现所述目标逻辑功能。
在一些实施例中,上述指示模块,还用于若所述标准处理结果与所述运行结果不同,则生成所述候选代码不能够实现所述目标逻辑功能的指示信息;若所述标准处理结果与所述运行结果相同,则生成所述候选代码能够实现所述目标逻辑功能的指示信息。
在一些实施例中,所述代码运行状态包括N个子运行状态,所述目标逻辑功能包括N个子逻辑功能,N个所述子运行状态与N个所述子逻辑功能一一对应,所述逻辑描述信息包括用于描述各子逻辑功能的子描述信息;若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则所述N个子运行状态中存在目标子状态,,所述目标子状态用于指示所述候选代码不能实现目标子逻辑功能;所述目标子状态与所述目标子逻辑功能是对应的;上述调整模块,还用于从所述逻辑描述信息的子描述信息中确定所述目标子状态对应的目标子描述信息;对所述逻辑描述信息中的所述目标子描述信息进行调整,得到所述目标描述信息。
在一些实施例中,上述语法校验模块,还用于对所述目标描述信息进行语法校验得到所述目标描述信息的语法校验结果;若所述目标描述信息的语法校验结果指示所述目标描述信息存在语法错误,则对所述目标描述信息进行语法修改,对修改后的目标描述信息进行编译,得到目标代码;上述调整模块,还用于若所述目标描述信息的语法校验结果指示所述目标描述信息不存在语法错误,则对所述目标描述信息进行编译,得到所述目标代码;若所述目标描述信息的语法校验结果指示所述目标描述信息存在语法错误,则对所述目标描述信息进行语法修改,对修改后的目标描述信息进行编译,得到所述目标代码。
在一些实施例中,上述代码生成装置,还包括:响应模块,用于响应于针对目标逻辑功能的触发操作,获取待处理参数;基于所述待处理参数,运行所述目标代码,得到所述目标代码针对所述待处理参数的目标运行结果。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机可执行指令,处理器执行该计算机可执行指令,使得该电子设备执行本申请实施例上述的代码生成方法。
本申请实施例提供一种存储有计算机可执行指令的计算机可读存储介质,其中存储有计算机可执行指令,当计算机可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的代码生成方法,例如,如图3示出的代码生成方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EP ROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种电子设备。
在一些实施例中,计算机可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,计算机可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,HyperText Markup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,计算机可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。
综上,本申请实施例具有如下有益效果:
(1)通过获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码,并在逻辑描述信息对应的初始代码中添加记录代码,运行所得到的候选代码,得到候选代码的运行结果,若运行结果指示候选代码不能够实现目标逻辑功能时,基于记录代码所记录得到的候选代码的代码运行状态,对逻辑描述信息进行调整,以得到能够实现目标逻辑功能的目标代码。如此,通过对候选代码的运行状态进行记录,在候选代码未实现目标逻辑功能时,通过代码运行状态,能够快速准确的确定逻辑描述信息导致的候选代码不能够实现目标逻辑功能的原因,以对逻辑描述信息进行精准调整,最终能够实现目标逻辑功能的目标代码,从而有效提高了代码的生成效率。
(2)通过对存在语法错误的逻辑描述信息进行语法校验,所得到的参考描述信息能够在保留逻辑描述信息的目标逻辑功能的同时,对逻辑描述信息的语法错误进行修正,有效提高了生成代码的准确性。
(3)通过查询代码标识符在初始代码中的目标位置,从而在初始代码中,找到了添加记录代码的靶点,便于后续在靶点处添加记录代码,通过记录代码能够对靶点处的目标逻辑功能的实现进行检测,从而准确的确定出候选代码是否能够实现目标逻辑功能。
(4)通过在初始代码中,查询代码标识符在初始代码中的目标位置,从而在初始代码中,找到了添加记录代码的靶点,便于后续在靶点处添加记录代码,通过记录代码能够对靶点处的目标逻辑功能的实现进行检测,从而准确的确定出候选代码是否能够实现目标逻辑功能。
(5)通过语法校验结果是否指示逻辑描述信息不存在语法错误,对逻辑描述信息或者参考描述信息进行编译,有效保证了编译的成功率,从而有效提高了代码的生成效率。
(6)通过获取用于测试候选代码的输入参数,并基于输入参数,运行候选代码,得到候选代码针对输入参数的运行结果,从而准确的确定出候选代码是否能够实现目标逻辑功能,从而确定是否需要对逻辑描述信息进行调整,以确定能够得到能够实现目标逻辑功能的代码,从而有效提高了生成代码的准确性。
(7)从所述运行结果中提取通过运行所述记录代码所记录得到的所述候选代码的代码运行状态,便于后续通过代码运行状态,对逻辑描述信息进行调整,得到目标描述信息,以基于目标描述信息确定出准确的能够实现目标逻辑功能的目标代码,从而有效提高了代码生成的准确性。
(8)若所述运行结果指示所述候选代码不能够实现所述目标逻辑功能,则说明所述代码运行状态的各所述子运行状态中,存在至少一个指示所述候选代码不能实现相应的子逻辑功能的目标子状态,则说明逻辑描述信息对应的目标子描述信息存在逻辑描述错误,此时可以针对性的仅对存在逻辑描述错误的目标子描述信息进行调整,以纠正目标子描述信息的逻辑描述错误,无需对全量的子描述信息进行调整,从而有效提高了代码的生成效率。
(9)通过对存在语法错误的参考描述信息进行语法校验,所得到的目标描述信息能够在保留参考描述信息的目标逻辑功能的同时,对逻辑描述信息的语法错误进行修正,有效提高了生成代码的准确性。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (13)

1.一种代码生成方法,其特征在于,所述方法包括:
获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;
对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;
运行所述候选代码,得到所述候选代码的运行结果;
若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;
基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
2.根据权利要求1所述的方法,其特征在于,所述在所述初始代码中添加所述记录代码,得到候选代码,包括:
获取用于指示所述目标逻辑功能的代码标识符,并查询所述代码标识符在所述初始代码中的目标位置;
在所述初始代码中的所述目标位置处,添加所述记录代码,得到所述候选代码。
3.根据权利要求2所述的方法,其特征在于,所述查询所述代码标识符在所述初始代码中的目标位置,包括:
针对所述初始代码中的每个字符,获取所述字符在所述初始代码中的位置,并将所述字符与所述代码标识符进行比较,得到比较结果;
若所述比较结果指示所述字符与所述代码标识符相同,则将所述字符在所述初始代码中的位置,确定为所述目标位置。
4.根据权利要求1所述的方法,其特征在于,所述获取用于描述目标逻辑功能的逻辑描述信息之后,所述方法还包括:
对所述逻辑描述信息进行语法校验得到所述逻辑描述信息的语法校验结果;
若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述逻辑描述信息进行语法修改,得到参考描述信息;
所述对所述逻辑描述信息进行编译得到初始代码,包括:
若所述语法校验结果指示所述逻辑描述信息不存在语法错误,则对所述逻辑描述信息进行编译,得到所述初始代码;
若所述语法校验结果指示所述逻辑描述信息存在语法错误,则对所述参考描述信息进行编译,得到所述初始代码。
5.根据权利要求4所述的方法,其特征在于,所述对所述逻辑描述信息进行语法校验得到所述逻辑描述信息的语法校验结果,包括:
获取标准语法规则,并对所述逻辑描述信息进行语法规则解析,得到所述逻辑描述信息的语法规则;
若所述语法规则与所述标准语法规则不同,则生成所述逻辑描述信息存在所述语法错误的语法校验结果;
若所述语法规则与所述标准语法规则相同,则生成所述逻辑描述信息不存在所述语法错误的语法校验结果。
6.根据权利要求1所述的方法,其特征在于,所述运行所述候选代码,得到所述候选代码的运行结果,包括:
获取用于测试所述候选代码的输入参数,并基于所述输入参数,运行所述候选代码,得到所述候选代码针对所述输入参数的运行结果;
所述运行所述候选代码,得到所述候选代码的运行结果之后,所述方法还包括:
获取所述目标逻辑功能针对所述输入参数的标准处理结果;
结合所述标准处理结果和所述运行结果,确定所述运行结果的指示信息,所述指示信息用于指示所述候选代码是否能够实现所述目标逻辑功能。
7.根据权利要求6所述的方法,其特征在于,所述结合所述标准处理结果和所述运行结果,确定所述运行结果的指示信息,包括:
若所述标准处理结果与所述运行结果不同,则生成所述候选代码不能够实现所述目标逻辑功能的指示信息;
若所述标准处理结果与所述运行结果相同,则生成所述候选代码能够实现所述目标逻辑功能的指示信息。
8.根据权利要求1所述的方法,其特征在于,所述代码运行状态包括N个子运行状态,所述目标逻辑功能包括N个子逻辑功能,N个所述子运行状态与所述N个子逻辑功能一一对应,所述逻辑描述信息包括用于描述各子逻辑功能的子描述信息;
若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则所述N个子运行状态中存在目标子状态,所述目标子状态用于指示所述候选代码不能实现目标子逻辑功能;所述目标子状态与所述目标子逻辑功能是对应的;
所述基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,包括:
从所述逻辑描述信息的子描述信息中,确定所述目标子状态对应的目标子描述信息;
对所述逻辑描述信息中的所述目标子描述信息进行调整,得到所述目标描述信息。
9.根据权利要求1所述的方法,其特征在于,所述对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码,包括:
对所述目标描述信息进行语法校验得到所述目标描述信息的语法校验结果;若所述目标描述信息的语法校验结果指示所述目标描述信息不存在语法错误,则对所述目标描述信息进行编译,得到所述目标代码;
若所述目标描述信息的语法校验结果指示所述目标描述信息存在语法错误,则对所述目标描述信息进行语法修改,对修改后的目标描述信息进行编译,得到所述目标代码。
10.根据权利要求1所述的方法,其特征在于,所述对所述目标描述信息进行编译得到能实现所述目标逻辑功能的目标代码之后,所述方法还包括:
响应于针对目标逻辑功能的触发操作,获取待处理参数;
基于所述待处理参数,运行所述目标代码,得到所述目标代码针对所述待处理参数的目标运行结果。
11.一种代码生成装置,其特征在于,所述装置包括:
获取模块,用于获取用于描述目标逻辑功能的逻辑描述信息,及用于记录代码运行状态的记录代码;
编译运行模块,用于对所述逻辑描述信息进行编译得到初始代码,并在所述初始代码中添加所述记录代码,得到候选代码;运行所述候选代码,得到所述候选代码的运行结果;
提取模块,用于若所述运行结果指示所述候选代码未实现所述目标逻辑功能,则从所述运行结果中提取所述候选代码的代码运行状态,所述运行状态是通过所述候选代码中的记录代码所记录的;
调整模块,用于基于所述代码运行状态对所述逻辑描述信息进行调整,得到目标描述信息,并对所述目标描述信息进行编译,得到能实现所述目标逻辑功能的目标代码。
12.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储计算机可执行指令或者计算机程序;
处理器,用于执行所述存储器中存储的计算机可执行指令或者计算机程序时,实现权利要求1至10任一项所述的代码生成方法。
13.一种计算机可读存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时实现权利要求1至10任一项所述的代码生成方法。
CN202311245949.3A 2023-09-25 2023-09-25 代码生成方法、装置、电子设备及存储介质 Pending CN117950671A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311245949.3A CN117950671A (zh) 2023-09-25 2023-09-25 代码生成方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311245949.3A CN117950671A (zh) 2023-09-25 2023-09-25 代码生成方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117950671A true CN117950671A (zh) 2024-04-30

Family

ID=90795026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311245949.3A Pending CN117950671A (zh) 2023-09-25 2023-09-25 代码生成方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117950671A (zh)

Similar Documents

Publication Publication Date Title
US11868231B2 (en) System and method for evaluating code by a hybrid of local and cloud-based computers
US20200293291A1 (en) Source code generation from web-sourced snippets
CN111382070B (zh) 兼容性测试方法、装置、存储介质和计算机设备
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
CN109871312B (zh) 一种接口测试方法、装置、设备及可读存储介质
CN112433944A (zh) 业务测试方法、装置、计算机设备和存储介质
CN109766261A (zh) 覆盖测试方法、装置、计算机设备和存储介质
CN115686631B (zh) 一种基于知识基的随机指令生成方法、装置及存储介质
CN111260336A (zh) 基于规则引擎的业务核对方法、装置及设备
CN108459846B (zh) 软件云定制方法及平台
CN111667231B (zh) 自动化报税方法、装置、系统、计算机设备和存储介质
CN103186463A (zh) 确定软件的测试范围的方法和系统
CN110347588A (zh) 软件验证方法、装置、计算机设备和存储介质
CN112395199B (zh) 基于云计算的分布式软件实例测试方法及软件开发平台
CN116661758B (zh) 一种优化日志框架配置的方法、装置、电子设备及介质
CN117707983A (zh) 测试用例代码生成方法及相关设备
CN113032256A (zh) 自动化测试方法、装置、计算机系统和可读存储介质
CN110928535B (zh) 衍生变量部署方法、装置、设备及可读存储介质
CN117370217A (zh) 一种基于python的接口测试结果自动生成方法
CN116719735A (zh) 一种测试用例生成方法及装置
CN113778888B (zh) 代码自动测试方法、系统、设备及存储介质
CN117950671A (zh) 代码生成方法、装置、电子设备及存储介质
CN110727428B (zh) 一种转换业务逻辑层代码的方法、装置和电子设备
CN114756217B (zh) 基于插件的脚本生成系统
CN111881128B (zh) 大数据回归验证方法及大数据回归验证装置

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