CN118151941A - 电力物联操作***的编译优化方法、装置、设备和介质 - Google Patents

电力物联操作***的编译优化方法、装置、设备和介质 Download PDF

Info

Publication number
CN118151941A
CN118151941A CN202410272061.7A CN202410272061A CN118151941A CN 118151941 A CN118151941 A CN 118151941A CN 202410272061 A CN202410272061 A CN 202410272061A CN 118151941 A CN118151941 A CN 118151941A
Authority
CN
China
Prior art keywords
source code
code file
compiling
files
file
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
CN202410272061.7A
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.)
China Southern Power Grid Co Ltd
Original Assignee
China Southern Power Grid 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 China Southern Power Grid Co Ltd filed Critical China Southern Power Grid Co Ltd
Priority to CN202410272061.7A priority Critical patent/CN118151941A/zh
Publication of CN118151941A publication Critical patent/CN118151941A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种电力物联操作***的编译优化方法、装置、设备和介质。其中,该方法包括:根据不同源代码文件之间的依赖关系获取依赖关系图;基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围;根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序;根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。本发明实施例实现了对电力物联操作***的源代码进行编译优化,可调整源代码的编译顺序,减少增量编译导致的***编译等待时间,可提高编译效率,保证电力物联操作***的快速开发以及稳定运行。

Description

