CN104050084B - 一种基于软件路径剖析结果的修改影响分析方法 - Google Patents
一种基于软件路径剖析结果的修改影响分析方法 Download PDFInfo
- Publication number
- CN104050084B CN104050084B CN201410281529.5A CN201410281529A CN104050084B CN 104050084 B CN104050084 B CN 104050084B CN 201410281529 A CN201410281529 A CN 201410281529A CN 104050084 B CN104050084 B CN 104050084B
- Authority
- CN
- China
- Prior art keywords
- module
- execution
- software
- path
- frequency
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于软件路径剖析结果的修改影响分析方法,利用程序在运行时的动态控制流信息,对程序静态视图中各个模块的耦合度进行较为准确的推测,以此为依据进行修改影响分析,提升分析结果的准确性,并改进效率。Profile中提供了程序运行信息,从中可以分析得出程序中各个模块的执行先后次序,以及这些次序出现的频率;从这些执行次序信息出发,参考各个模块本身的执行频率,可以定量计算模块之间的耦合程度,进而在软件某部分模块被修改时,按照耦合度分析软件其他部分所受到的影响。
Description
技术领域
本发明属于软件维护中修改影响分析的技术领域,涉及一种基于软件路径剖析结果的修改影响分析方法。
背景技术
路径是软件某次执行中控制流信息和数据流信息的完整表现形式,其中的信息含量丰富,应用价值较高,同时也较为复杂。针对路径信息的应用多种多样,所需要的信息也不尽相同,其中编译优化、程序理解等领域,需要的信息为软件在多次执行中的路径及其执行频率信息。以此为目标,出现了一系列的路径剖析(Path Profiling)技术,通过程序插装的方式来收集程序执行路径信息,获得剖析结果(Path Profile)。
目前主要的路径剖析方法有:
1996年T.Ball和J.Larus提出的Efficient Path Profiling方法。该方法能够以低廉的耗费处理一个软件中所有的非循环路径,其中的路径编码和插装方式为后续的路径剖析研究奠定了基础;
2007年K.Vaswani等人提出的Preferential Path Profiling方法。该方法能够针对用户所指定的目标软件中一部分路径进行剖析,耗费较Efficient Path Profiling更低,但是依然不能处理循环路径;
2012年B.Li和L.Wang等人提出的Profiling of All Paths方法。这一方法能够处理带有循环的软件路径,获得精确的剖析结果,效率比前两种方法略低。
耦合是软件的一项重要属性,其含义为软件内部模块之间存在的联系及其紧密程度,在软件的分析、测试和维护等过程中都需要获知。高度的耦合会对软件的维护活动产生不利影响:一个模块的修改会产生涟漪效应,其他模块也需随之修改。修改影响分析的含义为,当软件的某次修改发生时,从已知的修改模块集合自动的推算出其他需要修改或正确性检查的模块集合,从而过滤不受影响的软件部分、优先保证受影响严重的软件部分,提升软件维护过程的效率。
通过模块之间的耦合关联来分析修改带来的影响是软件维护中的常见做法。目前耦合度量一般通过静态方法进行,通过统计函数调用、消息传递和数据共享等信息来对模块耦合度进行计算。静态方法的优点在于耗费较小,只需要扫描代码而不需要软件执行;其缺点在于精度不高,因为各种静态指标对耦合程度的影响不一,例如形式相同的两个函数调用,如果一个经常执行而另一个基本不执行,那么后者对于耦合的影响较前者小很多。这种区别静态方法难以区分,动态方法可以弥补这一点。
发明内容
技术问题:本发明的目的是提供一种能够利用软件多次执行的控制流信息度量软件内部模块之间的耦合程度,具有较高精确性的基于软件剖析结果的修改影响分析方法。
技术方案:本发明的基于软件剖析结果的修改影响分析方法,包括如下步骤:
步骤1)通过路径剖析方法获知目标软件的各条执行路径px及其执行频率f(px),其中x为执行路径的编号;
步骤2)统计各执行模块的执行频率,具体方法为:将所有包含执行模块mi的路径的执行频率累加,得到执行模块mi的执行频率f(mi),其中i为执行模块的编号;
步骤3)统计所有实际执行的模块执行次序的执行频率;
a)遍历所有执行路径px,将所有执行过的模块构建为一个集合{mk},其中k为执行过的模块的编号;
b)将集合{mk}中任意两个模块进行组合,将所有的组合构建为一个集合,生成模块执行次序集合{(mi,mj)},其中(mi,mj)为模块的有序对,i和j为模块编号,且i≠j;
c)统计每一个模块执行次序(mi,mj)在执行中出现的频率f(mi,mj);
步骤4)利用下式计算所有的模块耦合度:
其中,couple(mi,mj)为模块mi与mj之间的模块耦合度;
步骤5)计算所有未修改模块受到软件修改的模块集合S的影响程度,即为分析结果,具体方法为:将一个未修改模块mi与软件修改的模块集合S中的每个已修改模块的模块耦合度couple(mi,mj)累加,即得到模块mi受到软件修改的模块集合S的影响程度impact(mi),计算公式为:
本发明方法的优选方案中,步骤1)中采用的路径剖析方法为Efficient PathProfiling法、Preferential Path Profiling法或Profiling of All Path。
本发明方法根据路径执行频率对所执行的模块之间的耦合进行度量,通过模块执行次序的执行频率和模块执行频率对模块之间的耦合程度进行计算,通过路径执行频率定量分析软件修改带来的影响。
有益效果:本发明方法提通过利用路径剖析结果对模块在执行过程中展现的联系松紧程度进行计算,用于解决软件中的修改影响分析问题。本发明与现有技术相比,主要有以下一些优点:
(1)需要的信息较为简单,且易于获取。本发明方法以软件的路径剖析结果作为输入。由于路径剖析技术已较为成熟,目前已有各式各样的剖析算法和工具用于各种软件之中;剖析结果的收集伴随着软件运行进行,其耗费在可接受范围内。与现有的方法(如基于LoCMD的分析方法、基于切片的方法等)普遍需要类和方法的依赖关系相比,不需要针对源码进行语法解析,使用较为方便。
(2)利用软件的路径执行频率信息,提高了分析结果的精确性。软件执行是软件行为的直接表现,可以较为准确地体现软件内部各个模块之间的工作情况;基于软件执行的动态方法具有较高的精确性;而且该精确程度随着软件执行的增多可以进一步提升。与现有的影响分析方法相比:静态方法(如基于LoCMD的分析方法)不能甄别模块在执行中的耦合情况,而两个类似的静态耦合在软件执行过程中往往具有不同的表现,所以此类方法的分析结果精确度较低;动态方法(如Execution After方法)一般能够精准地得出影响的范围,但是不能定量计算影响的程度。
(3)本方法的计算方式较为简便,适应于现代软件所常用的迭代修改过程之中。由于软件修改是即刻、多次进行的,使用本方法的公式当新的修改发生时,对分析结果的更新也较为便捷。与现有方法一般需要构建影响模型、在模型上进行较为复杂的计算(如LoCMD方法计算代价正比于软件模块数量的四次方)相比,本方法的耗费很低,计算代价与执行模块数量的平方成正比。
附图说明
图1是本发明中涉及的数据之间的联系图。
图2是本发明的体系结构示意图,表示本发明中涉及的数据处理组件及其之间的联系。
图3是本发明的流程图。
具体实施方式
下面结合附图对发明的技术方案进行详细说明:
本发明利用路径剖析技术在描述软件动态信息上的高精确性的优势,利用剖析结果中路径的执行频率来对软件中各个模块之间的实际耦合进行度量,并依此对软件修改对各个模块的影响程度进行度量,强调度量过程的简单易行和度量结果的精确性。
图1给出了我们所采用的方法中涉及到的数据信息,其中包括:1.路径剖析信息,由路径剖析技术通过软件源码插装的方式获取,是本方法中进行模块耦合度量的输入信息;2.被执行情况信息,通过对路径剖析结果的分析可以统计哪些模块被执行和哪些模块次序被执行两种信息;3.被执行频率信息,通过比对已执行元素和剖析结果中的路径频率,可以获知上一步所得被执行元素的具体执行频率;4.将相关频率带入计算公式,可以算出任意两个模块之间的耦合程度;5.软件修改信息,其中包括软件修改过程中对那些模块进行了改动。
体系结构
图2给出了基于路径剖析结果的修改影响分析技术设计体系结构。下面给出几个主要部分的具体说明。
1剖析信息提取组件
本组件的功能为从路径剖析结果中获知软件中哪些组件已被执行,哪些尚未执行。
路径剖析结果中包含的信息为每条路径及其执行频率,如:
ABCDEF5次/5%
ABDECDF9次/9%
……
执行路径以模块的序列表示(即每个执行模块至少属于一条被执行路径),频率以执行次数表示(各条路径的执行次数除以软件执行总次数,即百分比形式的频率)。由于本发明中的耦合计算公式采用频率之商的形式计算,故使用以上任一种形式的频率均可计算,结果一致。
本组件使用的信息仅为剖析结果中的路径信息,而不需要频率信息。
从路径剖析结果中提取信息的具体方法为:针对每一个模块,判断其是否执行——如果某一模块包含在任何一条剖析到的路径之中,将该模块放入执行模块集合{mk}。
2模块执行次序生成组件
本组件的主要功能是从模块集合生成可能的模块执行次序集合。其输入为一个模块集合{mk},在本发明中该输入由剖析信息提取组件提供。
针对{mk}中任意两个不同的模块mi和mj,生成二者的执行次序(mi,mj)和(mj,mi),将其放入模块执行序列集合{(mi,mj)}。
注意到集合{(mi,mj)}中包含所有被执行的模块次序,但是也可能包含某些未被执行的模块次序。这些未执行的次序将在执行频率统计组件工作时删除。
3执行频率统计组件
本组件的主要功能是针对输入的模块集合{mk}和模块执行次序集合{(mi,mj)}(在本发明中由模块执行次序生成组件提供),结合路径剖析的频率信息计算集合中各个元素的出现频率。
4模块耦合度量组件
本组件的主要功能是利用各个模块和模块执行次序的计算结果对各个模块的耦合程度进行度量。将执行频率统计组件提供的参数带入公式
对于未计算的模块对,其耦合程度为零(这两个模块从未同时出现在一次执行之中)。
5受影响程度计算组件
该组件使用软件模块之间的耦合度和修改集合计算相关其他模块受影响程度的大小;按照受影响程度从高到低排序,可以获得未修改模块的排序;软件项目人员按照在检查未修改模块是否需要相应修改时,优先保证受影响程度高的模块在修改后的软件中正确工作,如果某一受影响的模块需要进行修改,那么将其加入修改模块集合,更新影响分析结果。
本方法从软件剖析结果计算各个模块和模块次序的执行频率,然后再以此计算各对模块之间的耦合程度。具体的步骤如下(参见图3所示):
步骤1)路径剖析。针对目标软件的类型(是否含有循环、是否存在方法调用等)和目标模块的粒度(一个模块可以代表一个语句、方法或者子系统等)选择合适的剖析技术实施,通过插装、执行等步骤即可获取各条路径执行的频率。获取剖析结果的形式为目标软件的各条执行路径px(px是一个由目标软件中的各个模块组成的一个序列)及其执行频率f(px)(f(px)是一个非负整数,为px执行的次数),其中x为执行路径的编号;本步骤的路径剖析方法可根据目标软件的类型和目标模块的粒度来确定,如采用Profiling of All Paths路径剖析方法时,可以对软件模块之间存在循环依赖、递归调用等复杂情况进行处理;如果能够在此基础上提高模块的粒度,获得没有循环的软件控制流结构,那么就可以使用Efficient Path Profiling剖析方法,以降低耗费;如果再进一步,能够对一部分路径(而非全部可执行路径)进行剖析而忽略其他,则可以采用Preferential Path Profiling方法,进一步提升剖析效率。
步骤2)模块执行情况统计。在路径剖析完成之后,即可判断哪些模块已被执行。统计各执行模块的执行频率,具体方法为:将所有包含执行模块mi的路径的执行频率累加,得到执行模块mi的执行频率f(mi);
步骤3)生成并统计所有实际执行的模块执行次序的执行频率。具体步骤为:
(a).针对某一模块mi计算其执行频率:对于每一条路径p,mi每在p中出现一次,将f(p)累加到f(mi)之中。
(b).针对某一模块执行次序(mi,mj)和某一条路径p,计算(mi,mj)在p中出现的次数f(mi,mj,p)。
(i).f(mi,mj,p)初始化为0;
(ii).查找p中是否包含mi,没有则结束,否则进入下一步;
(iii).找到mi在p中的第一次出现,从p中删除该处的mi及其之前的部分;
(iv).查找剩余部分的路径p中是否包含mj,没有则结束,否则进入下一步;
(v).找到mj在p中的第一次出现,从p中删除该处的mj,f(mi,mj,p)累加1;
(vi).转ii)。
(c).针对所有的模块执行次序(mi,mj)和每一条路径pk,计算出f(mi,mj,pk)后,使用
各条路径的频率f(pk)进行计算:
f(mi,mj)=Σk(f(mi,mj,pk)*f(pk))
(d).从{(mi,mj)}中删除频率为零(f(mi,mj)=0)的模块次序。
步骤4)模块耦合度量。使用模块的执行频率和模块次序的执行频率对任意两个模块在执行中展现的动态耦合关系进行度量。具体方法为利用下式计算所有的模块耦合度:
其中,couple(mi,mj)为模块mi与mj之间的模块耦合度;
步骤5)修改影响计算。软件在每次修改活动中,有一部分的模块收到修改,这些模块组成的集合为软件修改集合S,相应的,未被修改的模块集合为S的补集。我们利用S来对中的所有模块受到本次修改的影响程度。具体步骤为:
(a).将一个未修改模块mi与软件修改的模块集合S中的每个已修改模块的模块耦合度couple(mi,mj)累加,即得到模块mi受到软件修改的模块集合S的影响程度impact(mi),计算公式为:
(b).当有多个修改模块同时影响一个未修改模块时,将所有相关耦合累加计算;
(c).照受影响程度从高到低对所有未修改模块进行排序,优先验证受影响程度高的模块;
(d).当新的修改发生时,重新更新影响分析结果。
这样,我们通过计算各个模块和模块次序的执行频率,来对软件修改带来的影响进行定量计算。该计算结果展现了各个模块在执行中实际出现的联系,包含了(剖析过程中)所有可能存在的动态依赖关系,具有较高的精确性。其精确程度依赖于剖析过程中的执行情况,执行的次数越多、覆盖情况越广,则结果越具有代表性。
总之,本方法的总体实施过程为:通过路径剖析结果获知软件各个模块之间的耦合程度;通过软件在某次修改过程中的修改模块集合,结合这些模块与软件其他模块之间的耦合度计算其被影响的程度;按照收到影响的大小对软件模块进行排序,以优先检验受影响较大的软件部分,提高软件修改和维护过程的效率;当受影响模块的修改发生时,即刻更新修改集合和影响分析结果。
实施例:
为了方便描述,我们假定有如下简化的应用实例:
目标软件中有四个模块A、B、C和D。模块A被修改。
通过剖析过程得出软件中有3条可执行路径。这些路径及其执行频率为:
P1:ABD 115次
P2:ABDB 23次
P3:ABADABD 68次
根据我们前面提到的计算步骤,依次实施:
第一步,计算被执行模块和模块次序。可以发现被执行的模块为A、B和D,模块C未被执行。模块A、B和D可能的执行次序集合为{(A,B),(B,A),(A,D),(D,A),(B,D),(D,B)}。
第二步,计算模块和模块次序的执行频率。
首先计算模块频率。模块A在路径P1中出现了一次,在P2中出现了一次,在P3中出现了3次,故模块A的执行频率为:115*1+23*1+68*3=342;同样可以算出模块B的执行频率为365,D为274。
然后计算模块次序的执行频率。这里以较为复杂的f(A,B,P3)为例计算:
1.P3中查找到A的第一次出现:‘A’BADABD;
2.删除该处A及其之前的部分,P3:BADABD;
3.P3中查找到B的第一次出现:‘B’ADABD;
4.删除该处B,P3:ADABD,并使f(A,B,P3)累加1,此时f(A,B,P3)=1;
5.P3中查找到A的第一次出现:‘A’DABD;
6.删除该处A及其之前的部分,P3:DABD;
7.P3中查找到B的第一次出现:DA‘B’D;
8.删除该处B,P3:DAD,并使f(A,B,P3)累加1,此时f(A,B,P3)=2;
9.P3中查找到A的第一次出现:D‘A’D;
10.删除该处A及其之前的部分,P3:D;
11.P3中未找到B的出现,结束;
12.返回f(A,B,P3)=2。
同样可以计算得出f(A,B,P1)=1,f(A,B,P1)=1。所以:
f(A,B)=f(A,B,P1)*115+f(A,B,P2)*23+f(A,B,P3)*68=274。
同理可得:
f(B,A)=68
f(A,D)=274
f(D,A)=68
f(B,D)=274
f(D,B)=91
第三步,计算模块耦合。
couple(A,B)=(f(A,B)+f(B,A))/(f(A)+f(B))=0.48
couple(A,D)=(f(A,D)+f(D,A))/(f(A)+f(D))=0.56
couple(B,D)=(f(B,D)+f(D,B))/(f(B)+f(D))=0.57
couple(A,C)=couple(B,C)=couple(C,D)=0
这样得出了各个模块之间的耦合程度。
第四步,分析修改影响。修改集合为{A},未修改集合为{B,C,D}。
impact(B)=couple(A,B)=0.48
impact(C)=couple(A,C)=0
impact(D)=couple(A,D)=0.56
修改影响分析结果为:D、B、C。
假设在分析D时发现D需要做出适应性的修改。那么修改集合改变为{A,D},未修改集合改变为{B,C}。
此时:
impact(B)=couple(A,B)+couple(B,D)=1.05
impact(C)=couple(A,C)+couple(C,D)=0
修改影响分析结果为:B、C。
以上仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。
Claims (2)
1.一种基于软件剖析结果的修改影响分析方法,其特征在于,该方法包括如下步骤:
步骤1)通过路径剖析方法获知目标软件的各条执行路径px及其执行频率f(px),其中x为执行路径的编号;
步骤2)统计各执行模块的执行频率,具体方法为:将所有包含执行模块mi的路径的执行频率累加,得到执行模块mi的执行频率f(mi),其中i为执行模块的编号;
步骤3)统计所有实际执行的模块执行次序的执行频率;
a)遍历所有执行路径px,将所有执行过的模块构建为一个集合{mk},其中k为执行过的模块的编号;
b)将集合{mk}中任意两个模块进行组合,将所有的组合构建为一个集合,生成模块执行次序集合{(mi,mj)},其中(mi,mj)为模块的有序对,i和j为模块编号,且i≠j;
c)统计每一个模块执行次序(mi,mj)在执行中出现的频率f(mi,mj);
步骤4)利用下式计算所有的模块耦合度:
其中,couple(mi,mj)为模块mi与mj之间的模块耦合度;
步骤5)计算所有未修改模块受到软件修改的模块集合S的影响程度,即为分析结果,具体方法为:将一个未修改模块mi与软件修改的模块集合S中的每个已修改模块的模块耦合度couple(mi,mj)累加,即得到模块mi受到软件修改的模块集合S的影响程度impact(mi),计算公式为:
2.根据权利要求1所述的基于软件剖析结果的修改影响分析方法,其特征在于:所述步骤1)中采用的路径剖析方法为Efficient Path Profiling法、Preferential PathProfiling法或Profiling of All Path法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410281529.5A CN104050084B (zh) | 2014-06-20 | 2014-06-20 | 一种基于软件路径剖析结果的修改影响分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410281529.5A CN104050084B (zh) | 2014-06-20 | 2014-06-20 | 一种基于软件路径剖析结果的修改影响分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104050084A CN104050084A (zh) | 2014-09-17 |
CN104050084B true CN104050084B (zh) | 2016-08-10 |
Family
ID=51502970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410281529.5A Expired - Fee Related CN104050084B (zh) | 2014-06-20 | 2014-06-20 | 一种基于软件路径剖析结果的修改影响分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104050084B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293809A (zh) * | 2016-07-28 | 2017-01-04 | 东软集团股份有限公司 | 优化程序的方法及装置 |
CN107703923B (zh) * | 2017-10-31 | 2020-04-14 | 中国航空无线电电子研究所 | 数据耦合和控制耦合自动分析方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831060A (zh) * | 2012-08-24 | 2012-12-19 | 东南大学 | 一种基于修改影响分析的部件软件回归测试用例更新方法 |
-
2014
- 2014-06-20 CN CN201410281529.5A patent/CN104050084B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831060A (zh) * | 2012-08-24 | 2012-12-19 | 东南大学 | 一种基于修改影响分析的部件软件回归测试用例更新方法 |
Non-Patent Citations (2)
Title |
---|
A survey of code-based change impact analysis techniques;李必信等;《SOFTWARE TESTING,VERIFICATION AND RELIABILITY》;20121231;全文 * |
全路径剖析方法;王璐璐等;《软件学报》;20120630;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104050084A (zh) | 2014-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107301296A (zh) | 基于数据的断路器故障影响因素定性分析方法 | |
US6356858B1 (en) | Coverage measurement tool for user defined coverage models | |
CN103559129B (zh) | 基于遗传算法的统计回归测试数据生成方法 | |
Bianchi et al. | An exploratory case study of the maintenance effectiveness of traceability models | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN101833499A (zh) | 一种基于可达树的软件测试验证方法 | |
Wang et al. | Ietcr: An information entropy based test case reduction strategy for mutation-based fault localization | |
CN105808438A (zh) | 一种基于函数调用路径的测试用例复用方法 | |
CN107632590A (zh) | 一种基于优先级的底事件排序方法 | |
CN104050084B (zh) | 一种基于软件路径剖析结果的修改影响分析方法 | |
CN110059006A (zh) | 代码审计方法及装置 | |
CN104317707A (zh) | 一种基于程序结构影响感知的软件错误定位方法 | |
CN103744788B (zh) | 基于多源软件数据分析的特征定位方法 | |
CN103455417B (zh) | 一种基于马尔可夫模型的软件错误定位系统及错误定位方法 | |
Plöesch et al. | On the validity of the it-cisq quality model for automatic measurement of maintainability | |
CN102214141B (zh) | 基于实时堆栈的程序切片方法 | |
CN107391124B (zh) | 一种基于黄金分割搜索及软件执行轨迹的条件切片方法 | |
Akca et al. | Run-time measurement of cosmic functional size for java business applications: Initial results | |
CN103150626B (zh) | 基于程序依赖图的bpel过程一致性度量方法 | |
Mirzapourrezaei et al. | Simulation of a manufacturing assembly line based on witness | |
CN105404608A (zh) | 一种基于公式解析的复杂指标集计算方法和系统 | |
Lyu et al. | A coverage analysis tool for the effectiveness of software testing | |
Bu et al. | IIS-guided DFS for efficient bounded reachability analysis of linear hybrid automata | |
CN113505283A (zh) | 一种测试数据的筛选方法及系统 | |
CN111221864B (zh) | 一种基于mysql慢查询日志词频分析的索引智能推荐方法 |
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: 20160810 Termination date: 20200620 |