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

文档序号:9727190阅读:308来源:国知局
一种基于加权a指数的软件包重要性度量方法
【技术领域】
[0001] 本发明涉及一种软件包重要性度量方法,尤其是涉及一种基于加权a指数的软件 包重要性度量方法。
【背景技术】
[0002] 计算机软件已经渗透到我们工作和日常生活的各个方面,正在改变并且还将继续 改变我们的生活。随着软件技术的发展和互联网的普及,人们对软件的依赖与日倶增,对软 件质量的要求越来越高。这导致了系统规模的激增和软件应用环境的日益复杂,使得软件 开发的风险增加、软件质量很难得到有效的控制。
[0003] 同时演化性是软件的本质属性之一。软件系统同生物一样,在其生命周期内,也必 须不断的演化,否则就有可能提前被淘汰。软件演化的重要内容之一是对软件源代码的修 改。然而要修改代码,我们必须对软件系统有一定的了解。在维护资源有限的情况下,对于 一个新加入的开发者,加快其对系统的了解具有比较重要的意义。可以通过为新开发者推 荐重要的软件元素(如类、包等)从而加快其对系统的了解。尽管目前已经有不少软件度量 方面的研究工作,如L0C( Lines of Code)代码行、McCabe圈复杂度(Cyclomat ic Complexity)、Halstead度量法、CK度量组、MOOD度量集等,能够为认识软件的复杂性提供一 定的帮助,但是仍有如下不足:
[0004] (1)现有的工作主要集中于度量代码元素本身的复杂性,缺少对代码元素重要性 的度量。
[0005] (2)现有工作主要是针对元素级的度量,度量的往往是软件的局部特征,如度量一 个方法、一个类,缺少从整体角度进行软件度量的工作,更缺少从整体角度度量软件元素重 要性的工作。
[0006] 包是目前主流的面向对象软件的主要构成元素之一。因此,提供一种有效的包重 要性度量方法,从整体角度度量包的重要性,对于理解软件,提高代码维护效率具有重要意 义。

【发明内容】

