一种基于软件运行网络的关键类识别方法技术

技术编号:21343274 阅读:20 留言:0更新日期:2019-06-13 22:22
本发明专利技术公开了一种基于软件运行网络的关键类识别方法,包括以下步骤:将Java语言编写的软件在运行时的方法调用过程抽象为一种软件运行网络—方法调用网;通过对方法调用网的映射,构建类依赖网;基于类依赖网计算类节点的g核数;以类节点的g核数作为其重要性的度量指标进行降序排序,得到关键类。现有技术主要基于软件源代码的静态分析,所构建的用于描述类及类间关系的模型不够准确。同时,所使用的度量指标未能准确刻画类的重要性。本发明专利技术弥补了现有技术的不足,使用一种基于软件运行的动态分析方法,并使用g核数度量类的重要性,进而识别关键类。本发明专利技术对于提高软件理解效率、代码维护效率等具有重要意义。

A Key Class Recognition Method Based on Software Running Network

The invention discloses a method for identifying key classes based on software operation network, which includes the following steps: abstracting the method invocation process of software written in Java language at run time into a software operation network-method invocation network; constructing a class dependency network by mapping the method invocation network; calculating the g-core number of class nodes based on class dependency network; and taking the g-core number of class nodes as its weight. The key classes are obtained by descending ranking of the important metrics. Existing technologies are mainly based on static analysis of software source code, and the models used to describe classes and relationships between classes are not accurate enough. At the same time, the metrics used fail to accurately describe the importance of classes. The invention makes up for the shortcomings of the existing technology, uses a dynamic analysis method based on software operation, and uses g-core to measure the importance of classes, thereby identifying key classes. The invention has important significance for improving the efficiency of software understanding and code maintenance.

