首页> 中国专利> 开源软件生态系统健康性的多维度度量系统

开源软件生态系统健康性的多维度度量系统

摘要

本发明公开一种开源软件生态系统健康性的多维度度量系统;首先,从开源软件生态系统的定义出发,利用节点之间的依赖关系,采用Louvain社区发现算法找到复杂网络中存在的软件生态系统;然后,从四个维度来度量开源软件生态系统的健康性,即生产力、规模性、稳定性、结构性,给出了每个维度合适的评价指标,建立了多维度度量指标体系;最后,将健康性的定义定量化,给每个开源软件生态系统健康性打上标签,给出了基于神经网络的健康性度量方法。本发明在对软件生态系统健康性定义定量化的基础上,采用基于神经网络的方法度量软件生态的健康性,以避免主观因素带来的影响。

著录项

  • 公开/公告号CN112882914A

    专利类型发明专利

  • 公开/公告日2021-06-01

    原文格式PDF

  • 申请/专利权人 东南大学;

    申请/专利号CN202110254806.3

  • 发明设计人 王红兵;侯鹏君;

    申请日2021-03-09

  • 分类号G06F11/34(20060101);G06Q10/06(20120101);

  • 代理机构32206 南京众联专利代理有限公司;

  • 代理人薛雨妍

  • 地址 210096 江苏省南京市玄武区四牌楼2号

  • 入库时间 2023-06-19 11:11:32

说明书

技术领域

本发明涉属于群智化软件开发技术领域,尤其涉及开源软件生态系统健康性的多维度度量系统。

背景技术

软件生态系统是指在一个共同的技术平上台,众多的参与者协同合作,最终形成大量的软件解决方案或服务,例如Eclipse,Gnome,Linux以及Ruby等等。经研究,软件生态系统目前是在软件平台上结合内部和外部参与者开发的组件来构建大型软件系统的有效方法。随着开源软件开发平台的快速发展,可用的开源软件项目数量急剧增加,软件项目已不再是孤立存在,而是存在于托管平台上的不同软件生态系统中。

然而,到目前为止,对开源软件生态系统健康性的研究仍然处于起步阶段,关于软件生态系统的健康性度量方法的工作比较少,并且存在着一些问题,还没有一个统一的方法来度量软件生态系统的健康性。对于软件生态系统健康性的度量,目前的工作或者是混淆了项目健康性与生态系统健康性,或者是只提出了用于评价软件生态系统健康性的指标,却未详述度量方法与流程。

随着开源软件开发平台的快速发展,可用的开源软件项目数量急剧增加,软件项目已不再是孤立存在,而是存在于托管平台上的不同软件生态系统中。然而,到目前为止,对开源软件生态系统健康性的研究仍然处于起步阶段,关于软件生态系统的健康性度量和预测方法的工作比较少,并且存在着一些问题,还没有一个统一的方法来度量软件生态系统的健康性。一方面,目前的工作或者是混淆了项目健康性与生态系统健康性,采用的指标都在项目层,而没有考虑到网络节点之间的拓扑关系,而结构性对软件生态系统的健康性是存在一定影响的,如软件生态系统的致密化指数越高,说明节点之间的联系就越密切,即项目间的信息交流程度越高,这有利于形成更健康的软件生态系统。

对于开源软件生态系统的健康性度量,业界多从多维度度量,但是选择的角度各有差异。有学者设计了一个三层的度量指标体系系统,从开放性、稳定性、活跃性和扩展性四个维度度量开源软件生态系统的可持续性,并提出根据每个度量指标的信息贡献值来确定其在可持续性计算中的权重。但选取的指标是在项目级别,将开源软件项目的健康性等同于软件生态系统的健康性,没有考虑项目之间的网络关系。也有学者从三个方面,即平台质量、社区质量和生态系统质量设计了一个层次评价模型,并构造了软件生态系统的贝叶斯置信网,采用主客观结合的方法设计了一套评价生态系统质量的框架QuESo,包括度量模型、评价过程。然而该框架包含了大量的指标,在评估过程中要花费大量的时间和财力进行专家评估,无法应用到实际生态系统的评估中。

因此,为了帮助管理者、投资者和开发者更好的了解开源软件生态系统的发展状况以进行相应的决策,设计一套关于开源软件生态系统健康性的多维度度量体系和研究一种度量方法具有重要的理论意义与实际应用价值。

发明内容

