System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种软件系统核心类识别方法技术方案_技高网

一种软件系统核心类识别方法技术方案

技术编号:43557271 阅读:8 留言:0更新日期:2024-12-06 17:31
本发明专利技术涉及程序理解领域,具体涉及一种软件系统核心类识别方法。本发明专利技术提出了一种软件系统核心类识别方法,该方法通过综合前向和后向推荐机制,在不改变现有PageRank框架下,克服了现有PageRank推荐单一性问题,提高了系统核心类的识别性能。方法还提出了软件网络约简规则,即“基于极大连通子图约简”和“基于入度‑出度约简”,这些规则简单、易操作,并具有较好的可解释性。

【技术实现步骤摘要】

本专利技术涉及程序理解领域,具体涉及一种软件系统核心类识别方法


技术介绍

1、随着软件规模和复杂性的增长,软件维护代价越来越高,而代码理解作为维护过程的核心环节,对软件修改和更新有着重要影响。维护工程师通常需要投入其总工作量的30%~60%用于分析和理解软件系统的内在结构。尽管软件维护的重要性日益凸显,但面对大规模复杂软件系统,尤其是当维护人员对系统不熟悉时,软件分析和理解面临许多困难。实践表明,从核心类(也称关键类或重要类)开始理解和分析,有助于快速熟悉软件系统的核心功能,从而有利于控制和降低软件维护成本。在核心类识别方法中,基于软件依赖网络的pagerank算法已成为一种重要的解决方法。然而,现有的pagerank算法仅考虑为出邻居结点投票(前向推荐),导致入邻居结点无法获得应有的投票(后向推荐),从而难以识别充当控制管理角色的核心类,该核心类结点在软件依赖网络中通常仅具有较高出度。


技术实现思路

1、为了解决上述技术问题,本专利技术提出了一种软件系统核心类识别方法,包括以下步骤:

2、s1:提取待解析的项目源代码;

3、s2:将项目源代码中的每个源文件转化成相应的抽象语法树;

4、s3:从抽象语法树中提取每种依赖类型的依赖实例,得到depinstances,其中,depinstances为所有依赖实例的集合;每个依赖实例包括依赖源类、依赖目标类及其对应的依赖类型和依赖频次;其中,依赖类型包括:全局变量关系、实现关系、继承关系、局部变量关系、方法调用关系、方法参数关系,以及返回类型关系;

5、s4:遍历depinstances中的每个依赖实例,将依赖源类、依赖目标类相同的依赖实例中的依赖频次进行累加,得到对应的累加频次,进而组成有向带权依赖边,每个有向带权依赖边包括依赖源类、依赖目标类以及对应的累加频次;根据所有有向带权依赖边,生成类层次软件依赖网络g;

6、s5:利用启发式规则对g进行约简,得到约简后的类层次软件依赖网络g′;

7、s6:计算g′中每个类的重要性程度;

8、s7:根据用户需求,展示重要性程度最高的k个类作为系统核心类,其中k为自然数。

9、优选的,利用启发式规则对g进行约简的方法为:

10、s5.1:遍历g中的所有极大连通分量;如果一个极大连通分量的结点数小于g的结点总数的1%,则删除该极大连通分量,最终得到中间结果网络g*;

11、s5.2:遍历g*中的每个类结点,如果该类结点满足入度=0且出度=1,或者入度=1且出度=0,则将该类结点及其相连的边删除,最终得到g′。

12、优选的,计算类的重要性程度的方法包括hindex、coreness、pagerank、elementrank、pageranklike或pagerankfbr,其中pagerankfbr具体是指利用带有前向和后向推荐机制的pagerank方法。

13、优选的,pagerankfbr的具体实现方式为,使用类节点的pr值大小,评价对应类的重要性程度,pr值越大,则对应的类越重要;得到每个类节点pr值的步骤为:

14、s6.1:对于g′中的类节点v,初始时,所有类节点v的前向pr值与后向pr值为:

15、pr1(v)=1/n

