CN107766076A - 一种概率选择的软件模块聚类方法 - Google Patents
一种概率选择的软件模块聚类方法 Download PDFInfo
- Publication number
- CN107766076A CN107766076A CN201711100834.XA CN201711100834A CN107766076A CN 107766076 A CN107766076 A CN 107766076A CN 201711100834 A CN201711100834 A CN 201711100834A CN 107766076 A CN107766076 A CN 107766076A
- Authority
- CN
- China
- Prior art keywords
- cluster
- module
- software
- clustering
- software systems
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明针对软件系统重构中软件模块聚类问题,公开了一种概率选择的软件模块聚类方法。本方法首先从软件系统源程序中提取获得软件系统的模块依赖关系图,然后从图中稀疏点出发基于概率选择对结点进行局部合并操作得到软件系统的初步模块聚类,最后根据结点与各个模块之间的联系数基于概率动态调整每个结点的所属聚类,得到软件模块的聚类结果。本发明为软件模块聚类问题提供了一种简单的、收敛速度快且聚类效果好的工程化方法,用于重构软件系统结构,提高软件系统的可理解性。
Description
技术领域
本发明属于软件系统重构技术领域,具体涉及到软件系统重构中模块聚类问题,提供了一种基于概率选择的软件模块聚类方法,主要解决在软件系统代码重构中如何优化系统代码结构,达到消除系统冗余,增加软件系统的可理解性,降低软件系统维护费用的目的。
背景技术
软件维护是软件生命周期中一个非常重要的阶段,其维护成本往往很高。随着业务需求的增加和变化,软件系统的模块化结构往往随着软件系统的变化而偏离最初的设计结构,软件系统需要不断的重构,理解和维护规模庞大的软件系统变得越来越困难,因此迫切需要高效的软件模块聚类方法,特别是对于那些缺少文档的遗留系统,如何重构软件结构,使软件系统变得易于理解、维护和管理是软件维护中一个急需解决的关键问题。
软件模块聚类是一种常用的软件模型恢复技术,在逆向工程中应用十分广泛,通过组织或重新组织软件系统,使模块达到“高内聚”和“低耦合”的标准,达到消除冗余,增加软件系统的可理解性,降低软件系统维护费用的目的。软件模块聚类是软件模块划分的一种重要手段,软件聚类是通过模块依赖图利用聚类算法对软件系统进行模块结构划分,将软件系统分解为一些子系统,使复杂的软件系统变得易于理解和管理。目前常用的软件模块聚类方法可以分为5 类:图理论技术、基于信息检索的技术、基于数据挖掘的技术、基于模式匹配的技术和元启发式方法。对于大规模的复杂软件系统,获得合理的软件模块聚类结果通常比较困难,应用图方法进行软件模块聚类的常用传统方法有单链接和完全链接等。然而,软件模块聚类问题是一个NP问题,基于图的方法在解决软件模块聚类问题时随着软件系统规模的增加搜索空间呈指数增长。为了在合理的计算资源下找到有效的聚类方案,Mancoridis等使用基于搜索的方法进行软件模块聚类并将软件模块质量(Modularization Quality,MQ)作为软件模块聚类的评估准则,并实现了模块划分工具Bunch。随后,相继将爬山算法、模拟退火算法、粒子群算法、遗传算法等元启发式方法应用于软件模块聚类问题上, 使问题得到一定程度的解决,但是由于没有考虑软件模块聚类问题的自身特点,而是在解空间中盲目搜索,使得优化过程收敛速度慢,聚类效果不理想, 而且计算量大,不利于进行大规模复杂软件系统的软件模块聚类。
软件模块聚类问题是一种典型的不确定性问题,前苏联数学家柯尔莫哥洛夫首次提出并建立的概率论方法为解决具有随机性的不确定性问题提供了一种简单有效的思路。
为此,本发明提出一种概率选择的软件模块聚类方法。通过对软件系统建立复杂网络模型,得到软件系统的网络拓扑,将软件模块聚类问题转化为图聚类问题,并利用概率选择的软件模块聚类方法对图进行聚类。从软件模块设计的原则出发指导软件模块聚类的全过程,使方法快速收敛,稳定性好,并加入概率选择的策略保证算法不易陷入局部最优,并得到更为有效的软件模块聚类方案,为大规模软件系统模块聚类提供了一个简单有效的方法。
发明内容
本发明解决的问题:为克服现有方法计算量大的缺点,提出一种概率选择的软件模块聚类方法,为大规模软件系统模块聚类问题提供了一种较为简单,聚类效果好的方法,使规模庞大的复杂软件系统聚类形成规模更小,更易于管理的子系统。
本发明解决方案:为实现上述目的,本发明的技术方案包括以下步骤,如图 1所示:
(1)在面向对象语言编写的软件系统中,以代码中的方法作为节点,方法之间的调用关系作为边,将软件系统表示为一个图,并以矩阵形式存储。若该系统中有n个方法,这些方法可以用集合F表示为F={f1,f2,...,fj,...,fn},j为1到n之间的任意一个整数值,fj(1≤j≤n)表示该软件系统中的第j个方法,则该软件系统中方法之间的调用关系用一个n×n的二维矩阵B进行编码表示。若方法 fi(1≤i≤n)调用方法fj(1≤j≤n),则B的第i行第j列的元素值为1,即bij=1,若方法fi(1≤i≤n)没有调用方法fj(1≤j≤n),则B的第i行第j列的元素值为0,即bij=0,按照上述方法,软件系统的方法调用关系编码表示为:
(2)假设该软件系统需要被聚类形成m(m<<n)个模块,则经过模块聚类之后的软件系统可以用集合C表示为C={c1,c2,...ci,...cm},i为1到m之间的任意一个整数值,ci(1≤i≤m)表示软件系统经过模块聚类后的第i个模块。对该软件系统的模块聚类方案可以表示为一个n维向量Cluster,其中ai表示向量中的元素, 0≤ai≤m且ai为整数。若方法fi(1≤i≤n)属于第j(1≤j≤m)个类,则Cluster中的第i个元素的值为j,即ai=j。若ai=0,则fi还不属于任何一个聚类。因此软件系统的模块聚类结果可以用向量表示为:
Cluster={a1 a2 a3 ··· an}
初始化的聚类结果向量表示为Cluster0,合并操作迭代到第t步时的聚类结果向量表示为Clustert,t为合并操作阶段的迭代步数(t≥0)。
(3)设定基于概率选择的软件模块聚类算法的参数,所述的参数包括合并操作中的迭代次数r1,动态调整操作中的迭代次数r2。
(4)对模块聚类的结果进行初始化,使聚类结果向量Cluster中每一维的值 ai=0,1≤i≤n,即Cluster0={0,0,.......,0}。初始化最优聚类结果向量 Cluster*={0,0,.......,0},使聚类形成的模块数为0,即int clus=0。初始化聚类结果的最优MQ值为gbestMQ=0,令局部合并操作的迭代次数t=1,开始进行局部合并操作。
(5)进行局部合并操作
将每个方法fi的直接调用方法保存在列表listi中(1≤i≤n)。将列表listi按照长度进行升序排序,形成一个有序的列表序列list1,list2,…….listi,…….listn,对应于一个有序的方法序列f1,f2....fi....fn(1≤i≤n)。
对每个方法:
根据上一步的聚类结果Clustert-1,计算SCi是列表 listi中结点的聚类结果序列,0≤j≤l,l≤m。计算每个聚类在SCi中的方法数目计算方法fi选择聚类的概率值 以概率决定方法fi是否属于聚类如果否则,ai=++clus,更新聚类向量Clustert的值。
(6)计算当前聚类方案Cluster的MQ值:
假设第i个模块ci中的方法个数用Ni(1≤i≤m)表示,模块ci与模块cj之间方法的调用次数通过方法调用矩阵B计算,并用Ei,j表示:
模块ci内部方法之间的调用次数用Mi表示:
软件系统进行模块聚类后,第i个模块ci和第j个模块cj之间的耦合性用εi,j表示:
第i个模块ci的内聚性由μi表示:
高内聚、低耦合是评价软件模块聚类优劣的标准,使用软件模块质量(Modularization Quality,简称MQ)将模块内部的内聚性和模块之间的耦合性结合起来综合评价软件模块聚类的优劣,当前合并操作进行到第t步时的软件模块聚类方案的MQ值用MQt进行评估表示,
其中,m表示将软件系统划分成m个模块。在优化过程中,软件系统耦合性尽可能减小,内聚性尽可能增大,即MQ的值不断增大。
(7)将当前该步计算出的MQ值与全局最优的gbestMQ值进行比较,若MQ大于gbestMQ,使gbestMQ=MQ,使全局最优聚类结果为当前聚类结果 Cluster*=Clustert,t=t+1。
(8)若t<r1,则重复上述(5)-(8)步,若t≥r1,则重复下列(9)-(13)步。
(9)令动态调整操作的迭代次数为p=1(p≥0),动态调整操作的聚类结果表示为Clusterp。根据上述局部合并操作得到的初步结果,使用动态调整操作进行聚类结果的动态优化。
(10)根据局部合并操作的结果Cluster得到聚类结果集合 C={C1,C2,.......,Cm},1≤Ci≤m。对每一个方法计算选择各个聚类的概率值:计算方法fi与聚类Cj之间的调用次数Ni,j,1≤i≤n,1≤j≤m。计算方法fi选择每个聚类Cj的概率值p'i,j,生成一个0到1之间的随机数,确定方法 fi是否需要改变当前聚类,更新聚类向量Clusterp的值。
(11)利用步骤(6)的方法计算当前聚类方案Cluster的MQ值:
(12)将当前该步计算出的MQ值与全局最优的gbestMQ进行比较,若MQ大于gbestMQ,使gbestMQ=MQ,使全局最优聚类结果为当前聚类结果 Cluster*=Clusterp,p=p+1。
(13)若p<r2,则重复上述(10)-(12)步,若p≥r2,则结束整个步骤,完成整个软件模块聚类。
有益效果:
目前,解决软件模块聚类问题的方法很多,常用的软件模块聚类方法有基于数据挖掘的聚类方法和基于搜索的群体智能方法,可以得出聚类结果,但由于软件模块聚类问题是一个NP问题,随着软件系统的规模增加,搜索空间呈指数级增长,使计算量增大,收敛速度慢。
软件模块聚类问题是一个不确定性问题,这类问题的基本特征是表现出的随机性。在进行软件模块聚类的过程中,不同的操作顺序将导致完全不同的聚类结果,并且这种结果呈现出一定的随机性。传统的方法在进行软件模块聚类过程中没有考虑到软件模块聚类问题的这种特性,使得从一开始就陷入了聚类误区,经过大量的计算与迭代也无法得到较好的结果。为此,本发明提出一种概率选择的软件模块聚类方法,分为局部合并与动态调整两步。局部合并操作充分考虑软件模块聚类问题的特性与不确定性问题的随机性特征,试图利用概率论的方法较为简单的解决这一类复杂问题,局部合并操作将每个结点即每个方法看作一个独立的聚类,从稀疏点开始进行结点合并。由于稀疏结点的直接相邻结点相对较少,可以以更大的概率选择合适的结点进行合并,使结点归入合适的聚类中。由于每一步的合并与操作都会影响之前已确定结点的聚类方案,因此,在局部合并操作得到一个初步聚类方案后,本发明将进一步使用动态调整策略继续进行调整与优化。动态调整操作根据“高内聚”、“低耦合”的软件设计原则进行基于概率选择的动态调整,通过计算每个方法与各个聚类之间的联系数,根据与各个聚类之间的联系数基于概率动态调整每个方法的所属聚类。
因此,本发明的方法从根本上保证了软件模块聚类从一个好的开始进行,使得后面只需进行少量的迭代就可以达到更优的聚类效果,动态调整防止后续的操作影响整个聚类结果。本方法从软件模块设计的原则出发指导软件模块聚类的全过程,使算法快速收敛,稳定性好,加入概率选择的策略保证算法不易陷入局部最优,并得到更为有效的软件模块聚类方案,为大规模软件系统模块聚类提供了一个简单有效的工程化方法。
典型实例实验结果证实该方法的有效性:对如图3所示的软件系统调用关系图,分别用GGA、GNE、MCA、ECA、MAEA-SMCPs及本发明提出的概率选择的软件模块聚类方法(SPS)进行软件模块聚类,独立运行10次取平均值的结果如图4所示。图5是对图3的软件系统进行软件模块聚类得到的结果图。图6是分别利用粒子群算法(PSO)及本发明提出的方法(SPS)进行软件模块聚类的所用时间。从实验结果可以看出,本发明提出的概率选择的软件模块聚类方法可以得到更好的聚类结果且收敛速度更快,是一种简单有效的软件模块聚类方法。
附图说明
附图1本发明的流程图。
附图2某软件系统方法调用关系图。
附图3“mtunis”软件系统的模块依赖图。
附图4使用不同方法进行软件模块聚类的结果对比图。
附图5“mtunis”软件系统的模块聚类结果图。
附图6使用PSO与SPS方法进行软件模块聚类所用时间对比图(单位:s)。
具体实施方式
以某软件系统为例,如图2所示是该软件系统的方法调用关系图,具体说明本发明公开的软件模块聚类方法的具体实施方式。
(1)对如图2所示的方法调用关系图编码,该软件系统中有10个方法,这些方法可以用集合F表示为F={f1,f2,...,fj,...,f10},j为1到10之间的任意一个整数值,fj(1≤j≤10)表示该软件系统中的第j个方法,并用一个10×10的二维矩阵B编码表示,
(2)假设该软件系统需要被聚类形成m(m<<n)个模块,则经过模块聚类之后的软件系统可以用集合C表示为C={c1,c2,...ci,...cm},i为1到m之间的任意一个整数值,ci(1≤i≤m)表示软件系统经过模块聚类后的第i个模块。对该软件系统的模块聚类方案可以表示为一个10维向量Cluster,合并操作迭代到第t步时的聚类结果向量表示为Clustert,t为合并操作阶段的迭代步数 (t≥0)。
(3)设定基于概率选择的软件模块聚类算法的参数,所述的参数包括合并操作中的迭代次数r1=1,动态调整操作中的迭代次数r2=2。
(4)对模块聚类的结果进行初始化,使聚类结果向量Cluster中每一维的值 ai=0,1≤i≤n,即Cluster0={0,0,0,0,0,0,0,0,0,0}。初始化最优聚类结果向量 Cluster*={0,0,0,0,0,0,0,0,0,0},使聚类形成的模块数为0,即int clus=0。初始化聚类结果的最优MQ值为gbestMQ=0,令局部合并操作的迭代次数t=1,开始进行局部合并操作。
(5)进行局部合并操作
将每个方法fi的直接调用方法保存在列表listi中(1≤i≤n),并对列表listi按照长度进行升序排序形成下列的序列:
list7={},list8={},list9={},list1={f5},list2={f1},list4={f7},list5={f8},list6={f7,f8,f9} list10={f7,f8,f9},list3={f1,f2,f4,f5,f6},对应于一个排序的方法序列f7,f8,f9, f1,f2,f4,f5,f6,f10,f3。
根据初始化的结果Cluster0={0,0,0,0,0,0,0,0,0,0},进行结点的合并,可以初步确定f1与f5合并,f2与f1合并,f4与f7合并,f5与f8合并,更新聚类向量 Cluster1={1,1,0,2,1,0,2,1,0,0}。
计算SC6={2,1,0},方法f6与f7合并的概率为方法f6与f8合并的概率为方法f6与f9合并的概率为生成随机数确定方法f6与f9合并,则更新聚类向量Cluster1={1,1,0,2,1,3,2,1,3,0}。计算SC10={2,1,3},方法f10与f7合并的概率为方法f10与f8合并的概率为方法f10与f9合并的概率为生成随机数确定方法f10与f7合并,则更新聚类向量Cluster1={1,1,0,2,1,3,2,1,3,2}。计算SC3={1,1,2,1,3},方法f3与f1,f2,f5合并的概率为方法f3与f4合并的概率为方法f3与f6合并的概率为生成随机数确定方法f3与f4合并,则更新聚类向量Cluster1={1,1,2,2,1,3,2,1,3,2}。
(6)计算当前聚类方案Cluster的MQ值:
目前形成三个聚类,由方法调用矩阵B,首先计算三个模块中的方法个数, N1=4;N2=4;N3=2;模块c1中包含方法f1、f2、f5、f8,模块c2中包含方法f3、f4、 f7、f10,模块c3中包含方法f6、f9。
计算模块ci中的方法调用模块cj中方法的次数为:
计算模块ci内部方法之间的调用次数为:
软件系统进行模块聚类后,计算第i个模块ci和第j个模块cj之间的耦合性εi,j:
计算第i个模块ci的内聚性μi:
计算粒子当前位置的适应度值:
(7)将当前该步计算出的MQ值与全局最优的gbestMQ进行比较, MQ=0.6263>gbestMQ=0。使gbestMQ=MQ=0.6263,使全局最优聚类结果为当前聚类结果Cluster*=Cluster1={1,1,2,2,1,3,2,1,3,2},t=t+1=2。
(8)t=2>r1=1,则重复下列(9)-(13)步。
(9)令动态调整操作的迭代次数为p=1(p≥0),动态调整操作的聚类结果表示为Clusterp。根据上述局部合并操作得到的初步结果,使用动态调整操作进行聚类结果的动态优化。
(10)根据局部合并操作的结果Cluster1={1,1,2,2,1,3,2,1,3,2}得到聚类结果集合 C={1,2,3}。对每一个方法计算选择各个聚类的概率值:
计算方法fi与聚类Cj之间的调用次数Ni,j,1≤i≤n,1≤j≤m。
N1,1=1,N1,2=0,N1,3=0;
N2,1=1,N2,2=0,N2,3=0;
N3,1=3,N3,2=1,N3,3=1;
N4,1=0,N4,2=1,N4,3=0;
N5,1=1,N5,2=0,N5,3=0;
N6,1=1,N6,2=1,N6,3=1;
N7,1=0,N7,2=0,N7,3=0;
N8,1=0,N8,2=0,N8,3=0;
N9,1=0,N9,2=0,N9,3=0;
N10,1=1,N10,2=1,N10,3=1;
计算方法fi选择每个聚类Cj的概率值p'i,j,
因此确定方法f1属于聚类C1,聚类向量Cluster不用调整。
因此确定方法f2属于聚类C1,聚类向量Cluster不用调整。
生成0到 1之间的随机数为0.72,则方法f3属于C2模块,聚类向量Cluster不用调整。
因此确定方法f4属于聚类C2,聚类向量Cluster不用调整。
因此确定方法f5属于聚类C1,聚类向量Cluster不用调整。
生成0到1 之间的随机数为0.47,则方法f6属于C2模块,聚类向量Cluster调整为 Cluster={1,1,2,2,1,2,2,1,3,2}。
因此确定方法f7属于聚类C2,聚类向量Cluster不用调整。
因此确定方法f8属于聚类C1,聚类向量Cluster不用调整。
因此确定方法f9属于聚类C3,聚类向量Cluster不用调整。
生成0 到1之间的随机数为0.97,则方法f10属于C3模块,聚类向量Cluster调整为 Cluster={1,1,2,2,1,2,2,1,3,3}。
(11)利用步骤(6)的方法计算当前聚类方案Cluster的MQ值为MQ=0.6869。
(12)将当前该步计算出的MQ值与全局最优的gbestMQ进行比较, MQ=0.6869>gbestMQ=0.6263,使gbestMQ=MQ=0.6869,使全局最优聚类结果为当前聚类结果Cluster*=Cluster={1,1,2,2,1,2,2,1,3,3},p=p+1=2。
(13)若p<r2,则重复上述(10)-(12)步,若p≥r2,则结束整个步骤,完成整个软件模块聚类。
其余步骤与以上类似,不再详细说明。
本软件系统的模块聚类达到高内聚,低耦合,有利于软件系统后期的维护和管理。
Claims (2)
1.一种概率选择的软件模块聚类方法,其特征主要包括以下步骤:
(1)在面向对象语言编写的软件系统中,以代码中的方法作为节点,方法之间的调用关系作为边,将软件系统表示为一个图,并以矩阵形式存储,若该系统中有n个方法,这些方法可以用集合F表示为F={f1,f2,...,fj,...,fn},j为1到n之间的任意一个整数值,fj(1≤j≤n)表示该软件系统中的第j个方法,则该软件系统中方法之间的调用关系用一个n×n的二维矩阵B进行编码表示,若方法fi(1≤i≤n)调用方法fj(1≤j≤n),则B的第i行第j列的元素值为1,即bij=1,若方法fi(1≤i≤n)没有调用方法fj(1≤j≤n),则B的第i行第j列的元素值为0,即bij=0,按照上述方法,软件系统的方法调用关系编码表示为:
(2)假设该软件系统需要被聚类形成m(m<<n)个模块,则经过模块聚类之后的软件系统可以用集合C表示为C={c1,c2,...ci,...cm},i为1到m之间的任意一个整数值,ci(1≤i≤m)表示软件系统经过模块聚类后的第i个模块,对该软件系统的模块聚类方案可以表示为一个n维向量Cluster,其中ai表示向量中的元素,0≤ai≤m且ai为整数,若方法fi(1≤i≤n)属于第j(1≤j≤m)个模块,则Cluster中的第i个元素的值为j,即ai=j,若ai=0,则fi还不属于任何一个聚类,因此软件系统的模块聚类结果可以用向量表示为:
Cluster={a1 a2 a3 … an}
初始化的聚类结果向量表示为Cluster0,合并操作迭代到第t步时的聚类结果向量表示为Clustert,t为合并操作阶段的迭代步数(t≥0);
(3)设定概率选择的软件模块聚类算法的参数,所述的参数包括合并操作中的迭代次数r1,动态调整操作中的迭代次数r2;
(4)对模块聚类的结果进行初始化,使聚类结果向量Cluster中每一维的值ai=0,1≤i≤n,即Cluster0={0,0,.......,0},初始化最优聚类结果向量Cluster*={0,0,.......,0},使聚类形成的模块数为0,即int clus=0,初始化聚类结果的最优MQ值为gbestMQ=0,令局部合并操作的迭代次数t=1,开始进行局部合并操作;
(5)进行局部合并操作
将每个方法fi的直接调用方法保存在列表listi中(1≤i≤n),将列表listi按照长度进行升序排序,形成一个有序的列表序列list1,list2,.......listi,.......listn,对应于一个有序的方法序列f1,f2....fi....fn(1≤i≤n),
对每个方法:
根据上一步的聚类结果Clustert-1,计算SCi是列表listi中结点的聚类结果序列,0≤j≤l,l≤m,计算每个聚类在SCi中的方法数目计算方法fi选择聚类的概率值 以概率决定方法fi是否属于聚类如果否则,ai=++clus,更新聚类向量Clustert的值;
(6)计算当前聚类方案Cluster的MQ值:
假设第i个模块ci中的方法个数用Ni(1≤i≤m)表示,模块ci与模块cj之间方法的调用次数通过方法调用矩阵B计算,并用Ei,j表示:
模块ci内部方法之间的调用次数用Mi表示:
软件系统进行模块聚类后,第i个模块ci和第j个模块cj之间的耦合性用εi,j表示:
第i个模块ci的内聚性由μi表示:
高内聚、低耦合是评价软件模块聚类优劣的标准,使用软件模块质量(ModularizationQuality,简称MQ)将模块内部的内聚性和模块之间的耦合性结合起来综合评价软件模块聚类的优劣,当前合并操作进行到第t步时的软件模块聚类方案的MQ值用MQt进行评估表示,
其中,m表示将软件系统划分成m个模块,在优化过程中,软件系统耦合性尽可能减小,内聚性尽可能增大,即MQ的值不断增大;
(7)将当前该步计算出的MQ值与全局最优的gbestMQ进行比较,若MQ大于gbestMQ,使gbestMQ=MQ,使全局最优聚类结果为当前聚类结果Cluster*=Clustert,t=t+1;
(8)若t<r1,则重复上述(5)-(8)步,若t≥r1,则重复下列(9)-(13)步;
(9)令动态调整操作的迭代次数为p=1(p≥0),动态调整操作的聚类结果表示为Clusterp,根据上述局部合并操作得到的初步结果,使用动态调整操作进行聚类结果的动态优化;
(10)根据局部合并操作的结果Cluster得到聚类结果集合C={C1,C2,.......,Cm},1≤Ci≤m,对每一个方法计算选择各个聚类的概率值:
计算方法fi与聚类Cj之间的调用次数Ni,j,1≤i≤n,1≤j≤m,计算方法fi选择每个聚类Cj的概率值p′i,j,生成一个0到1之间的随机数,确定方法fi是否需要改变当前聚类,更新聚类向量Clusterp的值;
(11)利用步骤(6)的方法计算当前聚类方案Cluster的MQ值;
(12)将当前该步计算出的MQ值与全局最优的gbestMQ值进行比较,若MQ大于gbestMQ,使gbestMQ=MQ,使全局最优聚类结果为当前聚类结果Cluster*=Clusterp,p=p+1;
(13)若p<r2,则重复上述(10)-(12)步,若p≥r2,则结束整个步骤,完成整个软件模块聚类。
2.根据权利要求1所述的一种概率选择的软件模块聚类方法,其特征在于:该方法应用于面向对象语言编写的软件系统模块聚类中,能够有效的减少计算量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711100834.XA CN107766076B (zh) | 2017-11-07 | 2017-11-07 | 一种概率选择的软件模块聚类方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711100834.XA CN107766076B (zh) | 2017-11-07 | 2017-11-07 | 一种概率选择的软件模块聚类方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107766076A true CN107766076A (zh) | 2018-03-06 |
CN107766076B CN107766076B (zh) | 2021-02-09 |
Family
ID=61272236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711100834.XA Active CN107766076B (zh) | 2017-11-07 | 2017-11-07 | 一种概率选择的软件模块聚类方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107766076B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352650A (zh) * | 2020-02-25 | 2020-06-30 | 杭州电子科技大学 | 一种基于insga-ii的软件模块化多目标优化方法及系统 |
CN111913690A (zh) * | 2020-06-15 | 2020-11-10 | 成都飞机工业(集团)有限责任公司 | 一种基于马尔可夫聚类的软件模块划分方法 |
CN112270353A (zh) * | 2020-10-26 | 2021-01-26 | 西安邮电大学 | 多目标群体进化软件模块聚类方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070288935A1 (en) * | 2006-06-13 | 2007-12-13 | Zvi Tannenbaum | Cluster computing support for application programs |
CN104252383A (zh) * | 2014-09-16 | 2014-12-31 | 江苏科技大学 | 基于混沌粒子群算法的可重构计算的软硬件任务划分方法 |
CN106775705A (zh) * | 2016-12-12 | 2017-05-31 | 西安邮电大学 | 一种软件模块划分方法 |
CN106951372A (zh) * | 2017-04-05 | 2017-07-14 | 西安邮电大学 | 一种基于变量切片和关联规则的软件错误定位方法 |
-
2017
- 2017-11-07 CN CN201711100834.XA patent/CN107766076B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070288935A1 (en) * | 2006-06-13 | 2007-12-13 | Zvi Tannenbaum | Cluster computing support for application programs |
CN104252383A (zh) * | 2014-09-16 | 2014-12-31 | 江苏科技大学 | 基于混沌粒子群算法的可重构计算的软硬件任务划分方法 |
CN106775705A (zh) * | 2016-12-12 | 2017-05-31 | 西安邮电大学 | 一种软件模块划分方法 |
CN106951372A (zh) * | 2017-04-05 | 2017-07-14 | 西安邮电大学 | 一种基于变量切片和关联规则的软件错误定位方法 |
Non-Patent Citations (1)
Title |
---|
王曙燕 等: "基于改进粒子群算法的变异体选择优化", 《计算机应用研究》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352650A (zh) * | 2020-02-25 | 2020-06-30 | 杭州电子科技大学 | 一种基于insga-ii的软件模块化多目标优化方法及系统 |
CN111913690A (zh) * | 2020-06-15 | 2020-11-10 | 成都飞机工业(集团)有限责任公司 | 一种基于马尔可夫聚类的软件模块划分方法 |
CN112270353A (zh) * | 2020-10-26 | 2021-01-26 | 西安邮电大学 | 多目标群体进化软件模块聚类方法 |
CN112270353B (zh) * | 2020-10-26 | 2022-11-01 | 西安邮电大学 | 多目标群体进化软件模块聚类方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107766076B (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110533183B (zh) | 流水线分布式深度学习中异构网络感知的任务放置方法 | |
Cai et al. | Solving nonlinear water management models using a combined genetic algorithm and linear programming approach | |
CN110597799B (zh) | 一种时序数据缺失值自动填补方法、系统和设备 | |
CN104091301B (zh) | 一种基于MapReduce的瓦片金字塔并行构建方法 | |
CN106208075B (zh) | 基于修正广义Benders分解的多区域分解协调动态经济调度方法 | |
CN102222092A (zh) | 一种MapReduce平台上的海量高维数据聚类方法 | |
CN107766076A (zh) | 一种概率选择的软件模块聚类方法 | |
CN104281617A (zh) | 一种基于领域知识的多层关联规则挖掘方法及系统 | |
CN103488537A (zh) | 一种数据抽取、转换和加载etl的执行方法及装置 | |
CN106775705B (zh) | 一种软件模块划分方法 | |
CN111625258B (zh) | 默克尔树更新方法、装置、设备及可读存储介质 | |
CN112508192A (zh) | 一种具有深度结构的增量堆叠式宽度学习系统 | |
CN105978711B (zh) | 一种基于最小生成树的最佳交换边查找方法 | |
CN110535118A (zh) | 基于改进递归有序聚类的有源配电网多时段动态重构方法 | |
CN103914527A (zh) | 一种基于新编码方式的遗传规划算法的图形图像识别与匹配方法 | |
CN114118416A (zh) | 一种基于多任务学习的变分图自动编码器方法 | |
CN113191486A (zh) | 基于参数服务器架构的图数据与参数数据的混合划分方法 | |
CN117272195A (zh) | 基于图卷积注意力网络的区块链异常节点检测方法及系统 | |
Zhou et al. | Supervised learning enhanced quantum circuit transformation | |
Wu et al. | Agglomerative federated learning: Empowering larger model training via end-edge-cloud collaboration | |
CN118038032A (zh) | 基于超点嵌入和聚类的点云语义分割模型及其训练方法 | |
CN115809708B (zh) | 中等规模有噪声量子计算机的量子位自适应映射方法 | |
CN115310209B (zh) | 基于vae的气动形状迁移优化方法及相关装置 | |
CN115904394B (zh) | 一种面向众核架构的神经网络增量编译方法和装置 | |
CN104156462A (zh) | 基于元胞自动学习机的复杂网络社团挖掘方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221215 Address after: 710086 305, Building 7A, West Yungu Phase II, Fengxi New Town, Xixian New District, Xi'an, Shaanxi Patentee after: Xi'an Xinliang Standard Technology Co.,Ltd. Address before: 710061 No. 563 South Changan Road, Yanta District, Shaanxi, Xi'an Patentee before: XI'AN University OF POSTS & TELECOMMUNICATIONS |
|
TR01 | Transfer of patent right |