CN118069148A - 代码处理方法、装置、电子设备及存储介质 - Google Patents

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

Info

Publication number
CN118069148A
CN118069148A CN202410315978.0A CN202410315978A CN118069148A CN 118069148 A CN118069148 A CN 118069148A CN 202410315978 A CN202410315978 A CN 202410315978A CN 118069148 A CN118069148 A CN 118069148A
Authority
CN
China
Prior art keywords
code
target
history
similarity
historical
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
CN202410315978.0A
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202410315978.0A priority Critical patent/CN118069148A/zh
Publication of CN118069148A publication Critical patent/CN118069148A/zh
Pending legal-status Critical Current

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请公开了代码处理方法、装置、电子设备及存储介质,方法包括:获取目标代码;获取上述目标代码与历史代码库中历史代码的相似度;根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。如此,针对目标代码,可以获取目标代码与历史代码库中历史代码的相似度,从而根据相似度确定目标代码对应的目标历史代码,根据目标历史代码的运行记录直接确定目标代码运行结果,避免相同或相似的代码重复运行,有利于提高获取代码运行结果的效率。

Description

代码处理方法、装置、电子设备及存储介质
技术领域
本申请涉及数据处理技术领域,具体涉及一种代码处理方法、装置、电子设备及存储介质。
背景技术
随着科学技术的发展,代码的应用越来越广泛。针对需要解决的问题,用户可以编写代码以借助计算机进行处理。代码编写或应用过程中,需要执行代码以获得代码运行结果,从而确定或实现代码的功能。
相关技术中,针对每一代码,都需要重新运行以确定该代码对应的运行结果。可能出现相同或相似的代码运行多次的情况,不利于提高获取代码运行结果的效率。
发明内容
本申请实施例提供一种代码处理方法、装置、电子设备及存储介质,可以获取目标代码与历史代码库中历史代码的相似度,从而根据相似度确定目标代码对应的目标历史代码,根据目标历史代码的运行记录直接确定目标代码运行结果,避免相同或相似的代码重复运行,有利于提高获取代码运行结果的效率。
第一方面,本申请实施例提供一种代码处理方法,包括:
获取目标代码;
获取上述目标代码与历史代码库中历史代码的相似度;
根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;
获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
第二方面,本申请实施例提供一种代码处理装置,包括:
代码获取模块,用于获取目标代码;
相似度获取模块,用于获取上述目标代码与历史代码库中历史代码的相似度;
目标历史代码确定模块,用于根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;
运行结果获取模块,用于获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
在本申请的一些实施例中,上述相似度获取模块包括:
抽象语法树转换单元,用于对上述目标代码进行抽象语法树转换,获得上述目标代码对应的目标抽象语法树;
节点遍历单元,用于遍历上述目标抽象语法树的节点以获得上述目标代码对应的目标节点列表;
相似度获取单元,用于根据上述目标抽象语法树和/或上述目标节点列表,获取上述目标代码与上述历史代码之间的相似度。
在本申请的一些实施例中,上述历史代码库中包括各历史代码的运行节点和历史代码标识;
上述历史代码的运行节点用于存储历史代码、上述历史代码对应的历史抽象语法树和历史节点列表;
上述相似度获取单元具体用于:根据上述目标节点列表获取上述目标代码对应的目标代码标识;
若上述历史代码库中存在与上述目标代码标识相同的历史代码标识,则将上述历史代码标识对应的历史代码的运行节点作为上述目标代码对应的目标运行节点;
根据上述目标运行节点中的目标抽象语法树和目标节点列表,以及各上述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定上述目标代码与上述历史代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
若上述历史代码库中不存在与上述目标代码标识相同的历史代码标识,则根据上述目标代码、上述目标抽象语法树和上述目标节点列表为上述目标代码创建对应的目标运行节点。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
分别计算各上述历史节点列表与上述目标节点列表之间的最长公共子序列;
根据上述最长公共子序列的长度从上述历史代码的运行节点中确定候选运行节点;
根据上述候选运行节点中的历史抽象语法树,以及上述目标抽象语法树,确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
分别计算各上述历史抽象语法树与上述目标抽象语法树之间的树编辑距离;
根据上述树编辑距离确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
获取上述目标节点列表中各节点元素对应的节点元素字符串;
拼接上述节点元素字符串以获得上述目标节点列表对应的节点列表字符串;
对上述节点列表字符串进行哈希值计算获取上述目标代码标识。
在本申请的一些实施例中,上述目标历史代码确定模块具体用于:
获取相似度判断阈值;
将上述历史代码库中与上述目标代码之间的相似度大于上述相似度判断阈值的历史代码作为上述目标历史代码。
在本申请的一些实施例中,上述装置还包括:
数据获取模块,用于若上述历史代码库中不存在目标历史代码,则获取上述目标代码对应的执行文件集合和依赖库集合;
环境更新模块,用于根据上述依赖库集合更新代码运行环境;
代码执行模块,用于基于上述代码运行环境,根据上述执行文件集合执行上述目标代码,获得上述目标代码对应的目标代码运行结果,并更新上述历史代码库。
在本申请的一些实施例中,上述代码执行模块具体用于:
获取上述执行文件集合中每一执行文件对应的目标文件标识;
针对每一目标文件标识,若预设的执行文件库中存在与上述目标文件标识相同的历史文件标识,则将上述历史文件标识对应的文件存储路径作为上述目标文件标识对应的文件存储路径,否则为上述目标文件标识创建新的文件存储路径以存储上述目标文件标识对应的执行文件;
基于上述代码运行环境和上述文件存储路径执行上述目标代码。
第三方面,本申请实施例还提供一种电子设备,包括处理器和存储器,上述存储器存储有应用程序,上述处理器用于运行上述存储器内的应用程序,以执行本申请实施例所提供的任一种代码处理方法的步骤。
第四方面,本申请实施例还提供一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,当上述计算机程序在电子设备上运行时,上述计算机程序用于使上述电子设备执行本申请实施例所提供的任一种代码处理方法的步骤。
采用本申请实施例的方案,可以获取目标代码;获取上述目标代码与历史代码库中历史代码的相似度;根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
如此,针对目标代码,可以获取目标代码与历史代码库中历史代码的相似度,从而根据相似度确定目标代码对应的目标历史代码,根据目标历史代码的运行记录直接确定目标代码运行结果,避免相同或相似的代码重复运行,有利于提高获取代码运行结果的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例中提供的代码处理方法的一种实施例流程示意图;
图2是本申请实施例中提供的代码处理装置的结构示意图;
图3是本申请实施例中提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。同时,在本申请实施例的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征。在本申请实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
本申请实施例提供一种代码处理方法、装置、电子设备和计算机可读存储介质。
具体地,本实施例将从代码处理装置的角度进行描述,该代码处理装置具体可以集成在电子设备中,即本申请实施例中的代码处理方法可以由电子设备执行,可选的,该电子设备可以包括:终端设备。终端设备可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、游戏机、或者个人电脑(PC,Personal Computer)等设备。
本申请实施例提供的代码处理方法,可以应用于如代码处理系统中。其中,该代码处理系统可以包括终端设备和服务器,终端可以是包括接收和发射硬件的设备,即具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。终端设备与服务器可以通过网络进行双向通信。
可选的,该电子设备可以为服务器,该服务器可以是独立的服务器,也可以是服务器组成的服务器网络或服务器集群,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云服务器。其中,云服务器由基于云计算(CloudComputing)的大量计算机或网络服务器构成。
在本申请其中一种实施例中的代码处理方法可以运行于本地终端设备或者是服务器。当代码处理方法运行于服务器时,该方法则可以基于云交互系统来实现与执行,其中,云交互系统包括服务器和客户端设备。
目前,代码的应用越来越广泛,且可以通过多种方式获取代码。例如,可以由用户人工编写对应的代码,也可以通过ChatGPT等方式生成小规模代码。但生成的代码还需要准备运行环境、人工编辑、运行和确认。准备运行环境、人工编辑和运行代码方面需要消耗较多人力。并且代码执行的依赖库是单一且固定的,可能存在代码兼容问题,例如使用不支持中文的字体绘图会导致图中的中文无法显示。并且,小规模的代码在运行过一次之后无法复用,难以实现查看之前运行过的相同或者相似的代码的记录。
为了解决上述多个问题中的至少一个问题,本申请实施例中提供一种代码处理方法、装置、电子设备及存储介质。以下结合附图分别进行详细说明,本实施例中以执行主体是终端设备为例。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于附图所示的顺序执行所示出或描述的步骤。
本申请实施例第一方面提供一种代码处理方法,请参考图1,该代码处理方法的具体流程可以如下步骤101~步骤104:
步骤101、获取目标代码。
其中,上述目标代码是需要获取对应的运行结果的代码。目标代码可以由用户(代码编写人员)编写,也可以通过代码生成模型生成,例如,可以通过ChatGPT生成小规模的代码作为上述目标代码。针对生成或编写的目标代码,需要进行运行和/或验证。本申请实施例中,可以基于代码处理方法解决对代码的运行和/或验证问题,并且可以实现小规模代码的运行记录复用以及相似代码的结果复用或对比,从而提高代码运行结果的获取效率,进而提高代码运行和验证的效率。
步骤102、获取上述目标代码与历史代码库中历史代码的相似度。
其中,上述历史代码库是预先设置的用于存储历史执行的过的历史代码的数据库。上述相似度用于指示目标代码与历史代码之间的相似程度,上述相似度可以通过多种方式计算,例如,将目标代码与历史代码进行逐字比较以确定两者的相似度,或者通过预先训练好的代码比较模型确定目标代码与历史代码的相似度,还可以将目标代码和历史代码分别转换为文本,将两个文本之间的相似度作为目标代码与历史代码之间的相似度,还可以采用其他方式,在此不做具体限定。
本申请实施例中,上述获取上述目标代码与历史代码库中历史代码的相似度,包括:
对上述目标代码进行抽象语法树转换,获得上述目标代码对应的目标抽象语法树;
遍历上述目标抽象语法树的节点以获得上述目标代码对应的目标节点列表;
根据上述目标抽象语法树和/或上述目标节点列表,获取上述目标代码与上述历史代码之间的相似度。
具体的,可以将代码转化成抽象语法树,例如,Python可以通过ast.parse方法得到抽象语法树。如此,转化成抽象语法树,有利于提高代码之间的比较效率,从而提高计算相似度的效率和准确性。
需要说明的是,计算相似度时,可以仅根据代码的抽象语法树计算,例如根据代码的目标节点列表之间的最长公共子序列的长度确定代码之间的相似度,最长公共子序列的长度越长则相似度越高;或者仅根据目标节点列表计算,例如根据代码的抽象语法树之间的树编辑距离确定代码之间的相似度,树编辑距离越小则相似度越高;也可以结合两者进行计算,本申请实施例中以结合两者进行计算为例进行具体说明,但不作为具体限定。
本申请实施例中,将目标代码对应的目标抽象语法树记为T,但不作为具体限定。对抽象语法树T进行先序遍历或者后序遍历,将遍历的节点按顺序组成语法树的节点列表得到目标节点列表,本申请实施例中,将目标节点列表记为L,但不作为具体限定。
需要说明的是,对代码的抽象语法树进行遍历时,可以采用先序遍历或者后序遍历的方式,但针对所有的代码(包括目标代码和历史代码),采用相同的遍历方式,例如,都使用先序遍历的方式或者都使用后序遍历的方式,以避免因遍历方式不同带来误差,提高计算获得的相似度的准确性。
本申请实施例中,上述历史代码库中包括各历史代码的运行节点和历史代码标识;
上述历史代码的运行节点用于存储历史代码、上述历史代码对应的历史抽象语法树和历史节点列表;
上述根据上述目标抽象语法树和/或上述目标节点列表获取上述目标代码与上述历史代码之间的相似度,包括:
根据上述目标节点列表获取上述目标代码对应的目标代码标识;
若上述历史代码库中存在与上述目标代码标识相同的历史代码标识,则将上述历史代码标识对应的历史代码的运行节点作为上述目标代码对应的目标运行节点;
根据上述目标运行节点中的目标抽象语法树和目标节点列表,以及各上述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定上述目标代码与上述历史代码之间的相似度。
其中,代码标识是代码对应的唯一标识,具体的,历史代码标识是根据历史代码确定的唯一标识,目标代码标识是根据目标代码确定的唯一标识。内容相同的代码具有相同的代码标识,内容不同的代码具有不同的代码标识。
上述目标代码标识可以根据目标节点列表,通过预先训练好的代码标识计算模型计算,或者通过预先设置好的代码标识计算方案计算,在此不作具体限定。需要说明的是,目标代码标识和历史代码标识采用相同的方式计算确定。
本申请实施例中,上述目标代码标识是根据目标节点列表进行哈希值计算获得的哈希值。上述根据上述目标节点列表获取上述目标代码对应的目标代码标识,包括:
获取上述目标节点列表中各节点元素对应的节点元素字符串;
拼接上述节点元素字符串以获得上述目标节点列表对应的节点列表字符串;
对上述节点列表字符串进行哈希值计算获取上述目标代码标识。
具体的,将目标节点列表L中的元素转化为字符串,并按顺序前后拼接得到一个字符串,再将所得字符串经过SHA256计算得到结果S,将上述结果S作为目标代码对应的目标代码标识。
对应的,上述历史代码库中存储有各历史代码对应的历史代码标识,例如,可以通过历史代码的运行节点对应的哈希表的形式存储各历史代码标识,检查该哈希表中是否有与S相同的值,如果有,则直接将该值对应的历史代码的运行节点作为上述目标代码对应的目标运行节点。
进一步的,如果该哈希表中没有与S相同的值,则需要为目标代码新建一个代码运行节点。具体的,上述方法还包括:若上述历史代码库中不存在与上述目标代码标识相同的历史代码标识,则根据上述目标代码、上述目标抽象语法树和上述目标节点列表为上述目标代码创建对应的目标运行节点。
本申请实施例中,上述根据上述目标运行节点中的目标抽象语法树和目标节点列表,以及各上述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定上述目标代码与上述历史代码之间的相似度,包括:
分别计算各上述历史节点列表与上述目标节点列表之间的最长公共子序列;
根据上述最长公共子序列的长度从上述历史代码的运行节点中确定候选运行节点;
根据上述候选运行节点中的历史抽象语法树,以及上述目标抽象语法树,确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
具体的,针对历史节点列表和目标节点列表,以节点列表中各个节点的节点类型(比如Python的模块、函数定义、类定义、赋值语句、表达式、返回语句、函数调用等)和值作为单个元素,利用动态规划求解最长公共子序列(Longest Common Subsequence)。
在一种应用场景中,将最长公共子序列最长的前K项历史节点列表所对应的历史代码的运行节点作为候选运行节点,从而仅针对前K项候选运行节点计算相似度,不需计算所有历史运行节点对应的相似度,有利于降低计算量。其中,K为预先设置的候选运行节点数目,可以根据实际需求进行设置和调整。
在另一种应用场景中,可以预先设置最长公共子序列对应的长度阈值,将最长公共子序列长度大于上述长度阈值的运行节点作为候选运行节点。
可选的,可以直接将候选运行节点的相似度都设置为相同,即直接将候选运行节点作为与目标代码相匹配的目标运行节点,无需进一步计算候选节点的相似度,进一步降低计算量,提高处理效率。
本申请实施例中,针对候选运行节点,还进一步基于抽象语法树对候选运行节点进行相似度计算。
具体的,上述根据上述候选运行节点中的历史抽象语法树,以及上述目标抽象语法树,确定各上述候选运行节点对应的相似度,包括:
分别计算各上述历史抽象语法树与上述目标抽象语法树之间的树编辑距离;
根据上述树编辑距离确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
其中,树编辑距离指两个字符串之间互相转换的最小修改次数,可以用于在信息检索和自然语言处理中度量两个序列的相似度。
在一种应用场景中,可以计算候选运行节点的历史抽象语法树与目标抽象语法树之间的树编辑距离,按照树编辑距离从小到大排序,选出树编辑距离最小的R个候选运行节点,从而仅需计算R个候选运行节点的相似度(或直接将前R个候选运行节点的相似度设置为相同的数值),进一步减小计算量,提高数据处理效率。其中,R为预设的候选节点筛选数目,其实际值可以根据实际需求设置和调整,且R不大于K。
在另一种应用场景中,可以根据树编辑距离计算每一个候选运行节点对应的相似度,以提高最终相似度计算的准确性。
需要说明的是,相似度的具体计算方式可以根据实际需求预先设置和调整,例如,可以设置树编辑距离与相似度的对应关系表,还可以采用其他方式,在此不作具体限定。
步骤103、根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码。
在一种应用场景中,可以直接将K个候选运行节点对应的历史代码作为目标历史代码。在另一种应用场景中,可以将从K个候选运行节点中筛选出的R个运行节点对应的历史代码作为目标历史代码。
本申请实施例中,上述根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码,包括:
获取相似度判断阈值;
将上述历史代码库中与上述目标代码之间的相似度大于上述相似度判断阈值的历史代码作为上述目标历史代码。
其中,上述相似度判断阈值是预先设置的用于判断代码相似程度的阈值,具体数值可以根据实际需求设置和调整,在此不作具体限定。
步骤104、获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
其中,上述目标历史运行记录是目标历史代码在历史执行过程时的记录,可以记录代码的输出数据的对象、运行结束后的全局变量的数据等。
在一种应用场景中,直接将上述目标历史运行记录作为目标代码对应的目标代码运行结果。在另一种应用场景中,可以将上述目标历史运行记录作为目标代码对应的目标代码运行结果的一部分,作为代码运行结果参考数据。如此,可以实现对历史代码的运行结果的复用,提高小规模代码的复用率和查看历史代码运行情况的效率。
进一步的,若历史代码库中不存在与目标代码相似的目标历史代码,则通过重载代码的输入方法和获取全局变量信息的方式记录代码的运行结果。具体的,上述方法还包括:
若上述历史代码库中不存在目标历史代码,则获取上述目标代码对应的执行文件集合和依赖库集合;
根据上述依赖库集合更新代码运行环境;
基于上述代码运行环境,根据上述执行文件集合执行上述目标代码,获得上述目标代码对应的目标代码运行结果,并更新上述历史代码库。
其中,上述执行文件集合是目标代码执行过程中所需要用到的文件的集合,上述依赖库集合则是目标代码执行过程中所需要用到的依赖库的集合。
上述基于上述代码运行环境,根据上述执行文件集合执行上述目标代码,包括:
获取上述执行文件集合中每一执行文件对应的目标文件标识;
针对每一目标文件标识,若预设的执行文件库中存在与上述目标文件标识相同的历史文件标识,则将上述历史文件标识对应的文件存储路径作为上述目标文件标识对应的文件存储路径,否则为上述目标文件标识创建新的文件存储路径以存储上述目标文件标识对应的执行文件;
基于上述代码运行环境和上述文件存储路径执行上述目标代码。
具体的,预先准备有M个代码依赖库的集合的代码运行环境,并记录每个依赖库集合中包含的依赖库以及版本,比如Python的Numpy、Pandas、Matplotlib、Requests等库的不同版本组成的依赖库的集合。
代码执行服务接收需要执行的目标代码C、执行目标代码用到的执行文件集合F、代码运行的依赖库集合。将代码依赖库的集合中的单个依赖库作为一个元素(包含依赖库名称和版本),遍历已有的代码依赖库的集合,分别求出代码运行的依赖库减去已有的代码依赖库的差集。
得到差集元素数量最少的依赖库集合对应的代码运行环境,如果有多个差集数量最少且相同则选择依赖库数量较少的代码运行环境,覆盖安装代码运行的依赖库集合,并将此环境作为本次代码运行的环境,以实现代码运行环境的更新,保证当前的目标历史代码可以正常执行。
遍历执行文件集合,将其中的每个文件经过SHA256计算得到文件的唯一标识(即目标文件标识),检查文件的唯一标识是否在已有的文件的唯一标识组成的哈希表(即预设的执行文件库,比如Python的字典)中,如果不存在,则以文件唯一标识作为相对路径的一部分创建一个新的文件存储路径存放文件;如果已经存在则获取已存在的文件存储路径。记录执行文件集合中所有文件的唯一标识和文件存储路径。如此,可以实现执行文件的路径复用,提高数据处理效率。
进一步的,将执行文件集合中所有的文件唯一标识排序(例如,按照在执行文件库中的存储顺序排序,或按照预设的字典顺序排序),排序后将标识按顺序前后拼接,将拼接的结果进行SHA256计算得到文件路径哈希值I。把文件路径哈希值I作为相对路径的一部分创建目标代码运行的路径。
重载代码运行环境的输出方法(比如Python的print),为输出内容指定一个保存输出数据的对象。在执行的目标代码的末尾加上获取全部全局变量的方法(比如Python的globals方法)。将目标代码C在代码执行路径执行,将输出数据的对象、运行结束后的全局变量的数据生成一份运行记录。
针对运行记录,将所有的生成的文件都通过SHA256生成文件的唯一标识。检查文件的唯一标识是否在已有的文件的唯一标识组成的哈希表(比如Python的字典)中,如果不存在,则以文件唯一标识作为相对路径的一部分创建一个路径存放文件;如果已经存在则获取已存在的文件存放路径。将所有生成文件的路径也加入到运行记录中。将生成文件的路径的集合添加到代码运行节点的运行历史记录中,将代码运行节点的运行历史记录作为结果返回。
如此,基于抽象语法树的节点遍历信息生成的列表进行最长公共子序列和树编辑距离求解,得到相同和相似代码的运行结果记录并进行复用。若没有相同或相似的代码,则基于准备的代码运行依赖库与代码运行需要的依赖库求差集得到最适合运行代码的环境。利用重载代码的输入方法和获取全局变量信息的方式记录代码的运行结果。
采用本申请实施例的方案,可以获取目标代码;获取上述目标代码与历史代码库中历史代码的相似度;根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
如此,针对目标代码,可以获取目标代码与历史代码库中历史代码的相似度,从而根据相似度确定目标代码对应的目标历史代码,根据目标历史代码的运行记录直接确定目标代码运行结果,避免相同或相似的代码重复运行,有利于提高获取代码运行结果的效率。
本实施例还提供一种代码处理装置,该代码处理装置具体可以集成在终端设备中。如图2所示,该代码处理装置可以包括:
代码获取模块201,用于获取目标代码;
相似度获取模块202,用于获取上述目标代码与历史代码库中历史代码的相似度;
目标历史代码确定模块203,用于根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;
运行结果获取模块204,用于获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
在本申请的一些实施例中,上述相似度获取模块202包括:
抽象语法树转换单元,用于对上述目标代码进行抽象语法树转换,获得上述目标代码对应的目标抽象语法树;
节点遍历单元,用于遍历上述目标抽象语法树的节点以获得上述目标代码对应的目标节点列表;
相似度获取单元,用于根据上述目标抽象语法树和/或上述目标节点列表,获取上述目标代码与上述历史代码之间的相似度。
在本申请的一些实施例中,上述历史代码库中包括各历史代码的运行节点和历史代码标识;
上述历史代码的运行节点用于存储历史代码、上述历史代码对应的历史抽象语法树和历史节点列表;
上述相似度获取单元具体用于:根据上述目标节点列表获取上述目标代码对应的目标代码标识;
若上述历史代码库中存在与上述目标代码标识相同的历史代码标识,则将上述历史代码标识对应的历史代码的运行节点作为上述目标代码对应的目标运行节点;
根据上述目标运行节点中的目标抽象语法树和目标节点列表,以及各上述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定上述目标代码与上述历史代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
若上述历史代码库中不存在与上述目标代码标识相同的历史代码标识,则根据上述目标代码、上述目标抽象语法树和上述目标节点列表为上述目标代码创建对应的目标运行节点。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
分别计算各上述历史节点列表与上述目标节点列表之间的最长公共子序列;
根据上述最长公共子序列的长度从上述历史代码的运行节点中确定候选运行节点;
根据上述候选运行节点中的历史抽象语法树,以及上述目标抽象语法树,确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
分别计算各上述历史抽象语法树与上述目标抽象语法树之间的树编辑距离;
根据上述树编辑距离确定各上述候选运行节点对应历史代码与上述目标代码之间的相似度。
在本申请的一些实施例中,上述相似度获取单元还具体用于:
获取上述目标节点列表中各节点元素对应的节点元素字符串;
拼接上述节点元素字符串以获得上述目标节点列表对应的节点列表字符串;
对上述节点列表字符串进行哈希值计算获取上述目标代码标识。
在本申请的一些实施例中,上述目标历史代码确定模块203具体用于:
获取相似度判断阈值;
将上述历史代码库中与上述目标代码之间的相似度大于上述相似度判断阈值的历史代码作为上述目标历史代码。
在本申请的一些实施例中,上述装置还包括:
数据获取模块,用于若上述历史代码库中不存在目标历史代码,则获取上述目标代码对应的执行文件集合和依赖库集合;
环境更新模块,用于根据上述依赖库集合更新代码运行环境;
代码执行模块,用于基于上述代码运行环境,根据上述执行文件集合执行上述目标代码,获得上述目标代码对应的目标代码运行结果,并更新上述历史代码库。
在本申请的一些实施例中,上述代码执行模块具体用于:
获取上述执行文件集合中每一执行文件对应的目标文件标识;
针对每一目标文件标识,若预设的执行文件库中存在与上述目标文件标识相同的历史文件标识,则将上述历史文件标识对应的文件存储路径作为上述目标文件标识对应的文件存储路径,否则为上述目标文件标识创建新的文件存储路径以存储上述目标文件标识对应的执行文件;
基于上述代码运行环境和上述文件存储路径执行上述目标代码。
如此,针对目标代码,可以获取目标代码与历史代码库中历史代码的相似度,从而根据相似度确定目标代码对应的目标历史代码,根据目标历史代码的运行记录直接确定目标代码运行结果,避免相同或相似的代码重复运行,有利于提高获取代码运行结果的效率。
相应的,本申请实施例还提供一种电子设备,该电子设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(PDA,Personal Digital Assistant)等终端设备。或者,电子设备可以为服务器。
如图3所示,图3为本申请实施例提供的电子设备的结构示意图。该电子设备300包括有一个或者一个以上处理核心的处理器301、有一个或一个以上计算机可读存储介质的存储器302及存储在存储器302上并可在处理器上运行的计算机程序。其中,处理器301与存储器302电性连接。本领域技术人员可以理解,图3中示出的电子设备结构并不构成对电子设备的限定,可以包括比图3所示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器301是电子设备300的控制中心,利用各种接口和线路连接整个电子设备300的各个部分,通过运行或加载存储在存储器302内的软件程序和/或单元,以及调用存储在存储器302内的数据,执行电子设备300的各种功能和处理数据,从而对电子设备300进行整体监控。处理器301可以是处理器CPU、图形处理器GPU、网络处理器(NP,NetworkProcessor)等,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。
在本申请实施例中,电子设备300中的处理器301会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器302中,并由处理器301来运行存储在存储器302中的应用程序,从而实现各种功能,例如:
获取目标代码;
获取上述目标代码与历史代码库中历史代码的相似度;
根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;
获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
由此,可以提高代码处理的效率。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图3所示,电子设备300还包括:触控显示屏303、射频电路304、音频电路305、输入单元306以及电源307。其中,处理器301分别与触控显示屏303、射频电路304、音频电路305、输入单元306以及电源307电性连接。本领域技术人员可以理解,图3中示出的电子设备结构并不构成对电子设备的限定,可以包括比图3所示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏303可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏303可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器301,并能接收处理器301发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器301以确定触摸事件的类型,随后处理器301根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏303而实现输入和输出功能。但是在某些实施例中,触控面板与显示面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏303也可以作为输入单元306的一部分实现输入功能。
射频电路304可用于收发射频信号,以通过无线通信与网络设备或其他电子设备建立无线通讯,与网络设备或其他电子设备之间收发信号。
音频电路305可以用于通过扬声器、传声器提供用户与电子设备之间的音频接口。音频电路305可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路305接收后转换为音频数据,再将音频数据输出处理器301处理后,经射频电路304以发送给比如另一电子设备,或者将音频数据输出至存储器302以便进一步处理。音频电路305还可能包括耳塞插孔,以提供外设耳机与电子设备的通信。
输入单元306可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源307用于给电子设备300的各个部件供电。可选的,电源307可以通过电源管理系统与处理器301逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源307还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图3中未示出,电子设备300还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种代码处理方法。该计算机程序可以执行如下代码处理方法的步骤:
获取目标代码;
获取上述目标代码与历史代码库中历史代码的相似度;
根据上述相似度从上述历史代码库中确定上述目标代码对应的目标历史代码;
获取上述目标历史代码对应的目标历史运行记录,根据上述目标历史运行记录确定上述目标代码对应的目标代码运行结果。
由此,可以提高代码处理的效率。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种代码处理方法或方法,因此,可以实现本申请实施例所提供的任一种代码处理方法或方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
根据本申请的一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述实施例中的各种可选实现方式中提供的方法。
在上述代码处理装置、装置、计算机可读存储介质、电子设备、计算机程序产品实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的代码处理装置、装置、计算机可读存储介质、计算机程序产品、电子设备及其相应单元的具体工作过程及可带来的有益效果,可以参考如上实施例中代码处理方法或方法的说明,具体在此不再赘述。
以上对本申请实施例所提供的一种代码处理方法、装置、电子设备、计算机可读存储介质以及计算机程序产品进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (13)

