一种软件模块划分方法技术

技术编号:15540794 阅读:69 留言:0更新日期:2017-06-05 10:30
本发明专利技术针对软件系统结构中模块划分问题,公开了一种软件模块划分方法。本方法利用粒子群算法种群寻优的特性,对软件模块划分问题进行离散编码,同时将高内聚、低耦合的软件设计原则用于软件模块划分的结果评价,采用以软件模块化评估标准为依据的位置更新方式,每次的位置更新都更加接近最优的软件模块划分,最后得到软件模块的划分结果。本发明专利技术提供了一种收敛速度快、稳定性好且划分效果好的软件模块划分方法,用于优化软件系统的结构。

A software module partitioning method

The invention discloses a software module division method aiming at the problem of module division in the software system structure. The characteristics of this method using particle swarm algorithm optimization, discrete encoding of software modules, and the software design principle of high cohesion and low coupling for the evaluation of software modules results using software module based on the evaluation criteria of the location update method, software module location update every time closer optimal, finally get the classification results of software modules. The invention provides a software module division method with fast convergence speed, good stability and good division effect, which is used for optimizing the structure of a software system.

【技术实现步骤摘要】
一种软件模块划分方法
本专利技术属于软件工程
,具体涉及到软件系统中模块划分的问题,提供了一种基于搜索的软件模块划分方法,主要解决在软件系统中如何优化系统代码结构的问题,使每个模块尽可能独立的执行其预期功能,达到消除系统冗余,增加软件系统的可理解性,降低软件系统维护费用的目的。
技术介绍
软件维护是软件生命周期中一个非常重要的阶段,其维护成本往往很高。随着业务需求的增加,软件系统逐渐发生变化,这使理解和维护一个规模庞大的软件系统变得越来越复杂,这一问题迫使需要一种合理的软件模块划分方法,特别对于那些缺少文档的遗留系统,如何分解软件结构,使软件系统变得易于理解、维护和管理是一个亟待解决的问题。软件模块划分是组织或重新组织软件系统的一种活动,使每个模块尽可能独立的执行其预期功能,以达到优化软件系统结构,消除冗余,增加软件系统的可理解性,降低软件系统维护费用的目的。软件模块聚类是软件模块划分的一种重要手段,软件聚类是通过模块依赖图利用聚类算法对软件系统进行模块结构划分,将软件系统分解为一些子系统,使复杂的软件系统变得易于理解和管理。目前使用聚类方式进行模块划分的方法主要有以下策略:(1)将经典的聚类技术直接应用到软件模块划分中;(2)根据软件领域的特性将经典的聚类算法改进并使用;(3)应用新的聚类技术进行软件模块划分。用于软件聚类的技术主要可以分为图理论技术、基于信息检索的技术、基于数据挖掘的技术、基于模式匹配的技术和元启发式方法。利用图理论技术的方法是将软件表示为一个图,其中软件实体(如:方法或类)作为节点,方法之间的调用或类之间的继承关系作为边,用图方法在图中找到最好的划分方式。然而图理论方法解决聚类问题随着软件系统规模的增加,搜索空间呈指数级增长。软件模块划分问题是一个NP问题,由于搜索过程中会产生巨大的解空间,使用传统的优化技术无法得到问题的有效解。为了减小计算的复杂性,Mancoridis等提出用基于搜索的方法进行软件模块划分并实现了软件系统模块划分工具Bunch。随后,相继将爬山算法,模拟退火算法,遗传算法等元启发式方法应用于软件模块划分问题上,使问题得到一定程度的解决,但存在收敛速度慢,易陷入局部最优等缺点。Hussain等提出将粒子群优化算法(PSO)用于软件模块划分问题,但是由于没有考虑软件模块划分问题解空间离散的特点,位置更新没有将软件模块划分的评估标准考虑在内,而是盲目的在解空间中搜索,使得优化过程收敛速度慢,而且计算量大,不利于进行大规模复杂系统的软件模块划分。为此,本专利技术以离散粒子群算法为基础,结合软件模块划分问题的特殊性对传统离散粒子群算法加以改进,位置更新采用以软件模块化评估标准为依据的位置更新方式,使每次的位置更新都更加接近最优的软件模块划分结果;同时,软件模块划分的评估标准遵循高内聚、低耦合的软件设计原则,从根本上保证了产生一个结构合理,划分有效的结果。
技术实现思路
本专利技术解决的问题:克服现有方法的不足,将改进的离散粒子群算法应用于软件模块划分问题中,为软件模块划分问题提供一种划分效果更好的方法,使规模庞大的复杂软件系统划分成规模更小、更易于管理的子系统。本专利技术解决方案:为实现上述目的,本专利技术的技术方案包括以下步骤,如图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,种群中的第w个粒子用Pw表示,则种群可以用集合P表示,P={P1,P2,...,Pw,...,PN}(1≤w≤N),对该软件系统的模块划分方案编码表示为一个m×n的二维矩阵A。矩阵A的每一列代表一个方法,每一行代表划分成的一个模块,则第w个粒子在迭代到第t步时软件系统的模块划分情况由中每一个元素的值决定。若方法fj(1≤j≤n)属于ci(1≤i≤m)模块,则中的第i行第j列的元素值为1,即而第j列的其它元素值为0,即则第w个粒子在迭代到第t步时的模块划分情况编码表示为:n为该软件系统中的方法个数,m为软件系统模块划分后的模块数,t为迭代步数(t≥0)。(3)设定基于离散粒子群算法的参数,所述的参数包括粒子群中粒子的数量N、软件系统划分的模块数量m、迭代终止条件。(4)对每个粒子进行初始化种群P中粒子Pw的初始值采用随机生成方式初始化,具体如下:假设对于第w个粒子Pw中的第j(1≤j≤n)个方法fj,则随机生成一个1到m之间的随机整数。当随机生成的整数为i(1≤i≤m)时,代表粒子Pw的第j个方法属于第i个模块,则中而第j列的其它元素值为0,即按照此方法可以确定出粒子Pw中每个方法的所属模块。编码中1的个数应该有n个,分别代表n个方法所选的模块位置,种群中的所有粒子以上述方法进行初始化编码,令迭代次数t=1,开始进行软件系统模块划分。(5)计算每个粒子的适应度值假设第i个模块ci中的方法个数用Ni(1≤i≤m)表示,模块ci与模块cj之间方法的调用次数通过方法调用矩阵B计算,并用Ei,j表示:模块ci内部方法之间的调用次数用Mi表示:软件系统进行模块划分后,第i个模块ci和第j个模块cj之间的耦合性用εi,j表示:第i个模块ci的内聚性由μi表示:高内聚、低耦合是评价软件模块划分优劣的标准,使用软件模块质量(ModularizationQuality,简称MQ)将模块内部的内聚性和模块之间的耦合性结合起来综合评价软件模块划分的优劣,第w个粒子代表的模块划分方案用MQw进行评估表示,其中,m表示将软件系统划分成m个模块。在优化过程中,软件系统耦合性尽可能减小,内聚性尽可能增大,即MQ的值不断增大。以函数MQ作为粒子群算法中的适应度函数,第w个粒子当前位置的适应度值用fitnessw表示。(6)对于第w(1≤w≤N,N为种群规模)个粒子,将当前适应度值和该粒子局部最优位置的适应度值lwBest进行比较,若其值大于lwBest,则将粒子的当前位置作为该粒子的局部最优位置LocBestw=Aw,且该粒子的当前适应度值作为该粒子的局部最优适应度值lwBest=fitnessw。(7)对于第w(1≤w≤N,N为种群规模)个粒子,将其局部最优适应度值lwBest和全局经历过最优位置的适应度值LGBest进行比较,若第w个粒子Pw的局部最优适应度值lwBest大于LGBe本文档来自技高网
...
一种软件模块划分方法

