OpenEuler的上游分析

数据爬取

我们爬取了官方20.03-LTS版本进行分析
OpenEuler的上游分析_第1张图片

数据处理

我们主要对primary.xml进行了分析处理,最终生成有向图G(V, E),其中一个软件包代表一个节点,一个依赖关系代表一条边。

在初始化有向图后,我们对得到的G主要进行了出度、入度、中心中介性、聚类分析四个方面的数据处理。

数据分析

现在依据这些数据,我们进行上游的分析,分析重点在于关注哪些节点是更重要的:

  1. 出度、入度

    我们容易发现,这里的出度-value、入度-value两幅图比较符合长尾分布,即如下图这般,极少数个体对应极高的值,而拥有极低值的个体,数量却占总体的绝大多数,形象地描述就是尾巴很长。
    OpenEuler的上游分析_第2张图片
    OpenEuler的上游分析_第3张图片

    这在分析中代表了什么?并不是所有的顶点高度连接,部分顶点可能只有一个或一个两条边,而其他的顶点可以是图的中心包含数百个边。

    当然这并不是说,出度、入度少的节点就不用关注,恰恰相反,其数量之多,代表了我们对这些度数较少的包也要给予一定的关注;而对于值很高的节点,我们更要赋予更多的注意,因为这些软件包是整个操作系统分发的枢纽,应该得到更多的关注。如入度多,证明有更多的依赖,一个地方就会影响很多地方,此时我们就应该关注这些影响我们性能的瓶颈;若出度多,则是依赖更多,这些节点就是脆弱的,我们要更加以防护。我们得到的入度、出度TOP10如下:
    OpenEuler的上游分析_第4张图片
    OpenEuler的上游分析_第5张图片

  2. 中介中心性

    中介中心性,用来表示点的中心性。点的中心性是一个量化点在网络中地位重要性的图论概念,当然,我们还可以使用更多的方法来进行分析中心性,如节点距离中心系数、节点度中心系数等等,在这里我们选择了中介中心性进行分析。

    中介中心性主要是测量一个点在多大程度上位于图中其他“点对”的“中间”。比如A->B->C,那么B就在点对(A,C)的中间。

    我们可以认为,如果一个节点S 处于多组点对中间,那么S 就可能起到重要的“中介”作用,因为太多路程都经过S ,因而可以认为节点S 处于网络的中心,中介中心性的思路就是如此。

    在我们此次的分析中,我们可以看到中介中心性数据图和排名:

OpenEuler的上游分析_第6张图片
OpenEuler的上游分析_第7张图片

从这里我们可以看到,结果和入度的分析是很相近的,比较中心的都是gccautomake python等一类工具,对此我们可以合理推断,在上游的软件中,这些是比较重要的节点,也是我们性能的限制。

  1. 聚类分析

    聚类系数代表了,这个节点和别的节点的联系程度,聚类系数越高,代表周围可能连通的节点数量就更多,对此,我们要将关注度更多的放在聚类系数较高的节点。分析得到的数据图和TOP10的数据表如下:

OpenEuler的上游分析_第8张图片
OpenEuler的上游分析_第9张图片

但事实上,我们可以看到聚类系数较大的是lib周围的一系列工具,所以对于聚类系数是否能够真实反映节点的重要性,我们还要进行进一步分析。

总结

本文提出对OpenEuler操作系统上游分析的图解方法。该有向图的方法展示了操作系统分布的全局视图,通过对出度入度、聚类系数和中间性中心性等性质进行了分析,得到了分布中具有重要枢纽包的数据分析图。该图的方法可以有效地理解整个依赖的分布,并可以帮助实现高质量的维护和有效的演化。

你可能感兴趣的:(开源软件,安全,数据分析)