CN111221731B - 一种快速获取到达程序指定点测试用例的方法 - Google Patents
一种快速获取到达程序指定点测试用例的方法 Download PDFInfo
- Publication number
- CN111221731B CN111221731B CN202010004142.0A CN202010004142A CN111221731B CN 111221731 B CN111221731 B CN 111221731B CN 202010004142 A CN202010004142 A CN 202010004142A CN 111221731 B CN111221731 B CN 111221731B
- Authority
- CN
- China
- Prior art keywords
- learning
- program
- klee
- target code
- point
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种快速获取到达程序指定点测试用例的方法,包括:首先在给定的程序中设置一个目标代码点,该目标点代表程序实际运行时出现程序运行错误的位置;利用静态分析技术提取该目标点的dominator语句,dominator语句为到达目标点的过程中所必须经过的中间语句;增强学习技术利用Q‑learning,将其写入一个独立的python文件中;符号执行工具选择KLEE,当KLEE遇到分支决策时,将与包含Q‑learning算法的python文件进行socket通信,当前分支的决策将由Q‑learning决定;若KLEE遵循了Q‑learning算法并且在走完分支后遇到dominator语句,则返回给Q‑learning一个值为正的奖励,否则为负的奖励;Q‑learning将根据得到的奖励值更新决策;若KLEE覆盖到目标点则生成达到相应目标点的测试用例或达到给定时间则终止符号执行工具KLEE。
Description
技术领域
本发明涉及新型符号执行框架的设计技术领域,将强化学习与传统符号执行过程相结合,解决了符号执行当中的路径爆炸问题,从而能够帮助软件测试人员快速获取到达程序指定点测试用例。
背景技术
符号执行方法是将程序中的输入变量当作符号处理,在模拟程序执行的同时收集符号化变量上的相关约束信息用于分析程序。和最原始的随机测试用例方法相比较有着更好的分析效率,因为符号执行可以通过对程序特定路径约束的求解,自动生成相应的测试输入。约束的收集是在模拟程序执行时,通过维护符号变量上的状态变化,将不同路径上分支条件组合运算作为路径求解的输入;最后使用约束求解器求解,得到具体路径上的测试输入。然而传统的符号执行技术会带来一些问题,路径爆炸就是其中之一,即符号执行工具在探索路径的过程中由于过多分支所带来呈指数级增长的路径数量,导致大量时间损耗。
一种快速获取到达程序指定点测试用例的方法针对实际项目实践中到达定点的问题,如测试工程师获取了包含错误点的输出报告却缺少能够到达该点的对应测试用例。该方法实现了增强学习引导下的符号执行框架。能够更快生成到达定点问题的对应测试用例。符号执行工具选择使用KLEE,KLEE是斯坦福团队设计的基于LLVM编译底层基础的实现了符号执行的自动软件测试工具。
发明内容
本发明的目标是提供一种快速获取到达程序指定点测试用例的方法,即利用强化学习引导下的符号执行用于缓解符号执行当中的路径爆炸问题并快速获取到达程序指定点测试用例,主要针对程序中的点覆盖问题,更利于软件测试人员快速获得到达程序定点的测试用例。
一种快速获取到达程序指定点测试用例的方法,包括以下步骤:
步骤一:在给定程序人工设置目标代码点,所述目标代码点代表程序实际运行时会出程序运行错误的位置;
步骤二:在已知给定的目标代码后获取该目标点的dominator语句,利用程序静态分析理论分析得到程序在到达目标代码过程中所必须经过的一系列代码点;
步骤三:将Q-learning算法写入一个独立的python文件中;
步骤四:开始符号执行过程,当符号执行工具KLEE遇到分支决策时将和独立的python文件进行通信,分支的决策为走true分支还是false分支将由Q-learning决定;当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,返回给Q-learning一个正的反馈,否则为负,此时Q-learning会根据拿到的反馈更新算法决策;
步骤五:当符号执行工具到达指定目标点或者运行超时,KLEE结束运行,并生成到达指定点的测试用例。
本发明步骤一中,所述目标代码点在实际项目中,为输出报告中程序出错的位置。
本发明步骤二中,所述dominator语句为程序在到达指定目标点前,必须经过一系列点的集合。
本发明步骤三中,所述Q-learning算法为让智能体在与环境的互动过程学习解决问题的最佳路径的过程,将其写入一个独立的python文件当中在之后符号执行的交互过程使用。
本发明步骤四中,所述符号执行过程为强化学习引导下的符号执行,以遍历更少的路径数、经过更少的LLVM指令数到达目标点,从而解决符号执行当中的路径爆炸问题,引导符号执行更快覆盖到目标点。
本发明步骤四中,所述符号执行工具KLEE为实验中所使用的基于符号执行的程序分析工具。
本发明步骤四中,所述符号执行过程若符号执行工具KLEE在执行完一次流程没有到达目标点之后,将会重启符号执行过程;此时Q-learning将会选择一个新的起始状态发送给KLEE;Q-learning的状态选择遵循以下步骤:列举出所有候选状态集合;计算每个候选状态的概率大小;选出概率最大的候选状态。
本发明步骤五中,终止条件插入符号执行工具KLEE中,当其覆盖到目标点或运行超时则强制终止。
本发明公开了一种快速获取到达程序指定点测试用例的方法,本发明的方法包括:首先在给定的程序中设置一个目标代码点,该目标点代表程序实际运行时出现程序运行错误的位置;利用静态分析技术提取该目标点的dominator语句,dominator语句为到达目标点的过程中所必须经过的中间语句;增强学习技术利用Q-learning,将其写入一个独立的python文件中;符号执行工具选择KLEE,当KLEE遇到分支决策时,将与包含Q-learning算法的python文件进行socket通信,当前分支的决策将由Q-learning算法决定;若KLEE遵循了Q-learning算法并且在走完分支后遇到dominator语句,则返回给Q-learning一个值为正的奖励,否则为负的奖励;Q-learning将根据得到的奖励值更新决策;若KLEE执行到目标点生成达到相应目标点的测试用例或达到给定时间则终止算法。本发明将强化学习与符号执行相结合,在实际项目中解决了难以获取到达指定程序运行出错点的测试用例的情况,以提高软件测试人员的效率。
附图说明
图1为本发明流程示意图。
图2为符号执行工具与Q-learning的交互过程。
具体实施方式
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
本发明提出了一种快速获取到达程序指定点测试用例的方法,具体包括以下步骤:
步骤一:在给定程序人工设置目标代码点,该目标代码点代表程序实际运行时可能会出现bug的位置
步骤二:在已知给定的目标代码后获取该目标点的dominator语句,即利用程序静态分析理论,分析得到程序在到达目标代码过程中所必须经过的一系列代码点;
步骤三:将强化学习基本算法之一Q-learning算法写入一个独立的python文件当中;
步骤四:开始符号执行过程,当符号执行工具KLEE遇到branch分支时将和独立的python文件进行通信,分支的决策为走true分支还是false分支将由Q-learning算法决定。当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,会返回给Q-learning一个正的反馈,否则为负。此时Q-learning会根据拿到的反馈更新算法决策;
步骤五:当符号执行工具到达指定目标点或者运行超时时,KLEE结束运行,并生成到达指定点的测试用例。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤一所述的目标代码点,其实际意义为可能会导致程序运行错误的点。即在实际项目中,为输出报告中程序出错的位置。本发明选择软件验证比赛SV-COMP的benchmark(https://github.com/sosy-lab/sv-benchmarks),其中有一类问题为reach-safety问题,即能否到达定点的问题。在之后的项目实验中将选择这类问题中的程序。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤二所述的dominator语句为软件工程中的常用理论。若程序在到达指定目标点前,必须经过一系列点,则这些点的集合为该目标点的dominator语句。分析dominator的过程可以借助自动化程序分析工具,本发明选择符号执行工具KLEE来帮助本发明自动化分析目标代码的dominator语句并将其存入一个列表的数据结构用以之后Q-learning和KLEE的交互。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤三所述的Q-learning算法是强化学习基本算法之一。Q-learning就是要记录下学习过的政策,因而告诉智能体什么情况下采取什么行动会有最大的奖励值。Q-learning不需要对环境进行建模,即使是对带有随机因素的转移函数或者奖励函数也不需要进行特别的改动就可以进行。并将其写入一个独立的python文件当中。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤四所述的符号执行过程,为强化学习引导下的符号执行,与传统的符号执行不同,旨在以生成更少的路径数来到达指定的目标点。本发明将KLEE内部与包含Q-learning的python脚本底层进行socket通信。符号执行的分支选择过程将完全由Q-learning的政策来决定,当符号执行工具在遵从Q-learning的决策之后如果到达了dominator语句则返回给Q-learning一个值正的奖励,否则为一个值为负的反馈,Q-learning在接受到反馈之后则更新自身的决策算法,即内部的Q-table表格。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤四所述的符号执行工具KLEE为实验中所使用的基于符号执行的程序分析工具。它基于LLVM编译框架,用于自动化生产针对复杂程序的高覆盖率的测试用例。
本发明提出的一种快速获取到达程序指定点测试用例的方法中,步骤四所述的符号执行过程若符号执行工具KLEE在执行完一次没有到达目标点之后,将会重启符号执行过程。此时Q-learning将会选择一个新的起始状态发送给KLEE。Q-learning的状态选择遵循以下步骤:首先从备选状态列表中计算每个状态的所有前序状态概率;再计算每个备选状态的所有前序状态乘积;最后选出概率最大的备选状态。这里为方便叙述举个例子,假设数字1代表true,0代表false,第一轮符号执行工具以序列101退出且并没有到达目标点,即符号执行工具在分支选择时选择了true,false,true,那么符号执行工具的备选状态列表中应当有序列0,11和100。因为符号执行的每次分支选择都会产生两个对立的状态。此时选择概率最大的状态并将其传输给KLEE。
实施例
本实施例以SV-COMP的benchmark(https://github.com/sosy-lab/sv- benchmarks)为例来对该发明实施做具体说明:
步骤一:根据程序特征设置目标代码点
该软件验证比赛的benchmark中存在很多标签,比如reach-safety问题、memory-safety问题。最终选择了reach-safety这一类问题,它更适合本发明研究的关于到达程序定点的问题。同时,因为此软件验证的benchmark program是面向所有的程序分析验证工具,需要将程序的结构转变成符号执行工具KLEE所识别的格式。主要包括:
1)引入KLEE的头文件。
2)将所有benchmark program中的变量申明转变成KLEE的变量声明。
3)将该类问题中程序的定点改写成KLEE内部相对应到达该点终止的函数。
4)在所有函数名的前面加上inline关键字进行函数间的内嵌。
步骤二:利用静态分析工具获取目标点的dominator语句
在步骤S1设置目标代码点之后需要通过静态分析得到目标点的dominator语句。分析dominator的过程可以借助自动化程序分析工具,本发明选择符号执行工具KLEE来帮助本发明自动化分析目标代码的dominator语句。若程序在到达指定目标点前,必须经过一系列点,则这些点的集合为该目标点的dominator语句。在KLEE内部的Executor::run模块内填写代码加以借助KLEE内部的函数分析出目标点的dominator并将其存入一个列表的数据结构以供之后Q-learning与KLEE的交互使用。其中dominator的形式为LLVM的中间代码。LLVM是一种编译框架,KLEE正是基于这种编译框架,它的运行是在LLVM中间码上,类似于汇编语句。KLEE静态分析得到的dominator语句为LLVM的一行中间层代码。
步骤三:将强化学习基本算法之一Q-learning写入一个独立的python文件当中,该脚本中包含Q-learning变量有:
1)Q(S,A):代表一个横坐标为S,纵坐标为A的二维表;
2)S:表示当前状态;
3)A:表示根据当前政策所选择出来的行为;
4)S':表示agent下一次结束时的状态;
5)A':根据Q-table表所选择出来最好的状态;
6)R:根据环境中的当前行为所得到的奖励值。
步骤四:进行Q-learning与KLEE的交互过程。
在本发明的例子当中,Q-learning中的state和action分别对应LLVM中间码的一行代码和KLEE进行分支选择的true和false选择。具体的交互参照图2
符号执行工具KLEE遇到branch分支时,将与包含Q-learning算法的python文件进行通信,通信采用socket技术。KLEE将此时的state状态发送给Q-learning,Q-learning在接受到状态之后根据policy算法选择一个action发送给符号执行工具KLEE。根据Q-learning中的∈-greedy规则,KLEE有着概率为∈的大小遵从Q-learning的建议,另外的大小为(1-∈)的概率进行随机选择,只有KLEE在branch分支后的下一个语句是dominator语句的时候,KLEE会发送给Q-learning一个值为正的奖励值,否则为一个值为负的奖励值。接下来将更新Q-learning内部的算法决策。
若符号执行工具KLEE在执行完一个流程之后没有到达目标点,那么KLEE将会发送一个失败信号给Q-learning,Q-learning会选择一个新的状态并将新状态的序列发送给KLEE,新状态的选择遵循以下三个步骤:
1)列举出所有在之前执行过程中的候选序列
2)计算所有候选序列的概率大小
3)选择最大概率的序列作为新的状态发送给KLEE
这里举一个例子:本发明用数字1代表分支选择为true,数字0代表分支选择为false。若符号执行工具在第一轮遇到所有分支后的状态序列为101,则代表符号执行工具分别选择了true、false、true。那么它的候选序列当中就有0,11,100这些状态。因为根据KLEE内Executor::fork函数,每一次的fork将会产生两种不同的状态。接着本发明分别计算0,11,100这些状态的概率大小并从中选择出一个概率最大的状态作为符号执行重新开始的初始状态发送给KLEE。
步骤五:当符号执行工具到达指定目标点或者运行超时,KLEE结束运行,并生成到达指定点的测试用例。
本发明将在符号执行内部撰写一个使工具覆盖到目标点后强制停止的函数,若符号执行工具到达了指定的目标点,则结束符号执行,输出能覆盖到该点的测试用例。另外一种情况是在本发明给定的时间之内,符号执行工具未能覆盖到指定点,在实验中本发明设置的time-bound为2分钟,若到了指定时长未能到达该点,则利用Linux命令行强制执行结束。
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
Claims (7)
1.一种快速获取到达程序指定点测试用例的方法,其特征在于,包括以下步骤:
步骤一:在给定程序人工设置目标代码点,所述目标代码点代表程序实际运行时会出现程序运行错误的位置;
步骤二:在已知给定的目标代码点后,获取所述目标代码点的dominator语句,利用程序静态分析理论分析得到程序在到达目标代码点过程中所必须经过的一系列点;
步骤三:将Q-learning算法写入一个独立的python文件中;
步骤四:开始符号执行过程,当符号执行工具KLEE遇到分支决策时将和独立的python文件进行通信,分支的决策为走true分支还是false分支由Q-learning决定;当符号执行工具在遵循了Q-learning的分支决策后走到dominator语句后,返回给Q-learning一个正的反馈,否则为负,此时Q-learning会根据拿到的反馈更新算法决策;其中,所述符号执行过程若符号执行工具KLEE在执行完一次流程没有到达目标代码点之后,重启符号执行过程;此时Q-learning选择一个新的起始状态发送给KLEE;Q-learning算法的状态选择遵循以下步骤:列举出所有候选状态集合;计算每个候选状态的概率大小;选出概率最大的候选状态;
步骤五:当符号执行工具到达指定目标代码点或者运行超时,KLEE结束运行,并生成到达指定目标代码点的测试用例。
2.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤一中,所述目标代码点在实际项目中,为输出报告中程序出错的位置。
3.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤二中,所述dominator语句为程序在到达指定目标代码点前,必须经过一系列点的集合。
4.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤三中,所述Q-learning为让智能体在与环境的互动过程学习解决问题的最佳路径的过程,将其写入一个独立的python文件当中,在之后符号执行的交互过程使用。
5.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤四中,所述符号执行过程为强化学习引导下的符号执行,以遍历更少的路径数、经过更少的LLVM指令数到达目标代码点。
6.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤四中,所述符号执行工具KLEE为实验中所使用的基于符号执行的程序分析工具。
7.根据权利要求1所述的快速获取到达程序指定点测试用例的方法,其特征在于,步骤五中,终止条件插入符号执行工具KLEE中,当其覆盖到目标代码点或运行超时则强制终止,若覆盖到目标代码点后,则自动生成到达指定目标代码点的测试用例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004142.0A CN111221731B (zh) | 2020-01-03 | 2020-01-03 | 一种快速获取到达程序指定点测试用例的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010004142.0A CN111221731B (zh) | 2020-01-03 | 2020-01-03 | 一种快速获取到达程序指定点测试用例的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111221731A CN111221731A (zh) | 2020-06-02 |
CN111221731B true CN111221731B (zh) | 2021-10-15 |
Family
ID=70806342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010004142.0A Active CN111221731B (zh) | 2020-01-03 | 2020-01-03 | 一种快速获取到达程序指定点测试用例的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111221731B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416800B (zh) * | 2020-12-03 | 2023-09-15 | 网易(杭州)网络有限公司 | 智能合约的测试方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015191731A8 (en) * | 2014-06-13 | 2016-03-03 | The Charles Stark Draper Laboratory, Inc. | Systems and methods for software analytics |
CN109885471A (zh) * | 2017-12-06 | 2019-06-14 | 河南工业大学 | 一种基于粒子群优化的软件多错误定位方法及处理装置 |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8776026B2 (en) * | 2010-10-01 | 2014-07-08 | Ecole Polytechnique Federale De Lausanne | System and method for in-vivo multi-path analysis of binary software |
CN102868972B (zh) * | 2012-09-05 | 2016-04-27 | 河海大学常州校区 | 基于改进q学习算法的物联网错误传感器节点定位方法 |
US10510034B2 (en) * | 2016-09-21 | 2019-12-17 | Coinbase, Inc. | Investigator interface and override functionality within compliance determination and enforcement platform |
CN110515856B (zh) * | 2019-09-02 | 2021-01-29 | 华东师范大学 | 一种基于动态符号执行的测试用例生成系统 |
-
2020
- 2020-01-03 CN CN202010004142.0A patent/CN111221731B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015191731A8 (en) * | 2014-06-13 | 2016-03-03 | The Charles Stark Draper Laboratory, Inc. | Systems and methods for software analytics |
CN109885471A (zh) * | 2017-12-06 | 2019-06-14 | 河南工业大学 | 一种基于粒子群优化的软件多错误定位方法及处理装置 |
CN110399730A (zh) * | 2019-07-24 | 2019-11-01 | 上海交通大学 | 智能合约漏洞的检查方法、系统及介质 |
Non-Patent Citations (3)
Title |
---|
Attacking path explosion in constraint-based test generation;P. Boonstoppel等;《TACAS》;20081231;第351-366页 * |
PYSE: Automatic Worst-Case Test Generation by Reinforcement Learning;J Koo等;《PYSE: Automatic Worst-Case Test Generation by Reinforcement Learning》;20190606;第136-147页 * |
从自动化到智能化:软件漏洞挖掘技术进展.;邹权臣等;《清华大学学报(自然科学版)》;20181231;第58卷(第12期);第1079-1094页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111221731A (zh) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739755B (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
CN108710575B (zh) | 基于路径覆盖测试用例自动生成的单元测试方法 | |
US8584108B2 (en) | Method and apparatus for analyzing software | |
US9594543B2 (en) | Activity diagram model-based system behavior simulation method | |
US9274930B2 (en) | Debugging system using static analysis | |
CN109145534B (zh) | 针对软件虚拟机保护的反混淆系统及方法 | |
CN111008154B (zh) | 一种基于强化学习的Android应用自动测试方法及系统 | |
CN111352826B (zh) | 一种界面测试用例自动生成方法及工具 | |
CN115687115B (zh) | 一种移动应用程序自动化测试方法及系统 | |
CN106021101A (zh) | 对移动终端进行测试的方法及装置 | |
CN111221731B (zh) | 一种快速获取到达程序指定点测试用例的方法 | |
US6691079B1 (en) | Method and system for analyzing test coverage | |
CN117369521B (zh) | 用于无人机决策的行为树模型路径生成方法、装置及设备 | |
CN117331826A (zh) | 一种针对挖掘安全漏洞的混合模糊测试优化方法 | |
US7543274B2 (en) | System and method for deriving a process-based specification | |
CN109101355B (zh) | 一种提取错误现场特征测试激励的处理器调试方法 | |
CN110990843A (zh) | 人工智能和模糊测试漏洞扫描系统(AIFuzz) | |
CN116541268A (zh) | 上下文感知依赖引导的内核模糊测试用例变异方法与系统 | |
CN112363954B (zh) | 基于对象状态一致性的软件动态更新测试方法 | |
CN113778454B (zh) | 一种人工智能实验平台的自动评测方法及系统 | |
EP2820547B1 (en) | Debugging method and computer program product | |
CN115310095A (zh) | 一种区块链智能合约混合形式化验证方法及系统 | |
US8826233B2 (en) | Graphical representation of a JAVA bytecode | |
Said et al. | Towards understandable guards of extracted state machines from embedded software | |
CN114138669A (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 |