一种基于软件复杂网络的四维软件演化度量分析方法与流程

文档序号:11133600阅读:1186来源:国知局
一种基于软件复杂网络的四维软件演化度量分析方法与制造工艺

本发明应用于软件工程领域,是一种基于软件复杂网络度量,用于评价软件开发和维护过程中软件的质量水平的分析方法。



背景技术:

随着软件在人们生活中应用的日益普及和深入,人们对软件功能的需求越来越丰富,对软件质量的要求也越来越高。软件规模的扩大和软件应用环境的日益复杂,使软件系统的规模和复杂性不断增长。这不仅带来了更多的软件问题也使得软件系统更加难以控制。为了更好地解决软件问题,对软件进行开发和维护,必须更加全面深入地了解软件特性。为此,从结构化软件到面向对象软件,研究人员从不同角度提出了各种度量方法对软件网络的结构特性进行研究。而如基于程序体积的Halstead方法,面向对象的McCabe圈复杂度量以及C&K和MOOD度量集等这些传统的软件度量分析方法,或是着眼于宏观的架构,或是着眼于局部的逻辑,但过于注重单一功能个体,强调微观统计特性而忽略了软件系统结构的整体性,难以从全局角度对软件网络结构进行度量。复杂网络的兴起,为分析软件结构特性提供了新的视角。

复杂网络是一种用于描述复杂系统的模型,通过将软件系统中的包、类、变量、函数等元素抽象为结点,元素之间的相互关系抽象为连接,整个软件可以抽象为一种具有特定拓扑结构的网络形态。利用复杂网络理论方法对复杂软件进行研究,有效解决了以上传统度量方法的局限性,使可以从宏观角度对软件有更加深刻的认识。在软件复杂网络方法的推动下,软件演化规律,软件结构特性等方面的研究取得了一定的成果。随着软件复杂性的不断提高,软件复杂网络的方法将更广泛的应用于度量软件结构,分析软件特征,以及评价软件质量的过程中。

目前,广泛应用的软件复杂网络结构度量方法主要是利用复杂网络科学中一些基本度量方法,或者根据软件对象本身特性提出某种单个或者综合度量方法,用来分析和评价软件的某种单一或者有限的结构特性。而作为复杂系统的软件产品,其质量的好坏需要由软件的多方面的综合表现决定,因此从更全面的视角了解软件的结构特性是非常重要的。当前的软件复杂网络度量分析方法很少能够对软件的多种结构特征进行综合分析评价,这导致了开发人员难以全面深入地了解软件产品,无法及时纠正软件开发中存在的问题,难以对软件质量进行有效控制。



技术实现要素:

本发明针对目前软件的度量分析方法仅局限于单一或者有限方面的软件结构特性,导致对软件产品分析不全面的问题,提出了一个基于软件复杂网络度量方法的四维软件演化分析方法,对版本演化过程中软件的模块性Modularity,结构层级性Hierarchy,复杂性Complexity以及故障传播特性Propagation四种结构特性(简称MHCP)进行度量监测。

本发明提出的基于软件复杂网络的四维软件演化度量分析方法,包括如下步骤:

步骤1:确定目标软件的各个版本及其源代码,对每个版本的软件代码进行函数调用网络的抽取。

步骤2:对版本演化过程中软件的模块性、结构层级性、复杂性以及故障传播性四个维度进行度量监测;其中,选取模块性的度量指标为聚集系数cc、网络密度d和模块划分质量q;选取结构层级性的度量指标为出度匹配系数oac、流层级性di和最大核度mc;选取复杂性的度量指标为平均节点度ad、基本环数量bc和标准结构熵hs;选取故障传播性的度量指标为网络效率e、有效直径ed和平均波及度tavg

获得目标软件各版本的软件函数调用网络后,对演化过程中的每个函数调用网络进行四个维度的度量计算。首先获取四个维度下各度量指标的值,然后根据下面公式获得模块性、结构层级性、复杂性以及故障传播性的度量值。

M=(f(cc)α×q)/f(d)β (1)

H=[f(oac)γ×f(di)]/f(mc)θ (2)

C=-[hs×f(ad)×f(bc)] (3)

P=f(e)λ/[f(ed)δ×f(tavg)τ] (4)

其中,M表示模块性的度量值,H表示结构层级性的度量值,C表示复杂性的度量值,P表示故障传播性的度量值。反正切函数f(x)对输入参数x进行标准化处理,使得对应度量指标的数值在[0,1]范围内,α、β、γ、θ、λ、δ和τ分别为基本度量参数cc、d、oac、mc、e、ed和tavg的权重系数。

