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

技术编号:13173754 阅读:68 留言:0更新日期:2016-05-10 16:50
本发明专利技术公开了一种基于加权a指数的软件包重要性度量方法,包括以下步骤:将Java语言编写的软件源代码在特征粒度抽象为特征依赖网;基于特征依赖网构建类依赖网;基于类依赖网构建包依赖网;基于包依赖网计算节点的加权h指数;基于包依赖网计算节点的加权cit指数;基于节点的加权h指数和加权cit指数计算节点的加权a指数,并以节点的加权a指数作为包重要性的度量指标。本发明专利技术弥补了现有技术鲜有涉及包重要性度量的不足,对于理解软件,提高代码维护效率具有重要意义。

【技术实现步骤摘要】

本专利技术涉及一种软件包重要性度量方法,尤其是涉及一种基于加权a指数的软件 包重要性度量方法。
技术介绍
计算机软件已经渗透到我们工作和日常生活的各个方面,正在改变并且还将继续 改变我们的生活。随着软件技术的发展和互联网的普及,人们对软件的依赖与日倶增,对软 件质量的要求越来越高。这导致了系统规模的激增和软件应用环境的日益复杂,使得软件 开发的风险增加、软件质量很难得到有效的控制。 同时演化性是软件的本质属性之一。软件系统同生物一样,在其生命周期内,也必 须不断的演化,否则就有可能提前被淘汰。软件演化的重要内容之一是对软件源代码的修 改。然而要修改代码,我们必须对软件系统有一定的了解。在维护资源有限的情况下,对于 一个新加入的开发者,加快其对系统的了解具有比较重要的意义。可以通过为新开发者推 荐重要的软件元素(如类、包等)从而加快其对系统的了解。尽管目前已经有不少软件度量 方面的研究工作,如L0C( Lines of Code)代码行、McCabe圈复杂度(Cyclomat ic Complexity)、Halstead度量法、CK度量组、MOOD度量集等,能够为认识软件的复杂性提供一 定的帮助,但是仍有如下不足: (1)现有的工作主要集中于度量代码元素本身的复杂性,缺少对代码元素重要性 的度量。 (2)现有工作主要是针对元素级的度量,度量的往往是软件的局部特征,如度量一 个方法、一个类,缺少从整体角度进行软件度量的工作,更缺少从整体角度度量软件元素重 要性的工作。 包是目前主流的面向对象软件的主要构成元素之一。因此,提供一种有效的包重 要性度量方法,从整体角度度量包的重要性,对于理解软件,提高代码维护效率具有重要意 义。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供了一种基于加权a指数的软件包重 要性度量方法。 本专利技术的上述技术问题主要是通过下述技术方案得以解决的:一种基于加权a指 数的软件包重要性度量方法,该方法包括以下步骤: (1)将Java语言编写的软件源代码在特征粒度抽象为特征依赖网Π )Ν= (Nf,Df)。其 中,Nf为源代码中特征节点的集合;Df = {(f i,f j)} (f i eNf,f j eNf)是无向边的集合,表示特 征间的依赖关系。特征包括了 Java源代码中的属性和方法。特征间的依赖关系包括了方法 间的调用关系和方法对属性的使用关系。 (2)基于步骤(1)完成的Π )Ν构建类依赖网00~=(队,0。,?)。其中具为源代码中类 节点的集合;〇。(^卽。,(3卢〇。)是一个无向边的集合,表示类之间的依赖关系;?是一个|仏 X I N。|的矩阵,代表类之间依赖关系的强度矩阵。类包含了 Java中的类、内部类、抽象类和 接口。类之间的依赖关系是根据类包含的特征间的依赖关系得到的,即类包含的特征间具 有依赖关系,则相应的类之间也存在依赖关系。 (3)基于步骤⑵完成的CDN构建包依赖网^^二…义^丄其中為为源代码中包 节点的集合;〇Ρ(ρ#〇Ρ,ρ^〇Ρ)是一个无向边的集合,表示包之间的依赖关系;P p是一个|NP X |NP|的矩阵,代表包之间依赖关系的强度矩阵。包之间的依赖关系是根据包所包含的类 之间的依赖关系得到的,即包所包含的类间具有依赖关系,则相应的包之间也存在依赖关 系。 (4)基于步骤(3)完成的FON计算节点i的加权h指数h(i)。 (5)基于步骤(3)完成的FON计算节点i的加权cit指数cit(i)。 (6)基于步骤(4)和步骤(5)计算节点i的加权a指数 (7)基于步骤(4)、(5)和(6)计算PDN中所有节点的加权a指数,作为节点相应包的 重要性值。 进一步地,上述步骤(2)中⑶N的构建具体包括以下子步骤: (2.1)提取Java语言编写的源代码中的所有类,构建一个只有节点没有边的⑶N, 即⑶N= (N。,Φ,P)。Φ代表边集为空,同时P是一个零矩阵。 (2.2)取步骤(1)加中的一条边(心,灼)6加,根据源代码得到匕和灼所定义的类,若 fi在类k中定义,f j在类p中定义,若k矣p,则将(k,p)加入D。,同时步骤(2.1)中P相应位置的P (k,p)自加1;若k与p相等,则不做任何处理。 (2 · 3)重复步骤(2 · 2),直到遍历完Π )Ν中的所有边。 进一步地,上述步骤(3)中TON的构建具体包括以下子步骤: (3.1)提取Java语言编写的源代码中的所有包,构建一个只有节点没有边的PDN, 即PDN= (ΝΡ,Φ,Pp)。Φ代表边集为空,同时-个零矩阵。 (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相等,则不做任何处理。 (3.3)重复步骤(3.2),直到遍历完⑶N中的所有边。 进一步地,上述步骤(4)中节点i的加权h指数h (i)的计算具体包括以下子步骤: (4.1)求步骤(3)所得PDN中所有节点的节点权。节点j的节点权Sj定义为PDN中与 该节点相连的所有边的权重和,即:其中,Vj是节点j的邻居节点集合。 (4.2)求步骤(3)所得TON中节点i的邻居节点集合Vi。 (4.3)将^中的节点按其节点权降序排列(若存在节点权相等的情况,则相等的几 个值随机选择一种可能的排序),得到排序后的数组list,list位置存放的是节点权最 大的那个节点。 (4.4)从list开始,依次遍历list列表中的每个节点list,找到第一个满足 节点权小于(n+1)的节点1 ist ,则节点i的加权h指数h(i)为η。 进一步地,上述步骤(5)中节点i的加权cit指数cit(i)的计算具体包括以下子步 骤: (5.1)求步骤(3)所得PDN中所有节点的节点权。节点j的节点权s j定义为PDN中与 该节点相连的所有边的权重和,即:其中,Vj是节点j的邻居节点集合。 (5.2)求步骤(3)所得TON中节点i的邻居节点集合Vi。 (5.3)将^中的节点按其节点权降序排列(若存在节点权相等的情况,则相等的几 个值随机选择一种可能的排序),得到排序后的数组list,list位置存放的是节点权最 大的那个节点,list位置存放的是节点权最小的那个节点(| Vl |为^中节点个数)。节点i的加权cit指数cit(i)。 与现有技术相比,本专利技术具有以下优点和积极效果: (1)本专利技术中加权a指数的构建都考虑了软件作为一个整体的影响,因为构建a指 数所使用的加权h指数和加权cit指数都考虑了网络中其它节点的节点权,是一种整体视 角,在一定程度上克服了现有方法只关注局部特征忽略整体特征的问题。 (2)本专利技术提出用加权a指数度量软件中包的重要性,在一定程度上克服了现有方 法只关注软件元素复杂性的度量,忽略软件元素重要性度量的问题,可以为理解软件、提高 代码维护效率提供支持。【附图说明】 图1本专利技术的Java语言编写的源代码片段;图2本专利技术的实施例构建的Π )Ν; 图3本专利技术的实施例构建的无边⑶Ν; 图4本专利技术的实施例构建的无边CDN相应的Ρ; 本文档来自技高网
...

【技术保护点】
一种基于加权a指数的软件包重要性度量方法,其特征在于,包括以下步骤:(1)将Java语言编写的软件源代码在特征粒度抽象为特征依赖网FDN=(Nf,Df)。其中,Nf为源代码中特征节点的集合;Df={(fi,fj)}(fi∈Nf,fj∈Nf)是无向边的集合,表示特征间的依赖关系。(2)基于步骤(1)完成的FDN构建类依赖网CDN=(Nc,Dc,P)。其中,Nc为源代码中类节点的集合;Dc(ci∈Dc,cj∈Dc)是一个无向边的集合,表示类之间的依赖关系;P是一个|Nc|×|Nc|的矩阵,代表类之间依赖关系的强度矩阵。(3)基于步骤(2)完成的CDN构建包依赖网PDN=(Np,Dp,Pp)。其中,Np为源代码中包节点的集合;Dp(pi∈Dp,pj∈Dp)是一个无向边的集合,表示包之间的依赖关系;Pp是一个|Np|×|Np|的矩阵,代表包之间依赖关系的强度矩阵。(4)基于步骤(3)完成的PDN计算节点i的加权h指数h(i)。(5)基于步骤(3)完成的PDN计算节点i的加权cit指数cit(i)。(6)基于步骤(4)和步骤(5)计算节点i的加权a指数(7)基于步骤(4)、(5)和(6)计算PDN中所有节点的加权a指数,作为节点相应包的重要性值。...

【技术特征摘要】

【专利技术属性】
技术研发人员:潘伟丰宋贝贝徐红伟姜波谢波王家乐
申请(专利权)人:浙江工商大学
类型:发明
国别省市:浙江;33

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

1