Page 86 - 《软件学报》2020年第10期
P. 86

3062                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

             •  实体图(entity graph):系统的核心数据结构——以实体图的形式维护所有数据信息,实体种类除了开源
         软件外,还包括人员、公司(或组织)等多种其他类型,实体间的关系也丰富多样,包括供应、开发、维护、从属等,
         以直观的形式建模整个开源世界的供应关系,本文将在第 3.2 节详细介绍这部分内容;
             •  控制器(controller):负责协调和分发后台任务,包括数据分析和状态监控;
             •  分析器(analyzer):以插件的形式实现,负责执行指定的分析任务,如软件可靠性分析等;
             •  事件通知器(notifier):以插件的形式实现,负责当系统生成事件时(如监控发现异常或者存在潜在风险),
         发送通知至指定的位置.
         3.2    数据管理
             本节重点介绍开源软件供应链系统的数据管理实现.如前文所述,系统以实体图的形式组织和维护供应链
         相关信息,相比于其他数据组织形式,实体图能够更加直观地反映实体间的关系,蕴含更加丰富的语义信息,便
         于理解数据本身并推导出新的事实.随着数据体量的不断增大和数据内容的不断丰富,最终目标是将其建设成
         为一个关于开源软件供应链的知识图谱.
         3.2.1    本体设计
             本体设计是知识图谱构建的首要步骤,在该步骤中,我们需要抽象定义图谱中所包含的实体类型,并梳理它
         们之间的关系,最终以图的形式将它们组织起来.为了限制知识图谱的规模和复杂性,在本文中,我们限定知识
         图谱在开源软件领域.如图 3 所示,当前我们共定义了五大实体类型.




























                          Fig.3    The ontology design of knowledge graph of open source software
                                       图 3   开源软件知识图谱本体设计

             •  软件(software):软件是开源软件图谱的核心实体类型,根据开源软件的协作模式,我们进一步分为包
         (package)和操作系统(OS)两个实体子类型,和软件实体类型是“isA”的关系,其中,包是软件中最小粒度的实体,
         而操作系统是由多个包组装而成的,因此它们之间存在“hasComponent”的关系,而包之间的供应关系通过
         “hasSupplier”来描述,包自身的演化关系通过“hasPreversion”来描述;
             •  开源协议(license):该实体类型描述某一种具体的开源协议,软件必须“obey”一种或多种开源协议,它限
         制了开源软件的使用方式,对开源软件的可用性存在潜在的影响,因而使得开源软件供应链存在潜在的可靠性
         风险;
   81   82   83   84   85   86   87   88   89   90   91