[发明专利]基于K-Truss的复杂软件关键模块识别方法在审
申请号: | 202210262823.6 | 申请日: | 2022-03-17 |
公开(公告)号: | CN114706558A | 公开(公告)日: | 2022-07-05 |
发明(设计)人: | 汪烨;周澳回;宋师哲;姜波 | 申请(专利权)人: | 浙江工商大学 |
主分类号: | G06F8/10 | 分类号: | G06F8/10;G06F8/41 |
代理公司: | 杭州浙科专利事务所(普通合伙) 33213 | 代理人: | 陈洁 |
地址: | 310018 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 truss 复杂 软件 关键 模块 识别 方法 | ||
1.一种基于K-Truss的复杂软件关键模块识别方法,其特征在于,包括如下步骤:
步骤1:对原始软件预处理并转换为格式化软件模块网络:分析原始软件中各个模块之间的依赖关系,将其转换为算法可识别的软件模块网络;
步骤2:使用K-Truss算法对软件模块网络进行结构分析并挖掘关键节点:将软件模块网络输入到K-Truss算法中,获取关键节点的相关信息;
步骤3:关键类识别输出:根据设定阈值将K-Truss子图中的节点进行提取并输出。
2.根据权利要求1所述的基于K-Truss的复杂软件关键模块识别方法,其特征在于,所述步骤1包括如下具体步骤:
将类作为关键模块识别的最小粒度,简称关键类,对原始软件进行预处理,将软件项目文件中的无关文件进行排除,仅保留后缀名为“.java”的文件用以生成软件模块网络,对软件模块网络进行定义:
SMN=(N,E,T)
其中,N表示网络的节点集合,包含软件中的类和抽象接口元素,E表示网络的边集合,包含各个节点之间的关系,T是一个三元组集合,表示边集合中各个边的属性及类型。
3.根据权利要求2所述的基于K-Truss的复杂软件关键模块识别方法,其特征在于,所述步骤1包括对各个节点之间的关系类型定义,包括继承关系、实现关系、依赖关系、关联关系;所述继承关系指一个类a继承另一个类b,在JAVA中以extends关键字实现;所述实现关系指一个类a实现一个接口b的功能,在JAVA中以implements关键字实现;所述依赖关系指一个类a中使用了类b,其中类b作为类a的方法参数;所述关联关系指一个类的实例a使用了另一个类的实例b。
4.根据权利要求3所述的基于K-Truss的复杂软件关键模块识别方法,其特征在于,所述步骤1包括一个源代码片段转化为软件模块网络的过程,每个类对应一个节点,若源代码中的两个类之间存在继承关系、实现关系、依赖关系、关联关系的一种关系,则在软件模块网络的对应节点之间增加一条边,使用上述规则进行转化,得到软件模块网络SMN。
5.根据权利要求4所述的基于K-Truss的复杂软件关键模块识别方法,其特征在于,所述步骤2包括如下具体步骤:
对于软件模块网络图SMN=(N,E,T),图中任意一条边可表示为Ei=(u,v),其中Ei表示边,u和v分别表示这条边连接的两个节点,定义支持度Support(Ei)用来表示边Ei在图中参与构成的三角形的个数,定义图KT是图SMN的一个子图,若KT满足图中任意一条边的支持度Support均满足Support(Ei)≥k-2,则称KT为一个k-truss子图。
6.根据权利要求5所述的基于K-Truss的复杂软件关键模块识别方法,其特征在于,所述步骤3包括如下具体步骤:
获得k-truss子图后,对子图中的节点进行关键度排序,对于图中的任意节点,对其关键度进行如下定义:
其中,Criv表示节点v的关键度值,m表示包含该节点的k-truss子图中节点数最小的子图所对应的k值,Nm和Nm+1分别表示m-truss和(m+1)-truss子图所包含的节点数量,若(m+1)-truss子图不存在,则Nm+1取0;
最后,根据上述方法计算出每个节点及其对应模块的关键度值并进行排序,选取前n个模块信息进行输出,n值根据需求确定。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工商大学,未经浙江工商大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210262823.6/1.html,转载请声明来源钻瓜专利网。