为解决上述问题,本发明公开了开源软件生态系统健康性的多维度度量系统;首先,从开源软件生态系统的定义出发,利用节点之间的依赖关系,采用Louvain社区发现算法找到复杂网络中存在的软件生态系统;然后,从四个维度来度量开源软件生态系统的健康性,即生产力、规模性、稳定性、结构性,给出了每个维度合适的评价指标,建立了多维度度量指标体系;最后,将健康性的定义定量化,给每个开源软件生态系统健康性打上标签,给出了基于神经网络的健康性度量方法。

其中,本发明进一步改进在于:所述基于Louvain社区发现算法寻找软件生态系统;在开源软件社区中,存在着大量的开源软件生态系统;首先,给出模块度Q的定义:

其中,

①A

③k

④c

⑤函数δ(c

软件生态系统内部的权重(边数)和GitHub整个项目网络中总权重(边数)的比例为:

因此,模块度Q的大小也可以定义为软件生态系统内部的总权重(边数)和整个复杂网络中权重(边数)的比例减去一个期望值,该期望值是将网络设定为随机网络时同样的软件生态系统分配所形成的软件生态系统内部的总权重(边数)和网络中总权重(边数)的比例的大小;于是,Q可以简化为:

其中,∑in表示第i个软件生态系统内的权重(边数),∑tot表示与第i个软件生态系统内部的项目所关联的边的权重(边数);即

Σin=Σ

∑tot=∑

记为,Q=∑

Louvain算法是基于模块度的社区发现算法,以最大化Q为目标。

每次划分

都将比较划分前后的模块度,以获得模块度增益。

把节点i分配给节点j所在的社区c时模块度增益ΔQ定义为:

其中,k

①将图中的每个节点看成一个独立的社区,初始社区的数目与节点个数相同;

②对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化ΔQ,并记录ΔQ最大的那个邻居节点,如果maxΔQ>0,则把节点i分配ΔQ最大的那个邻居节点所在的社区,否则保持不变;

③重复②,直到所有节点的所属社区不再变化;

④对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边的权重转化为新节点间边的权重;

⑤重复①直到整个图的模块度不再发生变化;找到复杂网络中存在的软件生态系统。

本发明进一步改进在于:所述开源软件生态系统健康性多维度度量指标体系从生产力、稳定性、规模性以及结构性四个维度来评估软件生态系统的健康性;生产力衡量了开源软件生态系统内部知识产生的速度和向外界输送知识的速度,一个健康的软件生态系统能够源源不断的产生新的知识;稳定性衡量了开源软件生态系统保持正常发展状态的能力,这包括两个方面,即抵抗不稳定因素的能力和受到不稳定因素影响后恢复到正常状态的能力;规模性衡量了开源软件生态系统的体量,通常规模性越大的软件生态系统健康性越高;结构性则反映了软件生态系统中项目之间的联系,衡量的是软件生态系统的内部自身结构。

本发明进一步改进在于:所述开源软件生态系统健康性度量方法,首先定义两个时间变量T

T

T

将一个创建时间和最后一次活动发生时间之间间隔超过阈值T

其中,本发明进一步改进在于:根据定义,可以给所有的软件生态系统打上标签,即分为两类:C

通过训练神经网络,我们可以得到每个评价指标对于分类健康与不健康开源软件生态系统的影响程度,进而归一化影响程度,即得到每个指标的权重,进而得到每个开源软件生态系统的健康性得分。

本发明的有益效果:

1、一方面可以补充现有研究在开源软件生态系统健康性方面的缺陷,考虑了软件生态系统的结构性对健康性的影响。

2、相比于现有的主客观结合的度量方法,本发明在对软件生态系统健康性定义定量化的基础上,采用基于神经网络的方法度量软件生态的健康性,以避免主观因素带来的影响。与此同时,本发明提出的方法能考虑到开源软件生态系统不同发展阶段指标的重要程度变化。

附图说明

图1、是开源社区中项目形成的复杂网络;

图2是某个开源软件生态系统;

图3是神经网络示意图;

图4是本发明的开源软件生态系统健康性评估基本架构。

具体实施方式

下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。需要说明的是,下面描述中使用的词语“前”、“后”、“左”、“右”、“上”和“下”指的是附图中的方向,词语“内”和“外”分别指的是朝向或远离特定部件几何中心的方向。

如图4所示,本实施例提供开源软件生态系统健康性的多维度度量系统,

第一部分是:从开源软件生态系统的定义出发,利用节点之间的依赖关系,采用Louvain社区发现算法找到复杂网络中的软件生态系统;

第二部分是:建立了一套关于开源软件生态系统健康性的多维度度量指标体系,从生产力、规模性、稳定性以及结构性四个维度来评估软件生态系统;

第三部分是:对开源软件生态系统的健康性定义定量化,给开源软件生态系统进行打标签,给出了基于神经网络的健康性度量方法。

如图1所示,在复杂网络中,各节点并非独立存在,它们之间一般都存在着错综复杂的关联关系。我们将网络中依靠关联关系的紧密性差异而形成的聚类结构称为软件生态系统,如图2所示。复杂网络中的软件生态系统通常具有这样的特性,即软件生态系统内部节点间的连接较为紧密,而软件生态系统之间节点的连接较为稀疏。

本实施例的内容包括以下部分:

(1)基于Louvain社区发现算法寻找软件生态系统

实施方式:

在开源软件社区中,存在着大量的开源软件生态系统,例如GitHub,那么在这个复杂的网络中,节点代表着一个项目,节点间的连边代表着项目之间的依赖关系,即两个项目之间存在Pull Request、Issue或Commit行为,依靠这种关联关系,本发明挖掘发现复杂网络中的软件生态系统。

首先,给出模块度Q的定义:

其中,

①A

③k

④c

⑤函数δ(c

软件生态系统内部的权重(边数)和GitHub整个项目网络中总权重(边数)的比例为:

因此,模块度Q的大小也可以定义为软件生态系统内部的总权重(边数)和整个复杂网络中权重(边数)的比例减去一个期望值,该期望值是将网络设定为随机网络时同样的软件生态系统分配所形成的软件生态系统内部的总权重(边数)和网络中总权重(边数)的比例的大小。于是,Q可以简化为:

其中,∑in表示第i个软件生态系统内的权重(边数),∑tot表示与第i个软件生态系统内部的项目所关联的边的权重(边数)。即

∑in=∑

∑tot=∑

记为,Q=∑

Louvain算法是基于模块度的社区发现算法,以最大化Q为目标。每次划分都将比较划分前后的模块度,以获得模块度增益。

把节点i分配给节点j所在的社区c时模块度增益ΔQ定义为:

其中,k

①将图中的每个节点看成一个独立的社区,初始社区的数目与节点个数相同;

②对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化ΔQ,并记录ΔQ最大的那个邻居节点,如果maxΔQ>0,则把节点i分配ΔQ最大的那个邻居节点所在的社区,否则保持不变;

③重复②,直到所有节点的所属社区不再变化;

④对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边的权重转化为新节点间边的权重

⑤重复①直到整个图的模块度不再发生变化

通过以上方法,我们可以找到复杂网络中存在的软件生态系统,如图2所示。

(2)开源软件生态系统健康性多维度度量指标体系

实施方式:

本发明从生产力、稳定性、规模性以及结构性四个维度来评估软件生态系统的健康性,多维度度量指标体系如表1所示。

表1开源软件生态系统健康性多维度度量指标体系

生产力衡量了开源软件生态系统内部知识产生的速度和向外界输送知识的速度,一个健康的软件生态系统能够源源不断的产生新的知识;稳定性衡量了开源软件生态系统保持正常发展状态的能力,这包括两个方面,即抵抗不稳定因素的能力和受到不稳定因素影响后恢复到正常状态的能力;规模性衡量了开源软件生态系统的体量,通常规模性越大的软件生态系统健康性越高;结构性则反映了软件生态系统中项目之间的联系,衡量的是软件生态系统的内部自身结构。

(3)开源软件生态系统健康性度量方法

业界比较公认的软件生态系统健康性的定义为:“软件生态系统的健康性就是长期存在并具有不断增长的倾向”,为了将该定义定量化,本发明将定义两个时间变量T

T

T

T

将一个创建时间和最后一次活动发生时间之间间隔超过阈值T

现在根据这个定义,可以给所有的软件生态系统打上标签,即分为两类:C

通过训练神经网络,我们可以得到每个评价指标对于分类健康与不健康开源软件生态系统的影响程度,进而归一化影响程度,即得到每个指标的权重,进而得到每个开源软件生态系统的健康性得分。

我们针对开源软件生态系统在不同的发展阶段,可以训练出不同阶段的神经网络模型,进而得到不同阶段软件生态系统健康性评价指标的度量权重。从而展开对软件生态系统的检测与调控,帮助相关人员进行决策。

本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号