System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及程序理解领域,具体涉及一种软件系统核心类识别方法。
技术介绍
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具体是指利用...
【专利技术属性】
技术研发人员:刘辉辉,闫瑞,刘晨雨,王蓁蓁,赵海峰,马乐军,
申请(专利权)人:金陵科技学院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。