【技术保护点】
一种软件模块划分方法,其特征主要包括以下步骤:(1)在面向对象语言编写的软件系统中,以代码中的方法作为节点,方法之间的调用关系作为边,将软件系统表示为一个图,并以矩阵形式存储,若该系统中有n个方法,这些方法可以用集合F表示为F={f

【技术特征摘要】
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,种群中的第w个粒子用Pw表示,则种群可以用集合P表示,P={P1,P2,...,Pw,...,PN}(1≤w≤N),对该软件系统的模块划分方案编码表示为一个m×n的二维矩阵A,矩阵A的每一列代表一个方法,每一行代表划分成的一个模块,则第w个粒子在迭代到第t步时软件系统的模块划分情况由中每一个元素的值决定,若方法fj(1≤j≤n)属于ci(1≤i≤m)模块,则中的第i行第j列的元素值为1,即而第j列的其它元素值为0,即则第w个粒子在迭代到第t步时的模块划分情况编码表示为:n为该软件系统中的方法个数,m为软件系统模块划分后的模块数,t为迭代步数(t≥0);(3)设定基于离散粒子群算法的参数,所述的参数包括粒子群中粒子的数量N、软件系统划分的模块数量m、迭代终止条件;(4)对每个粒子进行初始化种群P中粒子Pw的初始值采用随机生成方式初始化,具体如下:假设对于第w个粒子Pw中的第j(1≤j≤n)个方法fj,则随机生成一个1到m之间的随机整数,当随机生成的整数为i(1≤i≤m)时,代表粒子Pw的第j个方法属于第i个模块,则中而第j列的其它元素值为0,即按照此方法可以确定出粒子Pw中每个方法的所属模块;编码中1的个数应该有n个,分别代表n个方法所选的模块位置,种群中的所有粒子以上述方法进行初始化编码,令迭代次数t=1,开始进行软件系统模块划分;(5)计算每个粒子的适应度值假设第i个模块ci中的方法个数用Ni(1≤i≤m)表示,模块ci与模块cj之间方法的调用次数通过方法调用矩阵B计算,并用Ei,j表示:模块ci内部方法之间的调用次数用Mi表示:软件系统进行模块划分后,第...

【专利技术属性】
技术研发人员:孙家泽令蓓蕾王曙燕
申请(专利权)人:西安邮电大学
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1