CN112925552B - 代码处理方法、装置、设备及存储介质 - Google Patents
代码处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112925552B CN112925552B CN202110219902.4A CN202110219902A CN112925552B CN 112925552 B CN112925552 B CN 112925552B CN 202110219902 A CN202110219902 A CN 202110219902A CN 112925552 B CN112925552 B CN 112925552B
- Authority
- CN
- China
- Prior art keywords
- code
- target
- running time
- segment
- target code
- 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 22
- 230000008859 change Effects 0.000 claims abstract description 54
- 238000000034 method Methods 0.000 claims abstract description 19
- 230000003068 static effect Effects 0.000 claims description 28
- 238000012545 processing Methods 0.000 claims description 23
- 230000011218 segmentation Effects 0.000 claims description 11
- 230000006870 function Effects 0.000 description 38
- 238000010586 diagram Methods 0.000 description 18
- 238000012986 modification Methods 0.000 description 15
- 230000004048 modification Effects 0.000 description 15
- 238000004458 analytical method Methods 0.000 description 11
- 238000004590 computer program Methods 0.000 description 10
- 230000002159 abnormal effect Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 8
- 238000011056 performance test Methods 0.000 description 7
- 238000013507 mapping Methods 0.000 description 6
- 230000005856 abnormality Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 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
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- 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)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
- Indexing, Searching, Synchronizing, And The Amount Of Synchronization Travel Of Record Carriers (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供了一种代码处理方法、装置、设备及存储介质,涉及信息流和大数据等技术领域。具体实现方案为:获得目标代码的基本归属信息;根据所述基本归属信息,获得所述目标代码所包括的代码段;在所述目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段。本公开实施例能够细粒度确定目标代码发生运行时间波动的代码段,提高代码迭代的质量。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及信息流和大数据等技术领域。
背景技术
随着计算机技术的发展,计算机信息和数据量也越来越多。计算机代码的更新迭代速度也越来越快。在计算机代码进行更新时,往往是对代码进行一小段内容的更新而非全面更新。但是即使是一小段代码内容的更新,也有可能产生新的问题,导致运行时间显著增加等情况。
由于在更新迭代代码时,更新的内容只是整个全量代码中的一小部分,因此,若更新后的代码产生运行时间显著增减的情况,则因为代码量巨大而分析难度增加。
发明内容
本公开提供了一种代码处理方法、装置、设备及存储介质。
根据本公开的一方面,提供了一种代码处理方法,包括:
获得目标代码的基本归属信息;
根据基本归属信息,获得目标代码所包括的代码段;
在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段。
根据本公开的另一方面,提供了一种代码处理装置,包括:
归属信息模块,用于获得目标代码的基本归属信息;
代码段模块,用于根据基本归属信息,获得目标代码所包括的代码段;
时间增量模块,用于在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开任一实施例中的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行本公开任一实施例中的方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现本公开任一实施例中的方法。
根据本公开的技术,能够获得运行时间增量对应的代码段,将时间增量细化到代码段粒度,从而便于后续异常分析。有利于查找引起变动后的目标代码运行时间增加的原因。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开一实施例的代码处理方法流程示意图;
图2是根据本公开另一实施例的代码处理方法流程示意图;
图3是根据本公开又一实施例的代码处理方法流程示意图;
图4A是根据本公开一示例的代码处理方法流程示意图;
图4B是根据本公开一示例的代码增量示意图;
图4C是根据本公开一示例的代码增量另一种情况示意图;
图4D是根据本公开一示例的代码增量又一种情况示意图;
图4E是根据本公开一示例的代码增量又一种情况示意图;
图4F是根据本公开一示例的代码段示意图;
图5是根据本公开一实施例的代码处理装置主要结构示意图;
图6是根据本公开另一实施例的代码处理装置主要结构示意图;
图7是根据本公开又一实施例的代码处理装置主要结构示意图;
图8是根据本公开又一实施例的代码处理装置主要结构示意图;
图9是根据本公开又一实施例的代码处理装置主要结构示意图;
图10是根据本公开又一实施例的代码处理装置主要结构示意图;
图11是根据本公开又一实施例的代码处理装置主要结构示意图;
图12是用来实现本公开实施例的代码处理方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本公开实施例提供一种代码处理方法,如图1所示,包括:
步骤S11:获得目标代码的基本归属信息;
步骤S12:根据基本归属信息,获得目标代码所包括的代码段;
步骤S13:在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段。
本实施例中,目标代码可以包括多个代码段。
代码段可以按照目标代码中包含的函数进行划分,比如,包含目标函数A的代码内容可以划分为一个代码段。
在一种可能的实现方式中,可以将代码中的一种标记作为开始标记或结束标记,比如,将最小层级的“{”符号作为开始标记,将最小层级的“}”符号作为结束标记,通过对目标代码的静态扫描,获得开始标记和结束标记,将开始标记和结束标记之间的代码内容作为代码段。
在另一种可能的实现方式中,可以根据整个目标代码的执行阶段进行代码段的划分,将存在时间先后顺序的内容,分为一组,将每一组代码内容按照代码的执行顺序进行代码段的划分,并记录代码段的开始和结束标记。
在一种可能的实现方式中,还可以对整个目标代码进行人工标注,写入开始和结束标记,后续根据开始和结束等标记和基本归属关系,确定代码段。
在另一种可能的实现方式中,还可以将一行有实际信息的代码作为代码段。比如,除过“//”、“{”等占用一行的符号之外,可以将存在具体代码内容的一行代码作为一个代码段。
在另一种可能的实现方式中,可以将目标代码中的一个策略、一个算子分别作为代码段。
在一种可能的实现方式中,代码段可以为耗时代码段或不耗时代码段。本公开实施例可以对所有耗时代码段和不耗时代码段进行运行时间检测、判断,也可以仅针对耗时代码段进行时间检测和判断。
本实施例中,目标代码的基本归属信息,可以包括目标代码的代码内容之间的调用关系,比如函数调用关系。
在一种可能的实现方式中,可以根据代码中的开始和结束标记,以及基本归属信息,获得目标代码所包括的代码段。比如,函数A在目标代码段中的位置在开始标记B和结束标记C的范围之外,但是B和C之间的代码内容调用函数A,则A属于B和C之间的代码段。
在一种可能的实现方式中,基本归属关系中,可包含代码段的开始和/或结束信息。
本实施例中,在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段,具体可以通过对每个代码段设置对应的运行时间检测模块,检测各代码段对应的运行时间。
在具体实现方式中,可根据需要缩小代码段的粒度,以便准确获取时间增量对应的代码段。
本公开实施例在代码变动的情况下,获得运行时间增量对应的代码段,将时间增量细化到代码段粒度,从而便于后续异常分析。有利于查找引起变动后的目标代码运行时间增加的原因。
在一种可能的实现方式中,获得目标代码的基本归属信息,包括:
对目标代码进行静态扫描,获得目标代码的原有内容的基本归属关系。
本实施例中,可采用封装、开源的静态代码扫描工具,对目标代码进行静态扫描,获得基本归属关系。
在一种可能的实现方式中,通过静态扫描,还可获得代码的其它特征信息,如父函数等。
在一种可能的实现方式中,对目标代码进行静态扫描,可以包括对目标代码中指定的代码特征进行识别。
在另一种可能的实现方式中,识别结果可以输出为Json(JavaScript ObjectNotation,JS对象简谱)文件,便于解析。在Json文件中,可包含目标代码中命中的代码特征、代码的父函数等。
在具体方式中,可以将代码特征设置为划分代码段的起始位置和结束位置,通过静态扫描,可以获得起始位置、结束位置、父函数等,还可以对起始位置和结束位置打标记,从而得到目标代码的代码段。
本实施例中,目标代码的原有内容,可以是目标代码发生变动或进行迭代前的原有内容。
本实施例中,通过静态扫描,能够获得目标代码所包含的代码段,从而后续能够对代码段进行运行时间测试,获得更细粒度的运行时间与代码的对应关系。
在一种实施方式中,根据基本归属信息,获得目标代码所包括的代码段,包括:
获取目标代码的分段标记;
根据分段标记和目标代码的原有内容的基本归属关系,获得目标代码所包括的代码段。
在一种可能的实现方式中,分段标记可以是根据设定的特征、由静态代码扫描工具扫描目标代码获得的。
根据分段标记和目标代码的原有内容的基本归属关系,获得目标代码所包括的代码段,具体可以包括:将开始的分段标记和结束的分段标记之间的代码内容、以及开始标记和结束标记之间的代码内容所调用的代码内容,作为一个代码段。
本公开实施例中,能够根据代码段之间的归属关系和目标代码的分段标记,获得目标代码所包含的代码段,从而便于后续对各代码段的运行时间进行检测。
在一种实施方式中,如图2所示,代码处理方法还包括:
步骤S21:确定变动前的目标代码的各代码段的运行时间。
变动前的目标代码,为目标代码的全部原始内容。
本实施例中,能够获得变动前的目标代码的各代码段的运行时间,从而能够在目标代码发生变动后,与变动的代码段的运行时间进行对比,确定增加的运行时间是否由目标代码变动造成。
在一种实施方式中,在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段,包括:
在目标代码变动的情况下,确定变动后的目标代码的各代码段的运行时间;
根据变动前的目标代码的各代码段的运行时间和变动后的目标代码的各代码段的运行时间,获得运行时间增量对应的代码段。
本实施例中,可以在每次目标代码发生更新迭代时,均进行一次时间测试,以确保变动的代码段在运行时间方面不存在异常。
本实施例中,代码变动的情况下,确定运行时间增量对应的代码段,从而能够根据运行时间增量对应的代码段与发生变动的代码段之间的关系,确定运行时间增加是否正常。
在一种实施方式中,在目标代码变动的情况下,确定变动后的目标代码的各代码段的运行时间,包括:
在目标代码变动的情况下,对目标代码进行重新的静态扫描,获得目标代码的变动内容的基本归属关系;
根据变动内容的基本归属关系,确定变动后的目标代码的各代码段;
根据变动后的目标代码的各代码段,确定变动后的目标代码的各代码段的运行时间。
本实施例中,变动后的目标代码的各代码段,包括未变动的代码段和发生变动的代码段。
目标代码的变动,可以包括代码的增加、删除、替换、顺序改变等。
本实施例中,确定变动后的目标代码的各代码段的运行时间,从而能够根据运行时间增量对应的代码段与发生变动的代码段之间的关系,确定运行时间增加是否正常。
在一种实施方式中,如图3所示,代码处理方法还包括:
步骤S31:根据运行时间的时间增量对应的代码段和目标代码发生变动的代码段,确定时间增量是否正常。
本实施例中,确定时间增量是否正常,从而可以确定迭代后的代码在运行时间方面的质量是否符合要求,保证代码迭代的效果。
在一种实施方式中,根据运行时间的时间增量对应的代码段和目标代码发生变动的代码段,确定时间增量是否正常,包括:
在运行时间的时间增量对应的代码段非目标代码发生变动的代码段的情况下,确定时间增量异常。
本实施例中,确定时间增量异常的情况下,可以对异常原因进行排查与清除,保证代码迭代的质量。
在一种实施方式中,代码处理方法还包括:
在运行时间的时间增量的代码段为目标代码发生变动的代码段运行时序之后的代码段、且运行时间的时间增量的代码段与目标代码发生变动的代码段存在时序依赖关系的情况下,确定运行时间的时间增量对应的代码段非目标代码发生变动的代码段;
和/或,在运行时间的时间增量的代码段与目标代码发生变动的代码段不存在时序依赖关系的情况下,确定运行时间的时间增量对应的代码段非目标代码发生变动的代码段。
本公开实施例中,通过白盒代码分析来自动生成增量代码所影响的耗时的代码段,彻底释放了通过人工CR(Code Review,代码复核)代码来分析模块性能的人工成本。
本公开一种示例中,代码处理方法包括如图4A所示的步骤:
步骤S41:底层工具适配。
本公开示例可采用任何具有静态代码扫描的工具进行目标代码变动前和变动后的静态扫描。为了能够让使工具支持识别目标代码中每个执行阶段的起始位置和结束位置,需要对此目标代码的静态扫描工具进行适配,使得静态扫描工具按照适配的特征确定目标代码中的起始位置和结束位置。
在一种具体的实现方式中,可以采用Dapper框架进行特征。Dapper是.NET下的一种ORM框架。.NET是微软当代的操作平台,它允许人们在其上构建各种应用方式,使人们尽可能通过简单的方式,多样化地、最大限度地从网站获取信息,解决网站之间的协同工作,并打破计算机、设备、网站、各大机构和工业界间的障碍--即所谓的“数字孤岛”,从而实现因特网的全部潜能,搭建起第三代互联网平台。后缀为net是网络服务公司,为个人或商业提供服务。针对ORM,其中O是Object(对象);R是Relation(关系);M是Mapping(映射);ORM是一种对象关系映射的技术。
在底层工具适配阶段,可以在Dapper框架下,进行指定模块的代码特征标注。指定模块的代码即目标代码。
步骤S42:代码扫描。每次迭代时,采用静态代码扫描工具对指定模块的全量代码和增量代码进行静态代码扫描,扫描结果可输出为Json文件,后续步骤中对扫描结果进行二次分析。
每次迭代升级时,对所属模块进行全量、增量两次静态代码扫描,得到全量、增量代码特征(全量代码特征和增量代码特征可以包括宏定义、静态代码特征、函数调用),续步骤中对此结果进行二次分析。
耗时预判的实现需要在业务代码中对耗时的代码段的起始位置和结束位置进行标注(特征标注),并且在静态代码扫描(例如Cppcheck)工具中对标注代码进行特征识别,需要在业务代码和Cppcheck代码中进行适配开发(特征开发)。
分析业务代码到耗时的代码段的映射关系,要在Cppcheck中识别出每个耗时的代码段的起始和结束,需要固定的代码特征来标识,以feed-gr业务线为例,我们在业务代码中加入了宏定义来标识每个阶段和开始和结束。比如,设置目标代码的起始位置的代码特征(起始标记)为:FEED_DAPPER_FEATURE_BEGIN;设置结束位置的代码特征(结束标记)为:FEED_DAPPER_FEATURE_END。
在一种具体实现方式中,实现依赖静态代码扫描工具可以为Cppcheck,使用Cppcheck进行代码扫描,可以得到代码特征、函数间的调用关系等,将Cppcheck结果输出为Json文件,对Json文件进行分析,可以得到全局或者某一代码段内的函数调用链关系。
在一种具体的实现方式中,通过解析全量代码的特征文件得到所有耗时统计阶段在代码中的位置,包括每个阶段的起始行、结束行、所在函数、所在文件等信息,如下表1所示,展示了部分节点的起始位置和结束位置,以及所在函数和文件。
表1
全量代码扫描的结果中还包含代码段中每个函数的调用关系,可以分析得到每个耗时的代码段内所有执行到的函数,将全量代码和耗时的代码段与函数进行映射。比如表2所示的代码段和其全部对应的函数的映射关系。
表2
步骤S43:耗时的代码段预估。本步骤中,可预先估计改动的代码影响的代码段。
通过对指定模块的目标代码进行全量代码扫描的结果,可以得出模块全部执行阶段的起始位置(Begin)和结束位置(End)以及每个代码段的函数调用信息;通过对增量代码的分析,可以得出增量代码的代码特征,得到增量代码所对应的代码段。将增量代码和全量阶段进行映射,可以预估得出增量代码所影响的耗时的代码段。
比如,增量代码为函数的增量代码,代码变动前为函数funcA,变动后为函数funcB。通过变动前后,funcA和funcB的变化(Difference),得到函数funcB为增量代码对应的函数。通过函数funcB在目标代码中的被调用关系,将变动的函数映射到对应的代码段。
耗时预估根据全量代码扫描和增量代码扫描的结果进行确定。增量代码扫描和全量的区别在于增量结果中只包含了增量代码的特征,也就是变更代码的函数名、文件名等。
在增量代码扫描时,增量代码(diff_code)可能直接位于某个耗时的代码段内;增量代码也可能位于函数中,该函数在某个耗时的代码段内被调用。前者可以称为显示的变动;后者可称为隐式的变动。
显示的变动首先可参照图4B所示,在名称为a.cc的模块中,代码段“mmr”处于目标代码的120行到160行,增量代码“diff_code”处于目标代码的130到150行,那么可以认为增量代码所直接影响的耗时的代码段为mmr阶段,显示变动还包括增量代码开始于mmr起始位置之前的位置,但是行号仍处于160-180的行号之间,如图4C所示。或者结束于mmr结束之后的位置,但是行号仍处于160-180的行号之间,如图4D所示。
隐式的变动可参照图4E所示。增量代码改动在A函数,A函数内没有直接运行的耗时代码段,而B函数调用了A函数,所以增量代码因为函数调用的关系间接作用在B函数所运行的代码段。
综上,增量代码直接影响和间接影响到的耗时节点,在耗时预估时,可通过表格直观展示直接影响的代码段和间接影响的代码段。如下表3和
表4所示。
表3
表4
本示例以增量代码为例,在代码发生删减、替换、改变依赖包等改动操作时,可参照本示例执行代码处理方法。
步骤S44:异常波动消除。耗时的代码段预估之后结合性能测试各个阶段指标数据以及指定模块的目标代码执行的代码段的流程拓扑,可以对异常指标进行矫正。比如,性能测试的结果存在运行时间异常,时间增量超过人工设定的阈值,判断新增代码对应的代码段是否为异常代码段,则为代码改动引起可对代码进行矫正。
在不能完全消除性能测试延迟抖动的所有来源时,就会出现执行阶段的耗时波动,这种情况下需要采用耗时预估结果结合模块内部执行流程来矫正性能测试的异常阶段指标,从而消除一些非正常的波动。
如图4F所示,每个方框代表一个代码段。图4F模拟了一个模块内部阶段间的执行和调度流程,假设性能测试结果显示代码段G耗时上涨,就可以根据白盒代码分析的结果对此异常进行矫正,来判断性能测试结果是否符合代码改动预期。
在一种可能的实现方式中,仍然参照图4F,假设白盒代码分析得到的改动阶段为代码段C,通过模块执行阶段的流程拓扑判断G阶段执行在改动阶段之前,那么认为本次运行时间波动是由于代码改动导致,符合耗时的代码段预估。
在另一种可能的实现方式中,仍然参照图4F,假设白盒代码分析得到的改动阶段为B、D、E、F、J、K、H、I、M、N等阶段,从图中可以的出代码改动阶段与异常阶段不存在调度依赖关系,那么认为本次运行时间波动非代码改动导致,不符合耗时节点预估。
在另一种可能的实现方式中,仍然参照图4F,假设白盒分析得出的代码改动阶段为G、L,而性能测试异常阶段为G,异常阶段正好为代码改动所影响的阶段,那么认为本次运行时间波动是由于代码改动导致,符合耗时的代码段预估。
本公开实施例还提供一种代码处理装置,如图5所示,包括:
归属信息模块51,用于获得目标代码的基本归属信息;
代码段模块52,用于根据基本归属信息,获得目标代码所包括的代码段;
时间增量模块53,用于在目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段。
在一种实施方式中,如图6所示,归属信息模块包括:
静态扫描单元61,用于对目标代码进行静态扫描,获得目标代码的原有内容的基本归属关系。
在一种实施方式中,如图7所示,代码段模块包括:
分段标记单元71,用于获取目标代码的分段标记;
分段标记处理单元72,用于根据分段标记和目标代码的原有内容的基本归属关系,获得目标代码所包括的代码段。
在一种实施方式中,如图8所示代码处理装置还包括:
变动前运行时间模块81,用于确定变动前的目标代码的各代码段的运行时间。
在一种实施方式中,如图9所示,时间增量模块包括:
变动后运行时间单元91,用于在目标代码变动的情况下,确定变动后的目标代码的各代码段的运行时间;
增量对应单元92,用于根据变动前的目标代码的各代码段的运行时间和变动后的目标代码的各代码段的运行时间,获得运行时间增量对应的代码段。
在一种实施方式中,变动后运行时间单元还用于:
在目标代码变动的情况下,对目标代码进行重新的静态扫描,获得目标代码的变动内容的基本归属关系;
根据变动内容的基本归属关系,确定变动后的目标代码的各代码段;
根据变动后的目标代码的各代码段,确定变动后的目标代码的各代码段的运行时间。
在一种实施方式中,如图10所示,代码处理装置还包括:
状态模块101,用于根据运行时间的时间增量对应的代码段和目标代码发生变动的代码段,确定时间增量是否正常。
在一种实施方式中,状态模块还用于:
在运行时间的时间增量对应的代码段非目标代码发生变动的代码段的情况下,确定时间增量异常。
在一种实施方式中,如图11所示,代码处理装置还包括:
第一增量代码段模块111,用于在运行时间的时间增量的代码段为目标代码发生变动的代码段运行时序之后的代码段、且运行时间的时间增量的代码段与目标代码发生变动的代码段存在时序依赖关系的情况下,确定运行时间的时间增量对应的代码段非目标代码发生变动的代码段;
和/或,第二增量代码段模块112,用于在运行时间的时间增量的代码段与目标代码发生变动的代码段不存在时序依赖关系的情况下,确定运行时间的时间增量对应的代码段非目标代码发生变动的代码段。
本公开实施例各装置中的各单元、模块或子模块的功能可以参见上述数据处理方法中的对应描述,在此不再赘述。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图12示出了可以用来实施本公开的实施例的示例电子设备120的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或要求的本公开的实现。
如图12所示,电子设备120包括计算单元121,其可以根据存储在只读存储器(ROM)122中的计算机程序或者从存储单元128加载到随机访问存储器(RAM)123中的计算机程序来执行各种适当的动作和处理。在RAM123中,还可存储电子设备120操作所需的各种程序和数据。计算单元121、ROM122以及RAM123通过总线124彼此相连。输入输出(I/O)接口125也连接至总线124。
电子设备120中的多个部件连接至I/O接口125,包括:输入单元126,例如键盘、鼠标等;输出单元127,例如各种类型的显示器、扬声器等;存储单元128,例如磁盘、光盘等;以及通信单元129,例如网卡、调制解调器、无线通信收发机等。通信单元129允许电子设备120通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元121可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元121的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元121执行上文所描述的各个方法和处理,例如代码处理方法。例如,在一些实施例中,代码处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元128。在一些实施例中,计算机程序的部分或者全部可以经由ROM122和/或通信单元129而被载入和/或安装到电子设备120上。当计算机程序加载到RAM123并由计算单元121执行时,可以执行上文描述的代码处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元121可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行代码处理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (8)
1.一种代码处理方法,包括:
获得目标代码的基本归属信息,其中,所述基本归属信息,包括所述目标代码的代码内容之间的调用关系、代码段的开始和/或结束信息;
根据所述基本归属信息,获得所述目标代码所包括的代码段;
在所述目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段;
所述方法还包括:确定变动前的目标代码的各代码段的运行时间;
所述在所述目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段,包括:在所述目标代码变动的情况下,对所述目标代码进行重新的静态扫描,获得所述目标代码的变动内容的基本归属关系;根据所述变动内容的基本归属关系,确定变动后的目标代码的各代码段;根据所述变动后的目标代码的各代码段,确定所述变动后的目标代码的各代码段的运行时间;根据所述变动前的目标代码的各代码段的运行时间和所述变动后的目标代码的各代码段的运行时间,获得运行时间增量对应的代码段。
2.根据权利要求1所述的方法,其中,所述获得目标代码的基本归属信息,包括:
对所述目标代码进行静态扫描,获得所述目标代码的原有内容的基本归属关系。
3.根据权利要求2所述的方法,其中,所述根据所述基本归属信息,获得所述目标代码所包括的代码段,包括:
获取所述目标代码的分段标记;
根据所述分段标记和所述目标代码的原有内容的基本归属关系,获得所述目标代码所包括的代码段。
4.一种代码处理装置,包括:
归属信息模块,用于获得目标代码的基本归属信息,其中,所述基本归属信息,包括所述目标代码的代码内容之间的调用关系;
代码段模块,用于根据所述基本归属信息,获得所述目标代码所包括的代码段;
时间增量模块,用于在所述目标代码变动的情况下,根据变动前的目标代码的运行时间和变动后的目标代码的运行时间,获得运行时间增量对应的代码段;
所述装置还包括:变动前运行时间模块,用于确定变动前的目标代码的各代码段的运行时间;
所述时间增量模块包括:变动后运行时间单元,用于在所述目标代码变动的情况下,对所述目标代码进行重新的静态扫描,获得所述目标代码的变动内容的基本归属关系;根据所述变动内容的基本归属关系,确定变动后的目标代码的各代码段;根据所述变动后的目标代码的各代码段,确定所述变动后的目标代码的各代码段的运行时间;增量对应单元,用于根据所述变动前的目标代码的各代码段的运行时间和所述变动后的目标代码的各代码段的运行时间,获得运行时间增量对应的代码段。
5.根据权利要求4所述的装置,其中,所述归属信息模块包括:
静态扫描单元,用于对所述目标代码进行静态扫描,获得所述目标代码的原有内容的基本归属关系。
6.根据权利要求5所述的装置,其中,所述代码段模块包括:
分段标记单元,用于获取所述目标代码的分段标记;
分段标记处理单元,用于根据所述分段标记和所述目标代码的原有内容的基本归属关系,获得所述目标代码所包括的代码段。
7. 一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-3中任一项所述的方法。
8.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使计算机执行权利要求1-3中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110219902.4A CN112925552B (zh) | 2021-02-26 | 2021-02-26 | 代码处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110219902.4A CN112925552B (zh) | 2021-02-26 | 2021-02-26 | 代码处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112925552A CN112925552A (zh) | 2021-06-08 |
CN112925552B true CN112925552B (zh) | 2023-07-28 |
Family
ID=76172337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110219902.4A Active CN112925552B (zh) | 2021-02-26 | 2021-02-26 | 代码处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112925552B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168159A (zh) * | 2021-12-14 | 2022-03-11 | 深圳前海微众银行股份有限公司 | 智能合约部署方法、交易方法、装置及电子设备 |
US11928460B2 (en) * | 2022-04-20 | 2024-03-12 | International Business Machines Corporation | Dynamic update of a computer program in memory |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN104636471A (zh) * | 2015-02-12 | 2015-05-20 | 中国农业银行股份有限公司 | 一种程序代码的查找方法及装置 |
CN108595326A (zh) * | 2018-04-13 | 2018-09-28 | 捷德(中国)信息科技有限公司 | 基于单条指令的代码耗时统计方法、系统及存储介质 |
CN109002295A (zh) * | 2018-10-19 | 2018-12-14 | 武汉斗鱼网络科技有限公司 | 一种静态代码扫描方法、系统、服务器及存储介质 |
WO2019077607A1 (en) * | 2017-10-17 | 2019-04-25 | Argus Cyber Security Ltd. | SYSTEM AND METHOD FOR MANAGING PROGRAM MEMORY ON A STORAGE DEVICE |
CN110704309A (zh) * | 2019-09-12 | 2020-01-17 | 上海麦克风文化传媒有限公司 | 一种自动化代码质量检查方法及系统 |
CN112181429A (zh) * | 2020-09-28 | 2021-01-05 | 百度在线网络技术(北京)有限公司 | 信息处理方法、装置以及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108475303A (zh) * | 2015-12-31 | 2018-08-31 | 计算机2.0(2015)有限公司 | 应用递增多项式代码增强抵抗反向工程的计算机实现方法 |
-
2021
- 2021-02-26 CN CN202110219902.4A patent/CN112925552B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN104636471A (zh) * | 2015-02-12 | 2015-05-20 | 中国农业银行股份有限公司 | 一种程序代码的查找方法及装置 |
WO2019077607A1 (en) * | 2017-10-17 | 2019-04-25 | Argus Cyber Security Ltd. | SYSTEM AND METHOD FOR MANAGING PROGRAM MEMORY ON A STORAGE DEVICE |
CN108595326A (zh) * | 2018-04-13 | 2018-09-28 | 捷德(中国)信息科技有限公司 | 基于单条指令的代码耗时统计方法、系统及存储介质 |
CN109002295A (zh) * | 2018-10-19 | 2018-12-14 | 武汉斗鱼网络科技有限公司 | 一种静态代码扫描方法、系统、服务器及存储介质 |
CN110704309A (zh) * | 2019-09-12 | 2020-01-17 | 上海麦克风文化传媒有限公司 | 一种自动化代码质量检查方法及系统 |
CN112181429A (zh) * | 2020-09-28 | 2021-01-05 | 百度在线网络技术(北京)有限公司 | 信息处理方法、装置以及电子设备 |
Non-Patent Citations (3)
Title |
---|
Dead code elimination technique in eclipse compiler for Java;Hiral H. Karer 等;2015 International Conference on Control, Instrumentation, Communication and Computational Technologies (ICCICCT);全文 * |
基于标记语言的跨平台并行编程框架设计;唐佩佳;徐云;钟旭阳;;计算机系统应用(第10期);全文 * |
开源代码仓库增量分析方法;许福;杨湛宇;陈志泊;孙钰;张海燕;;清华大学学报(自然科学版)(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112925552A (zh) | 2021-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113342345A (zh) | 深度学习框架的算子融合方法、装置 | |
CN112925552B (zh) | 代码处理方法、装置、设备及存储介质 | |
CN114116065B (zh) | 获取拓扑图数据对象的方法、装置、及电子设备 | |
CN113760769B (zh) | 测试用例处理方法、装置、电子设备以及存储介质 | |
CN112926008B (zh) | 生成表单页面的方法、装置、电子设备和存储介质 | |
CN113849581A (zh) | 告警信息的处理方法、装置、设备和存储介质 | |
CN113553428B (zh) | 文档分类方法、装置及电子设备 | |
CN114217848A (zh) | 依赖关系处理方法、装置、电子设备及计算机存储介质 | |
CN113127357B (zh) | 单元测试方法、装置、设备、存储介质及程序产品 | |
CN116302218B (zh) | 函数信息的添加方法、装置、设备以及存储介质 | |
CN114168119B (zh) | 代码文件编辑方法、装置、电子设备以及存储介质 | |
CN116185389A (zh) | 一种代码生成方法、装置、电子设备及介质 | |
CN114327577A (zh) | 一种代码变动的确定方法、装置、电子设备及存储介质 | |
CN114330718A (zh) | 因果关系的提取方法、装置及电子设备 | |
CN114172725B (zh) | 非法网站的处理方法、装置、电子设备和存储介质 | |
CN113032069B (zh) | 页面切换方法、装置、电子设备及可读存储介质 | |
CN112817990B (zh) | 数据处理方法、装置、电子设备以及可读存储介质 | |
CN114816467B (zh) | 升级文件的生成方法、装置和电子设备 | |
CN114416414B (zh) | 一种故障信息定位方法、装置、设备及存储介质 | |
CN115408195A (zh) | 一种异构平台的批量任务管理方法、设备和存储介质 | |
CN118069507A (zh) | 基于代码知识图谱的回归测试质量评估方法和装置 | |
CN115934101A (zh) | 一种接口文档生成方法、装置、介质以及电子设备 | |
CN117215955A (zh) | 代码的覆盖率获取方法、装置及电子设备 | |
CN117251167A (zh) | 一种软件物料清单构建方法、装置、设备及介质 | |
CN116048519A (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 |