一种软件模块划分方法与流程

文档序号:12463076阅读:来源:国知局

技术特征:

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表示:

<mrow> <msub> <mi>E</mi> <mrow> <mi>i</mi> <mo>,</mo> <mi>j</mi> </mrow> </msub> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>u</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <munderover> <mo>&Sigma;</mo> <mrow> <mi>v</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>b</mi> <mrow> <mi>u</mi> <mi>v</mi> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>f</mi> <mi>u</mi> </msub> <mo>&Element;</mo> <msub> <mi>c</mi> <mi>i</mi> </msub> <mo>,</mo> <msub> <mi>f</mi> <mi>v</mi> </msub> <mo>&Element;</mo> <msub> <mi>c</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

模块ci内部方法之间的调用次数用Mi表示:

<mrow> <msub> <mi>M</mi> <mi>i</mi> </msub> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>u</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <munderover> <mo>&Sigma;</mo> <mrow> <mi>v</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>b</mi> <mrow> <mi>u</mi> <mi>v</mi> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>f</mi> <mi>u</mi> </msub> <mo>&Element;</mo> <msub> <mi>c</mi> <mi>i</mi> </msub> <mo>,</mo> <msub> <mi>f</mi> <mi>v</mi> </msub> <mo>&Element;</mo> <msub> <mi>c</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

软件系统进行模块划分后,第i个模块ci和第j个模块cj之间的耦合性用εi,j表示:

<mrow> <msub> <mi>&epsiv;</mi> <mrow> <mi>i</mi> <mo>,</mo> <mi>j</mi> </mrow> </msub> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mrow> <mi>i</mi> <mi>f</mi> </mrow> </mtd> <mtd> <mrow> <mi>i</mi> <mo>=</mo> <mi>j</mi> </mrow> </mtd> </mtr> <mtr> <mtd> <mfrac> <msub> <mi>E</mi> <mrow> <mi>i</mi> <mo>,</mo> <mi>j</mi> </mrow> </msub> <mrow> <mn>2</mn> <mo>&times;</mo> <msub> <mi>N</mi> <mi>i</mi> </msub> <mo>&times;</mo> <msub> <mi>N</mi> <mi>j</mi> </msub> </mrow> </mfrac> </mtd> <mtd> <mrow> <mi>i</mi> <mi>f</mi> </mrow> </mtd> <mtd> <mrow> <mi>i</mi> <mo>&NotEqual;</mo> <mi>j</mi> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

第i个模块ci的内聚性由μi表示:

<mrow> <msub> <mi>&mu;</mi> <mi>i</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>M</mi> <mi>i</mi> </msub> <msubsup> <mi>N</mi> <mi>i</mi> <mn>2</mn> </msubsup> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

高内聚、低耦合是评价软件模块划分优劣的标准,使用软件模块质量(Modularization Quality,简称MQ)将模块内部的内聚性和模块之间的耦合性结合起来综合评价软件模块划分的优劣,第w个粒子代表的模块划分方案用MQw进行评估表示,

<mrow> <msub> <mi>MQ</mi> <mi>w</mi> </msub> <mo>=</mo> <mfrac> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </munderover> <msub> <mi>CF</mi> <mi>i</mi> </msub> </mrow> <mi>m</mi> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <msub> <mi>CF</mi> <mi>i</mi> </msub> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mtable> <mtr> <mtd> <mrow> <mi>i</mi> <mi>f</mi> </mrow> </mtd> <mtd> <mrow> <msub> <mi>&mu;</mi> <mi>i</mi> </msub> <mo>=</mo> <mn>0</mn> </mrow> </mtd> </mtr> </mtable> </mtd> </mtr> <mtr> <mtd> <mfrac> <msub> <mi>&mu;</mi> <mi>i</mi> </msub> <mrow> <msub> <mi>&mu;</mi> <mi>i</mi> </msub> <mo>+</mo> <mfrac> <mn>1</mn> <mn>2</mn> </mfrac> <munderover> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> <mo>,</mo> <mi>j</mi> <mo>&NotEqual;</mo> <mi>i</mi> </mrow> <mi>m</mi> </munderover> <mrow> <mo>(</mo> <msub> <mi>&epsiv;</mi> <mrow> <mi>i</mi> <mo>,</mo> <mi>j</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>&epsiv;</mi> <mrow> <mi>j</mi> <mo>,</mo> <mi>i</mi> </mrow> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> </mtd> <mtd> <mrow> <mi>o</mi> <mi>t</mi> <mi>h</mi> <mi>e</mi> <mi>r</mi> <mi>w</mi> <mi>i</mi> <mi>s</mi> <mi>e</mi> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow>

其中,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大于LGBest,则将其局部最优位置作为当前粒子群的全局最优位置gBest=LocBestw,该粒子的局部最优适应度值作为粒子群的全局最优适应度值LGBest=lwBest;

(8)根据下面方法更新每个粒子各维的位置,第w个粒子在迭代到第t步时的位置表示为要确定迭代到第t+1步时的位置编码即要确定迭代到t+1步时粒子Pw中每个方法所属的模块,假设要确定方法fj(1≤j≤n),使的第i(1≤i≤m)行第j(1≤j≤n)列的值为1,第j列的其它值为0,即由此构造矩阵

一共可以构造出m个这样的矩阵根据公式(5)计算每个位置编码的适应度值根据计算出的适应度值分别计算选择每个位置编码的概率值

<mrow> <msubsup> <mi>prob</mi> <mi>w</mi> <msub> <mi>t</mi> <mi>i</mi> </msub> </msubsup> <mo>=</mo> <mfrac> <mrow> <msubsup> <mi>fitness</mi> <mi>w</mi> <msub> <mi>t</mi> <mi>i</mi> </msub> </msubsup> </mrow> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>m</mi> </munderover> <msubsup> <mi>fitness</mi> <mi>w</mi> <msub> <mi>t</mi> <mi>k</mi> </msub> </msubsup> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>

则方法fj以概率选择模块i,由此确定方法fj所属的模块,并确定第w个粒子中每个方法所属的模块,即的取值;

(9)如果当前的迭代次数t等于最大迭代次数max,或者当前粒子群的LGBest达到期望值1,则全局最优位置gBest所对应的粒子代表的软件模块划分方案即为软件模块划分的最优方案,结束循环;否则,t=t+1,返回第(5)步。

2.根据权利要求1所述的一种软件模块划分方法,其特征在于:该方法应用于面向对象语言编写的软件系统模块划分中,以优化软件系统结构。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1