1.一种代码处理方法,其特征在于,包括:
获取目标代码;
获取所述目标代码与历史代码库中历史代码的相似度;
根据所述相似度从所述历史代码库中确定所述目标代码对应的目标历史代码;
获取所述目标历史代码对应的目标历史运行记录,根据所述目标历史运行记录确定所述目标代码对应的目标代码运行结果。
2.根据权利要求1所述的代码处理方法,其特征在于,所述获取所述目标代码与历史代码库中历史代码的相似度,包括:
对所述目标代码进行抽象语法树转换,获得所述目标代码对应的目标抽象语法树;
遍历所述目标抽象语法树的节点以获得所述目标代码对应的目标节点列表;
根据所述目标抽象语法树和/或所述目标节点列表,获取所述目标代码与所述历史代码之间的相似度。
3.根据权利要求2所述的代码处理方法,其特征在于,所述历史代码库中包括各历史代码的运行节点和历史代码标识;
所述历史代码的运行节点用于存储历史代码、所述历史代码对应的历史抽象语法树和历史节点列表;
所述根据所述目标抽象语法树和/或所述目标节点列表获取所述目标代码与所述历史代码之间的相似度,包括:
根据所述目标节点列表获取所述目标代码对应的目标代码标识;
若所述历史代码库中存在与所述目标代码标识相同的历史代码标识,则将所述历史代码标识对应的历史代码的运行节点作为所述目标代码对应的目标运行节点;
根据所述目标运行节点中的目标抽象语法树和目标节点列表,以及各所述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定所述目标代码与所述历史代码之间的相似度。
4.根据权利要求3所述的代码处理方法,其特征在于,所述方法还包括:
若所述历史代码库中不存在与所述目标代码标识相同的历史代码标识,则根据所述目标代码、所述目标抽象语法树和所述目标节点列表为所述目标代码创建对应的目标运行节点。
5.根据权利要求3所述的代码处理方法,其特征在于,所述根据所述目标运行节点中的目标抽象语法树和目标节点列表,以及各所述历史代码的运行节点中的历史抽象语法树和历史节点列表,确定所述目标代码与所述历史代码之间的相似度,包括:
分别计算各所述历史节点列表与所述目标节点列表之间的最长公共子序列;
根据所述最长公共子序列的长度从所述历史代码的运行节点中确定候选运行节点;
根据所述候选运行节点中的历史抽象语法树,以及所述目标抽象语法树,确定各所述候选运行节点对应历史代码与所述目标代码之间的相似度。
6.根据权利要求5所述的代码处理方法,其特征在于,所述根据所述候选运行节点中的历史抽象语法树,以及所述目标抽象语法树,确定各所述候选运行节点对应的相似度,包括:
分别计算各所述历史抽象语法树与所述目标抽象语法树之间的树编辑距离;
根据所述树编辑距离确定各所述候选运行节点对应历史代码与所述目标代码之间的相似度。
7.根据权利要求3所述的代码处理方法,其特征在于,所述根据所述目标节点列表获取所述目标代码对应的目标代码标识,包括:
获取所述目标节点列表中各节点元素对应的节点元素字符串;
拼接所述节点元素字符串以获得所述目标节点列表对应的节点列表字符串;
对所述节点列表字符串进行哈希值计算获取所述目标代码标识。
8.根据权利要求1所述的代码处理方法,其特征在于,所述根据所述相似度从所述历史代码库中确定所述目标代码对应的目标历史代码,包括:
获取相似度判断阈值;
将所述历史代码库中与所述目标代码之间的相似度大于所述相似度判断阈值的历史代码作为所述目标历史代码。
9.根据权利要求1至8任一项所述的代码处理方法,其特征在于,所述方法还包括:
若所述历史代码库中不存在目标历史代码,则获取所述目标代码对应的执行文件集合和依赖库集合;
根据所述依赖库集合更新代码运行环境;
基于所述代码运行环境,根据所述执行文件集合执行所述目标代码,获得所述目标代码对应的目标代码运行结果,并更新所述历史代码库。
10.根据权利要求9所述的代码处理方法,其特征在于,所述基于所述代码运行环境,根据所述执行文件集合执行所述目标代码,包括:
获取所述执行文件集合中每一执行文件对应的目标文件标识;
针对每一目标文件标识,若预设的执行文件库中存在与所述目标文件标识相同的历史文件标识,则将所述历史文件标识对应的文件存储路径作为所述目标文件标识对应的文件存储路径,否则为所述目标文件标识创建新的文件存储路径以存储所述目标文件标识对应的执行文件;
基于所述代码运行环境和所述文件存储路径执行所述目标代码。
11.一种代码处理装置,其特征在于,包括:
代码获取模块,用于获取目标代码;
相似度获取模块,用于获取所述目标代码与历史代码库中历史代码的相似度;
目标历史代码确定模块,用于根据所述相似度从所述历史代码库中确定所述目标代码对应的目标历史代码;
运行结果获取模块,用于获取所述目标历史代码对应的目标历史运行记录,根据所述目标历史运行记录确定所述目标代码对应的目标代码运行结果。
12.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序,以执行权利要求1至10任一项所述的代码处理方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行权利要求1至10任一项所述的代码处理方法的步骤。
CN202410315978.0A 2024-03-19 2024-03-19 代码处理方法、装置、电子设备及存储介质 Pending CN118069148A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410315978.0A CN118069148A (zh) 2024-03-19 2024-03-19 代码处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410315978.0A CN118069148A (zh) 2024-03-19 2024-03-19 代码处理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN118069148A true CN118069148A (zh) 2024-05-24