步骤3:对每个维度的度量结果进行统计,分别绘制M、H、C、P随着版本演化的波动趋势图,从四个维度监测软件版本演化。

步骤4:结合目标软件类型的四维度量基准阈值,对目标软件整个演化过程的结构质量进行评价。当度量结果超过基准阈值时,表示目标软件在对应维度的结构质量较高。

首先,根据软件类型,选取该类型下开源软件的稳定版本建立一个软件基准库,从中选取一定数量的最近软件版本,计算选取的所有版本在四个维度下的各度量指标的平均值,再根据公式(1)~(4)得到四个维度的综合度量平均值μM,μH,μC和μP

然后,计算基准阈值,具体包括步骤4.1~4.5。

步骤4.1:计算软件基准库中每一个版本的M、H、C、P与综合度量平均值之间的偏差和;

diffi=|MiM|+|HiH|+|CiC|+|PiP| (5)

其中,diffi表示软件基准库中第i个版本的四个维度的度量值Mi、Hi、Ci、Pi与综合度量平均值之间的偏差和,1≤i≤N,N为软件基准库中的总版本数。

步骤4.2:选取偏差和diffi最小的前10个版本构成版本集合VS,1≤i≤N。

步骤4.3:根据中心极限定理,在保证diffi值在置信水平为(1-υ)×100%,精确度为±ρ%的范围内,通过公式(6),计算目标软件类型在考虑综合度量参数x下所需的版本数量Nx

其中,μ和σ分别表示VS集合中所有版本的综合度量参数x的均值和方差;Φ表示标准正态分布;x∈{M,H,C,P};取四个版本数中的最大值,标记为NX

步骤4.4:如果NX<|VS|,表示版本数量稳定,继续步骤4.5;否则,将其他不在VS集合中的版本按照diffi值从小到大的顺序依次加到VS集合中,每加入一个版本重复步骤4.3,更新NX

步骤4.5:计算版本集合VS中所有版本在四个维度下的各个度量指标的平均值,根据公式(1)~(4)得到四个维度的基准阈值。

步骤5:若目标软件的评价结果较好,将该软件的版本放入软件基准库,然后再依据步骤4.1~4.5对基准阈值进行优化。

本发明与现有技术相比,具有以下明显的优势:

首先本发明根据现有的对软件结构的研究,将软件结构特性分为四个方面,分别从软件的模块性M,层级性H,复杂性C以及故障传播特性P四个维度对软件进行全面监测。其次,为了更加全面深入的进行分析,本发明分别从基本度量、综合度量和全面度量三个层次对软件复杂网络进行度量。最后,本发明提出了一种基准阈值计算方法,将某种度量参数值至少应达到的平均水平的数据作为该参数的基准阈值。对同一类型的目标软件在统一的基准阈值标准下进行分析和评价,保证了结果的客观性和有效性。

通过在软件开发过程中不断监控各个版本函数调用网络的MHCP四个维度的三个层次的度量结果,对软件产品的整体结构质量水平进行全面的监测,及时掌握软件的研发状态,发现演化趋势,及时纠正软件开发中存在的问题,有效控制软件质量,对软件工程实践具有深远的意义。

附图说明

图1是本发明基于软件复杂网络的四维演化度量分析方法的流程示意图;

图2是MHCP四维结构度量示意图;

图3是MHCP准则优先程度评估矩阵;

图4是采用本发明方法对Gedit开源软件从四个维度监测版本演化的示意图;其中(a)为软件模块性度量;(b)为软件结构层级性度量;(c)为软件复杂性度量;(d)为软件故障传播性度量;

图5是采用本发明方法对Gedit开源软件全面度量OE的示意图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图对本发明作进一步的详细和深入描述。

本发明在分析总结当前软件复杂网络相关研究的基础上,分别对软件的MHCP四方面结构特性进行度量,在如图2所示的三个层次的度量基础上对软件的结构特性进行分析。基础度量层,主要是针对每个维度选取三个度量指标,度量指标选用包含节点级与网络级度量在内的对软件该方面特性具有重要意义的,并用传统复杂网络度量方法计算获得指标值。

如图2所示,本发明实施例中,选取模块性的度量指标为聚集系数cc、网络密度d和模块划分质量q;选取层级性的度量指标为出度匹配系数oac、流层级性di和最大核度mc;选取复杂性的度量指标为平均节点度ad、基本环数量bc和标准结构熵hs;选取故障传播特性的度量指标为网络效率e、有效直径ed和平均波及度tavg

综合度量层,为了获得难以从单个基础度量中获得的结构特性综合表现,基于基础度量方法,对每个维度的结构度量提出该维度下的综合度量方法如下:

M=(f(cc)α×q)/f(d)β (1)

