(12)发明专利申请
(10)申请公布号 CN 111241307 A(43)申请公布日 2020.06.05
(21)申请号 202010077130.0(22)申请日 2020.01.23
(71)申请人 复旦大学
地址 200433 上海市杨浦区邯郸路220号(72)发明人 陈碧欢 彭鑫 赵文耘
(74)专利代理机构 上海正旦专利代理有限公司
31200
代理人 陆飞 陆尤(51)Int.Cl.
G06F 16/36(2019.01)G06F 16/951(2019.01)G06F 8/36(2018.01)
权利要求书2页 说明书4页 附图1页
()发明名称
面向软件系统的软件项目及第三方库知识图谱构造方法(57)摘要
本发明属于软件工程技术领域,具体为面向软件生态系统的软件项目及第三方库知识图谱构造方法。本发明包括:通过爬取和解析软件项目的基本信息和版本发布通知获取软件项目和软件项目发布版本的基本知识;通过代码克隆检测分析获取不同软件项目的发布版本之间的代码克隆知识;通过爬取和解析软件项目的缺陷追踪系统获取软件项目发布版本中的缺陷与缺陷修复知识,并分析缺陷与第三方库API以及代码克隆的链接知识。本发明所构造的软件项目知识图谱包括软件项目、软件项目发布版本、缺陷与代码克隆之间的关系等;本发明所构造的面向软件生态系统的软件项目及第三方库知识图谱能够支持软件项目成熟度评估、第三方库更新推荐、冲突检测等智能化应用。
CN 111241307 ACN 111241307 A
权 利 要 求 书
1/2页
1. 面向软件生态系统的软件项目及第三方库知识图谱构造方法,其特征在于,具体步骤如下:(1)软件项目基本知识抽取
软件项目的基本知识包括编程语言、业务分类、标签、以及软件项目之间的派生关系;通过爬虫爬取项目托管网站或者第三方库仓库网站上的所有软件项目;针对每一个软件项目,通过网页包装器解析结构化的项目托管网站或者第三方库仓库网站页面,从中抽取软件项目的编程语言、标签、以及软件项目之间的派生关系,并通过主题模型从软件项目的基本描述中提取业务分类;(2)软件项目发布版本基本知识抽取
软件项目发布版本的基本知识包括新增功能特性、许可证、仓库来源、开发人员、以及发布版本之间的前后版本关系与第三方库依赖关系;其中,仓库来源适用于软件项目是第三方库的情况,开发人员通过仓库来源下载和使用第三方库发布版本;通过分析软件项目版本发布通知、代码提交历史、第三方库仓库网站页面、以及第三方库依赖声明文件获得软件项目发布版本的基本知识;(3)第三方库API知识抽取
软件项目往往调用第三方库API;而第三方库API随着第三方库发布版本而发生演化;通过静态分析第三方库发布版本与软件项目发布版本的源代码或者二进制包获取第三方库API相关的知识;(4)软件项目发布版本代码克隆知识抽取软件项目之间可能存在代码克隆的关系;通过代码克隆检测分析方法获取不同软件项目的发布版本之间的代码克隆知识、以及同一软件项目的不同发布版本之间的代码克隆演化关系;(5)软件项目发布版本缺陷知识抽取软件项目发布版本会修复缺陷,同时也会引入新的缺陷;通过分析软件项目缺陷追踪系统中的缺陷获取软件项目发布版本中的缺陷与缺陷修复知识,并分析缺陷与第三方库API以及代码克隆的链接知识。
2.根据权利要求1所述的面向软件生态系统的软件项目及第三方库知识图谱构建方法,其特征在于,步骤(2)中所述的软件项目发布版本基本知识抽取,具体包括以下子步骤:
1)遍历软件项目的所有发布版本,建立发布版本之间的前后版本关系;通过关键词匹配找到软件项目版本发布通知中的新增功能特性描述,并通过主题模型,提取软件项目发布版本中的新增功能特性;
2)遍历软件项目的所有发布版本,根据发布时间确定在软件项目发布版本发布之前、在上一个软件项目发布版本发布之后的代码提交历史片段,并分析其中的每一次代码提交的开发人员以及是否修改了许可证声明,从而确定软件项目发布版本的开发人员与许可证信息;此外,融合现有的许可证之间的冲突关系;
3)如果软件项目是第三方库,遍历第三方库仓库网站的所有第三方库发布版本,通过网页包装器解析结构化的第三方库仓库网站页面,抽取第三方库发布版本的仓库来源信息;
4)分析软件项目发布版本中的第三方库依赖声明文件,抽取软件项目发布版本所依赖
2
CN 111241307 A
权 利 要 求 书
2/2页
的第三方库发布版本。
3.根据权利要求1所述的面向软件生态系统的软件项目及第三方库知识图谱构建方法,其特征在于,步骤(3)中所述的第三方库API知识抽取,具体包括以下子步骤:
1)在软件项目是第三方库的情况下,通过静态分析方法分析第三方库发布版本的源代码或者二进制包,获取第三方库发布版本中所提供的第三方库API知识;
2)在软件项目是第三方库的情况下,通过代码差异分析方法分析相邻两个第三方库发布版本的第三方库API,确定第三方库发布版本中初次引入与弃用的第三方库API、取代弃用第三方库API的第三方库API、以及发生变化的第三方库API的前后版本关系,这些知识刻画了第三方库API的演化知识;
3)在软件项目是第三方库的情况下,通过程序调用图分析方法建立第三方库发布版本中第三方库API的调用图,抽取第三方库API之间的调用知识;
4)在软件项目不是第三方库的情况下,通过静态分析软件项目发布版本的源代码或者二进制包获取软件项目发布版本调用第三方库API的知识。
4.根据权利要求1所述的面向软件生态系统的软件项目及第三方库知识图谱构建方法,其特征在于,步骤(5)中所述的软件项目发布版本缺陷知识抽取,具体包括以下子步骤:
1)通过爬取和解析软件项目缺陷追踪系统中缺陷的结构化数据,获取每个缺陷所影响的软件项目发布版本;
2)在软件项目是第三方库的情况下,遍历软件项目的代码提交历史,找到包含缺陷的ID标识符以及“fix”关键字的代码提交,分析这次代码提交中的发生变化的第三方库API,建立缺陷影响第三方库API的关系;
3)遍历软件项目的代码提交历史,找到包含缺陷的ID标识符以及“fix”关键字的代码提交,分析这次代码提交中的发生变化的代码片段,并基于步骤(4)中的代码克隆知识建立代码克隆包含缺陷的关系。
3
CN 111241307 A
说 明 书
1/4页
面向软件系统的软件项目及第三方库知识图谱构造方法
技术领域
[0001]本发明属于软件工程技术领域,具体涉及一种面向软件生态系统的软件项目及第三方库知识图谱构造方法。
背景技术
[0002]开源社区以及企业内部众多的软件系统分属相关的业务领域或分类中,相互竞争、相互依赖,同时存在大量重复代码和相似功能,构成了复杂的软件生态系统。从这种软件生态系统中选择合适的项目以代码或第三方库等方式进行复用是提高软件开发效率和软件产品质量的一种重要手段。开发人员在决定是否要复用一个软件项目时,不仅需要考虑一个软件项目的度知识(例如,软件项目的业务分类、功能特性、许可证、缺陷等),而且需要考虑类似软件项目之间的关系(例如,软件项目之间的功能特性差异、派生关系、代码克隆等)。此外,在开发人员已经复用了一个软件项目之后(例如,通过第三方库依赖的方式、或者通过二次开发的方式),需要根据该软件项目的版本演化进行产品代码的协同演化。由此可见,面向软件生态系统的软件项目的复用决策和复用演化都需要大量的软件项目知识。然而,这些知识往往是多源异构的,导致开发人员难以全面地、有效地获得复用决策和复用演化的知识支持。
[0003]知识图谱将现实世界中的实体、以及实体之间的关联以图的形式进行表示,其中节点表示实体,而边表示实体之间的关联关系。知识图谱为知识的表示与理解提供了基础,从而支持上层的智能化应用。目前,知识图谱已经在搜索、金融、电商、医疗、安全等领域得到了广泛应用,例如,谷歌利用知识图谱提高搜索引擎的效果。发明内容
[0004]本发明的目的在于提供一种面向软件生态系统的软件项目及第三方库知识图谱构造方法,从而自动构建一个支持软件项目成熟度评估、自动分类与自动推荐、以及第三方库更新推荐、缺陷预警与冲突检测等智能化应用的软件项目及第三方库知识图谱。
[0005]本发明提供的面向软件生态系统的软件项目及第三方库知识图谱构造方法,包括,通过爬取和解析软件项目的基本信息和版本发布通知获取软件项目和软件项目发布版本的基本知识;在软件项目是第三方库的情况下,通过静态分析第三方库发布版本的源代码或者二进制包获取第三方库发布版本的API知识、API演化知识、以及API调用知识;在软件项目是非第三方库的情况下,通过静态分析软件项目发布版本的源代码或者二进制包获取软件项目发布版本调用第三方库API的知识;通过代码克隆检测分析获取不同软件项目的发布版本之间的代码克隆知识;通过爬取和解析软件项目的缺陷追踪系统获取软件项目发布版本中的缺陷与缺陷修复知识,并分析缺陷与第三方库API以及代码克隆的链接知识。具体步骤如下。[0006](1)软件项目基本知识抽取
软件项目的基本知识包括编程语言、业务分类、标签、以及软件项目之间的派生关系。
4
CN 111241307 A
说 明 书
2/4页
通过爬虫爬取项目托管网站或者第三方库仓库网站上的所有软件项目;针对每一个软件项目,通过网页包装器解析结构化的项目托管网站或者第三方库仓库网站页面,从中抽取软件项目的编程语言、标签、以及软件项目之间的派生关系,并通过主题模型从软件项目的基本描述中提取业务分类。[0007](2)软件项目发布版本基本知识抽取
软件项目发布版本的基本知识包括新增功能特性、许可证、仓库来源、开发人员、以及发布版本之间的前后版本关系与第三方库依赖关系。其中,仓库来源只适用于软件项目是第三方库的情况,开发人员通过仓库来源下载和使用第三方库发布版本。这一步通过分析软件项目版本发布通知、代码提交历史、第三方库仓库网站页面、以及第三方库依赖声明文件获得软件项目发布版本的基本知识;具体包括以下步骤:
1)遍历软件项目的所有发布版本,建立发布版本之间的前后版本关系;通过关键词匹配找到软件项目版本发布通知中的新增功能特性描述,并通过主题模型,提取软件项目发布版本中的新增功能特性;
2)遍历软件项目的所有发布版本,根据发布时间确定在软件项目发布版本发布之前、在上一个软件项目发布版本发布之后的代码提交历史片段,并分析其中的每一次代码提交的开发人员以及是否修改了许可证声明,从而确定软件项目发布版本的开发人员与许可证信息;此外,融合现有的许可证之间的冲突关系;
3)如果软件项目是第三方库,遍历第三方库仓库网站的所有第三方库发布版本,通过网页包装器解析结构化的第三方库仓库网站页面,抽取第三方库发布版本的仓库来源信息;
4)分析软件项目发布版本中的第三方库依赖声明文件,抽取软件项目发布版本所依赖的第三方库发布版本。[0008](3)第三方库API知识抽取
软件项目往往调用了第三方库API;而第三方库API随着第三方库发布版本而发生演化。这一步通过静态分析第三方库发布版本与软件项目发布版本的源代码或者二进制包获取第三方库API相关的知识;具体包括以下步骤:
1)在软件项目是第三方库的情况下,通过静态分析方法分析第三方库发布版本的源代码或者二进制包,获取第三方库发布版本中所提供的第三方库API知识;
2)在软件项目是第三方库的情况下,通过代码差异分析方法分析相邻两个第三方库发布版本的第三方库API,确定第三方库发布版本中初次引入与弃用的第三方库API、取代弃用第三方库API的第三方库API、以及发生变化的第三方库API的前后版本关系,这些知识刻画了第三方库API的演化知识;
3)在软件项目是第三方库的情况下,通过程序调用图分析方法建立第三方库发布版本中第三方库API的调用图,抽取第三方库API之间的调用知识;
4)在软件项目不是第三方库的情况下,通过静态分析软件项目发布版本的源代码或者二进制包获取软件项目发布版本调用第三方库API的知识。[0009](4)软件项目发布版本代码克隆知识抽取
软件项目之间可能存在代码克隆的关系;通过代码克隆检测分析方法获取不同软件项目的发布版本之间的代码克隆知识、以及同一软件项目的不同发布版本之间的代码克隆演
5
CN 111241307 A
说 明 书
3/4页
化关系。[0010](5)软件项目发布版本缺陷知识抽取
软件项目发布版本会修复缺陷,同时也会引入新的缺陷。这一步通过分析软件项目缺陷追踪系统中的缺陷获取软件项目发布版本中的缺陷与缺陷修复知识,并分析缺陷与第三方库API以及代码克隆的链接知识,具体包括以下步骤:
1)通过爬取和解析软件项目缺陷追踪系统中缺陷的结构化数据,获取每个缺陷所影响的软件项目发布版本;
2)在软件项目是第三方库的情况下,遍历软件项目的代码提交历史,找到包含缺陷的ID标识符以及“fix”关键字的代码提交,分析这次代码提交中的发生变化的第三方库API,建立缺陷影响第三方库API的关系;
3)遍历软件项目的代码提交历史,找到包含缺陷的ID标识符以及“fix”关键字的代码提交,分析这次代码提交中的发生变化的代码片段,并基于步骤(4)中的代码克隆知识建立代码克隆包含缺陷的关系。
[0011]本发明所构建的面向软件生态系统的软件项目及第三方库知识图谱,其高层结构如图1所示,包括软件项目、编程语言、业务分类、标签、软件项目发布版本、仓库来源、功能特性、许可证、开发人员、第三方库API、缺陷与代码克隆以及这些实体之间的关系。本发明基于软件项目托管网站、第三方库仓库网站、以及缺陷追踪系统的内容爬取与分析、以及软件项目代码提交分析与API分析自动化地构造面向软件生态系统的软件项目及第三方库知识图谱,从而支持软件项目成熟度评估、自动分类与自动推荐、以及第三方库更新推荐、缺陷预警与冲突检测等智能化应用。
附图说明
[0012]图1为本发明所构建的面向软件生态系统的软件项目及第三方库知识图谱的高层结构。
具体实施方式
[0013]以下针对GitHub Java开源项目以及Maven第三方库说明本发明的具体实施方式,其主要使用过程为:
(1)软件项目基本知识抽取。通过GitHub API抽取GitHub上面的Java开源项目列表,使用Python库Scrapy自动爬取每个Java开源项目的网页,然后利用Python库Beautiful Soup解析网页内容来抽取软件项目的基本知识;使用Python库Scrapy自动爬取Maven第三方库列表、以及每个第三方库的网页,然后利用Python库Beautiful Soup解析网页内容来抽取第三方库软件项目的基本知识;通过LDA主题模型抽取软件项目的业务分类;
(2)软件项目发布版本基本知识抽取。通过关键词(“Features”与“Improvements”)匹配找到软件项目版本发布通知中的新增功能特性描述,并使用LDA主题模型提取软件项目发布版本中的新增功能特性;使用差异分析确定软件项目发布版本是否修改了许可证,并使用许可证识别工具Ninka确定软件项目发布版本修改后的许可证;利用Python库Beautiful Soup解析网页内容来抽取第三方库软件项目的仓库来源信息;
(3)第三方库API知识抽取。通过静态分析工具Soot抽取第三方库发布版本的第三方库
6
CN 111241307 A
说 明 书
4/4页
API知识;通过基于哈希值的代码差异分析抽取第三方库API演化知识;通过静态分析工具Soot获得第三方库API的调用图并建立第三方库API的调用关系;通过Java Parser遍历软件项目版本版本源代码的抽象语法树并获得软件项目发布版本所调用的第三方库API;
(4)软件项目发布版本代码克隆知识抽取。使用克隆检测分析工具SAGA抽取不同软件项目的发布版本之间的代码克隆与同一软件项目的不同发布版本之间的代码克隆演化关系;
(5)软件项目发布版本缺陷知识抽取。使用Python库Scrapy自动爬取软件项目在Jira缺陷追踪系统中的每个缺陷的网页,然后利用Python库Beautiful Soup解析网页内容来抽取缺陷知识;遍历软件项目的代码提交历史,找到包含缺陷的ID标识符以及“fix”关键字的代码提交,分析代码提交中的发生变化的第三方库API以及代码片段,建立缺陷影响第三方库API的关系、以及代码克隆包含缺陷的关系。
[0014]通过该过程所构建的面向软件生态系统的软件项目及第三方库知识图谱包含了项目知识、第三方库知识、缺陷知识、代码克隆知识、以及不同知识之间的链接关系,为软件项目提供了丰富的语义知识。基于这种软件项目及第三方库知识图谱可以实现软件项目成熟度评估、自动分类与自动推荐、以及第三方库更新推荐、缺陷预警与冲突检测等智能化应用。
7
CN 111241307 A
说 明 书 附 图
图1
8
1/1页
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务