[0007] 本发明的目的在于针对现有技术的不足,提供了一种基于加权a指数的软件包重 要性度量方法。
[0008] 本发明的上述技术问题主要是通过下述技术方案得以解决的:一种基于加权a指 数的软件包重要性度量方法,该方法包括以下步骤:
[0009] (1)将Java语言编写的软件源代码在特征粒度抽象为特征依赖网Π )Ν= (Nf,Df)。其 中,Nf为源代码中特征节点的集合;Df = {(f i,f j)} (f i eNf,f j eNf)是无向边的集合,表示特 征间的依赖关系。特征包括了 Java源代码中的属性和方法。特征间的依赖关系包括了方法 间的调用关系和方法对属性的使用关系。
[0010] (2)基于步骤(1)完成的Π )Ν构建类依赖网00~=(队,0。,?)。其中具为源代码中类 节点的集合;〇。(^卽。,(3卢〇。)是一个无向边的集合,表示类之间的依赖关系;?是一个|仏 X I N。|的矩阵,代表类之间依赖关系的强度矩阵。类包含了 Java中的类、内部类、抽象类和 接口。类之间的依赖关系是根据类包含的特征间的依赖关系得到的,即类包含的特征间具 有依赖关系,则相应的类之间也存在依赖关系。
[0011] (3)基于步骤⑵完成的CDN构建包依赖网^^二…义^丄其中為为源代码中包 节点的集合;〇Ρ(ρ#〇Ρ,ρ^〇Ρ)是一个无向边的集合,表示包之间的依赖关系;P p是一个|NP X |NP|的矩阵,代表包之间依赖关系的强度矩阵。包之间的依赖关系是根据包所包含的类 之间的依赖关系得到的,即包所包含的类间具有依赖关系,则相应的包之间也存在依赖关 系。
[00?2] (4)基于步骤(3)完成的FON计算节点i的加权h指数h(i)。
[0013] (5)基于步骤(3)完成的FON计算节点i的加权cit指数cit(i)。
[0014] (6)基于步骤(4)和步骤(5)计算节点i的加权a指数
[0015] (7)基于步骤(4)、(5)和(6)计算PDN中所有节点的加权a指数,作为节点相应包的 重要性值。
[0016] 进一步地,上述步骤(2)中⑶N的构建具体包括以下子步骤:
[0017] (2.1)提取Java语言编写的源代码中的所有类,构建一个只有节点没有边的⑶N, 即⑶N= (N。,Φ,P)。Φ代表边集为空,同时P是一个零矩阵。
[0018] (2.2)取步骤(1)加中的一条边(心,灼)6加,根据源代码得到匕和灼所定义的类,若 fi在类k中定义,f j在类p中定义,若k矣p,则将(k,p)加入D。,同时步骤(2.1)中P相应位置的P (k,p)自加1;若k与p相等,则不做任何处理。
[0019] (2 · 3)重复步骤(2 · 2),直到遍历完Π )Ν中的所有边。
[0020] 进一步地,上述步骤(3)中TON的构建具体包括以下子步骤:
[0021] (3.1)提取Java语言编写的源代码中的所有包,构建一个只有节点没有边的PDN, 即PDN= (ΝΡ,Φ,Pp)。Φ代表边集为空,同时-个零矩阵。
[0022] (3.2)取步骤(2)0。中的一条边((:1,(^)6〇。,根据源代码得到(3 1和(^所定义的包,若 ci在包k中定义,cj在包p中定义,若k矣p,则将(k,p)加入DP,同时步骤(3.1)中Pp相应位置的 PP(k,p)加上P(i,j);若k与p相等,则不做任何处理。
[0023] (3.3)重复步骤(3.2),直到遍历完⑶N中的所有边。
[0024] 进一步地,上述步骤(4)中节点i的加权h指数h (i)的计算具体包括以下子步骤:
[0025] (4.1)求步骤(3)所得PDN中所有节点的节点权。节点j的节点权Sj定义为PDN中与 该节点相连的所有边的权重和,即:
[0027]其中,Vj是节点j的邻居节点集合。
[0028] (4.2)求步骤(3)所得TON中节点i的邻居节点集合Vi。
[0029] (4.3)将^中的节点按其节点权降序排列(若存在节点权相等的情况,则相等的几 个值随机选择一种可能的排序),得到排序后的数组list,list[l]位置存放的是节点权最 大的那个节点。
[0030] (4.4)从list[1]开始,依次遍历list列表中的每个节点list[q],找到第一个满足 节点权小于(n+1)的节点1 ist [n+1 ],则节点i的加权h指数h(i)为η。
[0031] 进一步地,上述步骤(5)中节点i的加权cit指数cit(i)的计算具体包括以下子步 骤:
[0032] (5.1)求步骤(3)所得PDN中所有节点的节点权。节点j的节点权s j定义为PDN中与 该节点相连的所有边的权重和,即:
[0034]其中,Vj是节点j的邻居节点集合。
[0035] (5.2)求步骤(3)所得TON中节点i的邻居节点集合Vi。
[0036] (5.3)将^中的节点按其节点权降序排列(若存在节点权相等的情况,则相等的几 个值随机选择一种可能的排序),得到排序后的数组list,list[l]位置存放的是节点权最 大的那个节点,list[ | Vl | ]位置存放的是节点权最小的那个节点(| Vl |为^中节点个数)。
[0037]
节点i的加权cit指数cit(i)。
[0038] 与现有技术相比,本发明具有以下优点和积极效果:
[0039] (1)本发明中加权a指数的构建都考虑了软件作为一个整体的影响,因为构建a指 数所使用的加权h指数和加权cit指数都考虑了网络中其它节点的节点权,是一种整体视 角,在一定程度上克服了现有方法只关注局部特征忽略整体特征的问题。
[0040] (2)本发明提出用加权a指数度量软件中包的重要性,在一定程度上克服了现有方 法只关注软件元素复杂性的度量,忽略软件元素重要性度量的问题,可以为理解软件、提高 代码维护效率提供支持。
【附图说明】
[0041] 图1本发明的Java语言编写的源代码片段;
[0042]图2本发明的实施例构建的Π )Ν;
[0043] 图3本发明的实施例构建的无边⑶Ν;
[0044] 图4本发明的实施例构建的无边CDN相应的Ρ;
[0045] 图5本发明的实施例构建的无边⑶Ν加入一条边后的⑶Ν;
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1