H=[f(oac)γ×f(di)]/f(mc)θ (2)

C=-[hs×f(ad)×f(bc)] (3)

P=f(e)λ/[f(ed)δ×f(tavg)τ] (4)

其中,M表示模块性的度量值,H表示结构层级性的度量值,C表示复杂性的度量值,P表示故障传播性的度量值。为了让所有度量指标的数值在[0,1]范围内,本发明对部分度量指标参数cc、d、oac、mc、ad、bc、e、ed、tavg使用反正切函数进行了标准化处理,x为输入的参数。α,β,γ,θ,λ,δ和τ分别为基本度量参数cc,d,oac,mc以及e,ed,tavg的权重系数,不同的权重值代表了在综合度量中用户更加倾向于哪一方面的基本特性。例如,如果认为在度量结构模块特性上,聚集系数cc对于特定软件系统起着更加重要的作用,因此就对α取更小的值。权重系数的取值范围是(0,1)。

全面度量层,为了监测整个软件产品级的结构质量,基于以上四种综合度量,本发明提出软件全面度量方法的标准OE:

OE=ωMM+ωHH+ωCC+ωPP (5)

其中,ωx代表综合度量参数x的权重系数,x=M,H,C,P。ωx的取值范围为(0,1),该系数可以在实际工程应用中根据不同的用户需要以及环境自行确定,权重值越大表示更加关注该方面的特性。

在实际工程应用中,可以采用在工程系统分析中常用的图3所示的准则优先程度评估矩阵来确定各个综合参数的权重系数。M,H,C,P为待比较的准则,矩阵中的每个元素代表准则x,y间的比例系数,kxy表示准则x与准则y相比的重要程度,x和y的取值均为{M,H,C,P}。各准则自身相比不得分,故评估矩阵对角线上各元素均为零。准则之间一一对比时,较重要的那个准则得分应大于5分,而两者之和应为10分,即kxy+kyx=10。将每一行的元素相加可以得到每个准则权重度量值Sx,然后综合度量参数x的权重系数ωx通过下面公式计算得到:

根据以上三层度量,实现对软件网络全面度量。获得度量结果后,根据软件版本的发布时间绘制每个综合度量参数指标的演化趋势图。横坐标为版本,纵坐标为综合度量参数的度量值。在此基础上,本发明还根据该目标软件的基准阈值对软件进行评价。

本发明的基于软件复杂网络的四维软件演化度量分析方法,整体步骤如图1所示。

步骤1:根据需求确定目标软件的各个版本及其源代码,对每个版本的软件代码进行函数调用网络的抽取。

函数调用网络是目前粒度最低的软件复杂网络,它将软件代码中的函数抽象为节点,函数之间的关系抽象为边。例如用ri代表函数fi的边,用fi→fj表示函数fi至少调用了函数fj一次。

步骤2:获得各版本的软件函数调用网络后,对演化过程中的每个函数调用网络进行MHCP四个维度的度量计算,计算公式见公式(1)~(4)。

步骤3:对每个维度的度量结果进行统计,分别绘制M、H、C、P随着版本演化的波动趋势图。

步骤4:根据目标软件所属软件类型的四个维度的基准阈值,及其度量结果演化趋势图,对目标软件演化过程中的版本以及整个软件的结构特性和基本质量水平进行分析。

本发明根据不同的软件类型,如数据库软件、平台软件等,分别选取某类型下大量成熟的开源软件的稳定版本建立相应的软件基准库,并计算得到该类型软件的统一基准阈值,具体是从软件基准库中选取一定数量的最近软件版本,这些软件版本并非属于同一个软件,例如选取最近50个版本,计算最近50个版本的四个综合度量参数的平均值。首先计算所有版本在四个综合度量下各基本度量指标值的平均值,然后根据公式(1)~(4)得到四个综合度量参数的平均值μM,μH,μC和μP。然后计算基准阈值,如步骤4.1~步骤4.5所示。

步骤4.1:计算软件基准库中每一个版本的综合度量参数值与综合度量平均值之间的偏差和。

diffi=|MiM|+|HiH|+|CiC|+|PiP| (6)

其中,diffi表示软件基准库第i个版本的四个综合度量参数值Mi、Hi、Ci、Pi与综合度量平均值之间的偏差和,1≤i≤N,N为软件基准库的总版本数。

步骤4.2:根据偏差和值的大小对版本进行筛选,选取偏差和diffi值最小的前10个版本构成版本集合VS,1≤i≤N。

步骤4.3:根据中心极限定理,在保证diffi值在置信水平为(1-υ)×100%,精确度为±ρ%的范围内保持统计稳定的条件下,使用如下公式,计算得到目标软件类型在考虑综合度量参数x下所需的版本数量Nx

