一种基于加权a指数的软件包重要性度量方法_2

文档序号:9727190阅读:来源:国知局
[0046] 图6本发明的实施例构建的无边⑶Ν加入一条边后的⑶Ν相应的Ρ;
[0047]图7本发明的实施例构建的最终⑶Ν;
[0048]图8本发明的实施例构建的最终CDN相应的Ρ;
[0049]图9本发明的实施例构建的无边TON;
[0050]图10本发明的实施例构建的无边TON相应的Pp;
[00511图11本发明的实施例构建的无边TON加入一条边后的TON;
[0052] 图12本发明的实施例构建的无边TON加入一条边后的TON相应的Pp;
[0053] 图13本发明的实施例构建的最终TON;
[0054] 图14本发明的实施例构建的最终TON相应的Pp。
【具体实施方式】
[0055] 下面通过实施例并结合附图对本发明的技术方案作进一步的说明:
[0056] 本发明提出的一种基于加权a指数的软件包重要性度量方法,具体步骤如下:
[0057] (1)将Java语言编写的软件源代码在特征粒度抽象为特征依赖网Π )Ν= (Nf,Df)。图 1所示的是一个Java源代码片段。按照图1所给的Java源代码片段,可以构建相应的Π )Ν(如 图2所示),节点边的文字为节点相应特征的名字(名字由包名,类名,特征名以相连构 成)。其中,Nf= {pi .classX.a(),pl .classX.v(),pl .classX.c(),pl .classX.b(), p2 · classY. d(),p2 · classZ. e(),p2 · classZ. f(),p3 · classL. g()}为特征节点的集合;Df = {(pl.classX.b(),pl.classX.a()),(pl.classX.a(),pl.classX.b()),(pl.classX.a(), pl.classX.v()),(pl.classX.v(),pl.classX.a()),(pl.classX.v(),pl.classX.c〇), (pl.classX.c(),pl.classX.v()),(pl.classX.a(),p2.classY.d()),(p2.classY.d(), pl.classX.a()),(p2.classY.d(),p2.classZ.e()),(p2.classZ.e(),p2.classY.d()), (pi.classX.a(),p2.classZ.f()),(p2.classZ.f(),pi.classX.a()),(p3.classL.g(), p2.classZ.f()),(p2.classZ.f(),p3.classL.g()),(pl.classX.c(),p2.classZ.f〇), (p2.classZ.f〇 ,pl .classX.cO)}是无向边的集合,表示特征间的依赖关系。
[0058] (2)基于步骤(1)完成的FDN构建类依赖网〇0~=(1,0。,?)』0_勺构建具体包括以 下子步骤:
[0059] (2.1)提取Java语言编写的源代码中的所有类,构建一个只有节点没有边的CDN, 艮口〇0~=(1,〇,?)。〇代表边集为空,同时?是一个零矩阵。按照图1所给的加抑源代码片 段,可以构建相应的CDN=(N c,Φ,P)(如图3所示),其中,Nc={pl.classX,p2.classY, p2.claSSZ,p3. classL}为源代码中类节点的集合,节点边的文字为节点相应类的名字(名 字由包名和类名以相连构成KP是一个零矩阵,如图4所示。
[0060] (2.2)取步骤(1)加中的一条边(心,灼)6加,根据源代码得到匕和灼所定义的类,若 fi在类k中定义,f j在类p中定义,若k矣p,则将(k,p)加入D。,同时步骤(2.1)中P相应位置的P (k,p)自加1;若k与p相等,则不做任何处理。如图2所示,若取边(pi.classX.a(), p2.classZ.f()),因 pl.classX.a()在pi · classX类中定义,p2 · classZ. f()在类 p2 · classZ 中定义,且pi. classX与p2. classZ不是同一类,故将(pi. classX,p2. classZ)加入Dc,可以 得到图5所示CDN及图6所示P。
[0061] (2.3)重复步骤(2.2),直到遍历完Π )Ν中的所有边,可以得到图7所示的⑶N,其中, Nc = {pi. clas sX,p2. clas sY,p2. classZ,p3. classL}为源代码中类节点的集合;Dc = {(pi .classX,p2.classY),(p2.classY,pi.classX),(pi .classX,p2.classZ), (p2.classZ,pi.classX),(p2.classY,p2.classZ),(p2.classZ,p2.classY),(p2.classZ, p3.classL), (p3.classL,p2.classZ)}是一个无向边的集合,表示类之间的依赖关系。相应 的P如图8所示。
[0062] (3)基于步骤(2)完成的CDN构建包依赖网TON = (NP,DP,Pp)。PDN的构建具体包括以 下子步骤:
[0063] (3.1)提取Java语言编写的源代码中的所有包,构建一个只有节点没有边的PDN, 即?〇~=(化,〇,6)。〇代表边集为空,同时匕是一个零矩阵。按照图1所给的拓抑源代码片 段,可以构建相应的PDN=(Np,?,Pp)(如图9所示),其中具={?1,?2,?3}为源代码中包节 点的集合,节点边的文字为节点相应包的名字。PP是一个零矩阵,如图10所示。
[0064] (3.2)取步骤(2)0。中的一条边((:1,(^)60。,根据源代码得到(3 1和(^所定义的包,若 ci在包k中定义,cj在包p中定义,若k矣p,则将(k,p)加入DP,同时步骤(3.1)中Pp相应位置的 PP(k,p)加上P(i,j);若k与p相等,则不做任何处理。如图2所示,若取边(pi .classX, p2. classZ),因 pi. classX在pi包中定义,p2. classZ在包p2中定义,且pi与p2不是同一包, 故将(p 1,p2)加入DP,可以得到图11所示CDN及图12所示Pp。
[0065] (3.3)重复步骤(3.2),直到遍历完⑶N中的所有边。可以得到图13所示的PDN,其 中,N P= {pi,p2,p3}为源代码中包节点的集合;DP= {(pi,p2),(p2,pl),(p2,p3),(p3,p2)} 是一个无向边的集合,表示包之间的依赖关系。相应的Pp如图14所示。
[0066] (4)基于步骤(3)完成的FON计算节点i的加权h指数h(i)。,具体包括以下子步骤:
[0067] (4.1)求步骤(3)所得PDN中所有节点的节点权。节点j的节点权Sj定义为PDN中与 该节点相连的所有边的权重和,即:
[0069] 其中,Vj是节点j的邻居节点集合。因此,图13中节点pi的节点权sPi = 3,p2的节点 权 81)2 = 3+1=443的节点权81)3=1。
[0070] (4.2)求步骤(3)所得TON中节点i的邻居节点集合Vi。因此,若令节点i为图13中的 节点p2,贝lj其邻居节点集合v P2= {pi,p3}。
[0071] (4.3)将^中的节点按其节点权降序排列(若存在节点权相等的情况,则相等的几 个值随机选择一种可能的排序),得到排序后的数组list,list[l]位置存放的是节点权最 大的那个节点。因此,若令节点i为图13中的节点p2,v P2= {pi,p3}中的节点pi的节点权sPi =3,,p3的节点权sP3 = l,因此可以得到list数组为{pi,p3},即list[l] = pl,list[2] = p3。
[0072] (4.4)从list[1]开始,依次遍历list列表中的每个节点list[q],找到第一个满足 节点权小于(n+1)的节点list[n+l],则节点i的加权h指数h(i)为η。因此,对于p2节点:当q =1时,sPi>l;当q = 2时,sP3〈2,故h(p2)的值为1。
[0073] (5)基于步骤(3)完成的PDN计算节点i的加权cit指数cit(i),具体包括以下子步 骤:
[0074] (
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1