【技术实现步骤摘要】
一种基于软件运行网络的关键类识别方法
本专利技术涉及一种软件关键类识别方法,尤其涉及一种基于软件运行网络的关键类识别方法。
技术介绍
计算机软件在我们生活中扮演着越来越重要的角色,软件的一点点故障都可能导致灾难性的后果。然而软件的开发是一个非常复杂的智力活动,特别是随着软件复杂性的增加,软件中的错误不可避免。同时,软件的需求具有不确定性。在软件的生命周期中总会不断涌现新的需求。软件为了保持持续的活力,必须不断的演化以适应新的需求。软件的演化也会引入新的错误,特别是当软件的规模变的异常大。因此,为了降低软件维护过程中错误引入的概率,必须对所维护的软件具有很好的理解。然而,理解软件并不是一件容易的事情,特别是当软件变得异常复杂的时候。因此,提供一种有效的技术来辅助维护人员对软件的理解,进而简化软件的维护工作,降低软件引入错误的概率,提高软件的质量对于日常的软件维护工作具有重要的意义。软件如此复杂,我们应该从何处开始理解软件呢?研究表明,从软件的关键元素(包、类、方法、属性等)开始理解软件是一种可行的方法,即首先理解关键的元素,然后顺着元素间的依赖关系,理解与关键元素相关的元素,以此类推,从而逐步理解整个软件。在关键元素识别方面已有不少工作:Zaidman等人构建了静态类依赖图,并使用HITS算法识别关键类。周毓明等人用类依赖图抽象类粒度的软件系统,并使用PageRank算法、HITS和介数中心性等方法识别关键类。姜淑娟等人构建了软件的状态转换模型,进而通过计算状态转换树节点的复杂度来识别关键类。潘伟丰等人构建了类粒度、包粒度的软件结构图,进而通过使用PageRank算法识别软件中的关键类和关键包。尽管目前已经有一些软件关键元素识别方面的工作,但是仍有如下不足:(1)现有的关键类识别方面的工作,主要基于对软件源代码的静态分析,缺少对软件实际运行时的动态分析。静态分析不需要运行软件,仅仅依靠软件源代码,提取的元素间的关系实际上是一种“最坏”情况下的关系,可能包含多余的关系;动态分析需要运行软件,收集软件运行过程中的元素及元素间的关系,代表的是元素间的真实交互。动态分析比静态分析更准确。(2)现有的用于度量类重要性的指标,往往基于类间的交互关系及其强度构建指标,忽视了类的度(交互的其它类的数量)对类重要性的影响,未能准确刻画类的重要性。包、类、方法是软件不同层次的元素。包层次的粒度过于大,方法层次的粒度过于细,选择从类粒度开始理解软件是一种可行的方法。提出一种基于软件运行网络的关键类识别方法可以弥补现有工作的不足,从而构建更加准确的模型表达类及类间依赖,并提出更加准确的度量指标量度类的重要性,为软件理解及软件维护工作提供技术支持。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供了一种基于软件运行网络的关键类识别方法。本专利技术的上述技术问题主要是通过下述技术方案得以解决的:一种基于软件运行网络的关键类识别方法,该方法包括以下步骤:(1)将Java语言编写的软件在运行时的方法调用过程抽象为一种软件运行网络—方法调用网FCN=(N,D)。其中,N为软件中的方法节点的集合;D={(fi,fj)}(fi∈N,fj∈N)是无向边的集合,表示方法间的调用关系;每条边将被赋予一个非负整数,作为方法调用关系的强度值。(2)基于步骤(1)完成的FCN构建类依赖网CDN=(Nc,Dc)。其中,Nc为FCN中方法所在的类节点的集合;Dc={(ci,cj)}(ci∈Nc,cj∈Nc)是一个无向边的集合,表示类之间的依赖关系;CDN中的每条边将被赋予一个非负整数,作为类之间依赖关系的强度值。(3)基于步骤(2)完成的CDN计算类节点i的g核数g(i),作为节点相应类的重要性值。(4)基于步骤(3)所得的类节点的g核数对类节点进行降序排列,得到关键类。进一步地,上述步骤(1)中的方法和方法间的调用关系是根据该Java软件在Java虚拟机上实际运行过程中获取的,是一种动态分析,而非基于源代码的静态分析。进一步地,上述步骤(1)中边上的强度值指的是方法之间的调用次数。调用次数是根据该Java软件在Java虚拟机上实际运行过程中获取的,是一种动态分析,而非基于源代码的静态分析。进一步地,上述步骤(2)中的类是根据FCN中的方法获得的。FCN中方法被定义的类成为CDN中的类。同时,CDN中的类是Java中的类、内部类、抽象类和接口的统称。进一步地,上述步骤(2)中类之间的依赖关系是根据FCN中方法间的调用关系得到的,即类包含的方法间若存在调用关系,则相应的类之间存在依赖关系。进一步地,上述步骤(2)中类之间的依赖关系的强度值是根据FCN中方法间的调用关系的强度值得到的,即类包含的方法间的强度值之和是相应的类之间依赖关系的强度值。进一步地,上述步骤(2)中CDN的构建具体包括以下子步骤:(2.1)提取FCN中方法所在的所有类,构建一个只有节点没有边的CDN,即CDN=(Nc,Dc=Φ)。Φ代表边集为空。(2.2)取步骤(1)D中的一条边(fi,fj)∈D,根据fi和fj的命名规则确定其定义的类,假设fi在类k中定义,fj在类p中定义。若k≠p,且(k,p)不在Dc内,则将(k,p)加入Dc,同时边(k,p)的强度值为边(fi,fj)上的强度值;若k≠p,且(k,p)已在Dc内,则更新Dc内(k,p)边上的强度值,使其新强度值等于原来的值加上边(fi,fj)上的强度值。若k与p相等,则不做任何处理。(2.3)重复步骤(2.2),直到遍历完FCN中的所有边。进一步地,上述步骤(3)中类节点i的g核数g(i)的计算具体包括以下子步骤:(3.1)求步骤(2)所得CDN中所有类节点的加权度。类节点j的加权度wj定义为CDN中与该类节点相连的所有边的强度值和,即:其中,vj是类节点j的邻居类节点集合;w(j,m)是边(j,m)上的强度值。(3.2)求步骤(2)所得CDN中所有类节点的度。类节点j的度kj定义为CDN中与该类节点相连的边数。(3.3)求步骤(2)所得CDN中所有节点的几何平均度。类节点j的几何平均度sj数值上等于最接近wj和kj积的算术平方根的整数。sj计算公式为:其中,round(n)返回最接近数值n的整数。(3.4)求步骤(2)所得CDN的g核(g=1,2,3,…):反复去掉CDN中几何平均度小于g的类节点及其连边,得到的子图即为CDN的g核。(3.5)求步骤(2)所得CDN中所有类节点的g核数:比较g核和(g+1)核中的类节点,若类节点存在于g核中,但是在(g+1)核中被删除,便可得到该类节点的g核数为g。进一步地,上述步骤(4)中,使用冒泡排序算法对类节点进行降序排列。进一步地,上述步骤(4)中,降序排列后,将排名前15%(向上取整)的类作为所识别的关键类。与现有技术相比,本专利技术具有以下优点和积极效果:(1)本专利技术中FCN和CDN的构建是基于Java软件在运行时的动态分析构建的,代表了软件中的方法及方法间、类和类之间的真实交互关系,比基于软件源代码的静态分析方法更加准确,在一定程度上克服了基于静态分析的关键元素识别方法模型不准确的问题。(2)本专利技术提出用基于g核分解的方法识别软件中的关键类,在一定程度上克服了现有方法忽视类的度(本文档来自技高网
...

【技术保护点】
1.一种基于软件运行网络的关键类识别方法,其特征在于,包括以下步骤:(1)将Java语言编写的软件在运行时的方法调用过程抽象为一种软件运行网络—方法调用网FCN=(N,D)。其中,N为软件中的方法节点的集合;D={(fi,fj)}(fi∈N,fj∈N)是无向边的集合,表示方法间的调用关系;每条边将被赋予一个非负整数,作为方法调用关系的强度值。(2)基于步骤(1)完成的FCN构建类依赖网CDN=(Nc,Dc)。其中,Nc为FCN中方法所在的类节点的集合;Dc={(ci,cj)}(ci∈Nc,cj∈Nc)是一个无向边的集合,表示类之间的依赖关系;CDN中的每条边将被赋予一个非负整数,作为类之间依赖关系的强度值。(3)基于步骤(2)完成的CDN计算类节点i的g核数g(i),作为节点相应类的重要性值。(4)基于步骤(3)所得的类节点的g核数对类节点进行降序排列,得到关键类。

【技术特征摘要】
1.一种基于软件运行网络的关键类识别方法,其特征在于,包括以下步骤:(1)将Java语言编写的软件在运行时的方法调用过程抽象为一种软件运行网络—方法调用网FCN=(N,D)。其中,N为软件中的方法节点的集合;D={(fi,fj)}(fi∈N,fj∈N)是无向边的集合,表示方法间的调用关系;每条边将被赋予一个非负整数,作为方法调用关系的强度值。(2)基于步骤(1)完成的FCN构建类依赖网CDN=(Nc,Dc)。其中,Nc为FCN中方法所在的类节点的集合;Dc={(ci,cj)}(ci∈Nc,cj∈Nc)是一个无向边的集合,表示类之间的依赖关系;CDN中的每条边将被赋予一个非负整数,作为类之间依赖关系的强度值。(3)基于步骤(2)完成的CDN计算类节点i的g核数g(i),作为节点相应类的重要性值。(4)基于步骤(3)所得的类节点的g核数对类节点进行降序排列,得到关键类。2.根据权利要求1所述一种基于软件运行网络的关键类识别方法,其特征在于,所述的步骤(1)中的方法和方法间的调用关系是根据该Java软件在Java虚拟机上实际运行过程中获取的,是一种动态分析,而非基于源代码的静态分析。3.根据权利要求1所述一种基于软件运行网络的关键类识别方法,其特征在于,所述的步骤(1)中边上的强度值指的是方法之间的调用次数。调用次数是根据该Java软件在Java虚拟机上实际运行过程中获取的,是一种动态分析,而非基于源代码的静态分析。4.根据权利要求1所述一种基于软件运行网络的关键类识别方法,其特征在于,所述的步骤(2)中的类是根据FCN中的方法获得的。FCN中方法被定义的类成为CDN中的类。同时,CDN中的类是Java中的类、内部类、抽象类和接口的统称。5.根据权利要求1所述一种基于软件运行网络的关键类识别方法,其特征在于,所述的步骤(2)中类之间的依赖关系是根据FCN中方法间的调用关系得到的,即类包含的方法间若存在调用关系,则相应的类之间存在依赖关系。6.根据权利要求1所述一种基于软件运行网络的关键类识别方法,其特征在于,所述的步骤(2)中类之间的依赖关系的强度值是根据FCN中方法间的调用关系的强度值得到的,即类包含的方法间的强度值之和是相应的类之间依赖关系的强度值。7.根据权利要求1所述一...

【专利技术属性】
技术研发人员:潘伟丰徐欣欣王家乐姜波柴春来朱云芳
申请(专利权)人:浙江工商大学
类型:发明
国别省市:浙江,33

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

1