Family

ID=91097218

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410315978.0A Pending CN118069148A (zh) 2024-03-19 2024-03-19 代码处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN118069148A (zh)

Similar Documents

Publication Publication Date Title
CN106649084A (zh) 函数调用信息的获取方法及装置、测试设备
CN103092742A (zh) 程序日志记录优化方法和系统
CN112489676B (zh) 模型训练方法、装置、设备及存储介质
CN110046081A (zh) 性能测试方法、性能测试装置、电子设备及存储介质
CN115576600A (zh) 基于代码变更的差异处理方法、装置、终端及存储介质
CN116560683A (zh) 软件更新方法、装置、设备及存储介质
CN115827436A (zh) 数据处理方法、装置、设备及存储介质
CN113434542B (zh) 数据关系识别方法、装置、电子设备及存储介质
CN107862035A (zh) 会议记录的网络读取方法、装置、智能平板和存储介质
WO2023151397A1 (zh) 应用程序部署方法、装置、设备及介质
CN115345600B (zh) 一种rpa流程的生成方法和装置
CN114579136A (zh) 代码处理方法、装置、计算机设备和存储介质
CN118069148A (zh) 代码处理方法、装置、电子设备及存储介质
CN115712571A (zh) 一种交互服务测试、装置、计算机设备及存储介质
CN115328891A (zh) 数据迁移方法、装置、存储介质及电子设备
CN114201729A (zh) 一种矩阵运算方式的选择方法、装置、设备以及存储介质
CN114253920A (zh) 一种交易重新排序方法、装置、设备及可读存储介质
CN112181407B (zh) 业务实现处理方法及装置、系统、电子设备和存储介质
CN115686506A (zh) 一种数据显示方法、装置、电子设备和存储介质
CN113625968B (zh) 文件权限的管理方法、装置、计算机设备及存储介质
CN114691145A (zh) 代码处理方法、装置、计算机设备和存储介质
US10606939B2 (en) Applying matching data transformation information based on a user's editing of data within a document
CN114741068A (zh) 对象访问方法、代码生成方法、装置、设备及存储介质
CN115220798A (zh) 驱动数据读取方法、装置、计算机设备和存储介质
CN117482504A (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