开发者日志--基础代码

开发者日志-3 上游结构分析1

  • 首先从上游的包依赖构造上游的数据结构,此结构主要包括包名、版本,以及其依赖的包名,为每一个包创建一个节点,根据依赖关系为每个节点添加其父亲(被依赖的)和孩子(自己依赖的)。
    在这里插入图片描述

  • 该结构是混乱的(例如上图A1和AAA相互依赖),有些节点处于循环之中,因此不适合用树结构来模拟,可以套用到图结构中。
    代码如下

for p in packages:
    name = p.getElementsByTagName('name')[0]
    name = name.childNodes[0].data
    ver = p.getElementsByTagName('version')[0]
    ver = ver.getAttribute('ver')
    if find(nodeList, name, ver) is not None:
        # print(name.childNodes[0].data)
        ne = find(nodeList, name, ver)
    else:
        ne = Node(name, ver)    
        nodeList.append(ne)
    rpm_list = p.getElementsByTagName('rpm:entry')
    for rpm in rpm_list:    
        if rpm.getAttribute('name') == ne.name:
            continue
        if rpm.getAttribute('ver') != '':
            ver = rpm.getAttribute('ver')
        else:
            ver = 'no'
        nodeReq = find(nodeList, rpm.getAttribute('name'), ver)
        if nodeReq is not None:
            nodeReq.haschildren = True
            nodeReq.children.append(ne)
        else:
            nodeReq = Node(rpm.getAttribute('name'), ver)
            nodeReq.haschildren = True
            nodeReq.children.append(ne)
            nodeList.append(nodeReq)
        ne.addReq(nodeReq)

开发者日志-4 上游结构分析2

  • 该部分先使用python的network.DiGraph()来表示其结构。代码主要从出度、入度、介中心系数、聚类系数四个方面来分析。

    • 出度、入度
      直接统计每个节点parent和children的长度即可,该分析不依赖与图结构,可直接分析统计,并做图。
    • 介中心系数
      直接调用nx.degree_centrality(self.g)来分析每个节点的重要性,计算后统计并做图。
    • 聚类分析
      直接调用nx.clustering(self.g)来分析,对每个节点的结果,统计并作图。

参考论文:

[1]A_graph_method_of_package_dependency_analysis_on_Linux_Operating_system

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值