CN103279421B - 一种基于数据起源技术的程序异常传播模型构造方法 - Google Patents

一种基于数据起源技术的程序异常传播模型构造方法 Download PDF

Info

Publication number
CN103279421B
CN103279421B CN201310237839.2A CN201310237839A CN103279421B CN 103279421 B CN103279421 B CN 103279421B CN 201310237839 A CN201310237839 A CN 201310237839A CN 103279421 B CN103279421 B CN 103279421B
Authority
CN
China
Prior art keywords
exception
program
abnormal
statement
control flow
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.)
Expired - Fee Related
Application number
CN201310237839.2A
Other languages
English (en)
Other versions
CN103279421A (zh
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.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
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 Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN201310237839.2A priority Critical patent/CN103279421B/zh
Publication of CN103279421A publication Critical patent/CN103279421A/zh
Application granted granted Critical
Publication of CN103279421B publication Critical patent/CN103279421B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于数据起源技术的程序异常传播模型构造方法,本发明的异常传播模型的构造分为三个阶段:第一个阶段针对程序的每个方法构造方法的异常控制流图,第二个阶段基于生成的控制流图,进行数据流分析,生成异常的派生图和异常处理动作序列。第三个阶段将根据程序的每个方法之间的调用关系,将各个方法的异常传播图进行合并,生成整个程序的异常传播模型。本发明中的异常传播模型具有丰富的表达能力,能够完整表达和展现软件异常传播演变的过程,可以更有效辅助开发人员理解程序中的异常处理过程,分析异常处理机制中存在的问题,支持异常处理过程测试用例的组织,从而设计出合理有效的异常处理方案,使软件具有更高的健壮性。

Description

一种基于数据起源技术的程序异常传播模型构造方法
技术领域
本发明属于软件工程技术领域,特别是涉及一种分析异常流,构造异常传播模型的方法。
背景技术  
对程序进行异常流分析,构建出异常的传播模型,以描述程序中异常的产生、传播、演变和处理的过程,可以帮助开发人员理解程序中的异常处理过程,分析异常处理机制中存在的问题,支持异常处理过程测试用例的组织,从而设计出合理有效的异常处理方案,使软件具有更高的健壮性。
目前,国内外在异常传播方面的总体上可以归为两大类。一类关注于异常控制流的分析和建模。东南大学的姜淑娟和南京大学的徐宝文等提出了一种包括异常处理结构的函数间控制流图的构建方法。该方法可以把异常处理的隐式控制流显式地表示出来。并在此基础上,提出了基于异常传播分析的C++程序的数据流分析方法。Thummalapenta  S.和谢涛提出了一种基于数据挖掘发现异常处理规则的方法,通过从代码中构建异常流图、生成静态代码轨迹,然后对静态代码轨迹进行挖掘,来发现异常处理动作之间的关联性。波兰Gda'nsk科技大学的Pawel L. Kaczmarek和Henryk Krawczyk提出分布式应用程序的异常传播建模方法,该方法提出了带有异常信息的分布式控制流图(DCFGE),分析DCFGE得到异常传播的详细信息以及由于分布式系统的依赖关系导致异常的隐式影响。
另一类研究关注于异常传播路径模型的分析和构造。Rutgers University的Chen Fu和 Barbara G. Ryder提出的E-C链模型是其中的代表。所谓E-C链是指针对程序中的每个异常使用(p, c)二元组表示,P表示异常的产生点,而C表异常的捕获点。他们利用静态分析的方法,可以将Java程序中多条语义相关的异常流组合,形成完整的异常传播路径。英国纽卡斯尔大学的Alexei Iliasov等人提出了一种针对移动Agent的协同域间异常的传播方法,该方法基于穿越域边界的联系链,显式地建立异常传播的路径,有助于多层协同容错系统的实现。Brito P.H.S. 和C.M.F. Rubira等人提出一个体系结构中异常流的分析框架Aereal,通过分析体系结构文档,建议体系结构的异常流视图,并提供分析方法检测异常流设计中的问题。纽卡斯尔大学的Gorbenko A等人将错误和故障注入不同的Web服务平台,通过试验结论分析不同平台中异常的传播行为,以及异常传播对不同平台的性能影响。
这两个方面的工作都有着重要的意义。由于处理逻辑没有显式的控制流结构,程序员往往由于难以全面清晰地了解异常控制流,使得异常处理和恢复代码中产生缺陷,出现资源泄露、数据状态非法等不良后果。因此,异常控制流的建模可以展示异常对程序流向的影响,并可以依据控制流模型,进一步支持数据流分析,从而使程序分析更加完整和准确。异常传播路径模型可以为异常在程序中的传播提供显式的规约,从而可以帮助开发人员理解程序中异常的传播情形,评估异常的传播对系统的影响,优化异常处理逻辑的设计,并在发生异常时依据传播模型进行分析,来发现异常产生的原因。
然而,目前的工作都是将这两个方面的模型分开来考虑。因此不能够呈现异常传播的完整视图。当对程序中的异常进行分析,例如分析异常发生后资源是否释放、数据是否恢复,分析异常传播对系统可靠性的影响等,都会受到一定的制约。
发明内容
为了解决上述的技术问题,本发明提供了一种能够呈现异常传播的完整视图的基于数据起源技术的程序异常传播模型构造方法。
本发明所采用的技术方案是:一种基于数据起源技术的程序异常传播模型构造方法,其特征在于,包括以下步骤:
步骤1:对程序的每个方法在异常情况下的控制流进行分析,分析语句可能抛出的异常,以及处理或者操作该异常的语句,利用数据起源技术建立这些语句之间的关系,创建异常抛出、捕获与处理的异常控制流图;
步骤2:对所述程序的每个方法进行数据流分析,分析多个异常之间的派生关系,以及所述程序中异常的产生、使用、转化、处理、抛出关系,利用数据起源技术创建异常派生图和异常处理动作序列;
步骤3:对所述程序进行过程间分析,依据所述程序的调用图,将所述各个方法的异常控制流图、异常派生图、异常处理动作序列进行连接和映射,整合为所述程序的完整的异常传播模型。
作为优选,所述创建异常抛出的异常控制流图包括以下子步骤:
步骤1.1:依据传统的控制流分析方法,根据生成的各个单元之间的先后序关系,构造正常执行时各个语句之间的关联;
步骤1.2:在此基础上,对可能产生异常的语句进行分析,分析其抛出的异常类型,得到异常抛出的异常控制流图。
作为优选,所述程序的每个方法进行数据流分析,首先,针对所述方法中的每一个异常变量,分别创建一个异常节点;然后,对所述程序进行数据流分析,沿着所述异常控制流的走向,分析各个语句对异常变量的操作,从而确定所述语句和所述异常变量的关系以及所述异常变量之间的关系。
作为优选,所述整合为所述程序的完整的异常传播模型包括以下子步骤:
步骤3.1:对所述程序的每个方法所有调用语句进行遍历;
步骤3.2:找到所有调用语句对应的被调用方法,通过分解调用节点、连接控制边、连接异常派生边完成整个异常传播模型的整合。
本专利相对于现有技术的主要特色与创新之处在于:
1.本方法中的异常传播模型由异常控制流图、异常派生图、异常处理动作序列三个部分构成;异常控制流图部分建模异常产生和处理的控制流,将原本隐式的异常控制流显式地表达处理;异常派生图建模程序中各个异常之间的派生与演变关系;异常处理动作序列将异常控制流和异常派生图两个部分连接起来,表达程序控制流中的每一步是如何对异常进行操作的;
2.本方法中的异常控制流图使用数据起源模型进行表达;程序的方法、语句表示为数据起源中的过程的子类,程序与语句之间、多个语句之间的关系使用过程之间关系的子类表示;
3.本方法中的中的异常派生图和异常处理动作序列也使用数据起源模型进行表达。异常表示为数据起源中的制品的子类,异常之间的派生关系表达为制品之间关系的子类,异常相关的操作语句和异常之间的关系表达为过程与制品之间关系的子类;
4.本方法中基于数据起源模型的组合方法,将软件中各个程序方法异常传播模型进行连接和映射,组合成的异常传播模型仍然是一个数据起源模型。
本发明创建的异常传播模型与国内外已有的异常控制流和E-C链等异常传播模型相比,具有更加丰富的表达能力,能够完整表达和展现软件异常传播演变的过程,可以更有效辅助开发人员理解程序中的异常处理过程,分析异常处理机制中存在的问题,支持异常处理过程测试用例的组织,从而设计出合理有效的异常处理方案,使软件具有更高的健壮性。
附图说明
图1 :为本发明具体实施例中单个方法的异常传播示意图;
图2 :为本发明具体实施例中调用语句和被调用方法之间的连接关系示意图。
具体实施方式
以下结合附图和具体实施例对本发明做进一步的说明。
本发明提出的一种基于数据起源技术的程序异常传播模型构造方法,用于分析软件程序,产生异常在程序中的传播模型。数据起源技术目前在数据库领域和科学工作流领域都有很多应用,可以对数据的产生、处理、演变、消亡的完整的生命周期进行建模。利用数据起源模型,可以理解数据的传播演变过程,追溯数据的起源,分析数据错误产生的原因等。本发明将数据起源技术应用与程序异常传播模型的构造中,将异常作为程序中的一种特殊数据,建模其产生、处理、演变、消亡的生命周期模型,从而支持程序中异常处理机制的分析。
本发明提出的异常传播模型借鉴数据起源的思想,使用数据起源图表示异常的产生演变过程。对于程序中的每一个方法都有一个对应的异常起源图,然后根据方法之间的调用关系将多个图链接成为一个大图,来表示整个程序的异常传播过程。
请见图1,为本发明具体实施例中单个方法的异常传播示意图,整个图可以分为三个部分:异常控制流图、异常派生图、异常处理动作序列。
异常控制流图建模了方法中的各个语句构成的控制流结构。每个方法的异常控制流图包括一个Start节点、一个Return节点和一个Throw节点。Start节点是方法的开始节点,Return节点是方法结束并正常返回的节点,Throw节点是方法结束并抛出异常的节点。异常控制流图中的其他节点(如图1中的U1、U2、U3、U4、U5)表示程序中的语句,这些节点之间关联包括两种:normal和exceptional。 normal表示语句之间显式的、正常执行次序,而exceptional表示语句之间由于异常事件触发和捕获,而形成的隐式的异常处理执行次序。
异常派生图建模了方法中的各个异常消息以及异常消息之间的派生关系。图中的每个节点(如图1中的E1或E2)表示一个异常消息。异常消息中的异常类型使用集合来表示。异常消息之间存在Equals、ConvertedTo和OverriddenBy三种关系,Equals表示两个异常消息只是名字不同的同一个消息, ConvertedTo表示前一个异常将转化为后一种异常,OverriddenBy表示前一个异常将被后一个异常覆盖。当异常变量进行引用赋值的时候,两个变量之间是Equals关系,而当程序语句直接或者间接使用前一个异常变量,产生后一个异常变量时,两者是ConvertedTo关系。
异常处理动作序列建模了方法中的语句与异常消息之间的关系。这些关系共分为:throws、generates、CaughtBy、UsedBy和Modifies五种。throws表示语句将抛出一个异常,这种抛出是一种事件机制,将改变控制流的流向。generates同样是产生一个异常,但是这种操作是把异常当做变量来操作,不产生异常事件,也不改变控制流。CaughtBy表示异常被某个语句(Catch或finally语句)捕获。UsedBy表示异常当做普通变量被语句使用。Modifies表示异常当作普通变量被语句修改。
整个程序的异常起源图是由各个方法的异常起源图依据方法之间的调用关系连接而成的。
请见图2,为本发明具体实施例中调用语句和被调用方法之间的连接关系示意图;当某个语句调用另一个方法时,调用语句可以分解为三个子节点S、R、T,这三个子节点分别代表语句的起始动作、返回动作和抛出异常动作。这三个子节点分别与被调用方法的Start节点、一个Return节点和一个Throw节点相连。被调用方法中Throw节点所连接异常节点则与调用语句所连接的异常节点相连,关系为ConvertedTo。
本发明的异常传播模型的构造分为三个阶段:第一个阶段针对程序的每个方法构造方法的异常控制流图,第二个阶段基于生成的控制流图,进行数据流分析,生成异常的派生图和异常处理动作序列。第三个阶段将根据程序的每个方法之间的调用关系,将各个方法的异常传播图进行合并,生成整个程序的异常传播模型。
本发明所采用的技术方案是:一种基于数据起源技术的程序异常传播模型构造方法,包括以下步骤:
步骤1:对程序的每个方法在异常情况下的控制流进行分析,分析各条语句可能产生的异常集合,寻找异常集合中的各个子集对应的处理语句和操作语句,利用数据起源技术创建异常抛出、捕获与处理的异常控制流图;
异常控制流图的核心工作是分析异常发生后,程序所产生的控制流走向。首先依据传统的控制流分析方法,根据生成的各个单元之间的先后序关系,构造正常执行时各个语句之间的关联;在此基础上,对可能产生异常的语句进行分析,分析其抛出的异常类型,得到异常抛出的异常控制流图。由于一条语句可能抛出多种类型的异常,同时异常之间也可能存在继承关系,为了精确表达所抛出的异常,使用集合来表达异常的类型。通过对各个异常类型求并集,得到该语句可能抛出的所有异常。
为了构造异常抛出点和异常捕获点之间的控制流,需要对Catch语句进行分析。Catch语句中所对应的异常类型同样表示为集合。当Catch语句中申明某种类型的异常时,该类型及其所有子类型的异常将全部可以捕获。将异常的抛出点所抛出的异常集合与Catch语句申明的异常集合求交集,如果交集不为空,则创建一条指向该Catch语句的控制边。由于Catch语句存在一定的捕获次序,某个抛出点的异常被前一个Catch语句捕获,如果没有完全捕获,我们需要判断剩余的部分是否会被接下来的Catch语句捕获。通过求差集,得到抛出点为捕获的剩余的异常集合,然后与接下来的Catch语句进行交集计算,判断是否被该语句捕获。
语句的处理更为复杂。所有的异常处理块和正常业务块执行结束后,都将转向Finally块,因此异常处理块和正常业务块的最后一个语句都将有一个Normal边指向Finally语句。同时,如果某个抛出点的异常没有被任何的Catch语句捕获,则该抛出点也将存在一个Exceptional边,指向Finally语句。如果连Finally语句也不存在,则直接指向方法的Throw节点。
步骤2:对程序的每个方法进行数据流分析,分析多个异常之间的派生关系,以及程序中异常的产生、使用、转化、处理、抛出关系,利用数据起源技术创建异常派生图和异常处理动作序列;
异常派生图建模了方法中的各个异常消息及其相互的派生关系,而异常处理动作序列建模了语句和异常消息之间的关系。本发明通过对程序方法进行数据流分析,来构造这两部分的内容;
首先,针对方法中的每一个异常变量,分别创建一个异常节点,异常的类型使用集合来表示。然后,对程序进行数据流分析,沿着异常控制流的走向,分析各个语句对异常变量的操作,从而确定语句和变量的关系以及变量之间的关系;
异常处理动作序列的构建规则方法如下:如果是语句是方法调用语句,语句与所有与之相连的后续Catch语句所对应的异常变量之间存在throws关系。如果语句对应了多条catch语句,则存在多个Throws边与之相连。如果语句是Catch语句,则语句与对应的异常变量之间存在一个CaughtBy关系。如果语句是Throw语句,则语句与对应的异常也存在一个throws关系。如果语句的表达式中、语句调用参数中,调用对象中使用到了异常变量,则语句与异常节点存在一个UsedBy关系。如果语句调用异常变量的构造函数,则语句与对应的异常变量之间存在一个generates关系。如果语句是赋值语句,赋值的对象是异常变量,则语句与异常变量之间存在一个Modifies关系。
异常派生图的构造规则如下:如果在异常处理块中,存在显式的Throw语句,则该Throw语句所抛出的异常可以认为是与异常处理块所处理的异常之间存在ConvertedTo关系。如果在异常处理快中,某个方法调用时抛出了一个新的异常,该异常可以认为并非编程人员特意设置的异常转换,该异常将会覆盖掉原有处理的异常,因此与原来的异常之间存在overridenBy的关系。
步骤3:对程序进行过程间分析,依据程序的调用图,将各个方法的异常控制流图、异常派生图、异常处理动作序列进行连接和映射,整合为程序的完整的异常传播模型;
其整合方法如下:对每个方法所有调用语句进行遍历,然后分别处理,找到其对应的被调用方法,通过分解调用节点、连接控制边、连接异常派生边完成整个整合过程。首先,对调用语句对应的节点进行分解,将其分解成为三个节点start、return和throw。然后,将调用语句的start节点和被调用方法的start节点使用normal控制边连接,将被调用方法的return节点与调用语句的return节点使用normal控制边连接,将被调用方法的throw节点与调用语句的throw节点使用exceptional控制边连接。最后,将被调用方法的throw节点所抛出的所有异常与调用语句的throw节点所抛出的所有异常进行交集计算,判断方法内部抛出的异常与调用语句抛出的异常的转化关系,根据这些关系将对应的异常节点使用ConvertedTo边连接起来。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

Claims (2)

1. 一种基于数据起源技术的程序异常传播模型构造方法,其特征在于,包括以下步骤:
步骤1:对程序的每个方法在异常情况下的控制流进行分析,分析语句可能抛出的异常,以及处理或者操作该异常的语句,利用数据起源技术建立这些语句之间的关系,创建异常抛出、捕获与处理的异常控制流图;
所述创建异常抛出的异常控制流图包括以下子步骤:
步骤1.1:依据传统的控制流分析方法,根据生成的各个单元之间的先后序关系,构造正常执行时各个语句之间的关联;
步骤1.2:在此基础上,对可能产生异常的语句进行分析,分析其抛出的异常类型,构造异常抛出与处理的异常控制流图;
步骤2:对所述程序的每个方法进行数据流分析,分析多个异常之间的派生关系,以及所述程序中异常的产生、使用、转化、处理、抛出关系,利用数据起源技术创建异常派生图和异常处理动作序列;
步骤3:对所述程序进行过程间分析,依据所述程序的调用图,将所述各个方法的异常控制流图、异常派生图、异常处理动作序列进行连接和映射,整合为所述程序的完整的异常传播模型;
所述整合为所述程序的完整的异常传播模型包括以下子步骤:
步骤3.1:对所述程序的每个方法所有调用语句进行遍历;
步骤3.2:找到所有调用语句对应的被调用方法,通过分解调用节点、连接控制边、连接异常派生边完成整个异常传播模型的整合。
2. 根据权利要求1所述的基于数据起源技术的程序异常传播模型构造方法,其特征在于,所述程序的每个方法进行数据流分析,首先,针对所述方法中的每一个异常变量,分别创建一个异常节点;然后,对所述程序进行数据流分析,沿着所述异常控制流的走向,分析各个语句对异常变量的操作,从而确定所述语句和所述异常变量的关系以及所述异常变量之间的关系。
CN201310237839.2A 2013-06-14 2013-06-14 一种基于数据起源技术的程序异常传播模型构造方法 Expired - Fee Related CN103279421B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310237839.2A CN103279421B (zh) 2013-06-14 2013-06-14 一种基于数据起源技术的程序异常传播模型构造方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310237839.2A CN103279421B (zh) 2013-06-14 2013-06-14 一种基于数据起源技术的程序异常传播模型构造方法

Publications (2)

Publication Number Publication Date
CN103279421A CN103279421A (zh) 2013-09-04
CN103279421B true CN103279421B (zh) 2015-09-16

Family

ID=49061950

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310237839.2A Expired - Fee Related CN103279421B (zh) 2013-06-14 2013-06-14 一种基于数据起源技术的程序异常传播模型构造方法

Country Status (1)

Country Link
CN (1) CN103279421B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10057331B2 (en) 2014-12-11 2018-08-21 International Business Machines Corporation Automatic abstraction of flow of control in a distributed virtualization platform
CN106933642B (zh) * 2015-12-29 2021-04-27 阿里巴巴集团控股有限公司 应用程序的处理方法及处理装置
CN106339313B (zh) * 2016-08-12 2018-10-12 南京航空航天大学 一种Java API程序异常与文档的描述不一致自动检测方法
CN109559583B (zh) * 2017-09-27 2022-04-05 华为技术有限公司 故障模拟方法及其装置
CN113961475B (zh) * 2021-12-22 2022-04-15 清华大学 基于规约导向的错误处理缺陷的检测方法及系统
CN114647575B (zh) * 2022-02-23 2024-05-10 南京邮电大学 一种基于高阶函数的c++过程间异常分析系统及方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937396A (zh) * 2010-09-30 2011-01-05 中国科学院软件研究所 软件程序中变量的不安全使用的检测方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101937396A (zh) * 2010-09-30 2011-01-05 中国科学院软件研究所 软件程序中变量的不安全使用的检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
一种基于异常分类的面向服务异常处理方法;丁月华等;《计算机技术与发展》;20121231;第22卷(第12期);第15-20页 *
姜淑娟,徐宝文,史亮.一种基于异常传播分析的数据流分析方法.《Journal of Software》.2007,第18卷(第1期),第74-84页. *
姜淑娟.异常传播分析技术及其应用研究.《中国优秀博硕士学位论文全文数据库#8226;信息科技辑》.2007,(第4期),正文第33-47页. *

Also Published As

Publication number Publication date
CN103279421A (zh) 2013-09-04

Similar Documents

Publication Publication Date Title
CN103279421B (zh) 一种基于数据起源技术的程序异常传播模型构造方法
Ouyang et al. From business process models to process-oriented software systems
Bergmann et al. A graph query language for EMF models
Van Dongen et al. Structural patterns for soundness of business process models
Dijkman et al. Formal semantics and automated analysis of BPMN process models
CN104331367A (zh) Java工程项目开发中异常处理的方法及系统
Huai et al. Towards trustworthy composite service through business process model verification
Ouyang et al. From business process models to process-oriented software systems: The BPMN to BPEL way
Yatapanage et al. Slicing behavior tree models for verification
Xu et al. Prioritizing state-based aspect tests
CN101853174B (zh) 一种字符串资源定义与调用的同步方法及装置
Harel et al. S2A: A compiler for multi-modal UML sequence diagrams
Galindo et al. Exception-sensitive program slicing
Lindsay Behavior trees: from systems engineering to software engineering
Claudia et al. Recovering use case diagrams from object oriented code: An MDA-based approach
Shimomura et al. An approach to GA-driven automatic refactoring based on design patterns
Mosser et al. Workflow design using fragment composition: crisis management system design through ADORE
Eramo et al. Model-driven design-runtime interaction in safety critical system development: an experience report
Abdulhameed et al. An approach to verify SysML functional requirements using Promela/SPIN
Miao et al. A formal specification-based integration testing approach
Wang et al. A static analysis tool with optimizations for reachability determination
Wakankar et al. Architecture-Centric Dependability Analysis for I&C Safety Systems in NPP: A Case Study
Jasser et al. Back to the drawing board
CN113590129B (zh) 一种基于同步反应式构件的代码自动生成方法
Dumez et al. Formal specification and verification of service composition using LOTOS

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150916

Termination date: 20170614