其中,μ和σ分别表示VS集合中所有版本的综合度量参数x的均值和方差。Φ表示标准正态分布,根据中心极限定理得到。x∈{M,H,C,P}。

对于每个综合度量参数x都计算得到一个版本数Nx,取四个版本数的最大值,标记为NX

步骤4.4:如果NX<|VS|,表示版本数量稳定,否则,将其他不在VS集合中的版本按照diffi值从小到大的顺序依次加到VS集合中,每加入一个版本重复步骤4.3,更新NX。在实际工程应用中可以限制VS集合的最大容量为40。

步骤4.5:选取稳定版本后,计算选取出的某类型软件的版本集合VS下的所有版本的软件基本度量的平均值,根据公式(1)~(4)得到四个综合度量值,作为基准阈值,此外还可以根据公式(5)进一步计算全面度量的基准阈值。

在获得演化过程中的度量结果以及基准阈值后,可以对目标软件进行分析和评价。基准阈值是软件在某方面的结过质量至少应达到的平均水平,如果度量结果超过基准阈值,表示软件在这方面结构质量较高。基准阈值是随着基准库中的软件及其版本的改变而改变的,基准库中的软件越优质,版本越稳定,样本越丰富,得到的基准阈值越准确,评价越客观。对分析评价结果较好的软件可以将其纳入软件基准库中,利用本发明方法优化更新该类型软件的基准阈值。

步骤5:若目标软件的评价结果较好,将该软件的版本放入软件基准库,然后再依据步骤4.1~4.5对基准阈值进行优化。

采用本发明方法对Gedit开源软件的146个版本进行的MHCP度量分析,它是由C/C++语言编写的,Linux系统下的文本编辑器软件。分析结果如图4中a~d所示。图中,横坐标为版本号,纵坐标分别为综合度量指标M、H、C、P。

图a为软件模块性度量结果M意图。图中显示早期版本的M值相对较低,在开发的早期阶段软件代码结构的模块性较差。从版本41开始,M值有了显著提升,版本40时的M值为0.818,在版本41增加到了0.854,在版本42增加到了0.865。这主要是由模块度的变化引起的。从版本56开始,M值开始趋于稳定,尽管由于新功能模块的引入导致M值没有版本42到55高,但大部分的M值仍然高于红线标出的基本阈值。

图b为软件结构层级性度量结果H的示意图。和模块性度量相同,H度量值在版本41处发生了较大的变化,从0.185增加到了0.210。这是由初度匹配系数oac的增大引起的,这说明具有相似出度值的节点更倾向于相互连接。之后大部分版本的H值都高于基本阈值,说明了后期版本软件的层级结构较好。

图c为软件复杂性度量结果C的示意图。不同于M和H度量,早期Gedit软件的复杂度较高,C值从版本74开始有了显著的提升。早期版本的复杂性较高主要由较大的标准结构熵hs以及基本环数量bc引起的,这说明软件复杂网络的无标度特性不够显著,代码结构比较复杂。从版本78开始C值在-0.769到-0.764之间小范围波动。从图c可知除版本93之外的所有开发后期的68个版本的C值均在基本阈值之上。

图d为软件故障传播性度量结果P的示意图。从图中可以看到版本41到版本85之间的绝大多数版本的P值都处于基本阈值之下。这说明软件的故障传播特性表现并不理想。在版本41之前,网络效率e的减小直接导致了P值的下降,尽管有效直径ed以及平均波及度tavg都在增大。这说明节点的影响范围在显著增大,也就是说某个节点的故障传播更容易传播到其他节点。接着在小范围波动后,软件的P值在后期版本中仍然保持相对稳定。

图5为对Gedit开源软件的综合度量趋势图,其中设置综合度量参数x的权重系数ωx均为0.25。从图中可见软件在版本9之前质量较好。从版本9之后OE值开始显著下降,该趋势一直持续到版本64,达到了所有版本146个版本的最低值(0.227)。这是由软件新功能模块的完善导致整个代码结构复杂性的增大引起的,这个现象说明了在软件开发的早期阶段就应该重点关注其复杂特性。从版本64之后,OE值稳步上升直到版本93。OE值增大的原因主要有两点:第一,C值从-0.773增大到-0.767,软件的复杂性得到了改善;第二,软件的模块性和层级性稳步上升,并在后期在一定范围内保持稳定。版本93之后,Gedit进入到一个相对稳定阶段。OE值保持在0.237左右,这意味着软件已经进入到了一个成熟阶段,即软件的大部分功能均已实现,并完成了测试,开始被大量用户使用。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1