电力物联操作***的编译优化方法、装置、设备和介质
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种电力网络操作***的编译优化方法、装置、设备和介质。
背景技术
在电力物联网的核心架构中,编译子***的设计和实施是不可或缺的环节,其质量直接关系到整个电力物联操作***的稳定性和效率;编译子***需要不仅仅是高效,更需要准确无误;因为其承担着将源代码转换为机器代码的重任;这一过程的任何失误都可能导致电力***运行中的故障或不稳定;而在电力操作***中,这种失误可能会造成非常严重的后果,比如实时数据处理错误、电网控制失灵等;这些都将严重影响到电网的安全和可靠运行。
在传统编译过程中,开发人员可能需要频繁的等待整个项目的重新编译,这不仅浪费时间,还可能降低开发人员的积极性;而一个优化过的编译子***能够实现增量编译,只对修改过的部分进行编译,如此可以显著减少等待时间,使开发人员能够更快的看到更改效果,从而加快开发周期,提高整体的工作效率;因此如何对电力物联操作***进行编译优化,对于保证电力物联操作***的快速开发和稳定运行有着至关重要的作用。
发明内容
本发明提供了一种电力物联操作***的编译优化方法、装置、设备和介质,以实现对电力物联操作***的源代码进行编译优化,可调整源代码的编译顺序,减少增量编译导致的***编译等待时间,可提高编译效率,保证电力物联操作***的快速开发以及稳定运行。
根据本发明的一方面,提供了一种电力物联操作***的编译优化方法,其中,该方法包括:
根据不同源代码文件之间的依赖关系获取依赖关系图;
基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围;
根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序;
根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。
根据本发明的另一方面,还提供了一种电力物联操作***的编译优化装置,其中,该装置包括:
依赖确定模块,用于根据不同源代码文件之间的依赖关系获取依赖关系图;
变更范围模块,用于基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围;
执行顺序模块,用于根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序;
编译处理模块,用于根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。
根根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的电力物联操作***的编译优化方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的电力物联操作***的编译优化方法。
本发明实施例的技术方案,通过依据不同源代码文件之间的依赖关系建立依赖关系图,确定源代码文件内的已发生过编译的第一源代码文件,并按照依赖关系图确定出第一源代码文件的变更影响范围,按照变更影响范围对各第一源代码文件对应的编译任务执行顺序进行调整,根据调整后的编译任务执行顺序对应的代码文件列表对源代码文件进行编译,可实现对电力物联操作***的源代码进行编译优化,可调整源代码的编译顺序,减少增量编译导致的***编译等待时间,可提高编译效率,保证电力物联操作***的快速开发以及稳定运行。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例一提供的一种电力物联操作***的编译优化方法的流程图;
图2是根据本发明实施例二提供的另一种电力物联操作***的编译优化方法的流程图;
图3是根据本发明实施例三提供的一种电力物联操作***的编译优化方法的示例图;
图4是根据本发明实施例四提供的一种电力物联操作***的编译优化装置的结构示意图;
图5是实现本发明实施例的电力物联操作***的编译优化方法的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一
图1是根据本发明实施例一提供的一种电力物联操作***的编译优化方法的流程图,本实施例可适用于电力物联操作***的编译优化的情况,该方法可以由电力物联操作***的编译优化装置来执行,该编译优化装置可以采用硬件和/或软件的形式实现,该装置可配置于服务器或服务器集群中。如图1所示,该方法包括:
步骤110、根据不同源代码文件之间的依赖关系获取依赖关系图。
其中,源代码文件可以是需要进行编译的文件,源代码文件可以是电力物联操作***中用于实现功能的执行代码文件,源代码文件的数量可以为至少两个。依赖关系可以是不同源代码文件之间的依赖关系,例如,一个源代码文件A的类继承自另一个源代码文件B,则可以认为源代码文件A与源代码文件B之间存在依赖关系,依赖关系图可以是反映上述的多个源代码文件之间相关依赖关系的图,该依赖关系图可以具体为有向无环图,依赖关系图中每个节点可以对应一个源代码文件,依赖关系图中每条边可以对应一个依赖关系。
在本发明实施例中,可以对至少两个源代码文件进行分析,确定出不同源代码文件之间的依赖关系,可以依据获取到的依赖关系建立对应依赖关系图。
步骤120、基于依赖关系图分别确定不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围。
其中,第一源代码文件可以是前述的源代码文件中的一个或多个,第一源代码文件可以是至少经历过一次编译过程,第一源代码文件相较其初始状态可以存在部分信息改变,例如,散列值、初始时间戳等。变更影响范围可以是第一源代码发生变更也将导致其他发生改变的源代码,变更影响范围可以是直接依赖于第一源代码文件或间接依赖于第一源代码文件的源代码文件。
在本发明实施例中,可以在前述的源代码文件中确定出已经发生过编译的源代码文件作为第一源代码文件,可以在依赖关系图中查找针对每个第一源代码文件查找直接或间接依赖于第一源代码文件的源代码文件,可以将这些源代码文件作为对应第一源代码文件的变更影响范围。可以理解的是,直接依赖关系可以源代码文件A直接依赖于源代码文件B,间接依赖关系可以包括源代码文件A直接依赖于源代码文件B,源代码文件B直接依赖于源代码文件C,源代码文件A可以间接依赖于源代码文件C。
步骤130、根据变更影响范围优化各第一源代码文件分别对应的编译任务执行顺序。
其中,编译任务执行顺序可以是对不同源代码文件进行编译的任务的先后执行顺序,编译任务执行顺序内可以包括对应不同源代码文件的编译任务的标识,可以理解的是,编译任务执行顺序内每个元素可以对应于一个源代码文件。进一步的,在执行本发明实施例的方法具备并行执行能力时,可以存在多个编译任务执行顺序。
在本发明实施例中,可以针对每个第一源代码文件获取其前述的变更影响范围,针对该变更影响范围确定出一个或多个未经过编译的源代码文件,可以确定第一源代码文件的变更对变更影响范围内源代码文件的影响的程度,可以通过该影响程度大小确定源代码文件对应的编译任务的先后执行顺序,可以按照上述影响程度大小依次排列前述确定出的一个或多个未经编译的源代码文件的编译任务以作为调整后的编译任务执行顺序,可以理解是,一个变更影响范围内的源代码文件,该源代码文件越在依赖关系图内靠近第一源代码文件,可以认为受到第一源代码文件的影响程度越大,该源代码文件在依赖关系图内越远离第一源代码文件,可以认为收到第一源代码文件的影响程度越小。
步骤140、根据各编译任务执行顺序对应的代码文件列表对源代码文件进行编译。
在本发明实施例中,可以依次按照确定出的每个第一源代码文件的编译任务执行顺序选择源代码文件进行编译,从而生成一个或多个可执行的代码文件。可以理解是,在存在多个编译任务执行顺序时,可以按照上述多个编译任务执行顺序进行并行执行,或者,先选择编译任务执行顺序中包括元素多的编译任务执行顺序执行。
本发明实施例,通过依据不同源代码文件之间的依赖关系建立依赖关系图,确定源代码文件内的已发生过编译的第一源代码文件,并按照依赖关系图确定出第一源代码文件的变更影响范围,按照变更影响范围对各第一源代码文件对应的编译任务执行顺序进行调整,根据调整后的编译任务执行顺序对应的代码文件列表对源代码文件进行编译,可实现对电力物联操作***的源代码进行编译优化,可调整源代码的编译顺序,减少增量编译导致的***编译等待时间,可提高编译效率,保证电力物联操作***的快速开发以及稳定运行。
进一步的,在上述发明实施例的基础上,还包括:保存编译生成的代码文件,并链接所述代码文件为可执行代码文件;验证所述可执行代码文件。
在本发明实施例中,可以将编译生成的代码文件进行保存,可以分析代码文件中的符号表并识别所有外部引用,为代码文件中每个段分配运行时的内存地址,并确保不同代码文件的相同类型段放置在连续的内存区域,解析所有代码文件之间的外部引用,并将外部应用关联到正确的内存地址,在所有地址分配完成后生成代码文件对应的可执行代码文件。可以获取针对可执行文件编写的自动化测试案例,并将自动化测试案例转换为自动化测试脚本,基于预先准备的测试数据集以及自动化测试脚本对可执行代码文件进行测试以获取测试结果,其中,测试结果内可以包括测试成功案例和/或测试失败案例。可以针对测试结果的失败案例生成失败日子,以便维护人员确定维护方法。
实施例二
图2是根据本发明实施例二提供的另一种电力物联操作***的编译优化方法的流程图,本发明实施例是在上述发明实施例基础上的具体化,对编译任务执行顺序的优化进行详细描述,参见图2,本发明实施例提供的方法具体包括如下步骤:
步骤210、调用预设静态代码分析工具解析各源代码文件,并分别提取源代码文件中类和函数变量定义。
在本发明实施例中,可以调用预设静态代码分析工具对每个源代码文件进行分析,可以提取源代码文件中的类、函数变量定义以及其相关之间的引用关系,可以通过预设静态代码分析工具将源代码文件生成一个抽象语法树,该抽象语法树代表了源代码文件的代码结果,可以在该抽象语法树中提取包括类、函数以及变量等代码结构的节点,并且预设静态代码分析工具还可以生成源代码文件的符号表,该符号表可以记载每个类、函数和变量的定义和引用,在符号表中每个符号都可以指向其定义的位置以及所引用符号的位置,可以通过上述的构成语法树以及符号表确定出源代码文件中的类和函数变量定义。
步骤220、将不同源代码文件的类和函数变量定义之间的引用关系作为不同源代码文件之间的依赖关系,构建各依赖关系对应的依赖关系图。
其中,引用关系可以是不同类、不同函数变量定义之间的引用关系,该引用关系可以包括直接引用关系以及间接引用关系。
在本发明实施例中,提取每个源代码文件中由预设静态代码分析工具确定出的类、函数变量定义以及其对应的引用关系,可以将这些引用关系作为源代码文件之间的依赖关系,可以按照前述依赖关系构建依赖关系图,依赖关系图内每个阶段可以代表一个源代码文件(编译单元),依赖关系图内边代表依赖关系,对于每个源代码文件还可以通过记录它包含的头文件以及其他源文件确定出直接包含的情况。
步骤230、识别依赖关系图中的循环依赖,并将循环依赖从依赖关系图剔除后进行拓扑排序。
其中,循环依赖可以是源代码文件之间彼此相互依赖的依赖关系,依赖关系图中的边可以具有两个方向。
在本发明实施例中,可以在依赖关系图中识别出具有两个方向的边作为循环依赖,可以将该循环依赖在依赖关系图中剔除,该剔除的方式可以包括剔除对应循环依赖的边的两个方向中的其中一个方向。可以将剔除循环依赖的依赖关系图进行拓扑排序,也即,确定出依赖关系图的所有顶点的线性序列,并且线性序列满足以下条件:1、每个顶点出现且出现一次;2、若存在一条从顶点A到顶点B的路径,那么线性序列中顶点A出现在顶点B的前面。
步骤240、筛选不同源代码文件中的第一源代码文件,其中,第一源代码文件的筛选方式包括以下至少之一:初始时间戳筛选、版本控制***识别、敏感文件检测、散列值检测。
在本发明实施例中,可以对所有源代码文件通过初始时间戳筛选、版本控制***识别、敏感文件检测、散列值检测中的方式进行逐级筛选,可以将通过初始时间戳筛选、版本控制***识别、敏感文件检测、散列值检测中的方式中一种或多种方式共同筛选出的源代码文件作为第一源代码文件。
步骤250、深度优先搜索遍历依赖关系图以确定直接依赖于或间接依赖于第一源代码文件的未发生过编译的第二源代码文件作为第一源代码文件的变更影响范围。
其中,第二源代码文件可以是所有源代码文件内未经过编译的源代码文件。
在本发明实施例中,可以对依赖关系图进行深度优先搜索遍历,可以记录每个第一源代码文件之后遍历到的第二源代码文件作为该第一源代码文件的变更影响范围,可以理解是,每个变更影响范围内的第二源代码文件可以不经过其他第一源代码文件可以在依赖关系图内到达该变更影响范围对应的第一源代码文件,第二源代码文件直接到达第一源代码文件则该第二源代码文件直接依赖于第一源文件,第二源代码文件经过其他第二源代码文件到达第一源代码文件,则第二源代码文件间接依赖于第一源代码文件。具体的,可以基于依赖关系图从已经过编译的第一源代码文件开始,采用深度优先搜索图遍历算法来对依赖关系图进行遍历,将直接以及间接依赖于第一源代码文件的源代码文件进行标记,得到存在影响的第二源代码文件。具体来说,如果文件M被修改了,所有依赖于M的文件(例如M被包含在其他文件中)也需要考虑重新编译,因为M的变化可能会影响到这些文件,而且所有直接或间接依赖于M的文件也被标记为受影响。
步骤260、依据依赖关系图确定各第一源代码文件对应变更影响范围内第二源代码文件之间的源代码引用顺序。
在本发明实施例中,按照第二源代码文件到达其对应的第一源代码文件的距离对属于相同变更影响范围的第二源代码文件进行排序,可以将各变更影响范围内各第二源代码文件的排序序列作为源代码引用顺序。
步骤270、按照源代码引用顺序编排对应第一源代码文件的编译任务执行顺序。
在本发明实施例中,可以针对每个第一源代码文件,按照其对应的源代码引用顺序对其对应的编译任务执行顺序进行编排,也即,源代码引用顺序中的第二源代码文件的排列顺序,可以是编译任务执行顺序中对第二源代码文件执行编译任务的顺序。例如,可以提取每个第一源代码文件的源代码引用顺序,在每个源代码引用顺序内可以依次提取第二源代码文件,并将该第二源代码文件的编译任务添加到编译任务执行顺序。
示例性的,B、C、D文件均直接依赖于A文件,且存在F、G、H分别直接依赖于B、C、D文件,则传播路径如下所述:
链路1:A文件-B文件-F文件;
链路2:A文件-C文件-G文件;
链路3:A文件-D文件-H文件;
基于上述可知,边缘任务的执行顺序可以是A文件是第一执行层,B文件、C文件以及D文件是第二执行层,F、G以及H文件是第三执行层。
步骤280、分别将对应不同第一源代码文件的将编译任务执行顺序选择第二源代码文件依次添加到对应第一源代码文件的代码文件列表。
在本发明实施例中,可以提取每个第一源代码文件的编译任务执行顺序,将各编译任务执行顺序的第二源代码文件依次添加到对应第一源代码文件的代码文件列表,可以理解的是,代码文件列表内每个第二源代码文件的顺序可以与编译任务执行顺序一致。
步骤290、并行编译各第一源代码文件对应代码文件列表中的第二源代码文件。
在本发明实施例中,可以对不同的第一源代码文件的代码文件列表中的第二源代码文件进行并行编译,也即属于不同第一源代码文件的代码文件列表的第二源代码文件可以由不同线程执行编译过程。在一些示例性的实施方式中,可以针对每个源代码文件的代码文件列表创建一个编译线程,由每个编译线程执行对应代码文件列表中第二源代码文件的编译任务。
本发明实施例,通过调用预设静态代码工具对源代码文件进行解析提取类和函数变量定义,将类型、函数变量定义之间的引用关系作为源代码文件的依赖关系,构建各依赖关系对应的依赖关系图,识别依赖关系图中的循环依赖并剔除,生成依赖关系图对应的拓扑排序,筛选出源代码文件中第一源代码文件,深度遍历依赖关系图以确定出直接依赖或间接依赖第一源代码文件的第二源代码文件作为对应第一源代码文件的变更影响范围,确定变更影响范围内各第二源代码文件之间的源代码引用顺序,生成对应源代码引用顺序的编译任务执行顺序,将各第一源代码文件的编译任务执行顺序对应的第二源代码文件依序添加到代码文件列表,并行编译各第一源代码文件对应代码文件列表中的第二源代码文件,可实现对电力物联操作***的源代码进行编译优化,通过不同已编译的代码文件的影响范围调整源代码的编译顺序,减少增量编译导致的***编译等待时间,通过并行编译的方式提高编译效率,保证电力物联操作***的快速开发以及稳定运行。
进一步的,在上述发明实施例的基础上,筛选不同源代码文件中的第一源代码文件,包括:
提取各源代码文件记录的初始时间戳以及散列值;
调用版本***识别不同源代码文件中已经更改的源代码文件,将不同源代码文件中已更改的源代码文件记录到第一已更改代码文件列表,将不同源代码文件未更改的源代码文件记录到第一未更改代码文件列表;
检查第一未更改代码文件列表中源代码文件的时间戳是否与源代码文件记录的初始时间戳不同,若不同则将源代码文件记录到第二已更改代码文件表,若相同则将源代码文件记录到第二未更改代码文件列表;
检测第二未更改代码文件列表的源代码文件是否为敏感文件,将确定为敏感文件的源代码文件记录到第三已更改代码文件列表,将未确定为敏感文件的源代码文件记录到第三未更改代码文件列表;
检查第三未更改代码文件列表的源代码文件的散列值是否与源代码文件的散列值相同,若不同则将源代码记录到第四已更改代码文件列表,若相同则将源代码记录到第四未更改代码文件列表;
将第一已更改代码文件列表、第二已更改代码文件列表、第三已更改代码文件列表和第四已更改代码文件列表的源代码文件作为第一源代码文件。
其中,初始时间戳可以是标识每个源代码文件初始编辑时间的信息,散列值可以是标识每个源代码文件的文件完整性的信息。
在本发明实施例中,可以读取每个源代码文件上记录的初始时间戳和散列值,基于版本控制***识别已更改的代码文件,得到第一已更改代码文件列表和第一未更改代码文件列表;可以基于时间戳检查第一未更改代码文件列表中所有源代码文件的时间戳是否与初始时间戳不同,若不同则认为是已更改代码的第一源代码文件,得到第二已更改代码文件列表和第二未更改代码文件列表;对第二未更改代码文件列表的源代码文件进行敏感文件监测,得到第三已更改代码文件列表和第三未更改代码文件列表,其中,敏感文件可以是通过预配置名单或者预配置的关键词确定,对第三未更改代码文件列表进行散列值检测,若源代码文件的散列值与之前记录的散列值不同,则判定为已更改文件,得到第四已更改代码文件列表和第四未更改代码文件列表;可以基于第一已更改代码文件列表、第二已更改代码文件列表、第三已更改代码文件列表以及第四已更改代码文件列表得到最终的已更改代码文件列表,该最终的已更改代码文件列表的所有源代码文件可以记为第一源代码文件,而第四未更改代码文件列表为未更改的源代码文件的文件列表,也即记录第二源代码文件的文件列表。
实施例三
图3是根据本发明实施例三提供的一种电力物联操作***的编译优化方法的示例图,参见图1所示,对本发明的最优实施例做进一步的说明;基于电力物联操作***的编译子***的性能优化方法,包括以下步骤:
步骤1:基于源代码确定代码文件之间的依赖关系,并建立依赖关系图;
作为本实施例的一种可能的实现方式,所述步骤1包括以下步骤:
步骤1.1:采用静态代码分析工具来解析代码文件,提取出类、函数变量定义及其相互之间的引用关系;通过静态代码分析工具生成一个抽象语法树,树结构表示了代码文件内代码的结构,包含类、函数以及变量等等;并且静态代码分析工具还会生成符号表,记录每个类、函数和变量的定义和引用;在表中,每个符合都会指向其定义的位置和所引用的符号的位置;通过静态代码分析出代码中的引用关系,例如,一个函数调用了另一个函数,或一个类继承了另一个,这些关系都会被进行记录。
步骤1.2:基于步骤1.1中所确定的引用关系确定代码文件之间的依赖关系,例如头文件的包含关系;可以理解的是,步骤1.2中的依赖关系包括了间接依赖和直接依赖;其中,直接依赖:对于每个源文件分析其直接依赖的文件,如C/C++中的#include指令引入的头文件,或Java中通过import语句引入的其他类;再比如,文件A中的类或函数引用了文件B中定义的类或函数,则说明A依赖于B。间接依赖:文件A包含文件B,文件B包含文件C,那么文件A间接依赖于文件C。
步骤1.3:基于代码文件之间的依赖关系,建立依赖关系图;节点代表编译单元(代码文件),边代表依赖关系;对于每个源文件,记录它包含的头文件以及其他源文件通过头文件间接包含的情况;
步骤1.4:识别依赖关系图中的循环依赖,并将依赖关系图中的循环依赖删除;并对依赖关系图进行拓扑排序,得到最终的依赖关系图。
在本发明实施例中,可通过建立代码文件间的依赖关系图,并且在依赖关系图中充分考虑了每个代码文件之间的直接依赖关系和间接依赖关系,有助于后续步骤根据依赖关系的对代码文件进行链路走向的并行编译。
步骤2:检测当前发生过编译的代码文件;
作为本发明实施例的一种可能的实现方式,步骤2包括以下步骤:
步骤2.1:在所有代码文件上记录初始时间戳和散列值;
步骤2.2:基于版本控制***识别已更改的代码文件,得到第一已更改代码文件列表和第一未更改代码文件列表;
步骤2.3:基于时间戳检查第一未更改代码文件列表中的时间戳是否与代码文件内记录的初始时间戳不同,若不同则认为该代码文件是已更改代码文件,从而得到第二已更改代码文件列表和第二未更改代码文件列表;
步骤2.4:对第二未更改代码文件列表内的代码文件进行敏感文件监测,得到第三已更改代码文件列表和第三未更改代码文件列表;
步骤2.5:对第三未更改代码文件列表内的代码文件进行散列值检测,若代码文件当前的散列值与之前记录的散列值不同,则判定该代码文件为已更改文件,得到第四已更改代码文件列表和第四未更改代码文件列表;
步骤2.6:基于第一已更改代码文件列表、第二已更改代码文件列表、第三已更改代码文件列表以及第四已更改代码文件列表,得到最终的已更改代码文件列表,并将第四未更改代码文件列表为最终的未更改代码的文件列表。
在本实施例中基于上述技术方案,有效的避免了已更改文件的检测遗漏,确保在捕捉到所有必要的变更的同时,避免不必要的工作,提高了整体的效率和响应性。
步骤3:基于依赖关系图以及检测到的发生过编译的代码文件,确定依赖于已修改代码文件的未修改代码文件,并确定变更影响;
作为本实施例的一种可能的实现方式,所述步骤3确定变更影响的步骤如下:
基于依赖关系从已修改的代码文件开始,采用深度优先搜索图遍历算法来对依赖关系图进行遍历,将直接以及间接依赖于已修改代码文件的代码文件进行标记,得到存在影响的代文文件。具体来说,如果文件M被修改了,所有依赖于M的文件(例如M被包含在其他文件中)也需要考虑重新编译,因为M的变化可能会影响到这些文件,而且所有直接或间接依赖于M的文件也被标记为受影响。
步骤4:基于确定的变更影响,优化编译任务的执行顺序,得到优化后的代码文件列表;例如:B、C、D文件均直接依赖于A文件,且存在F、G、H分别直接依赖于B、C、D文件,则传播路径如下所述:
链路1:A文件-B文件-F文件;
链路2:A文件-C文件-G文件;
链路3:A文件-D文件-H文件;
基于上述可知,执行顺序时A文件是第一执行层、B文件、C文件以及D文件是第二执行层,F、G以及H文件是第三执行层;
步骤5:基于步骤4中的代码文件列表,得到需要编译的必要代码文件,并对必要代码文件进行编译;
作为本实施例的一种可能的实现方式,所述步骤5包括以下步骤:
步骤5.1:基于步骤4中的代码文件列表,得到需要编译的必要代码文件列表;
步骤5.2:对多个所述必要代码文件列表执行并行编译。
接续上述例子可知,在第二执行层时,B文件、C文件以及D文件是可以并行执行的,由于B文件、C文件以及D文件之间是无依赖关系的,因此可以并行编译,第三执行层也无依赖关系,因此可以并行执行。
步骤6:将所有代码文件存储到数据库中;
步骤7:调用数据库中存储的编译后的代码文件,并将编译后的文件链接成最终的可执行代码文件;
作为本实施例的一种可能的实现方式,所述步骤7包括以下步骤:
步骤7.1:从数据库中检索所有必要的编译后的代码文件,得到所有编译后的目标文件;
步骤7.2:分析所有目标文件中的符号表,识别所有外部引用;其中外部应用是指一个代码文件(编译单元)中,对于其他代码文件中定义的全局变量或函数的引用;
步骤7.3:为目标文件中的每个段(如代码段、数据段)分配运行时的内存地址,并确保不同编译单元的相同类型的段被放在连续的内存区域中;
步骤7.4:解析所有编译单元之间的外部引用,将引用关联到正确的内存地址;
步骤7.5:当所有地址分配完成后,生成最终的可执行代码文件。
步骤8:采用自动化测试验证新编译的可执行代码文件的正确性和性能。
其中,作为本实施例的一种可能的实现方式,步骤8包括以下步骤:
步骤8.1:基于可执行代码文件的功能,编写自动化测试案例,并将自动化测试案例转化为自动化测试脚本;
步骤8.2:准备用于测试的数据集;
步骤8.3:基于自动化测试工具(如Selenium,JUnit,TestNG,Cucumber等)执行自动化测试脚本,并基于测试的数据集,得到自动化测试工具的测试结果;
步骤8.4:基于测试结果,得到成功和失败案例;
步骤8.5:对失败案例生成失败日志,供维护人员确定维护方法。
本发明实施例可通过建立依赖关系图标记不同代码文件之间的依赖关系,针对已被编译的代码文件能够基于依赖关系图确定出存在影响的未编译的代码文件;并基于依赖关系的影响程度生成代码文件的执行顺序,确定出每个编译的代码文件后需要编译的代码文件,可提高开发人员的开发效率。
实施例四
图4是根据本发明实施例四提供的一种电力物联操作***的编译优化装置的结构示意图,如图4所示,该装置包括:
依赖确定模块410,用于根据不同源代码文件之间的依赖关系获取依赖关系图。
变更范围模块420,用于基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围。
执行顺序模块430,用于根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序。
编译处理模块440,用于根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。
本发明实施例,通过依赖确定模块依据不同源代码文件之间的依赖关系建立依赖关系图,变更范围模块确定源代码文件内的已发生过编译的第一源代码文件,并按照依赖关系图确定出第一源代码文件的变更影响范围,执行顺序模块按照变更影响范围对各第一源代码文件对应的编译任务执行顺序进行调整,编译处理模块根据编译任务执行顺序对应的代码文件列表对源代码文件进行编译,可实现对电力物联操作***的源代码进行编译优化,可调整源代码的编译顺序,减少增量编译导致的***编译等待时间,可提高编译效率,保证电力物联操作***的快速开发以及稳定运行。
在一些发明实施例中,依赖确定模块410包括:
文件分析单元,用于调用预设静态代码分析工具解析各所述源代码文件,并分别提取所述源代码文件中类和函数变量定义。
关系图建立单元,用于将不同所述源代码文件的所述类和所述函数变量定义之间的引用关系作为不同所述源代码文件之间的所述依赖关系,构建各所述依赖关系对应的依赖关系图。
在另一些发明实施例中,依赖确定模块410还包括:关系图调整单元,用于识别所述依赖关系图中的循环依赖,并将所述循环依赖从所述依赖关系图剔除后进行拓扑排序。
在一些发明实施例中,变更范围模块420包括:
编译筛选单元,用于筛选所述不同源代码文件中的所述第一源代码文件,其中,所述第一源代码文件的筛选方式包括以下至少之一:初始时间戳筛选、版本控制***识别、敏感文件检测、散列值检测。
范围确定单元,用于深度优先搜索遍历所述依赖关系图以确定直接依赖于或间接依赖于所述第一源代码文件的未发生过编译的第二源代码文件作为所述第一源代码文件的所述变更影响范围。
在一些发明实施例中,编译筛选单元具体用于:提取各所述源代码文件记录的初始时间戳以及散列值;
调用所述版本***识别所述不同源代码文件中已经更改的源代码文件,将所述不同源代码文件中已更改的源代码文件记录到第一已更改代码文件列表,将所述不同源代码文件未更改的源代码文件记录到第一未更改代码文件列表;
检查所述第一未更改代码文件列表中源代码文件的时间戳是否与所述源代码文件记录的所述初始时间戳不同,若不同则将所述源代码文件记录到第二已更改代码文件表,若相同则将所述源代码文件记录到第二未更改代码文件列表;
检测所述第二未更改代码文件列表的源代码文件是否为敏感文件,将确定为敏感文件的所述源代码文件记录到第三已更改代码文件列表,将未确定为敏感文件的所述源代码文件记录到第三未更改代码文件列表;
检查所述第三未更改代码文件列表的源代码文件的散列值是否与所述源代码文件的所述散列值相同,若不同则将所述源代码记录到第四已更改代码文件列表,若相同则将所述源代码记录到第四未更改代码文件列表;
将所述第一已更改代码文件列表、所述第二已更改代码文件列表、所述第三已更改代码文件列表和所述第四已更改代码文件列表的源代码文件作为所述第一源代码文件。
在一些发明实施例中,执行顺序模块430包括:
引用顺序单元,用于依据所述依赖关系图确定各所述第一源代码文件对应所述变更影响范围内第二源代码文件之间的源代码引用顺序。
顺序编排单元,用于按照所述源代码引用顺序编排对应所述第一源代码文件的所述编译任务执行顺序。
在一些发明实施例中,编译处理模块440包括:
列表生成单元,用于分别将对应不同所述第一源代码文件的将所述编译任务执行顺序选择第二源代码文件依次添加到对应所述第一源代码文件的所述代码文件列表。
编译执行单元,用于并行编译各所述第一源代码文件对应所述代码文件列表中的所述第二源代码文件。
本发明实施例所提供的电力物联操作***的编译优化装置可执行本发明任意实施例所提供的电力物联操作***的编译优化方法,具备执行方法相应的功能模块和有益效果。
实施例五
图5是实现本发明实施例的电力物联操作***的编译优化方法的电子设备的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图5所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如电力物联操作***的编译优化方法。
在一些实施例中,电力物联操作***的编译优化方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的电力物联操作***的编译优化方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行电力物联操作***的编译优化方法。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的***和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种电力物联操作***的编译优化方法,其特征在于,所述方法包括:
根据不同源代码文件之间的依赖关系获取依赖关系图;
基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围;
根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序;
根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。
2.根据权利要求1所述方法,其特征在于,所述根据不同源代码文件之间的依赖关系获取依赖关系图,包括:
调用预设静态代码分析工具解析各所述源代码文件,并分别提取所述源代码文件中类和函数变量定义;
将不同所述源代码文件的所述类和所述函数变量定义之间的引用关系作为不同所述源代码文件之间的所述依赖关系,构建各所述依赖关系对应的依赖关系图。
3.根据权利要求2所述方法,其特征在于,还包括:
识别所述依赖关系图中的循环依赖,并将所述循环依赖从所述依赖关系图剔除后进行拓扑排序。
4.根据权利要求1所述方法,其特征在于,所述基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围,包括:
筛选所述不同源代码文件中的所述第一源代码文件,其中,所述第一源代码文件的筛选方式包括以下至少之一:初始时间戳筛选、版本控制***识别、敏感文件检测、散列值检测;
深度优先搜索遍历所述依赖关系图以确定直接依赖于或间接依赖于所述第一源代码文件的未发生过编译的第二源代码文件作为所述第一源代码文件的所述变更影响范围。
5.根据权利要求4所述方法,其特征在于,所述筛选所述不同源代码文件中的所述第一源代码文件,包括:
提取各所述源代码文件记录的初始时间戳以及散列值;
调用所述版本***识别所述不同源代码文件中已经更改的源代码文件,将所述不同源代码文件中已更改的源代码文件记录到第一已更改代码文件列表,将所述不同源代码文件未更改的源代码文件记录到第一未更改代码文件列表;
检查所述第一未更改代码文件列表中源代码文件的时间戳是否与所述源代码文件记录的所述初始时间戳不同,若不同则将所述源代码文件记录到第二已更改代码文件表,若相同则将所述源代码文件记录到第二未更改代码文件列表;
检测所述第二未更改代码文件列表的源代码文件是否为敏感文件,将确定为敏感文件的所述源代码文件记录到第三已更改代码文件列表,将未确定为敏感文件的所述源代码文件记录到第三未更改代码文件列表;
检查所述第三未更改代码文件列表的源代码文件的散列值是否与所述源代码文件的所述散列值相同,若不同则将所述源代码记录到第四已更改代码文件列表,若相同则将所述源代码记录到第四未更改代码文件列表;
将所述第一已更改代码文件列表、所述第二已更改代码文件列表、所述第三已更改代码文件列表和所述第四已更改代码文件列表的源代码文件作为所述第一源代码文件。
6.根据权利要求1所述方法,其特征在于,所述根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序,包括:
依据所述依赖关系图确定各所述第一源代码文件对应所述变更影响范围内第二源代码文件之间的源代码引用顺序;
按照所述源代码引用顺序编排对应所述第一源代码文件的所述编译任务执行顺序。
7.根据权利要求1所述方法,其特征在于,所述根据所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译,包括:
分别将对应不同所述第一源代码文件的将所述编译任务执行顺序选择第二源代码文件依次添加到对应所述第一源代码文件的所述代码文件列表;
并行编译各所述第一源代码文件对应所述代码文件列表中的所述第二源代码文件。
8.一种电力物联操作***的编译优化装置,其特征在于,所述装置包括:
依赖确定模块,用于根据不同源代码文件之间的依赖关系获取依赖关系图;
变更范围模块,用于基于所述依赖关系图分别确定所述不同源代码文件中的已发生过编译的第一源代码文件的变更影响范围;
执行顺序模块,用于根据所述变更影响范围优化各所述第一源代码文件分别对应的编译任务执行顺序;
编译处理模块,用于根据各所述编译任务执行顺序对应的代码文件列表对所述源代码文件进行编译。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的电力物联操作***的编译优化方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的电力物联操作***的编译优化方法。
CN202410272061.7A 2024-03-11 2024-03-11 电力物联操作***的编译优化方法、装置、设备和介质 Pending CN118151941A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410272061.7A CN118151941A (zh) 2024-03-11 2024-03-11 电力物联操作***的编译优化方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410272061.7A CN118151941A (zh) 2024-03-11 2024-03-11 电力物联操作***的编译优化方法、装置、设备和介质

