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和介数中心性等方法识别关键类。姜淑娟等人构建了软件的状态转换模型,进而通过计算状态转换树节点的复杂度来识别关键类。潘伟丰等人构建了类粒度、包粒度的软件结构图,进而通过使用PageR ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。