CN111736896B - 代码处理方法、装置、电子设备和介质 - Google Patents
代码处理方法、装置、电子设备和介质 Download PDFInfo
- Publication number
- CN111736896B CN111736896B CN202010616883.4A CN202010616883A CN111736896B CN 111736896 B CN111736896 B CN 111736896B CN 202010616883 A CN202010616883 A CN 202010616883A CN 111736896 B CN111736896 B CN 111736896B
- Authority
- CN
- China
- Prior art keywords
- target
- dependency
- information
- code
- library
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 238000012800 visualization Methods 0.000 claims abstract description 41
- 238000012545 processing Methods 0.000 claims abstract description 28
- 230000001419 dependent effect Effects 0.000 claims description 23
- 238000000034 method Methods 0.000 claims description 22
- 230000000007 visual effect Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 description 11
- 230000015654 memory Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 238000009960 carding Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000005553 drilling Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了一种代码处理方法,包括:获取待分析代码,所述待分析代码包括关键字符;根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码。本公开还提供了一种代码处理装置、电子设备和介质。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种代码处理方法、装置、电子设备和介质。
背景技术
代码逐渐累积为一笔巨大的资产沉淀。相关技术大多集中于如何在可视化界面中更便捷的编写代码,或代码执行结果的可视化展示,多用于辅助业务人员进行数据分析,基本没有面向技术人员的代码逻辑梳理工具。在实际业务场景中,面对历史代码的再利用或优化需求时,技术人员更倾向于选择二次开发,此时历史资产价值变为0,或在客观条件不允许重新开发时,技术人员便需耗费大量时间通过阅读代码进行再梳理。
发明内容
有鉴于此,本公开提供了一种代码处理方法、装置、电子设备和介质。
本公开的一个方面提供了一种代码处理方法,包括:获取待分析代码,所述待分析代码包括关键字符;根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码。
根据本公开的实施例,关键字符包括代码块划分标识,
所述根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系包括:根据所述代码块划分标识,将所述待分析代码划分为多个代码块;确定所述多个代码块中每个代码块的目标信息和依赖信息,所述目标信息包括目标库和目标表,所述依赖信息包括所述目标表所依赖的依赖库和依赖表;以及根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,作为所述依赖关系。
根据本公开的实施例,基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图包括:利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息。
根据本公开的实施例,该方法还包括根据所述每个代码块的目标信息,生成第二结果表,所述第二结果表中包括目标表的字段列表,所述利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息包括:利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑关系视图;读取所述第二结果表,以确定所述目标表的字段列表;以及根据所述目标表的字段列表和所述逻辑关系视图,生成所述逻辑可视化视图。
根据本公开的实施例,利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑关系视图包括:在所述第一结果表指示特定目标表依赖的依赖表作为历史目标表出现多次的情况下,确定所述依赖表作为历史目标表的多个代码块和所述多个代码块执行的先后顺序,以及将所述多个代码块中最后执行的代码块生成的所述历史目标表作为所述依赖表。
本公开的另一个方面提供了一种代码处理装置,包括:获取模块,用于获取待分析代码,所述待分析代码包括关键字符;确定模块,用于根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及生成模块,用于基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码。
根据本公开的实施例,关键字符包括代码块划分标识,所述确定模块包括:划分子模块,用于根据所述代码块划分标识,将所述待分析代码划分为多个代码块;确定子模块,用于确定所述多个代码块中每个代码块的目标信息和依赖信息,所述目标信息包括目标库和目标表,所述依赖信息包括所述目标表所依赖的依赖库和依赖表;以及生成子模块,用于根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,作为所述依赖关系。
根据本公开的实施例,生成模块包括:生成子模块,用于利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息。
本公开的另一个方面提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行上述的方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的可以应用代码处理方法的应用场景;
图2示意性示出了根据本公开实施例的代码处理方法的流程图;
图3示意性示出了根据本公开实施例的根据关键字符,确定待分析代码中的目标信息、依赖信息以及目标信息和依赖信息之间的依赖关系方法的流程图;
图4示意性示出了根据本公开另一实施例的代码处理方法的流程图;
图5示意性示出了根据本公开实施例的代码处理装置的方框图;以及
图6示意性示出了根据本公开实施例的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种代码处理方法,包括:获取待分析代码,所述待分析代码包括关键字符;根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码。
图1示意性示出了根据本公开实施例的可以应用代码处理方法的应用场景。需要注意的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,该应用场景中可以包括通过HQL(Hive-sql)编写的代码110。如图1所示,代码110中可以包括目标表111以及该目标表111所包含的字段可以是id,amount,p,lable,rn,PROJ_BGN_DATE。其中,目标表即表ibm.V3_TMP_RZYX_MODEL。例如代码110指示目标表中的id,amount,p,lable,rn,PROJ_BGN_DATE等字段的值依赖于依赖表112及其id,amount字段信息,依赖表112为cc8.DAM_CCR_LOAN_BAL和依赖表113中的数据及其proj_bgn_date,pay_client_id字段信息。依赖表113为IBS.DCM_IBS_PROJ_INFO_S。
根据本公开实施例的代码处理方法可以将代码110的逻辑可视化为图1所示的逻辑可视化视图120。如图1所述,在逻辑可视化视图120中通过连接线的形式体现了目标表ibm.V3_TMP_RZYX_MODEL依赖于依赖表cc8.DAM_CCR_LOAN_BAL和依赖表IBS.DCM_IBS_PROJ_INFO_S。
图2示意性示出了根据本公开实施例的代码处理方法的流程图。
如图2所示,该代码处理方法可以包括操作S201~S203。
在操作S201,获取待分析代码,所述待分析代码包括关键字符。
根据本公开的实施例,待分析代码例如是使用HQL编写的。关键字符例如可以是HQL中的特征字符,例如在HQL中字符“;”用于分割代码块,字符“create table”用于创建目标表,字符“insert”用于插入数据等。
根据本公开的实施例,使用不同语言编写的待分析代码的关键字符可以是不相同的。
在操作S202,根据所述关键字符,确定待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个。
根据本公开的实施例,例如在图1所示的情景中,目标信息例如可以ibm.V3_TMP_RZYX_MODEL。其中,ibm为目标库,V3_TMP_RZYX_MODEL为该目标库中的目标表。
例如可以根据关键字符“create table”确定目标库和目标表。在HQL中,关键字符“create table”后面的库名和表名往往分别为目标库和目标表。例如在图1所示的情景中,根据关键字符“create table”可以确定ibm.V3_TMP_RZYX_MODEL中的ibm为目标库,V3_TMP_RZYX_MODEL为该目标库中的目标表。
类似地,在HQL中,依赖信息例如可以通过关键字符“from”来确定。例如在图1所示的情景中,根据关键字符“from”可以确定“cc8.DAM_CCR_LOAN_BAL”中的cc8为依赖库,DAM_CCR_LOAN_BAL为目标表所依赖的依赖库cc8中的依赖表。
在操作S203,基于目标信息、依赖信息以及目标信息和依赖信息之间的依赖关系,生成待分析代码的逻辑可视化视图,以便分析所述代码。
根据本公开的实施例,例如可以利用Python中的xmind包对目标信息、依赖信息以及目标信息和依赖信息之间的依赖关系进行处理而获得逻辑可视化信息。
根据本公开的实施例,该代码处理方法快速提取代码所涉及的库、表、字段并生成流程图进行可视化展示,可协助技术人员迅速回顾了解代码逻辑,简化代码阅读难度,或有优化需求时可迅速溯源字段进行优化。
图3示意性示出了根据本公开实施例的根据关键字符,确定待分析代码中的目标信息、依赖信息以及目标信息和依赖信息之间的依赖关系方法的流程图。
如图3所示,该方法可以包括操作S212~S232。
在操作S212,根据所述代码块划分标识,将所述待分析代码划分为多个代码块。
关键字符包括代码块划分标识,例如在HQL中代码块划分标识可以是“;”。字符“;”将HQL代码划分为不同的代码块,因此,可以通过识别代码中的字符“;”来确定待分析代码所包含的多个代码块。
在操作S222,确定多个代码块中每个代码块的目标信息和依赖信息,目标信息包括目标库和目标表,依赖信息包括目标表所依赖的依赖库和依赖表。
例如可以分别对每个代码块进行分析,确定每个代码块中的“create table”字符和“from”字符,从而确定每个代码块的目标信息和依赖信息。
根据本公开的实施例,例如可以对划分出的多个代码块分配编号,以区分不同的代码块。
根据本公开的实施例,对多个代码块中的每个代码块进行分析可以是并行分析多个代码块,也可以是按照顺序依次分析每个代码块。
在操作S232,根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,作为所述依赖关系。
根据本公开的实施例,例如第一结果表中可以包括多个字段,该多个字段分别可以是代码块编号、目标库表名、目标库表名编号、同一张目标表出现顺序号、依赖库表名、依赖库表编号、依赖库表的字段列表、同一张依赖库表出现的顺序号。
根据本公开的实施例,例如可以将每个代码块分析的结果,按照第一结果表的字段填入第一结果表中。其中,每个代码块的分析结果可以占第一结果表中的一行。
例如代码块1的目标表为t1,代码块2的目标表为t2,代码块3的目标表为t3,并且目标表t3的依赖表可以是t1和t2,那么可以将第一结果表中代码块3的“依赖库表名”字段填写为t1和t2,从而可以通过第一结果表来标识不同代码块之间和代码块内部的依赖关系。
根据本公开的实施例,可以利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息。
例如可以利用Python中的xmind包对第一结果表进行处理而获得逻辑可视化信息。
根据本公开的实施例,该方法还可以包括根据所述每个代码块的目标信息,生成第二结果表,所述第二结果表中包括目标表的字段列表。例如可以提取[create table[ifnot exists]…(…)]内的字段列表而获得目标表的字段列表。例如按照HQL的语言规则提取字段列表。根据本公开的实施例,第二结果表例如可以包括隶属代码块id、目标库表名、目标库表名编号、目标表性质(例如可以包括drop、create和insert三种性质)、目标表的字段列表和同一张目标表出现的顺序号等字段。
根据本公开的实施例,利用Python或者图数据库中的可视化工具对第一结果表进行处理而获得逻辑可视化信息包括:利用Python或者图数据库中的可视化工具对第一结果表进行处理而获得逻辑关系视图;读取第二结果表,以确定目标表的字段列表;以及根据目标表的字段列表和逻辑关系视图,生成逻辑可视化视图。例如可以利用Python中的xmind包生成的逻辑关系视图中通过一个subject来表示一个库表,在逻辑关系视图中只呈现了每个主题之间的依赖关系,即,逻辑关系视图只呈现了代码的流程图,而没有体现库表所包含的字段。因此,可以从第一结果表中获取每个库表的字段列表,并且将每个库表的字段列表填入该库表的subject中,从而生成完整的逻辑可视化视图。
根据本公开的实施例,利用Python或者图数据库中的可视化工具对第一结果表进行处理而获得逻辑关系视图包括:在所述第一结果表指示特定目标表依赖的依赖表作为历史目标表出现多次的情况下,确定所述依赖表作为历史目标表的多个代码块和所述多个代码块执行的先后顺序,以及将所述多个代码块中最后执行的代码块生成的所述历史目标表作为所述依赖表。
例如待分析代码中包括目标表a、目标表b、目标表a和目标表c,目标表c依赖目标表a和目标表b,也就是说,目标表a和目标表b在目标表c所在的代码块中为依赖表。在该例子中,目标表c的依赖表作为历史目标表出现多次,根据本公开的实施例,那么目标表c的依赖表可以是后一次出现的目标表a,即同一张目标表出现的顺序号中的顺序号较大的目标表。
图4示意性示出了根据本公开另一实施例的代码处理方法的流程图。如图4所示,该方法可以包括操作S401~S408,操作S413~S463,操作S414~464。
在操作S401,获取待分析代码。该待分析代码例如可以是HQL编写的代码。
在操作S402,对HQL代码按“;”划分为代码块,并按顺序编号。
在操作S403,确定语句是否含“create table”关键字符。若确定含有“createtable”关键字符,则执行操作S413,若确定不含有“create table”关键字符,则执行操作S404。
在操作S413,对该代码块编号并标记为create代码块。
在操作S423,确定该代码块开头语法是否为[create table[if not exists]…(…)],并且在该语法中没有as关键字。若是,则执行操作S453,若不是,则执行操作S443操作和S463。
在操作S433,语法为[create table[if not exists]…[partition()]asselect…from…],然后在操作S463,提取第一个[table…]中内容为目标库表名并编号;提取[select…]中内容为目标字段列表。
在操作S453,提取[table…]中内容为目标库表名并编号;提取[(…)]中内容为目标字段列表。
在操作S404,确定语句是否含“insert”。若确定语句是含“insert”,则执行操作S414。若确定语句不含“insert”,则执行操作S405。
在操作S414,对该代码块编号并标记为insert代码块。
在操作S424,语法为[inset[into|overwrite]table…[partition()select…from]];提取[table]后内容为目标库表名并编号。
在操作S434,针对[from…]中的[……]的代码字段处理。针对[from…]中的[……]的代码字段处理包括:紧邻[(left…)join/union all/union/from]关键字前后字段非[(…)]或select,则字段内容为依赖库表名并编号,依赖字段列表设为*;否则钻取提取[select…from…]语法,提取[from…]中[…]内容为依赖库表名并编号;提取[select…]中[…]内容为依赖字段列表。
在操作S444,该表是否有create逻辑产生的字段列表。若没有create逻辑产生的字段列表,则执行操作S454,若有create逻辑产生的字段列表,则执行操作S464。
在操作S454,提取相关字段列表。
在操作S464,将create table中提取的字段结果作为目标字段列表。
在操作S405,确定语句是否含“drop table”。若含,则执行操作S415,若不含则执行操作S406。
在操作S415,编号并标记为drop代码块。
在操作S406,删除该代码块。
在操作S407,将分析结果填写到结果表1和结果表2。结果表1即上文描述的第二结果表,用于存储目标库表字段信息。该第二结果表的字段可以包括隶属代码块id、目标库表名、目标库表名编号、目标表性质目标表的字段列表、同一张目标表出现的顺序号等字段。结果表2用于存储依赖库表字段信息,即上文描述的第一结果表。该第一结果表的字段可以包括代码块编号、目标库表名、目标库表名编号、同一张目标表出现顺序号、依赖库表名、依赖库表编号、依赖库表的字段列表、同一张依赖库表出现的顺序号。
在操作S408,使用Python的xmind包进行可视化。根据本公开的实施例,使用结果表2提供的目标库表及隶属的依赖库表、依赖库表字段,结合结果表1提供的目标库表字段作为可视化内容;代码块内部,每个xmind主题表示一个库表名字段,其依赖库表均以xmind主题的形式右连接至该模块的目标库表xmind主题,以表示从属关系;代码块间,从最后一个代码块倒推,涉及依赖表是历史代码块目标表时,左连该表的最后一次记录,以此类推遍历所有代码块涉及的库表。
根据本公开的实施例,在提取[create table[if not exists]…(…)]内字段列表时,可以按[,]划分提取第一个字符组成;在提取[select…from]内目标字段或依赖字段时,如果有[as…]字段,提取[as]后字符为字段,如果没有[as…],则针对性剔除HQL关键字、运算符和涉及[()],剩余字段即为目标字段或依赖字段,在进行依赖库表可视化拼接时,涉及有重复记录的依赖库表,选取该库表最近历史的一次处理记录进行拼接。
图5示意性示出了根据本公开实施例的代码处理装置500的方框图。
如图5所示,代码处理装置500可以包括获取模块510、确定模块520、生成模块530。
获取模块510,例如可以执行上文参考图2描述的操作S201,用于获取待分析代码,所述待分析代码包括关键字符。
确定模块520,例如可以执行上文参考图2描述的操作S202,用于在根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个。
生成模块530,例如可以执行上文参考图2描述的操作S203,用于基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码。
根据本公开的实施例,关键字符包括代码块划分标识,所述确定模块包括:划分子模块,用于根据所述代码块划分标识,将所述待分析代码划分为多个代码块;确定子模块,用于确定所述多个代码块中每个代码块的目标信息和依赖信息,所述目标信息包括目标库和目标表,所述依赖信息包括所述目标表所依赖的依赖库和依赖表;以及生成子模块,用于根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,作为所述依赖关系。
根据本公开的实施例,生成模块包括:生成子模块,用于利用Python中的xmind包对所述第一结果表进行处理而获得逻辑可视化信息。
根据本公开的实施例,该装置还可以执行根据所述每个代码块的目标信息,生成第二结果表,所述第二结果表中包括目标表的字段列表,所述利用Python中的xmind包对所述第一结果表进行处理而获得逻辑可视化信息包括:利用Python中的xmind包对所述第一结果表进行处理而获得逻辑关系视图;读取所述第二结果表,以确定所述目标表的字段列表;以及根据所述目标表的字段列表和所述逻辑关系视图,生成所述逻辑可视化视图。
根据本公开的实施例,利用Python中的xmind包对所述第一结果表进行处理而获得逻辑关系视图包括:在所述第一结果表指示特定目标表依赖的依赖表作为历史目标表出现多次的情况下,确定所述依赖表作为历史目标表的多个代码块和所述多个代码块执行的先后顺序,以及将所述多个代码块中最后执行的代码块生成的所述历史目标表作为所述依赖表。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,获取模块510、确定模块520、生成模块530中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获取模块510、确定模块520、生成模块530中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块510、确定模块520、生成模块530中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图6示意性示出了根据本公开实施例的电子设备的方框图。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,根据本公开实施例的计算机电子设备600包括处理器601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。处理器601例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器601还可以包括用于缓存用途的板载存储器。处理器601可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 603中,存储有电子设备600操作所需的各种程序和数据。处理器601、ROM602以及RAM 603通过总线604彼此相连。处理器601通过执行ROM 602和/或RAM 603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 602和RAM 603以外的一个或多个存储器中。处理器601也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备600还可以包括输入/输出(I/O)接口605,输入/输出(I/O)接口605也连接至总线604。电子设备600还可以包括连接至I/O接口605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分607;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被处理器601执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 602和/或RAM 603和/或ROM 602和RAM 603以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (6)
1.一种代码处理方法,包括:
获取待分析代码,所述待分析代码使用HQL编写,其包括关键字符;
根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及
基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码;
所述关键字符包括代码块划分标识;
所述根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系包括:
根据所述代码块划分标识,将所述待分析代码划分为多个代码块;
根据所述多个代码块中预定字符,确定每个代码块的目标信息和依赖信息,所述目标信息包括目标库和目标表,所述依赖信息包括所述每个代码块内部目标表所依赖的依赖库和依赖表、其他代码块的目标信息;以及
根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,所述第一结果表包括多个字段,其中,所述第一结果表中每个代码块的“依赖库表名”字段填写依赖信息,标识不同代码块之间与代码块内部的依赖关系;
所述基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,生成所述待分析代码的逻辑可视化视图包括:
利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息。
2.根据权利要求1所述的方法,还包括:
根据所述每个代码块的目标信息,生成第二结果表,所述第二结果表中包括目标表的字段列表,
所述利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息包括:
利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑关系视图;
读取所述第二结果表,以确定所述目标表的字段列表;以及
根据所述目标表的字段列表和所述逻辑关系视图,生成所述逻辑可视化视图。
3.根据权利要求2所述的方法,其中,所述利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑关系视图包括:
在所述第一结果表指示特定目标表依赖的依赖表作为历史目标表出现多次的情况下,确定所述依赖表作为历史目标表的多个代码块和所述多个代码块执行的先后顺序;以及
将所述多个代码块中最后执行的代码块生成的所述历史目标表作为所述依赖表。
4.一种代码处理装置,包括:
获取模块,用于获取使用HQL编写的待分析代码,所述待分析代码包括关键字符;
确定模块,用于根据所述关键字符,确定所述待分析代码中的目标信息、依赖信息以及所述目标信息和所述依赖信息之间的依赖关系,所述目标信息包括目标库、目标表和目标字段中的至少一个,所述依赖信息包括依赖库、依赖表和依赖字段中的至少一个;以及
生成模块,用于基于所述目标信息、依赖信息以及所述目标信息和所述依赖信息之问的依赖关系,生成所述待分析代码的逻辑可视化视图,以便分析所述代码;
所述关键字符包括代码块划分标识,所述确定模块包括:
划分子模块,用于根据所述代码块划分标识,将所述待分析代码划分为多个代码块;
确定子模块,用于确定所述多个代码块中每个代码块的目标信息和依赖信息,所述目标信息包括目标库和目标表,所述依赖信息包括所述每个代码块内部目标表所依赖的依赖库和依赖表、其他代码块的目标信息;以及
生成子模块,用于根据所述每个代码块的目标库、目标表、所述目标表所依赖的依赖库和依赖表,生成第一结果表,所述第一结果表包括多个字段,其中,所述第一结果表中每个代码块的“依赖库表名”字段填写依赖信息,标识不同代码块之间与代码块内部的依赖关系;
所述生成模块包括:
生成子模块,用于利用Python或者图数据库中的可视化工具对所述第一结果表进行处理而获得逻辑可视化信息。
5.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1~3任意一项所述的方法。
6.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如权利要求1~3任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616883.4A CN111736896B (zh) | 2020-06-30 | 2020-06-30 | 代码处理方法、装置、电子设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616883.4A CN111736896B (zh) | 2020-06-30 | 2020-06-30 | 代码处理方法、装置、电子设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111736896A CN111736896A (zh) | 2020-10-02 |
CN111736896B true CN111736896B (zh) | 2024-03-12 |
Family
ID=72653796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010616883.4A Active CN111736896B (zh) | 2020-06-30 | 2020-06-30 | 代码处理方法、装置、电子设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736896B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110795455A (zh) * | 2019-09-06 | 2020-02-14 | 中国平安财产保险股份有限公司 | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 |
CN111078559A (zh) * | 2019-12-18 | 2020-04-28 | 广州品唯软件有限公司 | java代码中函数调用的提取方法、装置、介质及计算机设备 |
CN111241823A (zh) * | 2020-01-07 | 2020-06-05 | 北京字节跳动网络技术有限公司 | 一种依赖配置的管理方法、装置、电子设备及存储介质 |
-
2020
- 2020-06-30 CN CN202010616883.4A patent/CN111736896B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110795455A (zh) * | 2019-09-06 | 2020-02-14 | 中国平安财产保险股份有限公司 | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 |
CN111078559A (zh) * | 2019-12-18 | 2020-04-28 | 广州品唯软件有限公司 | java代码中函数调用的提取方法、装置、介质及计算机设备 |
CN111241823A (zh) * | 2020-01-07 | 2020-06-05 | 北京字节跳动网络技术有限公司 | 一种依赖配置的管理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111736896A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107644286B (zh) | 工作流处理方法及装置 | |
US9317400B2 (en) | Code coverage rate determination method and system | |
US20130239098A1 (en) | Source code conversion method and source code conversion program | |
CN105701006B (zh) | 用于程序调试中的变量跟踪的方法和系统 | |
CN111459982A (zh) | 一种数据查询方法、装置、终端设备及存储介质 | |
US10423416B2 (en) | Automatic creation of macro-services | |
JP6440895B2 (ja) | ソフトウェア分析装置及びソフトウェア分析方法 | |
CN113963770A (zh) | 报告文件生成方法、装置、计算机设备及其存储介质 | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
US8904364B2 (en) | Execution in workflow BPM engine | |
US20230315416A1 (en) | Code translation method and apparatus, and device | |
WO2019123703A1 (ja) | データ分析支援装置、データ分析支援方法およびデータ分析支援プログラム | |
US10489728B1 (en) | Generating and publishing a problem ticket | |
CN111736896B (zh) | 代码处理方法、装置、电子设备和介质 | |
CN113204376A (zh) | 文件解析方法、装置、计算机设备以及存储介质 | |
CN109460236B (zh) | 程序版本构建和检查方法及系统 | |
WO2019123704A1 (ja) | データ分析支援装置、データ分析支援方法およびデータ分析支援プログラム | |
US20100305986A1 (en) | Using Service Exposure Criteria | |
US20160063375A1 (en) | Determination of substances in an assembly | |
US11392371B2 (en) | Identification of a partial code to be refactored within a source code | |
CN111736848B (zh) | 包冲突定位方法、装置、电子设备及可读存储介质 | |
US7844627B2 (en) | Program analysis method and apparatus | |
CN113051262A (zh) | 一种数据质检方法、装置、设备及存储介质 | |
US9244814B1 (en) | Enriched log viewer | |
CN110750569A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |