作者简介:马健(1985-),女,博士研究生.研究方向:复杂网络. E-mail:13112083@bjtu.edu.cn
提出了一种基于局域事件的软件网络演化模型,该模型以面向对象软件系统为研究对象,对BA无标度网络模型进行改进,增加了添加节点、添加边、删除边和边的重连等局域事件,模拟软件网络的演化过程。实验结果表明,该模型演化生成网络的度分布服从衰减幂律分布,模型能较好地描述真实软件的演化增长情况,并且与真实软件网络的度分布基本一致,仿真实验验证了该模型的有效性。同时,该模型可以对面向对象软件网络结构进行模拟和评价。
An evolution model of software networks based on local events is proposed. The model uses objective-oriented software systems as research object and improves the BA scale-free network model. By adding local events, such as addition of nodes, addition of edges, removal of edges and rewriting edges, the proposed model simulates the evolution of software networks. Simulation results show that the degree distribution of the network generated by this model follows power law distribution. The model can simulate the evolution process of real software, and the degree distribution is in agreement with that of real software network, which validates the proposed model. Meanwhile, the proposed model can simulate and evaluate the structures of object-oriented software networks.
自然界和人类社会中的大量系统都可以通过复杂网络加以描述[1]。面向对象软件系统也可以转化为人工复杂网络。这方面的研究有:Bhattacharya等[2]分析了软件源代码, 将函数抽象为节点, 调用关系抽象为有向边构造图形, 生成软件拓扑结构。Chong等[3]不仅构造了软件图形, 还为边分配权重进行了扩展。Chaikalis等[4]将类抽象为节点, 将类之间的(调用、关联、依赖)关系抽象为有向边。Turnu等[5]分析了Java、Eclipse和Netbeans大型面向对象软件系统的源代码, 研究了源代码中的类和它们之间的依赖关系和整个发行版及其子项目的复杂性, 结果表明, 这样的系统可以被看作是复杂软件网络。
网络演化是网络的结构发生变化, 网络演化的模型有:Barabá si等[6]提出了BA无标度网络模型, 模型基于增量增长和线性优先关系两种机制; Valverde等[7]提出了基于节点复制和边重新连接的模型; Myers[8]提出了基于重构过程的模型。Dorogovtsev等[9]提出了依赖现有节点的度数和年龄的模型; Zheng等[10]也提出了一个基于节点的度数和年龄的模型(Degree and age dependent adjustable evolution, DAAE); Li等[11]提出了一种模拟软件网络演化的模块连接机制, 使用模块化连接代替在前面的模型中采用的单节点连接, 因为将面向对象系统模块化与现实世界软件本质上更加相似。张锡哲等[12]提出一种新颖的基于复杂网络的服务软件行为演化模型, 在大量真实服务数据的基础上, 考察了面向服务的软件系统的演化仿真并分析其拓扑特征, 与传统软件所构成的软件网络进行了对比, 指出面向服务的软件系统特有的特征规律。还有一些模型也从不同的角度模拟了软件网络演化这一过程[13]。
本文提出了一种基于局域事件(Local events)的软件网络演化模型, 模型以面向对象软件系统为研究对象, 分析软件系统网络的度分布, 模拟软件网络的演化过程。
本文中从软件的源代码中提取组成系统的类抽象为节点, 它们之间的关系抽象为边, 例如:源类引用目标类对象, 将目标类对象作为局部变量或者源类方法的参数或返回类型是目标类。软件系统转化为由许多相互连接的类组成的类图。这样, 复杂的软件系统就用软件类图表示, 研究结论表明像大量人工网络那样, 软件类图也具有“ 小世界” 和“ 无标度” 的特性[14]。我们将类图看作软件网络, 也就是将面向对象软件系统也可以转化为人工网络。
图1为Junit软件类图。将类抽象为节点, 类之间的关系抽象为边, Junit软件类图可以看作是错综复杂的软件网络。
度分布是网络统计性质中最重要的性质, 也称为网络节点的度分布, 分布情况可用分布函数P(k)表示, P(k)表示一个随机选定的节点的度恰好为k的概率。网络中一个节点直接连接的邻接点的多少通常反映了它在网络中的重要程度。例如万维网、电影演员网、论文引用关系网等, 新演员总是愿意与有影响力的演员合作, 网页链接总是更多地指向那些有很多连接指向它的网页, 一篇论文被引用的次数越多, 被新论文引用的概率就越大。
1999年, Barabá si等[15]提出了无标度网络(Scale-free networks)模型, 具有幂律分布的网络被称为无标度网络, 其度分布具有胖尾现象, 实验结果表明许多现实的大规模网络的度分布服从幂律分布。
BA网络包括两个特性:
(1)增长。初始时具有少量m0个节点, 每个时间步增加一个新节点, 连接到m
(2)优先连接。新节点连接到旧节点的概率与旧节点的度成正比, N表示网络节点总数。
∏ (ki)=ki
经过t时间间隔后, 网络演化为一个有N=m0+mt个节点、mt条边的网络, 达到稳定的状态。
P(k)=
无标度网络模型是节点的度连接没有明显的特征长度, 因此也称为无标度网络。该模型描述了网络具有演化生长和节点依附偏好的特性, 即精确或近似地遵循幂函数的度分布。
软件最初的版本一般都相对简单, 软件内部的复杂程度也相对一般, 但随着时间的推移, 为满足新的需求或加入新的功能会对程序进行修改, 软件的复杂程度也会不断地增加。在真实的软件系统中, 新增类加入到软件中与软件中已存在的类发生关系, 已存在的类之间也会改变现有的各种关系或删除已存在的类及其关系。局域事件演化网络模型模拟了上述情形, 例如:带有新边的新节点与现有节点之间的连接, 在网络中现有节点间添加新边, 现有边的删除和重新连接。在BA模型的基础上, 本文提出了基于局域事件网络演化模型模拟真实软件网络的演化过程。
(1)初始网络:具有少量m0个节点。
(2)网络演化:
①以概率p1增加一个新节点, 新节点连接m条新边, 新节点按择优概率式(1)选取节点i与新增节点产生一条边, 这个过程重复m次。
②以概率p2在网络已有节点之间增添m条边, 新增的边一端按择优概率公式(1)∏ 选取节点i, 另一个节点也按择优概率公式(1)∏ (kj)选取节点j。
③以概率p3在网络已有节点之间删除m条边。
综合上述3种情况, 将式(3)(4)(5)相加可得:
式中:N=m0+mt; ∑ jkj=2mt-m; 对于较大的t、m0和m可以忽略, 初始条件ti时刻增加的连接数为m, ki(ti)=m。
对上述微分方程(6)求解得:
ki=m
网络中所有的节点都以同样的幂律增长, γ 称为动力学指数。p1+p2+p3=1。
随机变量ti服从(0, t)区间上的均匀分布, 有:pi(t)=
P
P(k, t)=
当t→ ¥ 时, 有
P(k)=
由式(7)可以看出, 基于局域事件网络演化模型也是无标度模型。
Dependency Finder分析工具可以实现从Java字节码文件中抽取面向对象软件类关系和度量。在本实验中使用Dependency Finder抽取所选实验对象类的之间关系进行分析。
为验证本文提出的基于局域事件的无标度网络模型, 选取了6款Java面向对象开源软件, 表1为Azureus5.7.1.0, structs1.3.10, tomcat9.0.0, ant1.9.7, itext5.5.9, jedit4.3的参数, 使用Mablab对生成的幂律函数曲线进行分析拟合。
图2为在双对数坐标中的参数分析, 是提出的模型式(7)的度分布曲线。对变量分别取对数可以得到度分布曲线是一条负斜率的直线, 所以, 得到模型为无标度网络模型。
本文分析了6个面向对象软件系统, 以Azureus5.7.1.0为例, 图3(a)中的‘ * ’ 为Azureus真实网络的度分布, ‘ +’ 为BA无标度网络模型的度分布曲线, ‘ ∙ ’ 为基于局域事件(LE)的无标度网络的度分布曲线。可以看出, 在图3(a)的双对数坐标中, Azureus真实网络度分布具有胖尾现象。说明度数大的节点占少数, 大部分的节点的度数较小, 度数较大的少数节点对应于软件系统中的通用类, 这些类被程序员经常使用。上述结果表明, 面向对象软件系统的度分布遵循幂律分布。
这种基于局域网络演化机制的模型适合描述面向对象软件系统, 软件网络经过长时间演化后, 导致网络中大多数节点拥有少数连接的边, 而极少数节点, 拥有大量连接。结果导致“ 富者越富” 和中枢点现象。这些软件网络的度分布都服从幂律分布。
采用目前通用的验证度指数的方法, 根据初步统计, 对软件系统进行度指数分析。所有软件网络拟合后曲线的斜率均在区间, 结论与建模分析得到的结论一致。显然, 本文提出的模型更能较好地模拟真实网络的度分布情况, 模拟Azureus仿真网络的参数为m=10, p1=0.8, p2=0.1; 模拟structs仿真网络的参数为m=10, p1=0.8, p2=0.06; 其他模拟仿真网络的参数如表2所示, 与实际系统的演化度分布情况基本一致。
综上所述, 软件系统经过长时间演化后, 导致网络中大多数节点拥有少数连接的边, 而极少数节点, 拥有大量连接。即软件大多数节点较少与其他节点产生依赖(调用、继承、消息等)关系, 极少节点与大量其他节点具有依赖关系。例如:有的工具类被许多其他类调用, 面向对象软件网络具有复杂网络特性, 即度分布服从幂律分布。
本文选取了6款开源面向对象软件系统为研究对象, 对BA无标度网络模型进行改进, 增加了添加节点、添加边、删除边和边的重连等局域事件, 模拟软件网络的演化过程。实验结果表明, 软件系统的度分布服从衰减幂律分布和无标度分布。标度指数在2和3之间, 也就是说, 大规模软件系统的度分布服从衰减幂律分布的无标度分布, 这种现象说明通用类在软件系统的成长过程中发挥着重要作用, 其中代码重用引起了“ 富者越富” 现象的产生。软件演化的过程中还伴随着节点和边的添加、移除和边的重连现象, 为了描述软件系统的演化过程, 构建了一个软件系统演化模型, 模拟软件网络演化增长, 就是文中提出的基于局域事件的网络演化模型。实验结果表明, 该模型的度分布与实际软件网络基本相符, 提出的模型能较好地描述真实软件的演化增长情况, 计算得到的幂律指数与真实软件的度分布基本一致。数据仿真验证了该模型的有效性。
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|