Page 88 - 《软件学报》2020年第10期
P. 88
3064 Journal of Software 软件学报 Vol.31, No.10, October 2020
2) 扩展补充信息
这一步骤基于第 1 步生成的基础图谱,分 3 个子步骤完成信息扩充.
(a) 从基础图谱中,遍历每个 Package 类型实体,提取上游(upstream)软件的主页地址;
(b) 访问每个上游软件的主页,抽取源码获取方式,即开源代码仓库地址,如 GitHub 中的仓库地址等;
(c) 访问上游代码仓库,抽取软件的历史版本信息,包括每个版本的版本号、累计提交信息(即自身演化历
史)、参与开发人员信息、版本特性、已知问题等,若个别信息不全,则需在上一步从主页中抽取补充.
正如第 2.2 节所述,知识图谱的重要特性之一即是具备动态性.对开源软件知识图谱而言,图 4 所描述的流
程可以理解为一次完整的更新过程,随着新“种子”的不断补充,图谱的“知识量”也会不断扩充,为整个开源软
件供应链的可靠性管理提供充分的数据支持,同时为未来工作打下坚实的基础,如提供智能化的操作系统自
主构建服务.
3.3 可靠性风险管理
如前文所述,本文关注的可靠性并非一般意义上单体软件的可靠性,而是在当前开源软件模式下,由于文
献[5]所描述的三大挑战而引入的开源软件生态可靠性风险.结合供应链风险管理的 4 个主要任务——即识别、
评估、处理和监控(我们认为在开源软件供应链风险管理中,识别和评估两个任务的界限较为模糊,故本文将其
合并为一个任务),我们在系统中设计并实现了相关的策略和功能,在实现可靠性风险管理的同时,在一定程度
上解决开源软件供应链面临的三大挑战.
3.3.1 识别和评估
为识别供应链中的可靠性风险,我们提出一种开源软件可靠性的度量模型,使系统能够量化地描述软件可
靠性,具体度量项及描述见表 1.在度量模型中,主要分为两大部分,即软件包本身及其所依赖的供应链,这一模型
也是为了直观地表述我们对现代软件构成的认识,即可靠性不仅依赖软件本身的一些指标,同时也与其复杂的
依赖项密切相关.在模型中,我们除了关注常规的度量项,如社区活跃度、开源协议等,还重点关注了开源软件的
地理属性,包括参与贡献人员、维护(或拥有)者的国籍分布,以及供应链中其他依赖项的国籍分布,这是为了能够
更直观地描述,由于政治因素而引入的潜在的可靠性风险.同时,我们还关注软件包的可替代性,显而易见,无法
被替代的软件包将成为整个供应链中较为脆弱的一环.
Table 1 Reliability metrics of open source software
表 1 开源软件可靠性度量
度量 描述
更新频率 软件提交更新的频率
活跃程度 问题响应速度 响应反馈问题或提议的速度
贡献者数量 参与贡献人员数量
贡献者地理分布 参与贡献人员所述国籍的分布
软件包分析
可替代性 可被类似功能软件包替换的程度
开源协议类型 所遵循的开源协议
性质 归属于组织或个人
归属
国籍 组织或个人的国籍
可靠性分布 供应链中软件包的可靠性分布
供应链分析 软件包地理分布 供应链中软件包所属国籍的分布
开源协议分布 供应链中遵守开源协议的分布
在本文提出的系统中,结合第 2.2.2 节中描述的本体设计可以看出,度量模型中的基础项,如软件包的归属、
所遵循的开源协议等,已经存在于开源图谱中,而其他进阶数据,如可替代性、各类分布等则需要基于基础数据
加工得到.最终,基于度量模型提供的数据,我们通过可靠性评分的形式,量化地描述任一软件的可靠性.据我们
所知,目前并没有相关公开的基准数据集.因此,为了保证我们的系统对开源软件可靠性评价的客观性和公正
性,在当前系统中,我们采用多种方法综合考量的方式得到最终可靠性评分,并基于该评分实现开源软件供应可
靠性风险的识别和评估.