Publications (1)

Publication Number Publication Date
CN118151941A true CN118151941A (zh) 2024-06-07

Family

ID=91297817

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410272061.7A Pending CN118151941A (zh) 2024-03-11 2024-03-11 电力物联操作***的编译优化方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN118151941A (zh)

Similar Documents

Publication Publication Date Title
US11099820B2 (en) Reconfiguring application software into microservice architecture
Kwon et al. Mantis: Automatic performance prediction for smartphone applications
Bento et al. Automated analysis of distributed tracing: Challenges and research directions
CN111382070B (zh) 兼容性测试方法、装置、存储介质和计算机设备
CN110737594A (zh) 自动生成测试用例的数据库标准符合性测试方法及装置
CN110554954A (zh) 一种结合静态依赖和动态执行规则的测试用例选择方法
CN105630656A (zh) 基于日志模型的***健壮性分析方法及装置
CN111124872A (zh) 基于差异代码分析的分支检测方法、装置及存储介质
CN111666217A (zh) 用于测试代码的方法和装置
CN115705250A (zh) 监测堆栈使用量以优化程序
CN115905031A (zh) 一种基于精准质量保障***的测试用例推荐方法
CN112905370A (zh) 拓扑图生成方法、异常检测方法、装置、设备及存储介质
US11755458B2 (en) Automatic software behavior identification using execution record
CN117724980A (zh) 软件框架性能的测试方法、装置、电子设备和存储介质
CN115576831A (zh) 一种测试案例推荐方法、装置、设备及存储介质
CN116069650A (zh) 一种测试用例的生成方法及装置
CN118151941A (zh) 电力物联操作***的编译优化方法、装置、设备和介质
CN111831317B (zh) 服务间依赖关系的获取方法、装置、电子设备和存储介质
CN114490413A (zh) 测试数据的准备方法及装置、存储介质和电子设备
CN113641573A (zh) 基于修订日志的程序分析软件自动化测试方法及***
Zhi-bo et al. Analysis of software process effectiveness based on orthogonal defect classification
CN116483735B (zh) 一种代码变更的影响分析方法、装置、存储介质及设备
CN117130945B (zh) 一种测试方法和装置
CN111737122B (zh) 一种大型机程序调用层级的检查方法及***
CN116955189A (zh) 一种用户界面自动化测试方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination