CN113297076B - 基于调用链图的服务变更识别方法及装置 - Google Patents
基于调用链图的服务变更识别方法及装置 Download PDFInfo
- Publication number
- CN113297076B CN113297076B CN202110559028.9A CN202110559028A CN113297076B CN 113297076 B CN113297076 B CN 113297076B CN 202110559028 A CN202110559028 A CN 202110559028A CN 113297076 B CN113297076 B CN 113297076B
- Authority
- CN
- China
- Prior art keywords
- service
- class
- call chain
- application version
- change
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- 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
Abstract
本发明公开了一种基于调用链的服务变更识别方法及装置,涉及自动程序设计领域,该方法包括:对应用版本进行静态分析,提取应用版本信息;根据提取的应用版本信息,构建每个服务的调用链图;比对每个服务在应用版本变更前后的调用链图;根据比对结果,确定发生变更的服务。本发明基于调用链的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
Description
技术领域
本发明涉及自动程序设计领域,尤其涉及一种基于调用链图的服务变更识别方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在软件项目的测试中,一般会设计一组测试用例集对整个系统进行功能测试和非功能特性验证,伴随着软件规模越来越多,要测试的用例也将膨胀,如果一个系统投产比较频繁,在每一次投产前都运行所有的测试用例的话,时间成本和人力成本很高,一般很难在上线前完成测试任务,无法保证系统的生产稳定运行。如果能够识别本次系统投产的具体变更内容,分析其所影响的功能范围,那么就可仅测试特定的用例集,节省测试时间和人力成本。在面向服务的体系结构(Service-Oriented Architecture,SOA)和微服务架构为主流后端架构的形势下,如何识别系统代码变更所影响的SOA或微服务接口范围,从而仅针对这部分接口进行测试,是亟待解决的技术问题。
现有的应用版本变更识别方法主要有如下2种:
第一种,对文件内容进行比对,若发现某个文件发生变化,则对文件中的类或方法进行测试,一般是进行单元测试,针对变化的部分内容,执行对应的单元测试案例。该变更识别方法存在的问题是:只能测试变化部分的正确性,但变化部分对整个接口的影响无法识别。
第二种,识别文件内容变化后,能够分析文件变化内容,如果是接入层的类,那么能够识别其所影响的接口范围。该变更识别方法能够识别到接口变更,但完整性不够,且只能识别接入层发生变化的情况,对于接入层调用服务层,服务层调用数据访问层甚至公共类和方法的情况,无法进行识别。
可见,现有的应用版本变更识别方法,由于缺乏调用链图构建过程,只能识别接入层的代码变更,无法识别接入层往后的代码变更情况。
发明内容
本发明实施例中提供了一种基于调用链图的服务变更识别方法,用以解决现有的应用版本变更识别方法,由于缺乏调用链图构建过程,存在只能识别接入层的代码变更,无法识别接入层往后的代码变更情况的技术问题,该方法包括:对应用版本进行静态分析,提取应用版本信息;根据提取的应用版本信息,构建每个服务的调用链图;比对每个服务在应用版本变更前后的调用链图;根据比对结果,确定发生变更的服务。
本发明实施例中还提供了一种基于调用链图的服务变更识别装置,用以解决现有的应用版本变更识别方法,由于缺乏调用链图构建过程,存在只能识别接入层的代码变更,无法识别接入层往后的代码变更情况的技术问题,该装置包括:应用版本静态分析模块,用于对应用版本进行静态分析,提取应用版本信息;调用链图构建模块,用于根据提取的应用版本信息,构建每个服务的调用链图;调用链图比对模块,用于比对每个服务在应用版本变更前后的调用链图;变更服务识别模块,用于根据比对结果,确定发生变更的服务。
本发明实施例中还提供了一种电子设备,用以解决现有的应用版本变更识别方法,由于缺乏调用链图构建过程,存在只能识别接入层的代码变更,无法识别接入层往后的代码变更情况的技术问题,该电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述基于调用链图的服务变更识别方法。
本发明实施例中还提供了一种计算机可读存储介质,用以解决现有的应用版本变更识别方法,由于缺乏调用链图构建过程,存在只能识别接入层的代码变更,无法识别接入层往后的代码变更情况的技术问题,该计算机可读存储介质存储有执行上述基于调用链图的服务变更识别方法的计算机程序。
本发明实施例中提供的基于调用链图的服务变更识别方法、装置、计算机设备及计算机可读存储介质,首选对应用版本进行静态分析,提取应用版本信息,进而根据提取的应用版本信息,构建每个服务的调用链图,然后通过比对每个服务在应用版本变更前后的调用链图,进而根据比对结果,确定发生变更的服务。
本发明实施例中,基于调用链图的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中提供的一种基于调用链图的服务变更识别方法流程图;
图2为本发明实施例中提供的一种可选的基于调用链图的服务变更识别方法流程图;
图3为本发明实施例中提供的一种可选的基于调用链图的服务变更识别方法流程图;
图4为本发明实施例中提供的一种可选的基于调用链图的服务变更识别方法流程图;
图5为本发明实施例中提供的一种基于调用链图的服务变更识别装置示意图;
图6为本发明实施例中提供的一种可选的基于调用链图的服务变更识别装置示意图;
图7为本发明实施例中提供的一种可选的基于调用链图的服务变更识别装置示意图;
图8为本发明实施例中提供的一种可选的基于调用链图的服务变更识别装置示意图;
图9为本发明实施例中提供的一种可选的基于调用链图的服务变更识别装置示意图;
图10为本发明实施例中提供的一种可选的基于调用链图的服务变更识别装置示意图;
图11为本发明实施例中提供的一种计算机设备示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
针对现有方法无法识别接入层往后的交易变更情况的问题,对应用版本进行扫描,静态分析,构建每一个服务的静态调用链,识别每个服务的静态逻辑调用过程,在确定应用变更前后两个版本的调用链数据后,通过比对调用链,从而获取应用版本中每个服务的变化情况。在采用面向对象程序设计的应用版本分析中,通过采用父子类分析、接口实现类分析,获取服务调用链关系。
在Java后端系统中,一个接口实现的功能由多个类共同协同完成,多个类在系统中处于不同的层次,从外到里分别是接入层、服务层、数据访问层,接入层接收到外部请求后进行初步处理,随后接入层Java类按需调用服务层Java类完成业务逻辑处理,以此类似,服务层Java类按需调用数据访问层Java类,完成数据库中的数据读写;在服务处理过程中,还会按需调用一些公共方法、第三方JAR包等,如果这其中的任何一个环节的代码发生变更,则认为这个接口的实现逻辑发生了变更。
本发明实施例中提供了一种基于调用链图的服务变更识别方法,通过对应用版本进行静态分析,识别交易的调用过程,构建交易的静态调用链,通过比对前后两个版本的调用链,识别交易是否发生变更。
图1为本发明实施例中提供的一种基于调用链图的服务变更识别方法流程图,如图1所示,该方法包括如下步骤:
S101,对应用版本进行静态分析,提取应用版本信息。
需要说明的是,本发明实施例中的应用版本可以是任意一种基于服务调用实现的应用程序的任意一个版本;对应用版本进行静态分析是指无需实际运行应用程序,即可通过扫描应用版本文件,识别提取相关信息,并进行分析处理。上述S101中提取的应用版本信息包括但不限于:包含多个服务的服务列表、每个服务的入口类、每个服务的调用方法、类列表、方法列表、方法调用关系、每个类的父类列表、每个类实现的接口列表。
S102,根据提取的应用版本信息,构建每个服务的调用链图。
上述S102中,根据提取的应用版本信息,构建每个服务的调用链图。整个调用链图是一个有向图,每个节点代表一个类的一个方法,2个节点之间的箭头连接线表示一个方法调用了另一个方法,每一个服务都是用一组节点和箭头组成,表示这个服务由多个类的多个方法调用完成服务逻辑。
S103,比对每个服务在应用版本变更前后的调用链图。
由于调用链图中包含了各个服务之间的调用关系,因而,通过比对第一应用版本(变更前的版本)的第一调用链图和第二应用版本(变更后的版本)的第二调用链图,能够确定出发生变更的服务。
在具体实施时,调用链图比对的关键是确定第一调用链图和第二调用链图在何种情况下即认为是不同的,在本技术方案中,若节点不同即认为两张图不同,不需要考虑节点之间的关系,因为如果2张图节点都相同,只是关系不同,那么对于这个服务而言,只不过是某个方法多调用一次或者少调用一次,对整个服务的功能性或非功能性影响不大。
S104,根据比对结果,确定发生变更的服务。
由于调用链图中包含:多个节点及节点之间的关系;则上述S104在具体实施时,可以判断每个服务在应用版本变更前后的调用链图中包含的节点是否相同;当每个服务在应用版本变更前后的调用链图中包含的节点不同的情况下,确定该服务发生变更。
需要注意的是,如果第一调用链图和第二调用链图中包含的节点都相同,只是关系不同,那么对于这个服务而言,只不过是某个方法多调用一次或者少调用一次,对整个服务的功能性或非功能性影响不大。
由上可知,本发明的实施例中提供的基于调用链图的服务变更识别方法,首选对应用版本进行静态分析,提取应用版本信息,进而根据提取的应用版本信息,构建每个服务的调用链图,然后通过比对每个服务在应用版本变更前后的调用链图,进而根据比对结果,确定发生变更的服务。
本发明的实施例中提供的基于调用链图的服务变更识别方法,基于调用链图的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
在一个实施例中,如图2所示,在根据比对结果,确定发生变更的服务之后,本发明实施例中提供的基于调用链图的服务变更识别方法还包括如下步骤:
S105,输出发生变更的服务列表。
在上述实施例中,在比对完所有服务的调用链后,即可输出发生变更的服务列表。
在一个实施例中,本发明实施例中的应用版本信息中至少包含:包含多个服务的服务列表、每个服务的入口类、每个服务的调用方法、类列表、方法列表、方法调用关系、每个类的父类列表、每个类实现的接口列表。
基于上述实施例,如图3所示,本发明实施例中提供的基于调用链图的服务变更识别方法,可通过如下步骤来构建每个服务的调用链图:
S301,确定每个服务的入口节点,其中,每个入口节点对应一个类的方法;
S302,根据方法调用关系,追溯入口方法调用的其他方法,每追溯到一个被调用方法,则在调用链图上增加一个节点,并增加入口节点与新增节点之间的箭头;
S303,当所有的方法追溯完成的情况下,得到每个服务的调用链图。
在后端系统中,每个服务都有一个入口,入口是某个类的某个方法,这个方法就是调用链图上的入口点。接着我们根据方法调用关系,得到入口方法调用的其他方法,对于每个被调用的方法,我们都可以在图上增加一个点,并增加入口节点和新增节点之间的箭头,表示入口方法调用了新增节点所表示的方法。
由于方法调用追溯需要设置有一个停止追溯的点,可以停止在本应用的类范围,或者公共库及第三方JAR范围,如果设置在本应用类范围,那么追溯方法时,不再去分析公共库和第三方JAR的调用;如果设置在第三方公共库及第三方JAR范围,那么方法追溯不会去分析JDK开发包的类调用。
进一步地,在一个实施例中,如图3所示,本发明实施例中提供的基于调用链图的服务变更识别方法还包括如下步骤:
S300,配置停止追溯条件,其中,停止追溯条件用于停止追溯入口方法调用的其他方法。
可选地,本发明实施例中的停止追溯条件包括如下任意之一:停止于应用的类范围、停止于公共库及第三方JAR的调用。
当方法追溯满足预先配置的停止追溯条件,则表明所有的方法追溯都完成,当所有的方法追溯都完成后,调用链图即构建完成。
在一个实施例中,如图4所示,本发明实施例中提供的基于调用链图的服务变更识别方法还包括如下步骤:
S401,根据每个类的父类列表、每个类实现的接口列表,确定父类的子类。
需要说明的是,在面向对象的编程中,是可以用父类的指针指向子类的实例对象,在静态分析时,只能得到被调用方法所在的父类,而并不知道方法实际调用的对象类型,因而需要利用类的父类列表、类实现的接口列表这两个信息,推导出父类可能表示的子类。
进一步地,在一个实施例中,如图4所示,本发明实施例中提供的基于调用链图的服务变更识别方法还包括如下步骤:
S402,对于每个类的父类列表,在数据库中保存一对父子关系。
更进一步地,在一个实施例中,如图4所示,本发明实施例中提供的基于调用链图的服务变更识别方法还包括如下步骤:
S403,对于每个类实现的接口列表,在数据库中保存接口和实现类之间的父子关系。
对于每个类的父类列表,在数据库中保存一对父子关系,对于每个类实现的接口列表,在数据库中保存接口和实现类之间的父子关系;这样当需要查找一个抽象类或接口的子类时,可直接从数据库中进行读取。
需要注意的是,在具体实施时,对于每个可能的子类,均在图上增加一个节点,虽然这种方法可能会增加并不是本服务实际调用的方法,但保证了完整性,在输出变化的服务列表后,可以人工进行判断和确认,去除无效节点造成的误差。
本发明实施例中提供的基于调用链图的服务变更识别方法,对应用版本进行静态分析,并结合父子类、接口实现类分析方法,构建应用版本中的每个服务所涉及的类及方法的调用关系,形成一个调用链关系图,而后通过比对前后两个版本的调用关系图,若两张图存在不一样的节点或关系,那么认为两个调用关系图不同,即此服务发生了变更。完成对整个应用版本的分析之后,即可确定发生变更的服务,为测试用例执行提供参考。
基于同一发明构思,本发明实施例中还提供了一种基于调用链图的服务变更识别装置,如下面的实施例所述。由于该装置解决问题的原理与基于调用链图的服务变更识别方法相似,因此该装置的实施可以参见基于调用链图的服务变更识别方法的实施,重复之处不再赘述。
图5为本发明实施例中提供的一种基于调用链图的服务变更识别装置示意图,如图5所示,该装置包括:应用版本静态分析模块51、调用链图构建模块52、调用链图比对模块53和变更服务识别模块54。
其中,应用版本静态分析模块51,用于对应用版本进行静态分析,提取应用版本信息;
调用链图构建模块52,用于根据提取的应用版本信息,构建每个服务的调用链图;
调用链图比对模块53,用于比对每个服务在应用版本变更前后的调用链图;变更服务识别模块54,用于根据比对结果,确定发生变更的服务。
此处需要说明的是,上述应用版本静态分析模块51、调用链图构建模块52、调用链图比对模块53和变更服务识别模块54对应于方法实施例中的S101~S104,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
由上可知,本发明的实施例中提供的基于调用链图的服务变更识别装置,首选对应用版本进行静态分析,提取应用版本信息,进而根据提取的应用版本信息,构建每个服务的调用链图,然后通过比对每个服务在应用版本变更前后的调用链图,进而根据比对结果,确定发生变更的服务。
本发明的实施例中提供的基于调用链图的服务变更识别装置,基于调用链图的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
在一个实施例中,本发明实施例中提供的基于调用链图的服务变更识别装置中,调用链图中包含:多个节点及节点之间的关系。
该实施例中,上述变更服务识别模块54还用于:判断每个服务在应用版本变更前后的调用链图中包含的节点是否相同;当每个服务在应用版本变更前后的调用链图中包含的节点不同的情况下,确定该服务发生变更。
在一个实施例中,如图6所示,本发明实施例中提供的基于调用链图的服务变更识别装置还可以包括:
变更服务输出模块55,用于输出发生变更的服务列表。
此处需要说明的是,上述变更服务输出模块55对应于方法实施例中的S105,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
在一个实施例中,本发明实施例中提供的基于调用链图的服务变更识别装置中,应用版本信息中至少包含:包含多个服务的服务列表、每个服务的入口类、每个服务的调用方法、类列表、方法列表、方法调用关系、每个类的父类列表、每个类实现的接口列表。
在一个实施例中,本发明实施例中提供的基于调用链图的服务变更识别装置中,调用链图构建模块52还用于:
确定每个服务的入口节点,其中,每个入口节点对应一个类的方法;
根据方法调用关系,追溯入口方法调用的其他方法,每追溯到一个被调用方法,则在调用链图上增加一个节点,并增加入口节点与新增节点之间的箭头;
当所有的方法追溯完成的情况下,得到每个服务的调用链图。
在一个实施例中,如图7所示,本发明实施例中提供的基于调用链图的服务变更识别装置还可以包括:
配置模块56,用于配置停止追溯条件,其中,停止追溯条件用于停止追溯入口方法调用的其他方法。
此处需要说明的是,上述配置模块56对应于方法实施例中的S300,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
可选地,上述实施例中,停止追溯条件包括如下任意之一:停止于应用的类范围、停止于公共库及第三方JAR的调用。
在一个实施例中,如图8所示,本发明实施例中提供的基于调用链图的服务变更识别装置还可以包括:
类信息分析模块57,用于根据每个类的父类列表、每个类实现的接口列表,确定父类的子类。
此处需要说明的是,上述类信息分析模块57对应于方法实施例中的S401,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
在一个实施例中,如图9所示,本发明实施例中提供的基于调用链图的服务变更识别装置还可以包括:
类信息存储模块58,用于对于每个类的父类列表,在数据库中保存一对父子关系。
此处需要说明的是,上述类信息存储模块58对应于方法实施例中的S402,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
在一个实施例中,如图10所示,本发明实施例中提供的基于调用链图的服务变更识别装置还可以包括:
类关系存储模块59,用于对于每个类实现的接口列表,在数据库中保存接口和实现类之间的父子关系。
此处需要说明的是,上述类关系存储模块59对应于方法实施例中的S403,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
基于同一发明构思,本发明实施例中还提供了一种用于实现上述基于调用链图的服务变更识别方法中的全部或部分内容的电子设备实施例。该电子设备具体包含有如下内容:
处理器(processor)、存储器(memory)、通信接口(Communications Interface)和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于实现相关设备之间的信息传输;该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照实施例用于实现上述基于调用链图的服务变更识别方法的实施例及用于实现上述基于调用链图的服务变更识别装置的实施例进行实施,其内容被合并于此,重复之处不再赘述。
图11为本发明实施例中提供的一种电子设备的系统组成结构示意图。如图11所示,该电子设备110可以包括处理器1101和存储器1102;存储器1102耦合到处理器1101。值得注意的是,该图11是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
在一个实施例中,基于调用链图的服务变更识别方法实现的功能可以被集成到处理器1101中。其中,处理器1101可以被配置为进行如下控制:
对应用版本进行静态分析,提取应用版本信息;
根据提取的应用版本信息,构建每个服务的调用链图;
比对每个服务在应用版本变更前后的调用链图;根据比对结果,确定发生变更的服务。
由上可知,本发明的实施例中提供的电子设备,首选对应用版本进行静态分析,提取应用版本信息,进而根据提取的应用版本信息,构建每个服务的调用链图,然后通过比对每个服务在应用版本变更前后的调用链图,进而根据比对结果,确定发生变更的服务。
本发明的实施例中提供的电子设备,基于调用链图的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
在另一个实施例中,基于调用链图的服务变更识别装置可以与处理器1101分开配置,例如可以将基于调用链图的服务变更识别装置配置为与处理器1101连接的芯片,通过处理器的控制来实现基于调用链图的服务变更识别方法的功能。
如图11所示,该电子设备110还可以包括:通信模块1103、输入单元1104、音频处理单元1105、显示器1106、电源1107。值得注意的是,电子设备110也并不是必须要包括图11中所示的所有部件;此外,电子设备110还可以包括图11中没有示出的部件,可以参考现有技术。
如图11所示,处理器1101有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该处理器1101接收输入并控制电子设备110的各个部件的操作。
其中,存储器1102,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且处理器1101可执行该存储器1102存储的该程序,以实现信息存储或处理等。
输入单元1104向处理器1101提供输入。该输入单元1104例如为按键或触摸输入装置。电源1107用于向电子设备110提供电力。显示器1106用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器1102可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器1102还可以是某种其它类型的装置。存储器1102包括缓冲存储器11021(有时被称为缓冲器)。存储器1102可以包括应用/功能存储部11022,该应用/功能存储部11022用于存储应用程序和功能程序或用于通过处理器1101执行电子设备110的操作的流程。
存储器1102还可以包括数据存储部11023,该数据存储部11023用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器1102的驱动程序存储部11024可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块1103即为经由天线1108发送和接收信号的发送机/接收机。通信模块(发送机/接收机)1103耦合到处理器1101,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块1103,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)1103还经由音频处理单元1105耦合到扬声器1109和麦克风1110,以经由扬声器1109提供音频输出,并接收来自麦克风1110的音频输入,从而实现通常的电信功能。音频处理单元1105可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理单元1105还耦合到处理器1101,从而使得可以通过麦克风1110能够在本机上录音,且使得可以通过扬声器1109来播放本机上存储的声音。
本发明的实施例中还提供了一种用于实现上述实施例中基于调用链图的服务变更识别方法中全部步骤的一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的基于调用链图的服务变更识别方法的全部步骤,例如,该处理器执行该计算机程序时实现下述步骤:
对应用版本进行静态分析,提取应用版本信息;
根据提取的应用版本信息,构建每个服务的调用链图;
比对每个服务在应用版本变更前后的调用链图;根据比对结果,确定发生变更的服务。
由上可知,本发明的实施例中提供的计算机可读存储介质,首选对应用版本进行静态分析,提取应用版本信息,进而根据提取的应用版本信息,构建每个服务的调用链图,然后通过比对每个服务在应用版本变更前后的调用链图,进而根据比对结果,确定发生变更的服务。
本发明的实施例中提供的计算机可读存储介质,基于调用链图的分析技术,能够在不实际运行应用程序的情况下,对应用程序进行静态分析,获取服务的调用逻辑,进而完整识别应用版本因代码变更、公共类变更、第三方JAR变更所引发的应用服务变更。相较于现有的应用版本变更识别方法,本发明实施例在对代码变更所影响的范围捕获方面,不仅能够识别接入层的代码变更,还能识别接入层往后的代码情况,更加准确和完整。
虽然本发明提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
本领域技术人员应明白,本说明书的实施例可提供为方法、装置(系统)或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。本发明并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。可单独使用本发明的每个方面和/或实施例,或者与一个或更多其他方面和/或其他实施例结合使用。
以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例中所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
Claims (16)
1.一种基于调用链图的服务变更识别方法,其特征在于,包括:
对应用版本进行静态分析,提取应用版本信息,其中静态分析是指无需实际运行应用程序,通过扫描应用版本文件,识别提取相关信息,并进行分析处理;
根据提取的应用版本信息,构建每个服务的调用链图;
比对每个服务在应用版本变更前后的调用链图;
根据比对结果,确定发生变更的服务;
所述调用链图中包含:多个节点及节点之间的关系;根据比对结果,确定发生变更的服务,包括:
判断每个服务在应用版本变更前后的调用链图中包含的节点是否相同;
当每个服务在应用版本变更前后的调用链图中包含的节点不同的情况下,确定该服务发生变更;
所述应用版本信息中至少包含:包含多个服务的服务列表、每个服务的入口类、每个服务的调用方法、类列表、方法列表、方法调用关系、每个类的父类列表、每个类实现的接口列表;
根据提取的应用版本信息,构建每个服务的调用链图,包括:
确定每个服务的入口节点,其中,每个入口节点对应一个类的方法;
根据方法调用关系,追溯入口方法调用的其他方法,每追溯到一个被调用方法,则在调用链图上增加一个节点,并增加入口节点与新增节点之间的箭头;
当所有的方法追溯完成的情况下,得到每个服务的调用链图。
2.如权利要求1所述的方法,其特征在于,在根据比对结果,确定发生变更的服务之后,所述方法还包括:
输出发生变更的服务列表。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
配置停止追溯条件,其中,所述停止追溯条件用于停止追溯入口方法调用的其他方法。
4.如权利要求3所述的方法,其特征在于,所述停止追溯条件包括如下任意之一:停止于应用的类范围、停止于公共库及第三方JAR的调用。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
根据每个类的父类列表、每个类实现的接口列表,确定父类的子类。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
对于每个类的父类列表,在数据库中保存一对父子关系。
7.如权利要求1所述的方法,其特征在于,所述方法还包括:
对于每个类实现的接口列表,在数据库中保存接口和实现类之间的父子关系。
8.一种基于调用链图的服务变更识别装置,其特征在于,包括:
应用版本静态分析模块,用于对应用版本进行静态分析,提取应用版本信息,其中静态分析是指无需实际运行应用程序,通过扫描应用版本文件,识别提取相关信息,并进行分析处理;
调用链图构建模块,用于根据提取的应用版本信息,构建每个服务的调用链图;
调用链图比对模块,用于比对每个服务在应用版本变更前后的调用链图;
变更服务识别模块,用于根据比对结果,确定发生变更的服务;
所述调用链图中包含:多个节点及节点之间的关系;所述变更服务识别模块还用于:判断每个服务在应用版本变更前后的调用链图中包含的节点是否相同;当每个服务在应用版本变更前后的调用链图中包含的节点不同的情况下,确定该服务发生变更;
所述应用版本信息中至少包含:包含多个服务的服务列表、每个服务的入口类、每个服务的调用方法、类列表、方法列表、方法调用关系、每个类的父类列表、每个类实现的接口列表;
所述调用链图构建模块还用于:
确定每个服务的入口节点,其中,每个入口节点对应一个类的方法;
根据方法调用关系,追溯入口方法调用的其他方法,每追溯到一个被调用方法,则在调用链图上增加一个节点,并增加入口节点与新增节点之间的箭头;
当所有的方法追溯完成的情况下,得到每个服务的调用链图。
9.如权利要求8所述的装置,其特征在于,所述装置还包括:
变更服务输出模块,用于输出发生变更的服务列表。
10.如权利要求8所述的装置,其特征在于,所述装置还包括:配置模块,用于配置停止追溯条件,其中,所述停止追溯条件用于停止追溯入口方法调用的其他方法。
11.如权利要求10所述的装置,其特征在于,所述停止追溯条件包括如下任意之一:停止于应用的类范围、停止于公共库及第三方JAR的调用。
12.如权利要求8所述的装置,其特征在于,所述装置还包括:
类信息分析模块,用于根据每个类的父类列表、每个类实现的接口列表,确定父类的子类。
13.如权利要求8所述的装置,其特征在于,所述装置还包括:
类信息存储模块,用于对于每个类的父类列表,在数据库中保存一对父子关系。
14.如权利要求8所述的装置,其特征在于,所述装置还包括:
类关系存储模块,用于对于每个类实现的接口列表,在数据库中保存接口和实现类之间的父子关系。
15.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述基于调用链图的服务变更识别方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7任一项所述基于调用链图的服务变更识别方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110559028.9A CN113297076B (zh) | 2021-05-21 | 2021-05-21 | 基于调用链图的服务变更识别方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110559028.9A CN113297076B (zh) | 2021-05-21 | 2021-05-21 | 基于调用链图的服务变更识别方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113297076A CN113297076A (zh) | 2021-08-24 |
CN113297076B true CN113297076B (zh) | 2023-06-23 |
Family
ID=77323800
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110559028.9A Active CN113297076B (zh) | 2021-05-21 | 2021-05-21 | 基于调用链图的服务变更识别方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113297076B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699488A (zh) * | 2013-12-30 | 2014-04-02 | 优视科技有限公司 | 基于调用关系依赖图的回归测试方法及系统 |
CN105824756A (zh) * | 2016-03-17 | 2016-08-03 | 南京大学 | 一种基于代码依赖关系的过时需求自动检测方法及系统 |
CN106656536A (zh) * | 2015-11-03 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 一种用于处理服务调用信息的方法与设备 |
WO2017181783A1 (zh) * | 2016-04-20 | 2017-10-26 | 中兴通讯股份有限公司 | 虚拟化服务监控方法和装置 |
WO2020042029A1 (zh) * | 2018-08-29 | 2020-03-05 | 华为技术有限公司 | 调用链路的发现方法、装置、设备及存储介质 |
CN111752843A (zh) * | 2020-06-29 | 2020-10-09 | 百度在线网络技术(北京)有限公司 | 用于确定影响面的方法、装置、电子设备及可读存储介质 |
CN111752819A (zh) * | 2019-03-29 | 2020-10-09 | 广州市百果园信息技术有限公司 | 一种异常监控方法、装置、系统、设备和存储介质 |
CN111782266A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN111782737A (zh) * | 2020-08-12 | 2020-10-16 | 中国工商银行股份有限公司 | 信息处理方法、装置、设备及存储介质 |
CN111858304A (zh) * | 2020-06-10 | 2020-10-30 | 南京领行科技股份有限公司 | 一种接口性能测试的方法及装置 |
CN112380130A (zh) * | 2020-11-19 | 2021-02-19 | 康键信息技术(深圳)有限公司 | 基于调用依赖关系的应用测试方法和装置 |
CN112559024A (zh) * | 2020-12-14 | 2021-03-26 | 建信金融科技有限责任公司 | 一种生成交易码变更列表的方法和装置 |
WO2021077506A1 (zh) * | 2019-10-23 | 2021-04-29 | 平安科技(深圳)有限公司 | 微服务调用链具象化的方法、装置、电子装置及存储介质 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8533669B2 (en) * | 2009-04-21 | 2013-09-10 | Microsoft Corporation | Analysis of dynamic elements in bounded time |
US8949812B2 (en) * | 2010-08-30 | 2015-02-03 | International Business Machines Corporation | System and method for updating hard-coded dependencies |
CN108874652B (zh) * | 2017-05-09 | 2022-06-07 | 北京京东尚科信息技术有限公司 | 用于软件自测评估的方法、装置及电子设备 |
CN110554954B (zh) * | 2019-07-19 | 2020-12-01 | 中国科学院软件研究所 | 一种结合静态依赖和动态执行规则的测试用例选择方法 |
CN110502494B (zh) * | 2019-08-30 | 2022-03-18 | 北京思维造物信息科技股份有限公司 | 日志处理方法、装置、计算机设备及存储介质 |
CN112737800B (zh) * | 2019-10-28 | 2023-04-28 | 顺丰科技有限公司 | 服务节点故障定位方法、调用链生成方法及服务器 |
CN111459766B (zh) * | 2019-11-14 | 2024-01-12 | 国网浙江省电力有限公司信息通信分公司 | 一种面向微服务系统的调用链跟踪与分析方法 |
CN110865927B (zh) * | 2019-11-20 | 2021-08-31 | 腾讯科技(深圳)有限公司 | 区块链调用链路异常检测方法、装置和计算机设备 |
CN111382073A (zh) * | 2020-03-09 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 自动化测试用例确定方法、装置、设备及存储介质 |
CN112000398B (zh) * | 2020-08-17 | 2022-10-28 | 苏州达家迎信息技术有限公司 | 底层接口调用链路的确定方法、装置、计算机设备及介质 |
CN112199276B (zh) * | 2020-09-24 | 2023-05-30 | 建信金融科技有限责任公司 | 微服务架构的变更检测方法、装置、服务器及存储介质 |
CN112199275B (zh) * | 2020-09-24 | 2023-06-27 | 建信金融科技有限责任公司 | 一种组件接口测试分析方法、装置、服务器以及存储介质 |
CN112433757A (zh) * | 2020-11-27 | 2021-03-02 | 中国建设银行股份有限公司 | 一种确定接口调用关系的方法和装置 |
CN112379888A (zh) * | 2020-12-02 | 2021-02-19 | 北京皮尔布莱尼软件有限公司 | 一种代码变更分析方法 |
CN112612675B (zh) * | 2020-12-25 | 2023-02-28 | 山东经伟晟睿数据技术有限公司 | 微服务架构下的分布式大数据日志链路跟踪方法及系统 |
-
2021
- 2021-05-21 CN CN202110559028.9A patent/CN113297076B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699488A (zh) * | 2013-12-30 | 2014-04-02 | 优视科技有限公司 | 基于调用关系依赖图的回归测试方法及系统 |
CN106656536A (zh) * | 2015-11-03 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 一种用于处理服务调用信息的方法与设备 |
CN105824756A (zh) * | 2016-03-17 | 2016-08-03 | 南京大学 | 一种基于代码依赖关系的过时需求自动检测方法及系统 |
WO2017181783A1 (zh) * | 2016-04-20 | 2017-10-26 | 中兴通讯股份有限公司 | 虚拟化服务监控方法和装置 |
WO2020042029A1 (zh) * | 2018-08-29 | 2020-03-05 | 华为技术有限公司 | 调用链路的发现方法、装置、设备及存储介质 |
CN111752819A (zh) * | 2019-03-29 | 2020-10-09 | 广州市百果园信息技术有限公司 | 一种异常监控方法、装置、系统、设备和存储介质 |
WO2021077506A1 (zh) * | 2019-10-23 | 2021-04-29 | 平安科技(深圳)有限公司 | 微服务调用链具象化的方法、装置、电子装置及存储介质 |
CN111858304A (zh) * | 2020-06-10 | 2020-10-30 | 南京领行科技股份有限公司 | 一种接口性能测试的方法及装置 |
CN111782266A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN111752843A (zh) * | 2020-06-29 | 2020-10-09 | 百度在线网络技术(北京)有限公司 | 用于确定影响面的方法、装置、电子设备及可读存储介质 |
CN111782737A (zh) * | 2020-08-12 | 2020-10-16 | 中国工商银行股份有限公司 | 信息处理方法、装置、设备及存储介质 |
CN112380130A (zh) * | 2020-11-19 | 2021-02-19 | 康键信息技术(深圳)有限公司 | 基于调用依赖关系的应用测试方法和装置 |
CN112559024A (zh) * | 2020-12-14 | 2021-03-26 | 建信金融科技有限责任公司 | 一种生成交易码变更列表的方法和装置 |
Non-Patent Citations (4)
Title |
---|
刘震 ; 缪力 ; .基于动态调用图的Java程序修改影响分析技术.湖南师范大学自然科学学报.2011,全文. * |
孙贺 ; 吴礼发 ; 洪征 ; 颜慧颖 ; 张亚丰 ; .一种结合动态与静态分析的函数调用图提取方法.计算机工程.2017,全文. * |
杜笑宇 ; 叶何 ; 文伟平 ; .基于字节码搜索的Java反序列化漏洞调用链挖掘方法.信息网络安全.2020,全文. * |
陈忠湘 ; 詹瑾瑜 ; 郝宗波 ; .带控制流的静态函数调用分析方法.计算机工程.2011,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113297076A (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110413528B (zh) | 测试环境智能配置方法及系统 | |
CN110543301B (zh) | jenkins代码文件的生成方法及装置 | |
CN110674047A (zh) | 软件测试方法、装置及电子设备 | |
CN105404574B (zh) | 一种智能卡与移动终端一致性测试方法及装置 | |
CN109862083B (zh) | 一种物联网设备的激活方法、装置及设备 | |
CN111897738B (zh) | 基于原子服务的自动化测试方法及装置 | |
CN113297076B (zh) | 基于调用链图的服务变更识别方法及装置 | |
CN113760611A (zh) | 系统站点切换方法、装置、电子设备及存储介质 | |
CN111158987B (zh) | 微服务架构的健康检查方法及装置 | |
CN111797014A (zh) | 跨应用的案例追踪方法及装置 | |
CN112860585B (zh) | 一种测试脚本断言生成方法及装置 | |
CN111859041B (zh) | 数据报送方法及装置 | |
CN111897737B (zh) | 微服务系统程序测试的遗漏检测方法及装置 | |
CN107153608B (zh) | 代码检测方法以及代码检测装置 | |
CN114637688A (zh) | 基于版本分支的覆盖率统计方法及装置 | |
CN113791984A (zh) | 接口自动化测试方法及装置 | |
CN113535558A (zh) | 软件版本传输方法及装置 | |
CN112380118A (zh) | 单元测试方法、装置、介质及电子设备 | |
CN113050985A (zh) | 前端工程依赖自动注册方法及装置 | |
CN112965896A (zh) | 基于动态字节码的测试环境故障检测方法及装置 | |
CN114968792A (zh) | 组件改动影响范围确定方法及装置 | |
CN113515447B (zh) | 系统自动化测试方法及装置 | |
CN113051176B (zh) | 自动化测试数据的处理方法、装置、电子设备及存储介质 | |
CN113515447A (zh) | 系统自动化测试方法及装置 | |
CN115934530A (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 |