《基于多目标社团发现的软件系统可维护性评估与提升方法.pdf》由会员分享,可在线阅读,更多相关《基于多目标社团发现的软件系统可维护性评估与提升方法.pdf(14页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104133766 A (43)申请公布日 2014.11.05 CN 104133766 A (21)申请号 201410330742.0 (22)申请日 2014.07.11 G06F 11/36(2006.01) (71)申请人 西安交通大学 地址 710049 陕西省西安市咸宁西路 28 号 (72)发明人 郑庆华 李剑 王志文 屈宇 刘烃 (74)专利代理机构 西安通大专利代理有限责任 公司 61200 代理人 陆万寿 (54) 发明名称 基于多目标社团发现的软件系统可维护性评 估与提升方法 (57) 摘要 本发明提出了一种基于多目标社团发现的软 件系统可维。
2、护性评估与提升方法, 包括 : 1) 构建 最大弱连通子图 ; 2) 划分方法调用最大弱连通子 图并计算每个类的不同方法社团内聚度 ; 3) 计算 不同方法社团内聚度的斯皮尔曼相关系数, 选取 相关系数最大的两个社团划分算法来计算软件系 统的模块度, 评估软件系统的可维护性 ; 4) 基于 每个类的方法社团内聚度, 使用自适应的阈值过 滤算法, 过滤出一些内聚度较低的类, 这些类中某 些方法与其它类有紧密联系, 迁移这些方法, 从而 提高类的内聚度和软件系统的模块度, 提升软件 系统的可维护性。本发明不仅提升了软件系统中 类的内聚度, 而且提升了整个软件系统的模块度, 从而提升了软件系统的可维。
3、护性。 (51)Int.Cl. 权利要求书 2 页 说明书 8 页 附图 3 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书8页 附图3页 (10)申请公布号 CN 104133766 A CN 104133766 A 1/2 页 2 1. 基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 包括以下 步骤 : 步骤 S101 : 使用静态代码分析工具 Understand 和复杂网络分析包 igraph, 实现对 Java 软件系统方法调用的最大弱连通子图的生成 ; 步骤 S102 : 运用四种基于不同目标的社团划分算法划分步骤 S10。
4、1 所生成的最大弱连 通子图, 并计算每个类的方法社团内聚度 ; 步骤 S103 : 计算四种社团划分算法结果的斯皮尔曼相关系数, 最后挑选出最大斯皮尔 曼相关系数的两个算法来计算类内聚度和模块度 ; 步骤 S104 : 使用阈值过滤算法, 找出一些内聚度较低类中可以迁移的方法, 输出这些 迁入迁出的方法, 提高这些类的内聚度, 提升了整体的模块度, 从而提升了JAVA软件系统 的可维护性。 2. 根据权利要求 1 所述的基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 步骤 S101 具体包括以下步骤 : 步骤 S201 : 对待分析的 Java 软件系统解析 .java 。
5、文件, 获取项目中定义的方法列表 ; 步骤 S202 : 利用静态代码分析软件 Understand 分析 Java 软件系统源代码, 获取所有 方法调用对 ; 步骤 S203 : 根据步骤 S201 中获取到的 Java 软件系统中的方法列表以后, 对比步骤 S202 获取到的所有方法调用对, 去掉冗余方法, 最终获得软件自身方法调用对 ; 步骤 S204 : 根据软件自身方法调用对生成软件方法调用网络图 ; 步骤 S205 : 利用复杂网络分析包 igraph 过滤掉软件方法调用网络图的孤立的节点, 生 成软件系统方法调用的最大弱连通子图。 3. 根据权利要求 1 所述的基于多目标社团发现。
6、的软件系统可维护性评估与提升方法, 其特征在于, 步骤 S102 具体包括以下步骤 : 步骤 S301 : 运用开源的复杂网络分析包 iGraph 中的四种社团划分算法对得到的方法 调用的最大弱连通子图进行划分 ; 所述四种社团划分算法为基于模块度优化 (fg)、 知识地 图 (im)、 多级分层 (ml) 和标签传播 (lp) 的社团划分算法 ; 步骤 S302 : 根据步骤 S301 的划分结果统计出 Java 软件系统中每个类的所属社团编 号 ; 步骤 S303 : 获取每个类所属各个社团的方法数 ; 步骤 S304 : 计算出每个类的四种社团划分算法对应的方法社团内聚度 ; 方法社团内。
7、聚度的定义为 : 令某个类 C 共有 m 个方法, 经过某个社团划分算法后, m 个 方法分布在 N 个社团中, 第 k 个社团中分布有 nk个方法, k 1,N, 令 n1为 nk中的最大 值, 那么可以得到类 C 基于该社团划分算法的方法社团内聚度为 n1/m。 4. 根据权利要求 1 所述的基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 步骤 S103 具体包括以下步骤 : 步骤 S401 : 计算每两个社团划分算法之间的斯皮尔曼相关系数 ; 步骤 S402 : 挑选 6 组斯皮尔曼相关系数中的最大值, 记录这这个最大值所对应的两种 社团划分算法 ; 步骤 S403 。
8、: 运用步骤 S402 中的两种社团划分算法计算 JAVA 软件系统的平均模块度 权 利 要 求 书 CN 104133766 A 2 2/2 页 3 ( 和每个类的平均社团内聚度 ; 步骤 S404 : 输出 JAVA 软件系统的平均模块度和其中每个类的平均社团内聚度。 5. 根据权利要求 1 所述的基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 步骤 S104 具体包括以下步骤 : 步骤 S501 : 判断社团内聚度的过滤阈值是否大于 1, 如果是则转入步骤 S508, 否则转入 步骤 S502 ; 步骤 S502 : 在步骤 S404 输出的每个类的平均社团内聚度中查。
9、找一个社团内聚度大于 过滤阈值的类 C1; 步骤 S503 : 判断类 C1中是否存在方法在其他社团中, 如果是则转入步骤 S504, 否则转 入步骤 S502 查找符合条件的另一个类 ; 步骤 S504 : 在其他社团中查找社团内聚度大于过滤阈值的类 C2; 步骤 S505 : 判断步骤 S503 中的方法是否与类 C2具有调用关系, 如果是则转入步骤 S506, 否则转入步骤 S502 ; 步骤 S506 : 保存所有满足条件的类 C1、 C2及步骤 S503 中的方法和方法数量 ; 步骤 S507 : 过滤阈值递增 0.05 ; 步骤 S508 : 根据步骤 S506 中保存的记录中的方。
10、法数量列表, 计算并保存每两个相邻阈 值间方法数量差值, 找出方法数量差值最大的两个相邻阈值, 最后得到从两个阈值中较大 的那个阈值处开始, 满足要求的方法数量显著降低 ; 步骤 S509 : 输出方法数量显著降低时所对应的过滤阈值下的所有类 C1、 C2以及相应的 方法。 6. 根据权利要求 5 所述的基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 步骤 S501 中第一次设置的初始过滤阈值为 0.5 或 0.6。 7. 根据权利要求 5 所述的基于多目标社团发现的软件系统可维护性评估与提升方法, 其特征在于, 将步骤 S509 输出的类 C1中相应的方法迁入类 C2中,。
11、 以提升整个 JAVA 软件系 统的可维护性。 权 利 要 求 书 CN 104133766 A 3 1/8 页 4 基于多目标社团发现的软件系统可维护性评估与提升方法 技术领域 : 0001 本发明属于可信软件和软件测试交叉领域, 特别涉及一种软件系统可维护性评估 与提升方法。 背景技术 : 0002 软件系统由众多模块组成, 依靠模块间的相互调用完成各种复杂的功能, 软件模 块性的好坏将直接影响软件功能的实现、 系统的运行效率以及整体稳定性。软件工程的目 标是运用新技术和正确的管理方法来提高软件的质量和生存率, 使软件系统具有更高的可 维护性、 可靠性和可重用性。 0003 面向对象技术采。
12、用数据抽象、 封装、 多态性、 信息隐藏、 重用等机制, 增强了软件的 可维护性, 提高了生产效率。 为了评估和提升面向对象软件设计的质量, 研究人员提出了一 些指标, 这些指标从不同角度评估软件系统, 比如内聚度、 耦合度和复杂度。随着软件功能 需求的日益增加, 开发条件的不断改进, 软件系统变得越来越复杂, 软件系统已经被研究人 员验证符合复杂网络的特征, 在复杂网路中, 一些节点内部的连接密度大于他们和网络中 其他节点的连接密度, 这样的结构被称为社团结构, 软件系统的社团结构和软件的可维护 性密切相关, 社团发现算法能够很好的检测出复杂网络中的社团结构, 社团结构可以用来 计算软件系统。
13、模块度并评估软件系统可维护性。 0004 开发出高内聚和低耦合的软件系统被广泛认为是模块性比较好的软件结构, 内聚 就是模块之间的相互关系, 高内聚意味着软件的各个模块内聚紧密联系, 为此研究人员提 出了一系列的类内聚度度量方法, 比如 : LCOM1,Coh,TCC,LCC,SCOM,CCM 等等, 这些方法基 本上都建立在类中方法对类中实例变量使用和共享的基础上, 只考虑了类中方法与变量之 间、 方法与方法之间的关系, 然而这些度量方法并不能有效的对软件系统可维护性进行评 估和提升。 发明内容 : 0005 本发明的目的在于提出一种基于多目标社团发现的软件系统可维护性评估与提 升方法, 评。
14、价并提升软件系统的可维护性。本发明方法通过分析软件调用网络的社团结构 及对应的模块度指标来评价并提升软件的模块性 ; 对不同文件的代码进行重组, 提高软件 系统中类的内聚度, 从而提升软件的模块性。 0006 为了实现上述目的, 本发明采用如下技术方案 : 0007 基于多目标社团发现的软件系统可维护性评估与提升方法, 包括以下步骤 : 步骤 S101 : 使用静态代码分析工具 Understand 和复杂网络分析包 igraph, 实现对 Java 软件系 统方法调用的最大弱连通子图的生成 ; 步骤 S102 : 运用四种基于不同目标的社团划分算法 划分步骤 S101 所生成的最大弱连通子图。
15、, 并计算每个类的方法社团内聚度 ; 步骤 S103 : 计 算四种社团划分算法结果的斯皮尔曼相关系数, 最后挑选出最大斯皮尔曼相关系数的两个 算法来计算类内聚度和模块度 ; 步骤 S104 : 使用阈值过滤算法, 找出一些内聚度较低类中 说 明 书 CN 104133766 A 4 2/8 页 5 可以迁移的方法, 输出这些迁入 迁出的方法, 提高这些类的内聚度, 提升了整体的模块 度, 从而提升了 JAVA 软件系统的可维护性。 0008 优选的, 步骤 S101 具体包括以下步骤 : 步骤 S201 : 对待分析的 Java 软件系 统解析 .java 文件, 获取项目中定义的方法列表 。
16、; 步骤 S202 : 利用静态代码分析软件 Understand分析Java软件系统源代码, 获取所有方法调用对 ; 步骤S203 : 根据步骤S201中 获取到的Java软件系统中的方法列表以后, 对比步骤S202获取到的所有方法调用对, 去掉 冗余方法, 最终获得软件自身方法调用对 ; 步骤 S204 : 根据软件自身方法调用对生成软件 方法调用网络图 ; 步骤S205 : 利用复杂网络分析包igraph过滤掉软件方法调用网络图的孤 立的节点, 生成软件系统方法调用的最大弱连通子图。 0009 优选的, 步骤 S102 具体包括以下步骤 : 步骤 S301 : 运用开源的复杂网络分析包 。
17、iGraph 中的四种社团划分算法对得到的方法调用的最大弱连通子图进行划分 ; 所述四种 社团划分算法为基于模块度优化 (fg)、 知识地图 (im)、 多级分层 (ml) 和标签传播 (lp) 的 社团划分算法 ; 步骤 S302 : 根据步骤 S301 的划分结果统计出 Java 软件系统中每个类的所 属社团编号 ; 步骤 S303 : 获取每个类所属各个社团的方法数 ; 步骤 S304 : 计算出每个类的 四种社团划分算法对应的方法社团内聚度 ; 方法社团内聚度的定义为 : 令某个类 C 共有 m 个方法, 经过某个社团划分算法后, m 个方法分布在 N 个社团中, 第 k 个社团中分布。
18、有 nk个 方法, k 1,N, 令 n1为 nk中的最大值, 那么可以得到类 C 基于该社团划分算法的方法 社团内聚度为 n1/m。 0010 优选的, 步骤 S103 具体包括以下步骤 : 步骤 S401 : 计算每两个社团划分算法之间 的斯皮尔曼相关系数 ; 步骤 S402 : 挑选 6 组斯皮尔曼相关系数中的最大值, 记录这这个最 大值所对应的两种社团划分算法 ; 步骤 S403 : 运用步骤 S402 中的两种社团划分算法计算 JAVA软件系统的平均模块度(和每个类的平均社团内聚度 ; 步骤S404 : 输出JAVA软件系统 的平均模块度和其中每个类的平均社团内聚度。 0011 优选。
19、的, 步骤 S104 具体包括以下步骤 : 步骤 S501 : 判断社团内聚度的过滤阈值是 否大于 1, 如果是则转入步骤 S508, 否则转入步骤 S502 ; 步骤 S502 : 在步骤 S404 输出的每 个类的平均社团内聚度中查找一个社团内聚度大于过滤阈值的类 C1; 步骤 S503 : 判断类 C1 中是否存在方法在其他社团中, 如果是则转入步骤 S504, 否则转入步骤 S502 查找符合条件 的另一个类 ; 步骤 S504 : 在其他社团中查找社团内聚度大于过滤阈值的类 C2; 步骤 S505 : 判断步骤 S503 中的方法是否与类 C2具有调用关系, 如果是则转入步骤 S50。
20、6, 否则转入步 骤 S502 ; 步骤 S506 : 保存所有满足条件的类 C1、 C2及步骤 S503 中的方法和方法数量 ; 步骤 S507 : 过滤阈值递增 0.05 ; 步骤 S508 : 根据步骤 S506 中保存的记录中的方法数量列表, 计 算并保存每两个相邻阈值间方法数量差值, 找出方法数量差值最大的两个相邻阈值, 最后 得到从两个阈值中较大的那个阈值处开始, 满足要求的方法数量显著降低 ; 步骤 S509 : 输 出方法数量显著降低时所对应的过滤阈值下的所有类 C1、 C2以及相应的方法。 0012 优选的, 步骤 S501 中第一次设置的初始过滤阈值为 0.5 或 0.6。。
21、 0013 优选的, 将步骤 S509 输出的类 C1中相应的方法迁入类 C2中, 以提升整个 JAVA 软 件系统的可维护性。 0014 本发明一种基于多目标社团发现的软件系统可维护性评估与提升方法, 包括如下 步骤 : 说 明 书 CN 104133766 A 5 3/8 页 6 0015 S101) 基于词法语法、 控制流分析技术, 对待分析的目标代码进行扫描, 获取软件 系统的方法列表, 构建方法间的调用网络图, 图的节点为方法, 边为方法间的调用关系, 然 后对方法调用网络图进行预处理, 去掉软件外部方法调用、 所有的孤立节点, 最后得到一个 最大弱连通子图 ; 0016 S102)。
22、 分别运用基于模块度优化、 知识地图、 多级分层和标签传播的社团划分算法 划分出最大弱连通子图的社团结构, 基于不同算法划分出的社团结果计算出每个类的方法 社团内聚度 ; 0017 S103) 分别计算不同方法社团内聚度的斯皮尔曼相关系数验证这些社团划分算法 是否获得类似的结果或者各自独立于对方, 然后选择相关系数最大的两个算法, 基于这两 个算法计算每个类方法社团内聚度平均值和每个软件系统的模块度, 用模块度的值来评估 软件系统的可维护性 ; 0018 S104) 基于每个类的方法社团内聚度, 使用自适应的阈值过滤算法, 过滤出一些内 聚度较低的类, 如若这些类中某些方法与其它类有紧密联系,。
23、 迁移这些方法, 从而提高类的 内聚度和软件系统的模块度, 提升软件系统的可维护性 ; 0019 S105) 输出方法迁移后内聚度提升的类。 0020 本发明进一步的改进在于 : 所述步骤 S101) 中软件系统的方法列表获取方法为 : 利用词法分析技术扫描 Java 软件源代码, 将软件源代码转换为字符流, 并通过词法分析技 术得到的字符流, 构建程序语法树, 最后对该语法树进行分析, 获取软件系统中方法的定 义, 包括方法名, 方法传递参数, 返回值, 将相关方法信息保存入数据库。 0021 本发明进一步的改进在于 : 所述步骤 S101) 中软件系统的方法调用对获取方法 为 : 利用控制。
24、流分析技术, 获取目标代码所有方法调用对。 对比数据库中的方法定义表对方 法调用对进行分析与抽取, 去除软件外部的方法调用对, 最后根据分析结果, 对软件方法调 用对进行记录, 记录格式为 : 类中方法的包名和方法名 ; 被调用者的包名和方法名 - 调用 者的包名和方法名。 0022 本发明进一步的改进在于 : 所述步骤 S101) 中软性系统的方法调用的最大弱连通 子图生成方法为 : 依次读取软件方法调用对记录, 对类中新方法名标记为方法调用网络图 的新节点, 对新的方法调用对标记为方法调用网络图的边, 循环迭代这个过程生成方法调 用网络图, 最后去除孤立的节点, 生成软件系统方法调用的最大。
25、弱连通子图。 0023 本发明进一步的改进在于 : 所述步骤 102) 中分别实现基于模块度的、 知识地图 的、 多级分层和标签传播的社团划分算法, 得到方法社团划分结果, 记录格式为 : 包名和方 法名, 所属社团编号。根据划分结果计算每个类的方法社团内聚度 (MCC) : 0024 令某个类C共有m个方法, 经过某个社团划分算法后, m个方法分布在N个社团中, 第 k 个社团中分布有 nk个方法 (k 1,N), 令 n1为 nk中的最大值, 那么可以得到类 C 基 于该社团划分算法的方法社团内聚度为 n1/m。 0025 本发明进一步的改进在于 : 所述步骤 103) 中分别计算不同方法。
26、社团内聚度的斯 皮尔曼相关系数验证这些社团划分算法是否获得类似的结果或者各自独立于对方, 然后选 择相关系数最大的两个算法, 基于这两个算法计算每个类方法社团内聚度平均值和每个软 件系统的模块度, 用模块度的值来评估软件系统的可维护性。 0026 本发明进一步的改进在于 : 所述步骤 104) 基于每个类的方法社团内聚度, 使用自 说 明 书 CN 104133766 A 6 4/8 页 7 适应的阈值过滤算法, 过滤出一些内聚度较低的类, 如若这些类中某些方法与其它类有紧 密联系, 迁移这些方法, 从而提高类的内聚度和软件系统的模块度, 提升软件系统的可维护 性。 0027 本发明进一步的改。
27、进在于 : 所诉步骤 4) 中自适应的阈值过滤算法为 : 0028 令某个类 C1一共有 N1个方法, 其中有 n11个方法在同一社团 Com1中, 并且满足 : 在剩余的 N1n11 个方法中, 如果存在一个或 者多个方法, 其所在的社团 Com2中, 有 n21个方法属于另一个类 C2, C2一共有 N2个方法, 并 且满足 : 1)2) 这一个或者多个方法与类 C2 有 调用关系。记录下满足此要求的类 C1、 C2及相应的方法和方法数量。阈值以 0.05 依次递 增, 保存每个阈值下的类 C1、 C2及相应的方法和方法数量, 最后分析阈值从哪个值处开始满 足要求的方法数量显著降低, 记录。
28、此阈值下的类 C1、 C2及相应的方法。 0029 本发明进一步的改进在于 : 所述步骤 105) 中, 记录的类 C1、 C2及相应的方法, 把这 些方法从类 C1迁移到类 C2中去, 从而提升类 C1、 C2的内聚度, 输出这些类和需要迁移的方 法。 0030 相对于现有技术, 本发明具有以下优点 : 0031 (1) 本发明利用软件系统具有复杂网络特性, 构建了软件系统方法间的调用网络 图, 图的节点为方法, 边为方法间的调用关系。 运用这个方法调用网络图不仅考虑了类中方 法的调用关系, 而且考虑了类与类之间的方法调用关系。 0032 (2) 本发明利用复杂网络中的社团结构理论, 运用了。
29、不同目标对象的社团发现算 法, 提出了一种基于社团发现算法来计算面向对象软件系统的类的方法社团内聚度, 从软 件系统模块性的角度评估软件系统的可维护性。 0033 (3) 本发明提升了软件系统各模块内部一些类的内聚度, 不仅提升了软件系统中 类的内聚度, 而且提升了整个软件系统的模块度, 从而提升了软件系统的可维护性。 附图说明 0034 图 1 为基于多目标社团发现的软件可维护性评估与提升方法整体流程图 ; 0035 图 2 为生成方法调用网络最大弱连通图的流程图 ; 0036 图 3 为计算类的方法社团内聚度流程图 ; 0037 图 4 为过滤较低内聚度的类和其中方法流程图 ; 0038 。
30、图 5 为过滤算法的流程图。 具体实施方式 0039 以下结果附图详细说明本发明基于多目标社团发现的软件系统可维护性与提升 方法的具体实施方式。 0040 请参阅图 1 所示, 本发明提出一种基于多目标社团发现的软件系统可维护性评估 与提升方法, 包括以下步骤 : 0041 步骤S101 : 使用静态代码分析工具Understand和复杂网络分析包igraph, 实现对 Java 软件系统方法调用的最大弱连通子图的生成 ; 说 明 书 CN 104133766 A 7 5/8 页 8 0042 结合图2, 具体而言, 在输入待分析的Java软件系统后, 实现生成该Java软件系统 调用网络的最。
31、大弱连通子图。 0043 步骤 S201 : 对待分析的 Java 软件系统解析 .java 文件, 获取项目中定义的方法列 表 ; 0044 步骤 S202 : 利用静态代码分析软件 Understand 分析 Java 软件系统源代码, 获取 所有方法调用对 ; 0045 步骤 S203 : 根据步骤 S201 中获取到的 Java 软件系统中的方法列表以后, 对比步 骤 S202 获取到的所有方法调用对, 去掉冗余方法, 最终获得软件自身方法调用对 ; 0046 步骤 S204 : 根据软件自身方法调用对生成软件方法调用网络图 ; 0047 步骤 S205 : 利用复杂网络分析包 igr。
32、aph 过滤掉软件方法调用网络图的孤立的节 点, 生成软件系统方法调用的最大弱连通子图。 0048 例如输入一个开源的 Java 语言开发的文本编辑器 jEdit, 利用静态代码分析工具 Understand 分析获取方法调用图, 利用词法语法分析方法扫描源代码, 过滤掉属于 JDK 中 的方法, 最后得到一个软件系统内部的方法调用对, 例如 : 0049 “EditPane.java:EditPane.propertiesChanged()“-“JEditTextArea. java:JEditTextArea.setRightClickPopup(JPopupMenupopup)“labe。
33、l “EditPane. java:485“ ; 保存在 callgraph.dot 中, 运用复杂网络分析包 igraph, 生成最大弱连通子 图。 0050 步骤 S102 : 运用四种基于不同目标的社团划分算法划分步骤 S101 所生成的最大 弱连通子图, 并计算每个类的方法社团内聚度。具体流程如图 3 所示 : 0051 步骤 S301 : 运用开源的复杂网络分析包 iGraph 中的四种社团划分算法 ( 基于模 块度优化 (fg)、 知识地图 (im)、 多级分层 (ml) 和标签传播 (lp) 的社团划分算法 ) 对得到 的方法调用的最大弱连通子图进行划分 ; 0052 步骤 S3。
34、02 : 根据步骤 S301 的划分结果统计出 Java 软件系统中每个类的所属社团 编号 ; 0053 步骤 S303 : 获取每个类所属各个社团的方法数 ; 0054 步骤 S304 : 根据方法社团内聚度的定义 ( 令某个类 C 共有 m 个方法, 经过某个社 团划分算法后, m 个方法分布在 N 个社团中, 第 k 个社团中分布有 nk个方法 (k 1,N), 令n1为nk中的最大值, 那么可以得到类C基于该社团划分算法的方法社团内聚度为n1/m), 计算出每个类的四种社团划分算法对应的方法社团内聚度。 0055 针对上一步得到的方法调用最大弱连通子图, 分别运用 iGraph 中的基。
35、于模块度 优化 (fg)、 知识地图 (im)、 多级分层 (ml) 和标签传播 (lp) 的社团划分算法包, 得到每个类 中每个方法所属的社团结构, 如下表格运用 lp 社团划分算法得到部分结果, 左边为上一步 方法调用对中的方法, 右边为所属的社团编号, 0056 表 1 : 社团划分后的结果 0057 说 明 书 CN 104133766 A 8 6/8 页 9 0058 接着分析得到每个类所属的社团, 例如分析 EditPane 类得到结果为 EditPane : 7 4,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,34 可以得到 Edit。
36、Pane 这个类有 16 个方法在社团 74 中, 只有 1 个方法在社团 34 中, 那么运用 lp 社团划分算法得到的这个类 的方法社团内聚度 0059 0060 类似的可以得到其他三个社团划分算法的社团内聚度 MCCim 0.29,MCCfg 0.53,MCCml 0.35。 0061 步骤 S103 : 计算四种社团划分算法结果的斯皮尔曼相关系数, 最后挑选出最大斯 皮尔曼相关系数的两个算法来计算类内聚度和模块度, 具体流程如图 4 所示 : 0062 步骤 S401 : 计算每两个社团划分算法之间的斯皮尔曼相关系数 ; 0063 步骤 S402 : 挑选 6 组斯皮尔曼相关系数中的最。
37、大值, 记录这这个最大值所对应的 两种社团划分算法 ; 0064 步骤 S403 : 运用步骤 S402 中的两种社团划分算法计算 JAVA 软件系统的平均模块 度 ( 两种社团划分算法所计算模块度的均值 ) 和每个类的平均社团内聚度 ( 两种社团划分 算法所计算社团内聚度的均值 ) ; 0065 步骤 S404 : 输出 JAVA 软件系统的平均模块度和其中每个类的平均社团内聚度。 0066 根据上一步得到的结果计算, 计算每两个算法结果的斯皮尔曼相关性, 例如 im 和 fg 这两个算法得到的部分社团内聚度结果为 : 0067 表 2 : 模块度计算 0068 项目fg 模块度im 模块度。
38、lp 模块度 ml 模块度 jEdit0.7200.6260.7260.747 0069 表 3 : 相关性计算 0070 说 明 书 CN 104133766 A 9 7/8 页 10 方法im 算法fg 算法等级 xi等级 yididi2 EditPane0.290.521100 JEditTextArea0.290.8924-24 BufferUpdate0.50.753300 FavoritesVFS0.6250.6254224 XmlParser0.810.915500 0071 1. 排列第二列数据, 创建新列等级 Xi并赋以等级值 1,2,3,.n ; 0072 2. 然后, 排。
39、列第三列数据, 创建新列 Yi并相似地赋以等级值 1,2,3,.n ; 0073 3. 创建第 i 列 di保存两个等级列的差值 (xi和 yi) ; 0074 4. 创建最后一列 di2保存等级差 di的平方。 0075 最后算出斯皮尔曼相关系数如下表算出每两个算法的相关系数, 0076 表 4 : 斯皮尔曼相关系数计算结果 0077 0078 0079 得到最大的相关系数为 lp 和 ml 算法, 算出 MCC(EditPane) (0.94+0.35)/2 0.64, 最后得到 jEdit 模块度 (0.726+0.747)/2 0.7365。 0080 步骤 S104 : 使用阈值过滤。
40、算法, 找出一些内聚度较低类中可以迁移的方法, 输出 这些迁入迁出的方法, 提高这些类的内聚度, 提升了整体的模块度, 从而提升了JAVA软件 系统的可维护性。具体流程如图 5 所示 : 0081 步骤 S501 : 判断社团内聚度的过滤阈值是否大于 1, 如果是则转入步骤 S508, 否则 转入步骤 S502 ; 初始过滤阈值 0.5 或 0.6 ; 0082 步骤 S502 : 在步骤 S404 输出的每个类的平均社团内聚度中查找一个社团内聚度 大于过滤阈值的类 C1; 0083 步骤 S503 : 判断类 C1中是否存在方法在其他社团中, 如果是则转入步骤 S504, 否 则转入步骤 S。
41、502 查找符合条件的另一个类 ; 0084 步骤 S504 : 在其他社团中查找社团内聚度大于过滤阈值的类 C2; 0085 步骤S505 : 判断步骤S503中的方法是否与类C2具有调用关系, 如果是则转入步骤 S506, 否则转入步骤 S502 ; 0086 步骤 S506 : 保存所有满足条件的类 C1、 C2及步骤 S503 中的方法和方法数量 ; 说 明 书 CN 104133766 A 10 8/8 页 11 0087 步骤 S507 : 过滤阈值递增 0.05 ; 0088 步骤 S508 : 根据步骤 S506 中保存的记录中的方法数量列表, 计算并保存每两个相 邻阈值间方法。
42、数量差值, 找出方法数量差值最大的两个相邻阈值, 最后得到从两个阈值中 较大的那个阈值处开始, 满足要求的方法数量显著降低 ; 0089 步骤 S509 : 输出方法数量显著降低时所对应的过滤阈值 ( 步骤 S508 中得到的两 个阈值中较大的那个阈值 ) 下的所有类 C1、 C2以及相应的方法。 0090 将步骤 S509 输出的类 C1中相应的方法迁入类 C2中, 这样就能够提升整个 JAVA 软 件系统的可维护性。 0091 根据上一步得到的结果, 当阈值大小为 0.9 时, EditPane 类被划分到两个社团, 社 团 74 和 34 中, 有大于阈值 0.9 的 94.11的方法在。
43、社团 74 中, 而在社团 34 中 EditPane 类 有的一个 propertiesChanged() 方法在社团 34 中, 在社团 34 中找到 JEditTextArea 类有 大于阈值0.9的93.30的方法在社团34中, 并且根据方法调用关系对得到EditPane的方 法 propertiesChanged() 与 JEditTextArea 类中的方法有如下调用关系 : 0092 0093 显然 EditPane 的方法 propertiesChanged() 与 JEditTextArea 类有密切的联 系, 则应该将 EditPane 的方法 propertiesChan。
44、ged() 迁入 JEditTextArea 类中, 从而将 EditPane 类的 lp 算法社团内聚度提升到 1, JEditTextArea 的 lp 算法社团内聚度提升到 0.94, 将所有类过滤过以后, jEdit 的 lp 算法模块度从 0.726 提升到 0.813, 提升了软件系 统的模块度, 从而提升了软件系统可维护性。 说 明 书 CN 104133766 A 11 1/3 页 12 图 1 说 明 书 附 图 CN 104133766 A 12 2/3 页 13 图 2 图 3 图 4 说 明 书 附 图 CN 104133766 A 13 3/3 页 14 图 5 说 明 书 附 图 CN 104133766 A 14 。