CN104133766A - 基于多目标社团发现的软件系统可维护性评估与提升方法 - Google Patents
基于多目标社团发现的软件系统可维护性评估与提升方法 Download PDFInfo
- Publication number
- CN104133766A CN104133766A CN201410330742.0A CN201410330742A CN104133766A CN 104133766 A CN104133766 A CN 104133766A CN 201410330742 A CN201410330742 A CN 201410330742A CN 104133766 A CN104133766 A CN 104133766A
- Authority
- CN
- China
- Prior art keywords
- corporations
- class
- software systems
- poly
- degree
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 216
- 238000011156 evaluation Methods 0.000 title abstract 3
- 238000001514 detection method Methods 0.000 title abstract 2
- 238000000638 solvent extraction Methods 0.000 claims abstract description 45
- 238000001914 filtration Methods 0.000 claims abstract description 18
- 238000004458 analytical method Methods 0.000 claims description 18
- 230000003068 static effect Effects 0.000 claims description 7
- 238000005457 optimization Methods 0.000 claims description 5
- 230000001902 propagating effect Effects 0.000 claims description 5
- 238000013459 approach Methods 0.000 claims description 3
- 230000003044 adaptive effect Effects 0.000 abstract description 4
- 238000005192 partition Methods 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 239000010750 BS 2869 Class C2 Substances 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种基于多目标社团发现的软件系统可维护性评估与提升方法,包括:1)构建最大弱连通子图;2)划分方法调用最大弱连通子图并计算每个类的不同方法社团内聚度;3)计算不同方法社团内聚度的斯皮尔曼相关系数,选取相关系数最大的两个社团划分算法来计算软件系统的模块度,评估软件系统的可维护性;4)基于每个类的方法社团内聚度,使用自适应的阈值过滤算法,过滤出一些内聚度较低的类,这些类中某些方法与其它类有紧密联系,迁移这些方法,从而提高类的内聚度和软件系统的模块度,提升软件系统的可维护性。本发明不仅提升了软件系统中类的内聚度,而且提升了整个软件系统的模块度,从而提升了软件系统的可维护性。
Description
技术领域:
本发明属于可信软件和软件测试交叉领域,特别涉及一种软件系统可维护性评估与提升方法。
背景技术:
软件系统由众多模块组成,依靠模块间的相互调用完成各种复杂的功能,软件模块性的好坏将直接影响软件功能的实现、系统的运行效率以及整体稳定性。软件工程的目标是运用新技术和正确的管理方法来提高软件的质量和生存率,使软件系统具有更高的可维护性、可靠性和可重用性。
面向对象技术采用数据抽象、封装、多态性、信息隐藏、重用等机制,增强了软件的可维护性,提高了生产效率。为了评估和提升面向对象软件设计的质量,研究人员提出了一些指标,这些指标从不同角度评估软件系统,比如内聚度、耦合度和复杂度。随着软件功能需求的日益增加,开发条件的不断改进,软件系统变得越来越复杂,软件系统已经被研究人员验证符合复杂网络的特征,在复杂网路中,一些节点内部的连接密度大于他们和网络中其他节点的连接密度,这样的结构被称为社团结构,软件系统的社团结构和软件的可维护性密切相关,社团发现算法能够很好的检测出复杂网络中的社团结构,社团结构可以用来计算软件系统模块度并评估软件系统可维护性。
开发出高内聚和低耦合的软件系统被广泛认为是模块性比较好的软件结构,内聚就是模块之间的相互关系,高内聚意味着软件的各个模块内聚紧密联系,为此研究人员提出了一系列的类内聚度度量方法,比如:LCOM1,Coh,TCC,LCC,SCOM,CCM等等,这些方法基本上都建立在类中方法对类中实例变量使用和共享的基础上,只考虑了类中方法与变量之间、方法与方法之间的关系,然而这些度量方法并不能有效的对软件系统可维护性进行评估和提升。
发明内容:
本发明的目的在于提出一种基于多目标社团发现的软件系统可维护性评估与提升方法,评价并提升软件系统的可维护性。本发明方法通过分析软件调用网络的社团结构及对应的模块度指标来评价并提升软件的模块性;对不同文件的代码进行重组,提高软件系统中类的内聚度,从而提升软件的模块性。
为了实现上述目的,本发明采用如下技术方案:
基于多目标社团发现的软件系统可维护性评估与提升方法,包括以下步骤:步骤S101:使用静态代码分析工具Understand和复杂网络分析包igraph,实现对Java软件系统方法调用的最大弱连通子图的生成;步骤S102:运用四种基于不同目标的社团划分算法划分步骤S101所生成的最大弱连通子图,并计算每个类的方法社团内聚度;步骤S103:计算四种社团划分算法结果的斯皮尔曼相关系数,最后挑选出最大斯皮尔曼相关系数的两个算法来计算类内聚度和模块度;步骤S104:使用阈值过滤算法,找出一些内聚度较低类中可以迁移的方法,输出这些迁入\迁出的方法,提高这些类的内聚度,提升了整体的模块度,从而提升了JAVA软件系统的可维护性。
优选的,步骤S101具体包括以下步骤:步骤S201:对待分析的Java软件系统解析.java文件,获取项目中定义的方法列表;步骤S202:利用静态代码分析软件Understand分析Java软件系统源代码,获取所有方法调用对;步骤S203:根据步骤S201中获取到的Java软件系统中的方法列表以后,对比步骤S202获取到的所有方法调用对,去掉冗余方法,最终获得软件自身方法调用对;步骤S204:根据软件自身方法调用对生成软件方法调用网络图;步骤S205:利用复杂网络分析包igraph过滤掉软件方法调用网络图的孤立的节点,生成软件系统方法调用的最大弱连通子图。
优选的,步骤S102具体包括以下步骤:步骤S301:运用开源的复杂网络分析包iGraph中的四种社团划分算法对得到的方法调用的最大弱连通子图进行划分;所述四种社团划分算法为基于模块度优化(fg)、知识地图(im)、多级分层(ml)和标签传播(lp)的社团划分算法;步骤S302:根据步骤S301的划分结果统计出Java软件系统中每个类的所属社团编号;步骤S303:获取每个类所属各个社团的方法数;步骤S304:计算出每个类的四种社团划分算法对应的方法社团内聚度;方法社团内聚度的定义为:令某个类C共有m个方法,经过某个社团划分算法后,m个方法分布在N个社团中,第k个社团中分布有nk个方法,k=1,…,N,令n1为nk中的最大值,那么可以得到类C基于该社团划分算法的方法社团内聚度为n1/m。
优选的,步骤S103具体包括以下步骤:步骤S401:计算每两个社团划分算法之间的斯皮尔曼相关系数;步骤S402:挑选6组斯皮尔曼相关系数中的最大值,记录这这个最大值所对应的两种社团划分算法;步骤S403:运用步骤S402中的两种社团划分算法计算JAVA软件系统的平均模块度(和每个类的平均社团内聚度;步骤S404:输出JAVA软件系统的平均模块度和其中每个类的平均社团内聚度。
优选的,步骤S104具体包括以下步骤:步骤S501:判断社团内聚度的过滤阈值是否大于1,如果是则转入步骤S508,否则转入步骤S502;步骤S502:在步骤S404输出的每个类的平均社团内聚度中查找一个社团内聚度大于过滤阈值的类C1;步骤S503:判断类C1中是否存在方法在其他社团中,如果是则转入步骤S504,否则转入步骤S502查找符合条件的另一个类;步骤S504:在其他社团中查找社团内聚度大于过滤阈值的类C2;步骤S505:判断步骤S503中的方法是否与类C2具有调用关系,如果是则转入步骤S506,否则转入步骤S502;步骤S506:保存所有满足条件的类C1、C2及步骤S503中的方法和方法数量;步骤S507:过滤阈值递增0.05;步骤S508:根据步骤S506中保存的记录中的方法数量列表,计算并保存每两个相邻阈值间方法数量差值,找出方法数量差值最大的两个相邻阈值,最后得到从两个阈值中较大的那个阈值处开始,满足要求的方法数量显著降低;步骤S509:输出方法数量显著降低时所对应的过滤阈值下的所有类C1、C2以及相应的方法。
优选的,步骤S501中第一次设置的初始过滤阈值为0.5或0.6。
优选的,将步骤S509输出的类C1中相应的方法迁入类C2中,以提升整个JAVA软件系统的可维护性。
本发明一种基于多目标社团发现的软件系统可维护性评估与提升方法,包括如下步骤:
S101)基于词法语法、控制流分析技术,对待分析的目标代码进行扫描,获取软件系统的方法列表,构建方法间的调用网络图,图的节点为方法,边为方法间的调用关系,然后对方法调用网络图进行预处理,去掉软件外部方法调用、所有的孤立节点,最后得到一个最大弱连通子图;
S102)分别运用基于模块度优化、知识地图、多级分层和标签传播的社团划分算法划分出最大弱连通子图的社团结构,基于不同算法划分出的社团结果计算出每个类的方法社团内聚度;
S103)分别计算不同方法社团内聚度的斯皮尔曼相关系数验证这些社团划分算法是否获得类似的结果或者各自独立于对方,然后选择相关系数最大的两个算法,基于这两个算法计算每个类方法社团内聚度平均值和每个软件系统的模块度,用模块度的值来评估软件系统的可维护性;
S104)基于每个类的方法社团内聚度,使用自适应的阈值过滤算法,过滤出一些内聚度较低的类,如若这些类中某些方法与其它类有紧密联系,迁移这些方法,从而提高类的内聚度和软件系统的模块度,提升软件系统的可维护性;
S105)输出方法迁移后内聚度提升的类。
本发明进一步的改进在于:所述步骤S101)中软件系统的方法列表获取方法为:利用词法分析技术扫描Java软件源代码,将软件源代码转换为字符流,并通过词法分析技术得到的字符流,构建程序语法树,最后对该语法树进行分析,获取软件系统中方法的定义,包括方法名,方法传递参数,返回值,将相关方法信息保存入数据库。
本发明进一步的改进在于:所述步骤S101)中软件系统的方法调用对获取方法为:利用控制流分析技术,获取目标代码所有方法调用对。对比数据库中的方法定义表对方法调用对进行分析与抽取,去除软件外部的方法调用对,最后根据分析结果,对软件方法调用对进行记录,记录格式为:类中方法的包名和方法名;被调用者的包名和方法名->调用者的包名和方法名。
本发明进一步的改进在于:所述步骤S101)中软性系统的方法调用的最大弱连通子图生成方法为:依次读取软件方法调用对记录,对类中新方法名标记为方法调用网络图的新节点,对新的方法调用对标记为方法调用网络图的边,循环迭代这个过程生成方法调用网络图,最后去除孤立的节点,生成软件系统方法调用的最大弱连通子图。
本发明进一步的改进在于:所述步骤102)中分别实现基于模块度的、知识地图的、多级分层和标签传播的社团划分算法,得到方法社团划分结果,记录格式为:包名和方法名,所属社团编号。根据划分结果计算每个类的方法社团内聚度(MCC):
令某个类C共有m个方法,经过某个社团划分算法后,m个方法分布在N个社团中,第k个社团中分布有nk个方法(k=1,…,N),令n1为nk中的最大值,那么可以得到类C基于该社团划分算法的方法社团内聚度为n1/m。
本发明进一步的改进在于:所述步骤103)中分别计算不同方法社团内聚度的斯皮尔曼相关系数验证这些社团划分算法是否获得类似的结果或者各自独立于对方,然后选择相关系数最大的两个算法,基于这两个算法计算每个类方法社团内聚度平均值和每个软件系统的模块度,用模块度的值来评估软件系统的可维护性。
本发明进一步的改进在于:所述步骤104)基于每个类的方法社团内聚度,使用自适应的阈值过滤算法,过滤出一些内聚度较低的类,如若这些类中某些方法与其它类有紧密联系,迁移这些方法,从而提高类的内聚度和软件系统的模块度,提升软件系统的可维护性。
本发明进一步的改进在于:所诉步骤4)中自适应的阈值过滤算法为:
令某个类C1一共有N1个方法,其中有n11个方法在同一社团Com1中,并且满足:在剩余的N1‐n11个方法中,如果存在一个或者多个方法,其所在的社团Com2中,有n21个方法属于另一个类C2,C2一共有N2个方法,并且满足:1)2)这一个或者多个方法与类C2有调用关系。记录下满足此要求的类C1、C2及相应的方法和方法数量。阈值以0.05依次递增,保存每个阈值下的类C1、C2及相应的方法和方法数量,最后分析阈值从哪个值处开始满足要求的方法数量显著降低,记录此阈值下的类C1、C2及相应的方法。
本发明进一步的改进在于:所述步骤105)中,记录的类C1、C2及相应的方法,把这些方法从类C1迁移到类C2中去,从而提升类C1、C2的内聚度,输出这些类和需要迁移的方法。
相对于现有技术,本发明具有以下优点:
(1)本发明利用软件系统具有复杂网络特性,构建了软件系统方法间的调用网络图,图的节点为方法,边为方法间的调用关系。运用这个方法调用网络图不仅考虑了类中方法的调用关系,而且考虑了类与类之间的方法调用关系。
(2)本发明利用复杂网络中的社团结构理论,运用了不同目标对象的社团发现算法,提出了一种基于社团发现算法来计算面向对象软件系统的类的方法社团内聚度,从软件系统模块性的角度评估软件系统的可维护性。
(3)本发明提升了软件系统各模块内部一些类的内聚度,不仅提升了软件系统中类的内聚度,而且提升了整个软件系统的模块度,从而提升了软件系统的可维护性。
附图说明
图1为基于多目标社团发现的软件可维护性评估与提升方法整体流程图;
图2为生成方法调用网络最大弱连通图的流程图;
图3为计算类的方法社团内聚度流程图;
图4为过滤较低内聚度的类和其中方法流程图;
图5为过滤算法的流程图。
具体实施方式
以下结果附图详细说明本发明基于多目标社团发现的软件系统可维护性与提升方法的具体实施方式。
请参阅图1所示,本发明提出一种基于多目标社团发现的软件系统可维护性评估与提升方法,包括以下步骤:
步骤S101:使用静态代码分析工具Understand和复杂网络分析包igraph,实现对Java软件系统方法调用的最大弱连通子图的生成;
结合图2,具体而言,在输入待分析的Java软件系统后,实现生成该Java软件系统调用网络的最大弱连通子图。
步骤S201:对待分析的Java软件系统解析.java文件,获取项目中定义的方法列表;
步骤S202:利用静态代码分析软件Understand分析Java软件系统源代码,获取所有方法调用对;
步骤S203:根据步骤S201中获取到的Java软件系统中的方法列表以后,对比步骤S202获取到的所有方法调用对,去掉冗余方法,最终获得软件自身方法调用对;
步骤S204:根据软件自身方法调用对生成软件方法调用网络图;
步骤S205:利用复杂网络分析包igraph过滤掉软件方法调用网络图的孤立的节点,生成软件系统方法调用的最大弱连通子图。
例如输入一个开源的Java语言开发的文本编辑器jEdit,利用静态代码分析工具Understand分析获取方法调用图,利用词法语法分析方法扫描源代码,过滤掉属于JDK中的方法,最后得到一个软件系统内部的方法调用对,例如:
"EditPane.java:EditPane.propertiesChanged()"->"JEditTextArea.java:JEditTextArea.setRightClickPopup(JPopupMenupopup)"[label="EditPane.java:485"];保存在callgraph.dot中,运用复杂网络分析包igraph,生成最大弱连通子图。
步骤S102:运用四种基于不同目标的社团划分算法划分步骤S101所生成的最大弱连通子图,并计算每个类的方法社团内聚度。具体流程如图3所示:
步骤S301:运用开源的复杂网络分析包iGraph中的四种社团划分算法(基于模块度优化(fg)、知识地图(im)、多级分层(ml)和标签传播(lp)的社团划分算法)对得到的方法调用的最大弱连通子图进行划分;
步骤S302:根据步骤S301的划分结果统计出Java软件系统中每个类的所属社团编号;
步骤S303:获取每个类所属各个社团的方法数;
步骤S304:根据方法社团内聚度的定义(令某个类C共有m个方法,经过某个社团划分算法后,m个方法分布在N个社团中,第k个社团中分布有nk个方法(k=1,…,N),令n1为nk中的最大值,那么可以得到类C基于该社团划分算法的方法社团内聚度为n1/m),计算出每个类的四种社团划分算法对应的方法社团内聚度。
针对上一步得到的方法调用最大弱连通子图,分别运用iGraph中的基于模块度优化(fg)、知识地图(im)、多级分层(ml)和标签传播(lp)的社团划分算法包,得到每个类中每个方法所属的社团结构,如下表格运用lp社团划分算法得到部分结果,左边为上一步方法调用对中的方法,右边为所属的社团编号,
表1:社团划分后的结果
接着分析得到每个类所属的社团,例如分析EditPane类得到结果为EditPane:74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,34可以得到EditPane这个类有16个方法在社团74中,只有1个方法在社团34中,那么运用lp社团划分算法得到的这个类的方法社团内聚度
类似的可以得到其他三个社团划分算法的社团内聚度MCCim=0.29,MCCfg=0.53,MCCml=0.35。
步骤S103:计算四种社团划分算法结果的斯皮尔曼相关系数,最后挑选出最大斯皮尔曼相关系数的两个算法来计算类内聚度和模块度,具体流程如图4所示:
步骤S401:计算每两个社团划分算法之间的斯皮尔曼相关系数;
步骤S402:挑选6组斯皮尔曼相关系数中的最大值,记录这这个最大值所对应的两种社团划分算法;
步骤S403:运用步骤S402中的两种社团划分算法计算JAVA软件系统的平均模块度(两种社团划分算法所计算模块度的均值)和每个类的平均社团内聚度(两种社团划分算法所计算社团内聚度的均值);
步骤S404:输出JAVA软件系统的平均模块度和其中每个类的平均社团内聚度。
根据上一步得到的结果计算,计算每两个算法结果的斯皮尔曼相关性,例如im和fg这两个算法得到的部分社团内聚度结果为:
表2:模块度计算
项目 | fg模块度 | im模块度 | lp模块度 | ml模块度 |
jEdit | 0.720 | 0.626 | 0.726 | 0.747 |
表3:相关性计算
方法 | im算法 | fg算法 | 等级xi | 等级yi | di | di 2 |
EditPane | 0.29 | 0.52 | 1 | 1 | 0 | 0 |
JEditTextArea | 0.29 | 0.89 | 2 | 4 | -2 | 4 |
BufferUpdate | 0.5 | 0.75 | 3 | 3 | 0 | 0 |
FavoritesVFS | 0.625 | 0.625 | 4 | 2 | 2 | 4 |
XmlParser | 0.81 | 0.91 | 5 | 5 | 0 | 0 |
1.排列第二列数据,创建新列等级Xi并赋以等级值1,2,3,...n;
2.然后,排列第三列数据,创建新列Yi并相似地赋以等级值1,2,3,...n;
3.创建第i列di保存两个等级列的差值(xi和yi);
4.创建最后一列di 2保存等级差di的平方。
最后算出斯皮尔曼相关系数如下表算出每两个算法的相关系数,
表4:斯皮尔曼相关系数计算结果
得到最大的相关系数为lp和ml算法,算出MCC(EditPane)=(0.94+0.35)/2=0.64,最后得到jEdit模块度=(0.726+0.747)/2=0.7365。
步骤S104:使用阈值过滤算法,找出一些内聚度较低类中可以迁移的方法,输出这些迁入\迁出的方法,提高这些类的内聚度,提升了整体的模块度,从而提升了JAVA软件系统的可维护性。具体流程如图5所示:
步骤S501:判断社团内聚度的过滤阈值是否大于1,如果是则转入步骤S508,否则转入步骤S502;初始过滤阈值0.5或0.6;
步骤S502:在步骤S404输出的每个类的平均社团内聚度中查找一个社团内聚度大于过滤阈值的类C1;
步骤S503:判断类C1中是否存在方法在其他社团中,如果是则转入步骤S504,否则转入步骤S502查找符合条件的另一个类;
步骤S504:在其他社团中查找社团内聚度大于过滤阈值的类C2;
步骤S505:判断步骤S503中的方法是否与类C2具有调用关系,如果是则转入步骤S506,否则转入步骤S502;
步骤S506:保存所有满足条件的类C1、C2及步骤S503中的方法和方法数量;
步骤S507:过滤阈值递增0.05;
步骤S508:根据步骤S506中保存的记录中的方法数量列表,计算并保存每两个相邻阈值间方法数量差值,找出方法数量差值最大的两个相邻阈值,最后得到从两个阈值中较大的那个阈值处开始,满足要求的方法数量显著降低;
步骤S509:输出方法数量显著降低时所对应的过滤阈值(步骤S508中得到的两个阈值中较大的那个阈值)下的所有类C1、C2以及相应的方法。
将步骤S509输出的类C1中相应的方法迁入类C2中,这样就能够提升整个JAVA软件系统的可维护性。
根据上一步得到的结果,当阈值大小为0.9时,EditPane类被划分到两个社团,社团74和34中,有大于阈值0.9的94.11%的方法在社团74中,而在社团34中EditPane类有的一个propertiesChanged()方法在社团34中,在社团34中找到JEditTextArea类有大于阈值0.9的93.30%的方法在社团34中,并且根据方法调用关系对得到EditPane的方法propertiesChanged()与JEditTextArea类中的方法有如下调用关系:
显然EditPane的方法propertiesChanged()与JEditTextArea类有密切的联系,则应该将EditPane的方法propertiesChanged()迁入JEditTextArea类中,从而将EditPane类的lp算法社团内聚度提升到1,JEditTextArea的lp算法社团内聚度提升到0.94,将所有类过滤过以后,jEdit的lp算法模块度从0.726提升到0.813,提升了软件系统的模块度,从而提升了软件系统可维护性。
Claims (7)
1.基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,包括以下步骤:
步骤S101:使用静态代码分析工具Understand和复杂网络分析包igraph,实现对Java软件系统方法调用的最大弱连通子图的生成;
步骤S102:运用四种基于不同目标的社团划分算法划分步骤S101所生成的最大弱连通子图,并计算每个类的方法社团内聚度;
步骤S103:计算四种社团划分算法结果的斯皮尔曼相关系数,最后挑选出最大斯皮尔曼相关系数的两个算法来计算类内聚度和模块度;
步骤S104:使用阈值过滤算法,找出一些内聚度较低类中可以迁移的方法,输出这些迁入\迁出的方法,提高这些类的内聚度,提升了整体的模块度,从而提升了JAVA软件系统的可维护性。
2.根据权利要求1所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,步骤S101具体包括以下步骤:
步骤S201:对待分析的Java软件系统解析.java文件,获取项目中定义的方法列表;
步骤S202:利用静态代码分析软件Understand分析Java软件系统源代码,获取所有方法调用对;
步骤S203:根据步骤S201中获取到的Java软件系统中的方法列表以后,对比步骤S202获取到的所有方法调用对,去掉冗余方法,最终获得软件自身方法调用对;
步骤S204:根据软件自身方法调用对生成软件方法调用网络图;
步骤S205:利用复杂网络分析包igraph过滤掉软件方法调用网络图的孤立的节点,生成软件系统方法调用的最大弱连通子图。
3.根据权利要求1所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,步骤S102具体包括以下步骤:
步骤S301:运用开源的复杂网络分析包iGraph中的四种社团划分算法对得到的方法调用的最大弱连通子图进行划分;所述四种社团划分算法为基于模块度优化(fg)、知识地图(im)、多级分层(ml)和标签传播(lp)的社团划分算法;
步骤S302:根据步骤S301的划分结果统计出Java软件系统中每个类的所属社团编号;
步骤S303:获取每个类所属各个社团的方法数;
步骤S304:计算出每个类的四种社团划分算法对应的方法社团内聚度;
方法社团内聚度的定义为:令某个类C共有m个方法,经过某个社团划分算法后,m个方法分布在N个社团中,第k个社团中分布有nk个方法,k=1,…,N,令n1为nk中的最大值,那么可以得到类C基于该社团划分算法的方法社团内聚度为n1/m。
4.根据权利要求1所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,步骤S103具体包括以下步骤:
步骤S401:计算每两个社团划分算法之间的斯皮尔曼相关系数;
步骤S402:挑选6组斯皮尔曼相关系数中的最大值,记录这这个最大值所对应的两种社团划分算法;
步骤S403:运用步骤S402中的两种社团划分算法计算JAVA软件系统的平均模块度(和每个类的平均社团内聚度;
步骤S404:输出JAVA软件系统的平均模块度和其中每个类的平均社团内聚度。
5.根据权利要求1所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,步骤S104具体包括以下步骤:
步骤S501:判断社团内聚度的过滤阈值是否大于1,如果是则转入步骤S508,否则转入步骤S502;
步骤S502:在步骤S404输出的每个类的平均社团内聚度中查找一个社团内聚度大于过滤阈值的类C1;
步骤S503:判断类C1中是否存在方法在其他社团中,如果是则转入步骤S504,否则转入步骤S502查找符合条件的另一个类;
步骤S504:在其他社团中查找社团内聚度大于过滤阈值的类C2;
步骤S505:判断步骤S503中的方法是否与类C2具有调用关系,如果是则转入步骤S506,否则转入步骤S502;
步骤S506:保存所有满足条件的类C1、C2及步骤S503中的方法和方法数量;
步骤S507:过滤阈值递增0.05;
步骤S508:根据步骤S506中保存的记录中的方法数量列表,计算并保存每两个相邻阈值间方法数量差值,找出方法数量差值最大的两个相邻阈值,最后得到从两个阈值中较大的那个阈值处开始,满足要求的方法数量显著降低;
步骤S509:输出方法数量显著降低时所对应的过滤阈值下的所有类C1、C2以及相应的方法。
6.根据权利要求5所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,步骤S501中第一次设置的初始过滤阈值为0.5或0.6。
7.根据权利要求5所述的基于多目标社团发现的软件系统可维护性评估与提升方法,其特征在于,将步骤S509输出的类C1中相应的方法迁入类C2中,以提升整个JAVA软件系统的可维护性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410330742.0A CN104133766B (zh) | 2014-07-11 | 2014-07-11 | 基于多目标社团发现的软件系统可维护性评估与提升方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410330742.0A CN104133766B (zh) | 2014-07-11 | 2014-07-11 | 基于多目标社团发现的软件系统可维护性评估与提升方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104133766A true CN104133766A (zh) | 2014-11-05 |
CN104133766B CN104133766B (zh) | 2017-01-04 |
Family
ID=51806449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410330742.0A Expired - Fee Related CN104133766B (zh) | 2014-07-11 | 2014-07-11 | 基于多目标社团发现的软件系统可维护性评估与提升方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104133766B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201455A (zh) * | 2016-06-23 | 2016-12-07 | 中国人民解放军国防科学技术大学 | 一种系统内聚度计算方法 |
CN106780263A (zh) * | 2017-01-13 | 2017-05-31 | 中电科新型智慧城市研究院有限公司 | 基于大数据平台的高危人员分析和识别方法 |
CN107608872A (zh) * | 2016-07-11 | 2018-01-19 | 北京京东尚科信息技术有限公司 | 一种检测软件系统的模块化水平的方法和装置 |
CN109758170A (zh) * | 2019-01-10 | 2019-05-17 | 北京东软医疗设备有限公司 | X射线成像设备的曝光参数调节方法和装置 |
CN111008148A (zh) * | 2019-12-20 | 2020-04-14 | 广州品唯软件有限公司 | 代码的测试方法、装置及计算机可读存储介质 |
CN111756568A (zh) * | 2020-05-06 | 2020-10-09 | 北京明略软件系统有限公司 | 一种实现社群发现的方法、装置、计算机存储介质及终端 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005326953A (ja) * | 2004-05-12 | 2005-11-24 | Nec Corp | ソフトウェア品質評価システム及び方法並びにソフトウェア品質評価用プログラム |
CN102594909A (zh) * | 2012-03-14 | 2012-07-18 | 西安电子科技大学 | 基于共邻矩阵谱信息的多目标社区检测方法 |
-
2014
- 2014-07-11 CN CN201410330742.0A patent/CN104133766B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005326953A (ja) * | 2004-05-12 | 2005-11-24 | Nec Corp | ソフトウェア品質評価システム及び方法並びにソフトウェア品質評価用プログラム |
CN102594909A (zh) * | 2012-03-14 | 2012-07-18 | 西安电子科技大学 | 基于共邻矩阵谱信息的多目标社区检测方法 |
Non-Patent Citations (3)
Title |
---|
QINGHUA ZHENG等: "A Novel Method on Software Structure Evaluation", 《2011 IEEE 2ND INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING AND SERVICE SCIENCE》 * |
侯雨桥等: "基于调用结构的软件可生存性评估方法", 《中南大学学报(自然科学版)》 * |
陈国强等: "基于进化多目标优化的复杂网络社团检测", 《中国科技论文在线》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201455A (zh) * | 2016-06-23 | 2016-12-07 | 中国人民解放军国防科学技术大学 | 一种系统内聚度计算方法 |
CN106201455B (zh) * | 2016-06-23 | 2019-05-17 | 中国人民解放军国防科学技术大学 | 一种系统内聚度计算方法 |
CN107608872A (zh) * | 2016-07-11 | 2018-01-19 | 北京京东尚科信息技术有限公司 | 一种检测软件系统的模块化水平的方法和装置 |
CN106780263A (zh) * | 2017-01-13 | 2017-05-31 | 中电科新型智慧城市研究院有限公司 | 基于大数据平台的高危人员分析和识别方法 |
CN106780263B (zh) * | 2017-01-13 | 2020-10-02 | 中电科新型智慧城市研究院有限公司 | 基于大数据平台的高危人员分析和识别方法 |
CN109758170A (zh) * | 2019-01-10 | 2019-05-17 | 北京东软医疗设备有限公司 | X射线成像设备的曝光参数调节方法和装置 |
CN109758170B (zh) * | 2019-01-10 | 2023-02-10 | 北京东软医疗设备有限公司 | X射线成像设备的曝光参数调节方法和装置 |
CN111008148A (zh) * | 2019-12-20 | 2020-04-14 | 广州品唯软件有限公司 | 代码的测试方法、装置及计算机可读存储介质 |
CN111008148B (zh) * | 2019-12-20 | 2024-02-02 | 广州品唯软件有限公司 | 代码的测试方法、装置及计算机可读存储介质 |
CN111756568A (zh) * | 2020-05-06 | 2020-10-09 | 北京明略软件系统有限公司 | 一种实现社群发现的方法、装置、计算机存储介质及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN104133766B (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104133766A (zh) | 基于多目标社团发现的软件系统可维护性评估与提升方法 | |
CN101477172B (zh) | 一种基于神经网络的模拟电路故障诊断方法 | |
CN108777873A (zh) | 基于加权混合孤立森林的无线传感网络异常数据检测方法 | |
CN102411687B (zh) | 未知恶意代码的深度学习检测方法 | |
CN106778876A (zh) | 基于移动用户轨迹相似性的用户分类方法和系统 | |
CN101482876B (zh) | 基于权重的链接多属性的实体识别方法 | |
CN105183796A (zh) | 一种基于聚类的分布式链路预测方法 | |
CN102752784B (zh) | 无线传感器网络中基于图论的分布式事件域的检测方法 | |
Ma et al. | Decomposition‐based multiobjective evolutionary algorithm for community detection in dynamic social networks | |
CN110473592A (zh) | 基于图卷积网络的有监督的多视角人类协同致死基因预测方法 | |
CN102682046A (zh) | 社交网络的节点搜索和分析方法及搜索系统 | |
CN109254219B (zh) | 一种考虑多元因素态势演变的配变迁移学习故障诊断方法 | |
CN104008420A (zh) | 一种基于自动编码机的分布式离群点检测方法及系统 | |
CN103020163A (zh) | 一种网络中基于节点相似度的网络社区划分方法 | |
CN103326904A (zh) | 一种基于多参数认知的快速网络拓扑推断方法 | |
CN105574541A (zh) | 一种基于紧密度排序的网络社区发现方法 | |
CN104574141A (zh) | 一种业务影响度分析方法 | |
CN105517019A (zh) | 采用集成回归系统检测lte网络性能的方法 | |
CN112422571A (zh) | 一种跨越多个属性网络进行异常对齐的方法 | |
Jahandari et al. | Sufficient and necessary graphical conditions for miso identification in networks with observational data | |
CN110119540A (zh) | 一种用于生存风险分析的多输出梯度提升树建模方法 | |
CN105068928A (zh) | 一种基于复杂网络理论的软件测试用例生成方法 | |
CN105228185A (zh) | 一种用于识别通信网络中模糊冗余节点身份的方法 | |
CN106357458A (zh) | 网元异常检测方法及装置 | |
CN113536492A (zh) | 绿道网络构建方法、装置及存储介质 |
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 |
Granted publication date: 20170104 |