[发明专利]一种基于依赖结构特征的Feature Envy代码坏味检测方法在审
申请号: | 202110989734.7 | 申请日: | 2021-08-26 |
公开(公告)号: | CN113703774A | 公开(公告)日: | 2021-11-26 |
发明(设计)人: | 李必信;李佳;王璐璐;孔祥龙;廖力;周颖 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 南京众联专利代理有限公司 32206 | 代理人: | 杜静静 |
地址: | 210096 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 依赖 结构 特征 feature envy 代码 检测 方法 | ||
1.一种基于依赖结构特征的Feature Envy代码坏味道检测方法,其特征在于,该方法包括如下步骤:
步骤1)依赖结构图构建,为Feature Envy代码坏味道构建依赖结构图,在表示坏味道的依赖结构图中,结点表示方法和类,结点之间的关系包括继承,实现,聚合,参数依赖,实例化,返回值依赖,函数调用;
步骤2)源代码依赖提取,程序源代码进行解析,提取出源代码实体之间的各种依赖关系;
步骤3)代码坏味道检测,通过分析各种依赖关系计算依赖强度,检测出具有FeatureEnvy的方法以及其所依恋的类。
2.根据权利要求1所述的基于依赖结构特征的Feature Envy代码坏味检测方法,其特征在于:
所述步骤1)依赖结构图构建,具体如下:
结合Feature Envy代码坏味道定义,构建Feature Envy代码坏味道结构依赖图,Feature Envy代码坏味道的依赖结构图是一个包含一个起点和多个终点的有向图,依赖图的定义包括结点集合V={v1,v2,...,vi,...,vn},其中vi表示图中的结点,1=i=n,n是结点的总数;边的集合包括E={e1,e2,...ej,...em},其中ej表示图中的边,1=j=m,m是边的总数;结点的类型包括类(class)和方法(method),其中,只有起点的类型是方法(method),所有终点的类型都是类(class);边的类型包括继承(extends)依赖,聚合(aggregation)依赖,参数依赖(parameters),实例化(instantiation)依赖,返回值依赖(return),函数调用(invoke)依赖,实现(implements)依赖。
3.根据权利要求1所述的基于依赖结构特征的Feature Envy代码坏味检测方法,其特征在于:所述步骤2)源代码依赖提取,具体如下:
根据源代码解析工具(JAVA语言可以采用工具JDT)对程序源代码进行解析,首先将程序源代码转化成抽象语法树(Abstract Syntax Tree,AST),抽象语法树是一种中间表示形式用来表示程序源代码,是一种树形的数据结构,树上的每个结点代表着相应的语法结构,通过分析抽象语法树,提取单个方法实体M的所依赖的类实体C1,C2,...Ci,...Cn,以及M与Ci七种依赖关系以及对应依赖关系的依赖次数,其中依赖关系包括继承(extends),聚合(aggregation),参数依赖(parameters),实例化(instantiation),返回值依赖(return),函数调用(invoke),实现(implements)。
4.根据权利要求1所述的基于依赖结构特征的Feature Envy代码坏味检测方法,其特征在于:所述步骤3)代码坏味道检测,具体如下:
根据如下公式计算方法实体M与其所依赖的类实体C1,C2,...Ci,...Cn各自的依赖强度,其中与方法实体M依赖强度最高的类实体Ci(1=i=n)就是方法M所依恋的类,如果与方法实体M依赖强度最高的类Ci是方法实体M本身所在的类,那么该方法就不具有FeatureEnvy代码坏味道,否则,就可以判断该方法具有具有Feature Envy代码坏味道,
如果A表示方法实体M,B表示类实体Ci(1=i=n),则A与B之间的依赖强度表示为:
其中Loc(A)表示实体A的有效代码行,DependTypei表示依赖类型i的依赖次数,wi表示该依赖类型的权重,依赖类型的权重表如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110989734.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种控油祛痘组合物及其应用
- 下一篇:一种降低位错密度的LED外延片制作方法