16、pr2(v)=1/n

17、其中,pr1(v)表示类节点v的前向pr值;

18、pr2(v)表示类节点v的后向pr值;

19、n表示g′中的类节点总数;

20、s6.2:对g′中所有类节点v进行迭代计算,在每一轮迭代中,使用以下公式为每个类节点v更新前向pr值与后向pr值:

21、

22、其中,d为阻尼系数,f为后向推荐系数;

23、indegree(v)为类节点v的入度,outdegree(v)为类节点v的出度;

24、windegree(v)为类节点v的带权入度,woutdegree(v)为类节点v的带权出度;

25、indegreesum为所有类节点的入度和;outdegreesum为所有类节点的出度和;

26、windegreesum为所有类节点的带权入度和;woutdegreesum为所有类节点的带权出度和;

27、fwdcontribution(v)为类节点v的前向贡献值;bwdcontribution(v)为类节点v的后向贡献值;

28、in(v)为类节点v的入邻居结点集;on(v)为类节点v的出邻居结点集;

29、fwdcontribution(v)为类节点v的前向贡献值;bwdcontribution(v)为类节点v的后向贡献值;

30、w(x,y)表示有向边x→y的权重;

31、迭代至预设的收敛条件后,停止迭代,使用以下公式计算每个类节点v的pr值:

32、pr(v)=(1-f)×pr1(v)+f×pr2(v)

33、其中,pr(v)表示类节点v的pr值。

34、优选的,预设的收敛条件为:迭代次数大于迭代次数阈值或者所有类节点v的迭代差异值之和小于差异值阈值;

35、类节点v的迭代差异值计算公式为:

36、change(v)=(1-f)×|pr1(v)-backpr1(v)|+f×|pr2(v)-backpr2(v)|

37、其中,change(v)表示类节点v的迭代差异值;

38、backpr1(v)表示前一次迭代时的pr1(v)数值;

39、backpr2(v)表示前一次迭代时的pr2(v)数值。

40、有益效果:与现有技术相比,本专利技术具有如下优点:

41、(1)本技术提出了一种软件系统核心类识别方法,该方法通过综合前向和后向推荐机制,在不改变现有pagerank框架下,克服了现有pagerank推荐单一性问题,提高了系统核心类的识别性能。

42、(2)本专利技术提出的软件网络约简规则,即“基于极大连通子图约简”和“基于入度-出度约简”,规则简单,操作容易,具有较好的可解释性。

本文档来自技高网...

【技术保护点】

1.一种软件系统核心类识别方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种软件系统核心类识别方法,其特征在于,利用启发式规则对G进行约简的方法为:

3.根据权利要求1所述的一种软件系统核心类识别方法,其特征在于,计算类的重要性程度的方法包括HIndex、Coreness、PageRank、ElementRank、PageRankLike或PageRankFBR,其中PageRankFBR具体是指利用带有前向和后向推荐机制的PageRank方法。

4.根据权利要求3所述的一种软件系统核心类识别方法,其特征在于,PageRankFBR的具体实现方式为,使用类节点的PR值大小,评价对应类的重要性程度,PR值越大,则对应的类越重要;得到每个类节点PR值的步骤为:

5.根据权利要求4所述的一种软件系统核心类识别方法,其特征在于,预设的收敛条件为:迭代次数大于迭代次数阈值或者所有类节点v的迭代差异值之和小于差异值阈值;

【技术特征摘要】

1.一种软件系统核心类识别方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种软件系统核心类识别方法,其特征在于,利用启发式规则对g进行约简的方法为:

3.根据权利要求1所述的一种软件系统核心类识别方法,其特征在于,计算类的重要性程度的方法包括hindex、coreness、pagerank、elementrank、pageranklike或pagerankfbr,其中pagerankfbr具体是指利用...

【专利技术属性】
技术研发人员:刘辉辉闫瑞刘晨雨王蓁蓁赵海峰马乐军
申请(专利权)人:金陵科技学院
类型:发明
国别省市:

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

1