CN110134613A - 一种基于代码语义及背景信息的软件缺陷数据采集系统 - Google Patents
一种基于代码语义及背景信息的软件缺陷数据采集系统 Download PDFInfo
- Publication number
- CN110134613A CN110134613A CN201910429108.5A CN201910429108A CN110134613A CN 110134613 A CN110134613 A CN 110134613A CN 201910429108 A CN201910429108 A CN 201910429108A CN 110134613 A CN110134613 A CN 110134613A
- Authority
- CN
- China
- Prior art keywords
- data
- defect
- software
- project
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Quality & Reliability (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Medical Informatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于代码语义及背景信息的软件缺陷数据采集系统。所述软件缺陷数据采集系统包括数据分析模块、数据采集模块、数据处理模块和数据库模块;利用GitHub网站的合并请求工作流作为标记索引,实现了既包括软件缺陷代码,又包含软件缺陷背景信息的软件缺陷数据的采集,解决了大部分软件缺陷数据采集方法存在的数据量少,数据来源不足,缺乏背景信息,数据标记准确度差,类不平衡问题严重的缺陷。
Description
技术领域
本发明涉及软件缺陷预测及软件可靠性技术领域,特别是涉及一种基于代码语义及背景信息的软件缺陷数据采集系统。
背景技术
21世纪以来,软件在社会生活中的地位日益提升,无处不在,已经不仅仅局限于工程、科研、经济等专业领域,更是走进了千家百户,成为了人们生活中举足轻重的工具。随着软件系统规模日益增加,复杂程度呈几何式提升,软件的缺陷也与日俱增,而软件缺陷导致的影响也辐射到了人民生活的方方面面。
软件缺陷数据是软件可靠性相关研究和应用的基础。长期以来,软件可靠性领域使用的缺陷数据主要来自于有限的软件测试数据和使用中故障的分析数据。虽然这类缺陷数据相对完整,但是缺陷数据量太少、覆盖面不足、涉及软件类型有限,已经成为了软件可靠性研究和应用的瓶颈。互联网的出现,使我们进入了大数据的时代,目前最大的开源项目网站GitHub.com已经拥有了数千万个开源软件项目,GitHub的发展使我们利用互联网获得海量的软件缺陷数据成为了可能。但是GitHub并非为软件缺陷采集而设立,其设立的主要目的还是为了实现开源软件的协同开发和共享,因此直接从中获得有价值的缺陷信息并非易事,主要面临着缺陷信息不完整、描述不规范、缺陷代码不突出、开发分支过多、开发代码和缺陷修改代码混杂等多种不利因素。
在软件的全寿命周期当中,如何提高软件的质量,对软件的缺陷进行识别和修复已经成为一个重要的研究命题。由于相当一部分的软件缺陷有其独有特征,根据历史缺陷信息,可以提取出相应的软件缺陷代码特征及其相关的上下文环境特征,在出现软件失效之前尽早地识别软件可能存在的影响其可靠性、安全性、可用性、兼容性等软件质量特性的缺陷模块,从而达到缺陷预测和预防的效果。在当前的软件缺陷预测应用之中,主要是项目内缺陷预测,在缺陷数据数量、质量上存在较大不足。因此,中美等国家都纷纷开展了跨项目软件缺陷预测的项目,然而目前的公开数据集内的缺陷数据较少,且项目特征重复性很高,软件缺陷预测对大数据的要求日益强烈。
随着机器学习技术和深度学习技术的出现和不断推进,软件缺陷预测技术从一开始的人工学习为主逐步转向以机器学习作为重要工具。由于学习能力和数据处理能力的大幅度提高,学习更加庞大的软件缺陷数据集,从而利用机器学习中的关联规则、分类器算法、聚类算法等对软件的缺陷特征进行分析和预测成为了主流趋势。随着深度学习对非结构数据的学习能力提高,传统抽象的度量元预测方法已经不能满足应用要求,结合语义的软件缺陷预测成为当前研究的重要方向,然而无论是基于抽象语法树的预测模型还是其他相关模型,都需要一个较大的结合缺陷代码、缺陷背景信息等数据的数据集作为支持,目前尚未有高效采集建立这样的数据集的方法。
GitHub作为通过Git进行版本控制的软件源代码托管服务,成为了全球最大的开源软件托管平台,其中包含了大量的软件缺陷信息及其修复数据,使采集软件缺陷大数据,建立软件缺陷数据集成为可能。目前尝试从GitHub上采集软件数据用作缺陷预测的数据集采集方法有两种:第一种是下载大量软件源代码,通过基于规则的静态分析工具对软件源代码进行缺陷标记;第二种是选择使用了Apache(Web服务器软件)等缺陷追踪门户(bugtracking portals)的项目作为采集目标,将软件源代码和缺陷报告结合。第一种方法的缺陷在于基于规则的静态分析工具难以标记代码语义缺陷导致的软件缺陷,同时也丧失了软件缺陷所在模块的功能等重要的背景信息;第二种方法的缺陷在于绝大部分软件,尤其是开发组规模较小的软件都未使用专门的缺陷追踪门户来管理开发,能够满足采集需求的目标软件数量十分少。同时,由于软件存在“二八定律”,即80%的软件缺陷仅集中在20%特定的软件模块当中,这两类方法构建的数据集都难以避免严重的类不平衡问题。目前,尚未有一种能够采集包含软件缺陷代码和背景信息的软件缺陷数据以建立一个无类不平衡问题的软件缺陷数据集的方法或系统。
发明内容
本发明的目的是提供一种基于代码语义及背景信息的软件缺陷数据采集系统,以解决目前软件缺陷数据集数据量少、特征重复性高、类不平衡问题严重、缺乏软件语义信息相关特征、缺乏软件功能信息和缺陷具体信息的问题,以及当前软件缺陷数据集获取效率慢、标记精确度低、人力成本和时间成本高导致的难以及时采集满足当前基于代码语义的深度学习软件缺陷预测的缺陷数据的问题。
为实现上述目的,本发明提供了如下方案:
一种基于代码语义及背景信息的软件缺陷数据采集系统,所述软件缺陷数据采集系统包括数据分析模块、数据采集模块、数据处理模块和数据库模块;
所述数据分析模块获取GitHub网站和本地软件git仓库中的软件数据,并对所述软件数据进行分类,生成多种数据类型;
所述数据分析模块根据数据使用需求确定软件缺陷数据的采集规则,并将所述数据类型和所述采集规则保存为配置文件并输出到所述数据采集模块;
所述数据采集模块从所述GitHub网站获取采集任务表及合并请求列表,并将所述采集任务表及所述合并请求列表发送至所述数据库模块进行存储;
所述数据采集模块根据所述配置文件采集所述采集任务表中未完成的任务目标项目的项目信息,生成软件项目信息表;
所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表并存储至所述数据库模块中;
所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表;
所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行处理,生成软件缺陷数据集。
可选的,所述数据分析模块获取GitHub网站和本地软件git仓库中的软件数据,并对所述软件数据进行分类,生成多种数据类型,具体包括:
所述数据分析模块查阅所述GitHub网站的说明文档确定远程库中可获取的数据范围,查阅所述本地软件git仓库的说明文档确定本地库中可获取的数据范围;
根据所述远程库中可获取的数据范围及所述本地库中可获取的数据范围分别获取所述GitHub网站及所述本地软件git仓库中的软件数据;
对所述软件数据进行分类,生成多种数据类型;所述数据类型包括软件缺陷相关数据、可能相关软件数据和软件缺陷无关数据。
可选的,所述数据分析模块根据数据使用需求确定软件缺陷数据的采集规则,具体包括:
所述数据分析模块根据编程语言与对应代码文件类型建立数据库表;所述数据库表中包含编程语言名称、简称、对应代码文件的后缀、编程语言描述;
所述数据分析模块获取使用者设定的使用需求;
所述数据分析模块根据所述数据库表及所述使用需求确定软件缺陷数据的采集规则;所述采集规则包括缺陷所在的文件数量、是否包含测试模块缺陷、是否包含非代码文件引起的缺陷以及是否制定缺陷关键字。
可选的,所述数据采集模块从所述GitHub网站获取采集任务表及合并请求列表,具体包括:
所述数据采集模块通过所述GitHub网站提供的API接口从所述GitHub网站获取采集任务表;所述采集任务表中包括项目名称、项目所有者名称、是否已经完成远程库数据采集任务、是否已经完成本地库数据采集任务、数据采集任务是否已完成;
所述数据采集模块通过所述GitHub网站提供的API接口从所述GitHub网站获取合并请求列表;所述合并请求列表中包括标题和标签。
可选的,所述数据采集模块根据所述配置文件采集所述采集任务表中未完成的任务目标项目的项目信息,生成软件项目信息表,具体包括:
所述数据采集模块根据所述配置文件从所述GitHub网站获取所述采集任务表中未完成的任务目标项目的项目信息,根据所述项目信息生成软件项目信息表;所述软件项目信息表中包括缺陷所在软件的背景信息,所述背景信息包括项目名称、项目所有者、项目编程语言、项目Git地址、项目规模、项目描述、项目标签、项目本地库地址。
可选的,所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表存储至所述数据库模块中,具体包括:
判断所述合并请求的标题和标签内是否含有缺陷相关的关键字,获得第一判断结果;
若所述第一判断结果为所述合并请求的标题和标签内含有缺陷相关的关键字,根据所述合并请求的标题、标签及相关版本ID生成缺陷信息表并存储至所述数据库模块中;所述相关版本ID包括缺陷修复前版本ID、缺陷修复后版本ID和合并后版本ID。
可选的,在所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表存储至所述数据库模块之后,还包括:
所述数据库模块将所述采集任务表中的是否已经完成远程库数据采集任务一项的标记变更为已完成。
可选的,所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表,具体包括:
所述数据采集模块根据所述缺陷信息表中的相关版本ID,从所述本地软件git仓库中提取修复缺陷前版本ID对应的修复缺陷前版本文件、缺陷修复后版本ID对应的缺陷修复后版本文件以及合并后版本ID对应的修复分支和主分支合并后版本文件;
根据所述修复缺陷前版本文件、所述缺陷修复后版本文件以及所述修复分支和主分支合并后版本文件生成缺陷数据表。
可选的,在所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表之后,还包括:
所述数据库模块将所述采集任务表中的是否已经完成本地库数据采集任务一项的标记变更为已完成。
可选的,所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行处理,生成软件缺陷数据集,具体包括:
所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行软件缺陷代码处理和软件缺陷背景信息处理,生成含缺陷数据和非缺陷数据;所述含缺陷数据和所述非缺陷数据构成所述软件缺陷数据集。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明提供一种基于代码语义及背景信息的软件缺陷数据采集系统,利用GitHub网站的合并请求工作流作为标记索引,实现了既包括软件缺陷代码,又包含软件缺陷背景信息的软件缺陷数据的采集,解决了大部分软件缺陷数据采集方法存在的数据量少,数据来源不足,缺乏背景信息,数据标记准确度差,类不平衡问题严重的缺陷。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据本发明提供的附图获得其他的附图。
图1为本发明提供的基于代码语义及背景信息的软件缺陷数据采集系统的整体架构图;
图2为本发明提供的基于代码语义及背景信息的软件缺陷数据采集系统的基本原理图;
图3为本发明提供的数据分析模块对软件缺陷数据类型进行分析和分类的过程示意图;
图4为本发明提供的数据采集模块进行远程库数据采集的过程示意图;
图5为本发明提供的数据采集模块进行本地库数据采集的过程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对目前软件缺陷数据集数据量少,特征重复性高,类不平衡问题严重,缺乏软件语义信息相关特征,缺乏软件功能信息和缺陷具体信息等问题,以及当前软件缺陷数据集获取效率慢,标记精确度低,人力成本和时间成本高导致的难以及时采集满足当前基于代码语义的深度学习软件缺陷预测的缺陷数据的问题,本发明提出一种基于代码语义及背景信息的软件缺陷数据采集系统,所述软件缺陷数据采集系统面向GitHub等开源软件托管平台,能够解决目前大部分软件缺陷数据采集方法存在的上述问题。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明提出一种面向GitHub等开源软件托管平台的基于代码语义及背景信息的软件缺陷数据采集系统。GitHub网站作为开源托管平台,保存有大量的软件源代码和开发日志、软件缺陷信息等数据。从该开源托管平台中获取与缺陷可能相关的信息数据,与缺陷代码等在做进一步处理后结合起来,组成软件缺陷数据集,为基于软件代码的软件缺陷预测、软件缺陷分析等技术提供大数据支持。
图1为本发明提供的基于代码语义及背景信息的软件缺陷数据采集系统的整体架构图。如图1所示,所述软件缺陷数据采集系统主要包括数据分析模块1、数据采集模块2、数据处理模块3和数据库模块4。其中,所述数据分析模块1的主要功能为根据人工设定的参数对数据进行分类,确定所需的数据类型和采集规则、以及要采集的任务目标项目。所述数据采集模块2的主要功能为在GitHub网站(本发明简称远程库)和本地软件git仓库(本发明简称本地库)中采集软件缺陷数据,主要分为远程库软件信息采集、远程库缺陷信息采集和本地库缺陷数据采集三部分。所述数据处理模块3的主要功能为对采集模块2中采集到的数据进行进一步处理,主要包括缺陷代码定位提取和缺陷背景信息主题词提取。所述数据库模块4的主要功能为储存、查询和修改软件缺陷数据。
图2为本发明提供的基于代码语义及背景信息的软件缺陷数据采集系统的基本原理图。参见图1和图2,本发明所述基于代码语义及背景信息的软件缺陷数据采集系统的工作过程包括:
第一步:所述数据分析模块获取GitHub网站和本地软件git仓库中的软件数据,并对所述软件数据进行分类,生成多种数据类型。
本发明软件缺陷数据采集系统可以采集的软件缺陷数据根据其数据来源分为两大部分:一部分是通过GitHub平台(即GitHub网站)提供的API接口获取的远程库数据,另一部分是通过本地git项目仓库获取的本地库数据。远程库数据既包含了项目信息,又包含了工程师和用户对软件缺陷的描述信息等文本信息,但是囿于平台限制和网路速度限制,获取速度较慢,且网络访问异常的情况时有发生,适合采集仅可在远程库获取的数据和数据容量较小的数据。本地库数据以各版本项目完整代码和少量版本描述为主,虽然缺陷信息不全面,但是处理速度极快,在获取缺陷代码和项目文件时较之于远程库获取有较大的效率优势和更好的稳定性。
图3为本发明提供的数据分析模块对软件缺陷数据类型进行分析和分类的过程示意图。参见图3,在对软件缺陷数据类型进行分析和分类的过程中,所述数据分析模块1首先查阅GitHub API v4的说明文档(GitHub API v4是GitHub.com提供的信息查询和git仓库操作接口,通常用于读取托管的git仓库的信息并对其进行更新、修改等操作),确定远程库中可获取的数据范围;并查阅git本地库的说明文档确定本地库中可获取的数据范围。然后根据所述远程库中可获取的数据范围及所述本地库中可获取的数据范围分别获取所述GitHub网站及所述本地软件git仓库中的软件数据。接下来由使用者根据使用需求对从远程库和本地库中获取的软件数据进行分类,将它们分类为与软件缺陷明确相关且具有共性可迁移学习的软件缺陷相关数据、与软件缺陷显然无关的或者具有高度个性无法迁移学习的软件缺陷无关数据、可能与软件缺陷有关的可能相关软件数据,以及可用作定位采集价值较高的开源项目的搜索相关数据。
查阅GitHub API v4的说明文档和git说明文档,对所述软件缺陷相关数据及所述可能相关软件数据继续进行分类,将从GitHub网站上采集的项目总体数据归类为远程项目数据(Remote Software Data)、从本地库中采集的项目总体数据归类为本地项目数据(Local Software Data)、从GitHub网站上采集的具体缺陷数据归类为远程缺陷信息(Remote PullRequest Data)、从本地库中采集的缺陷具体数据归类为本地缺陷代码(Local Commit Data);并可以进一步分类为学习相关数据、筛选相关数据、系统实现相关数据及搜索相关数据,构成软件缺陷数据组,存储于所述数据库模块4中。
其中,所述学习相关数据主要是用于训练学习模型的源数据,该类数据包含了缺陷代码及其相关信息;所述学习相关数据主要包括项目描述(repoName)、项目标签(repoLabel)、项目编程语言、项目合并请求(GHPullRequest)、项目符合获取规则的commit总数(COMMIT_NUM)、合并请求标题(Pull Request Title)、合并请求主体(Pull RequestBody)、合并请求标签(Pull Request Labels)、缺陷修复前代码(newContent)、缺陷修复后代码(oldContent)、代码差异(diff)、修复前文件路径(oldPath)、修复后文件路径(newPath)、修复用commit提交信息(FullMessage)等数据。现将各所述学习相关数据的数据名称及数据类型、数据来源、数据描述和数据分析描述如下:
1.1数据名称:项目描述(repoName)、项目标签(repoLabel)
数据类型:字符串(String)
数据来源:远程库——GHRepository(GHRepository是开源Java依赖库github-api中的项目仓库管理工具)
数据描述:由项目开发人员赋予的,关于项目的功能、作用、所含模块、使用框架等信息的描述信息及其关键信息的标签。
数据分析:与软件缺陷和软件功能有直接联系,功能接近的软件的相似模块更有可能共享相同的缺陷;可以使用自然语言处理等方式提取项目功能等信息作为缺陷数据的项目背景信息。
1.2数据名称:项目编程语言
数据类型:字符串(String)
数据来源:远程库——GHRepository
数据描述:该项目所使用的编程语言,如Java,Python等;若该项目使用了多种编程语言,则GitHub会智能分析使用最多的语言作为该值输出。
数据分析:由于各种编程语言在语法、语义、编译方式、内存控制等方面都有着较大的区别,而这些区别和软件缺陷息息相关,因此项目编程语言是重要的软件数据。
1.3数据名称:项目合并请求(GHPullRequest)
数据类型:依赖库自定义类(GHPullRequest)
数据来源:远程库——GHRepository
数据描述:项目的合并请求;该项数据一般是由开发人员提出的合并请求,在使用分支工作流的开发模式进行开发时,当用户/开发人员发现软件中的缺陷,开发人员为对缺陷进行修复,会建立一个分支,在分支中完成缺陷修复后再通过提出合并请求PullRequest,请求项目管理者将修复分支与主分支进行合并(见图2)。
数据分析:该项数据里包含了开发人员对软件缺陷的描述,修复方式以及修复前、后版本的ID等信息。根据该数据可以提取缺陷的具体信息并根据版本ID到本地库中获取对应版本的代码。
1.4数据名称:项目符合获取规则的commit总数(COMMIT_NUM)
数据类型:整数(int)
数据来源:本地库采集过程中统计
数据描述:在设定采集的规则下,采集到的该项目的符合规则的commit总数。
数据分析:能描述项目整体缺陷情况;同时可以简单显示该项目可供学习的数据数量;对于数据量较少的项目,可以考虑排除以减少噪声。
1.5数据名称:Pull Request标题(Title)
数据类型:字符串(String)
数据来源:远程库——GHPullRequest(项目合并请求)
数据描述:开发人员提出的合并请求的标题,提示该合并请求的内容。
数据分析:对于修复缺陷类的合并请求,该数据往往是对该合并请求所修复的缺陷的简要描述,可以使用自然语言处理等方式提取缺陷描述信息作为缺陷数据的背景信息。
1.6数据名称:PullRequest主体(Body)
数据类型:字符串(String)
数据来源:远程库——GHPullRequest
数据描述:开发人员提出的合并请求的文本主体,详细描述该合并请求的内容。
数据分析:对于修复缺陷类的合并请求,该数据往往是对该合并请求所修复的缺陷及其修复方式作详细描述,是缺陷信息主要获取来源,可以使用自然语言处理等方式提取缺陷描述信息作为缺陷数据的背景信息。同时,根据关键词,也可以作为判断该合并请求是否用于修复缺陷的筛选相关数据。
1.7数据名称:Pull Request标签(Labels)
数据类型:字符串(String)
数据来源:远程库——GHPullRequest
数据描述:开发人员对提出的合并请求进行的标记。
数据分析:该数据往往简要表明了该合并请求的类型、重要程度、相关模块等信息,可以使用自然语言处理等方式提取缺陷描述信息作为缺陷数据的背景信息。同时,根据关键词,也可以作为判断该合并请求是否用于修复缺陷的筛选相关数据。
1.8数据名称:缺陷修复前代码(newContent)
数据类型:字符串(String)
数据来源:本地库——ObjectLoader(ObjectLoader是Java开源依赖库jgit中的对象读取工具)
数据描述:为修复该缺陷所修改的文件在修改前的版本的源代码。
数据分析:该数据提供了以文件为粒度的缺陷代码,结合代码差异可以提取缺陷代码和其上下文语境。将其通过抽象语法树处理等方法可以结构化为可供深度学习作为训练数据中的重要缺陷数据。
1.9数据名称:缺陷修复后代码(oldContent)
数据类型:字符串(String)
数据来源:本地库——ObjectLoader
数据描述:为修复该缺陷所修改的文件在修改后的版本的源代码。
数据分析:该数据提供了该缺陷的修复后代码,提供了修复方式,将其通过抽象语法树处理等方法可以结构化为可供深度学习作为训练数据中的重要无缺陷数据。同时通过将修复前后源代码进行对比可以得到代码差异。
1.10数据名称:代码差异(diff)
数据类型:字符串(String)
数据来源:本地库——DiffCommand(DiffCommand是Java开源依赖库jgit中的抽象语法树比对工具之一)
数据描述:两个版本间的代码差异,在本发明中是由缺陷修复前版本和修复后版本对比获得的代码差异,即代表了为修复该缺陷所修改的代码。
数据分析:该代码差异数据将缺陷代码定位到具体修复的代码行,将缺陷代码粒度缩小到最低可到达代码行;根据学习模型的粒度,也可以将其作为定位缺陷所在方法或所在模块等的标志数据,为将以文件为粒度的缺陷源代码或其抽象语法树裁剪为粒度更小的缺陷代码抽象语法树提供依据和标识。
1.11数据名称:修复前文件路径(oldPath)、修复后文件路径(newPath)
数据类型:字符串(String)
数据来源:本地库——DiffCommand
数据描述:两个版本间修改的文件的路径;在本发明中是为修复缺陷所修改的文件路径
数据分析:该文件路径数据在本发明中体现了为修复该缺陷作了哪些文件粒度上的修改(如增加、删除、修改文件),具体修改了什么文件;根据该数据可以确定缺陷大致类型;以Java项目为例,可以分类该缺陷是由于代码导致的缺陷(修改了.java文件)、由于配置导致的缺陷(修改了.xml等配置文件)、混合缺陷(修改了多种文件)等,也可确定修改的各类文件数量,确定缺陷跨度。
1.12数据名称:修复用commit提交信息(FullMessage)
数据类型:字符串(String)
数据来源:RevCommit(RevCommit是Java开源依赖库jgit中的版本信息读取工具)
数据描述:有良好开发习惯的开发者在提交时会在提交信息中描述该提交信息的内容。
数据分析:该提交信息数据中可能包含缺陷的相关信息和修复方法,可以考虑使用自然语言处理等方式提取缺陷描述信息作为缺陷数据的背景信息的一部分。
所述筛选相关数据主要用于筛选Pull Request中和缺陷修复相关的合并请求,其中,Pull Request标题(Title)、Pull Request标签(Labels)已经在学习相关数据中进行分析;除标题和标签外,所述筛选相关数据还包括合并请求是否已合并(merged)、合并请求状态(state)数据,具体介绍如下:
2.1数据名称:合并请求是否已合并(merged)、合并请求状态(state)
数据类型:布尔量(boolean)、字符串(String)
数据来源:GHPullRequest
数据描述:均是合并请求的状态变量,代表了申请合并的版本是否已被合并到主分支,合并请求是否已被关闭。
数据分析:已被关闭并合并代表该缺陷已被开发组发现并修复,其缺陷信息和缺陷代码比较明确,适合进行采集,可以作为数据采集规则之一。
所述系统实现相关数据主要用于实现采集缺陷数据过程重大的某些功能,包括所有者(owner)、项目全称(full_name)、git地址(git_url)、文件(File)、分支源版本ID(base_sha)、要合并的版本ID(head_sha)、合并后版本ID、抽象语法树(tree)、父版本(parent)等数据。各系统实现相关数据的数据名称、数据类型、数据来源、数据描述及数据分析介绍如下:
3.1数据名称:所有者(owner)、项目全称(full_name)、git地址(git_url)
数据类型:字符串(String)
数据来源:设定值
数据描述:顾名思义,是某一个项目的所有者信息、项目名称和其git地址。
数据分析:这三个值是用户定位想要获取的开源项目的定位参数,是本发明软件缺陷数据采集系统的输入。
3.2数据名称:文件(File)
数据类型:文件(File)
数据来源:本地库——Repository(Repository是Java开源依赖库jgit中的git仓库操作工具)
数据描述:Java的jgit依赖库的数据类型,用于处理文件。其中jgit是一个java代码提交git的插件,可以通过代码连接git远程仓库,在本地建立版本库,进行拉取、提交、推送等操作。
数据分析:在实现本地库操作中,要使用该数据进行处理。
3.3数据名称:分支源版本ID(base_sha)、要合并的版本ID(head_sha)、合并后版本ID(merge_commit_sha)
数据类型:字符串(String)
数据来源:远程库——GHPullRequest
数据描述:各版本commit的ID。
数据分析:用于在本地库中寻找对应的commit,获取其具体内容,如源代码等、代码树等。
3.4数据名称:抽象语法树(tree)
数据类型:jgit依赖库中的抽象语法树类(RevTree)
数据来源:本地库——RevCommit
数据描述:这是jgit提供的抽象语法树类,也可以用于比较获取代码差异等数据。
数据分析:在获取缺陷代码、代码差异等代码相关的缺陷数据时,会使用到该数据。一方面,该数据可以直接用作基于抽象语法树的源代码同源比较缺陷预测,另一方面也可以获取代码的实际内容,方便存储到数据库中等待为其他基于源代码的缺陷预测模型进行进一步处理。
3.5数据名称:父版本(parent)
数据类型:jgit依赖库中的commit类(RevCommit)
数据来源:本地库——RevCommit
数据描述:某制定commit的父版本。
数据分析:用于在源版本ID无法在本地库找到对应commit时,通过回溯修复后版本的父版本作为源版本commit。
第二步:所述数据分析模块根据数据使用需求确定软件缺陷数据的采集规则,并将所述数据类型和所述采集规则保存为配置文件并输出到所述数据采集模块。
所述数据分析模块1首先建立一个各种编程语言与对应代码文件类型的数据库表Tlanguage,其中包含编程语言名称、简称、对应代码文件的后缀、编程语言描述。然后根据数据使用需求确定要采集的软件的编程语言,并由此确定采集的文件类型。其次根据数据使用需求确定数据的具体采集规则,包括缺陷所在的文件数量(即是否跨模块缺陷,跨模块数量)、是否包含测试模块缺陷、是否包含配置文件等非代码文件引起的缺陷以及是否制定缺陷关键字。将第一步确定的数据类型和第二步确定的采集规则以配置文件形式保存下来并输出到所述数据采集模块2。
第三步:所述数据采集模块从所述GitHub网站获取采集任务表及合并请求列表,并将所述采集任务表及所述合并请求列表发送至所述数据库模块进行存储。
所述数据采集模块2首先通过GitHub提供的API接口向GitHub请求获取一个根据项目fork(复制该项目仓库)人数进行排列的由第二步制定的编程语言的开源软件名称和所有者列表,将其批量发送到数据库模块4,存储到数据库的采集任务表Tmission中作为下一步操作的采集目标。其中,Tmission表中包含以下属性:项目名称、项目所有者名称、是否已经完成该软件远程库数据采集任务、是否已经完成该软件本地库数据采集任务、该软件数据采集任务是否已完成。
此外,所述数据采集模块2通过所述GitHub网站提供的API接口从所述GitHub网站获取合并请求列表;所述合并请求列表中包括合并请求标题、合并请求标签、合并请求主体等数据。
第四步:所述数据采集模块根据所述配置文件采集所述采集任务表中未完成的任务目标项目的项目信息,生成软件项目信息表。
所述数据采集模块2首先读取第二步输出的配置文件和第三步存储到数据库Tmission表中的未完成的任务列表,数据采集模块2按顺序对未完成的任务列表中的未完成的任务目标项目开始数据采集任务。首先使用Java开源依赖库github-api(该依赖库主要是对GitHub.com提供的接口操作进行整合的工具)中的GHRepository(仓库操作)工具访问GitHub上该任务目标项目的API接口进行爬虫,获取任务目标项目软件的项目信息发送到数据库模块4,并存储到数据库的软件项目信息表Tsoftware中,软件项目信息表如下表1所示:
表1 软件项目信息表
如表1所示,所述软件项目信息表Tsoftware中的软件项目信息包括:软件的项目名称、项目编程语言、项目规模、项目描述、项目标签和第一步中确定的其他信息,主要提供缺陷所在软件的背景信息。
第五步:所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表并存储至所述数据库模块中。
图4为本发明提供的数据采集模块进行远程库数据采集的过程示意图。参见图4,所述数据采集模块2根据GitHub保存的的合并请求(Pull Request)列表进行缺陷查找与标记。由于在GitHub的工作流中,开发人员通过建立修复分支进行缺陷修复,在完成后提出合并请求(Pull Request),由管理员审核后对分支进行合并操作(Merge),因此首先使用github-api依赖库中的GHPullrequest(合并请求操作工具)访问GitHub提供的API接口,获取目标软件(任务目标项目)的所有已被Merge的合并请求列表,通过判断其标题(title)和标签(Label)是否含有缺陷相关的关键字(例如bug、defect、fix)以及第二步中指定的关键字(第二步中制定的缺陷关键词),将含有关键字的这些合并请求的标题、标签、主体及相关提交版本(commit)的ID和第一步中确定的其他信息发送到数据库模块,保存到数据库缺陷信息表Tpullrequest中,所述缺陷信息表Tpullrequest如表2所示:
表2 缺陷信息表(远程库)
数据名称 | 数据类型 | 数据描述 |
NAME | Char | 项目名称 |
OWNER | Char | 项目所有者 |
GIT_ADDRESS | TEXT | 缺陷议题(issue)的Git地址 |
topIC | TEXT | 经过主题词提取后的软件缺陷背景信息 |
TITLE | Char | 修复缺陷合并请求的标题 |
DESCRIPTION | TEXT | 修复缺陷合并请求的描述 |
NEW_SHA | Char | 修复后版本ID |
OLD_SHA | Char | 缺陷存在版本ID |
一方面,本发明将合并请求的标题、标签、主体内容作为缺陷所在功能模块和具体形式的背景信息;另一方面,相关提交版本ID将作为搜寻定位缺陷代码的索引,其中包括了缺陷修复前版本ID(base_sha)、缺陷修复后版本ID(head_sha)和将修复分支和主分支合并后版本ID(merge_sha)。
所述数据采集模块2的远程库数据采集完成后,向数据库模块4进行反馈,将Tmission表中对应任务目标项目的远程库采集标记变更为已完成,即所述数据库模块将所述采集任务表中的是否已经完成远程库数据采集任务一项的标记变更为已完成。
第六步:所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表。
图5为本发明提供的数据采集模块进行本地库数据采集的过程示意图。参见图5,所述数据采集模块2首先将GitHub网站上目标软件(任务目标项目)的项目仓库克隆到本地计算机(或服务器)中,使用eclipse(一个软件开发企业)开发的jgit依赖库对其进行解析。然后读取数据库缺陷信息Tpullrequest表中在第五步中获取到的所有该目标软件的缺陷相关合并请求,逐个读取其修复缺陷前、后版本ID以获得缺陷前、后版本的文件。为避免由于GitHub工作模式导致的版本文件丢失,在本步中,优先获取merge_sha(修复分支和主分支合并后版本ID)和base_sha(缺陷修复前版本ID)对应的版本代码文件,在merge_sha丢失时用head_sha(缺陷修复后版本ID)代替;同时在base_sha丢失时以merge_sha或head_sha对应的commit的parent(父版本)代替。
在获取到版本文件后,可以用jgit比对修复缺陷前、后两个版本文件,确认两个版本之间修改过的文件有哪些,并读取数据分析模块输出的配置文件,判断其是否符合第二步制定的关于缺陷所在文件数量、文件类型、缺陷类型的采集规则。对于符合采集规则的缺陷,读取这两个版本之间不一样的文件,将不一样文件的两个版本内容、该缺陷所在项目、该缺陷实际获取到的新旧版本ID、该缺陷修复版本的提交信息commit发送到数据库模块,存储到数据库缺陷数据表Tcommit中,所述缺陷数据表Tcommit如下表3所示:
表3 缺陷数据表
数据名称 | 数据类型 | 数据描述 |
NAME | Char | 项目名称 |
CODE | LONG TEXT | 修复缺陷造成的代码差异 |
OLD_CONTENT | LONG TEXT | 缺陷存在版本代码 |
NEW_CONTENT | LONG TEXT | 修复后版本代码 |
DESCRIPTION | TEXT | 修复缺陷版本的描述 |
OLD_PATH | Char | 缺陷存在版本缺陷文件路径 |
NEW_PATH | Char | 修复后版本缺陷文件路径 |
NEW_SHA | Char | 修复后版本ID |
OLD_SHA | Char | 缺陷存在版本ID |
所述数据采集模块的本地库数据采集完成后,向数据库模块进行反馈,将Tmission表中该软件的本地库采集标记变更为已完成,即所述数据库模块将所述采集任务表中的是否已经完成本地库数据采集任务一项的标记变更为已完成。
第七步:所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行处理,生成软件缺陷数据集。
参见图2,所述数据处理模块3对软件缺陷数据进行处理,主要分为软件缺陷代码处理和软件缺陷背景信息处理。
软件代码处理的主要目标是根据第六步采集到的缺陷的两个版本的差异文件将缺陷定位到代码行,提升数据的粒度。首先,通过数据库模块4逐个读取第六步存储到Tcommit表中目标软件的所有缺陷数据并输出到数据处理模块3,借助基于Java的依赖库工具AbstractTreeIterator(一个抽象语法树提取工具)将两个版本的差异文件分别生成抽象语法树。然后使用基于Java的依赖库工具DiffEntry(一个抽象语法树比对工具)进行抽象语法树比对,该DiffEntry工具可以通过比对两棵抽象语法树的节点,裁剪出两棵抽象语法树之间不同的部分,然后转化成代码段输出。将输出的缺陷修复前代码段作为含缺陷数据,将输出的缺陷修复后代码段作为非缺陷数据发送到数据库模块4,存储到数据库的Tcommit表中。由于每个缺陷都能获取到一条含缺陷数据和一条非缺陷数据,则数据库中的含缺陷数据和非缺陷数据比例严格等于1:1。
软件缺陷背景信息处理的主要目标是将前几步采集到的软件项目信息和缺陷信息综合后进行主题词提取,从原本一个缺陷对应的数百单词甚至更多的背景信息中提取出十个词来描述该缺陷是什么软件什么功能中的什么缺陷。首先通过数据库模块4读取数据库中的Tsoftware、Tpullrequest、Tcommit三个表,查询该缺陷数据的提交信息、对应的合并请求的相关信息和该软件的相关信息并合并为浅层背景信息,然后调用Python脚本,使用基于Python的NLTK依赖库(一个Python开源依赖库)对信息进行分词处理,去除停用词,单词词干化预处理后,使用Python的sklearn依赖库(一个Python开源依赖库)构建隐形狄利克雷模型(Latent Dirichlet allocation,LDA),将浅层背景信息输入到LDA模型中并设定主题词数量,输出主题词,将输出结果作为背景信息发送到数据库模块4,并储存到数据库的Tpullrequest表中。
采集完成后,所述数据处理模块3向数据库模块4进行反馈,将Tmission表中该软件(任务目标项目)的任务完成标记变更为已完成,然后数据采集模块2继续读取采集任务表中的下一个目标软件(任务目标项目)继续进行采集任务,直至所述采集任务表中的所有任务完成。
采集足够多的软件项目缺陷数据后,综合数据库中的数据库表Tlanguage、软件项目信息表Tsoftware、缺陷信息表Tpullrequest和缺陷数据表Tcommit,就可以得到一个包含软件缺陷代码语义和背景信息的、解决了类不平衡问题的软件缺陷数据集。
本发明所提出的一种面向GitHub等开源软件托管平台的基于代码语义及背景信息的软件缺陷数据采集系统,与现有技术相比,具有以下优势:
1、本发明首先通过开发人员提出的修复缺陷的合并请求作为搜索依据并标记软件缺陷的索引依据,节省了使用者标记数据的大量人力和时间,同时确保了缺陷种类涵盖了基于规则和基于语义导致的各种类型缺陷,确保了缺陷标记的准确性和全面性。
2、尽管只有很少人使用软件缺陷追踪门户,但GitHub上的大多数开发者都使用了合并请求的工作流作为其开发模式,因此可作为采集目标的软件数量十分庞大,足以用于建立满足深度学习需求的缺陷数据集。
3、本发明通过抽象语法树的方式提取裁剪了缺陷代码,将最细的数据粒度提升到了代码行,对比传统数据集在精度上有较大提升。
4、本发明通过将缺陷修复前代码作为缺陷数据,将缺陷修复后代码作为无缺陷数据,实现了缺陷数据与非缺陷数据比例严格满足1:1,解决了其他采集方法严重的类不平衡问题。
5、本发明对软件缺陷信息和软件功能信息进行了主题词提取,为缺陷提供了背景信息,使缺陷数据结合了源代码和重要的背景信息。
6、本发明的实现流程标准化高,在根据本发明内容建立所述软件缺陷数据采集系统后,系统可以脱离人力监督进行自动化、流程化地进行缺陷数据采集,提高了缺陷数据采集的自动化程度。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种基于代码语义及背景信息的软件缺陷数据采集系统,其特征在于,所述软件缺陷数据采集系统包括数据分析模块、数据采集模块、数据处理模块和数据库模块;
所述数据分析模块获取GitHub网站和本地软件git仓库中的软件数据,并对所述软件数据进行分类,生成多种数据类型;
所述数据分析模块根据数据使用需求确定软件缺陷数据的采集规则,并将所述数据类型和所述采集规则保存为配置文件并输出到所述数据采集模块;
所述数据采集模块从所述GitHub网站获取采集任务表及合并请求列表,并将所述采集任务表及所述合并请求列表发送至所述数据库模块进行存储;
所述数据采集模块根据所述配置文件采集所述采集任务表中未完成的任务目标项目的项目信息,生成软件项目信息表;
所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表并存储至所述数据库模块中;
所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表;
所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行处理,生成软件缺陷数据集。
2.根据权利要求1所述的软件缺陷数据采集系统,其特征在于,所述数据分析模块获取GitHub网站和本地软件git仓库中的软件数据,并对所述软件数据进行分类,生成多种数据类型,具体包括:
所述数据分析模块查阅所述GitHub网站的说明文档确定远程库中可获取的数据范围,查阅所述本地软件git仓库的说明文档确定本地库中可获取的数据范围;
根据所述远程库中可获取的数据范围及所述本地库中可获取的数据范围分别获取所述GitHub网站及所述本地软件git仓库中的软件数据;
对所述软件数据进行分类,生成多种数据类型;所述数据类型包括软件缺陷相关数据、可能相关软件数据和软件缺陷无关数据。
3.根据权利要求2所述的软件缺陷数据采集系统,其特征在于,所述数据分析模块根据数据使用需求确定软件缺陷数据的采集规则,具体包括:
所述数据分析模块根据编程语言与对应代码文件类型建立数据库表;所述数据库表中包含编程语言名称、简称、对应代码文件的后缀、编程语言描述;
所述数据分析模块获取使用者设定的使用需求;
所述数据分析模块根据所述数据库表及所述使用需求确定软件缺陷数据的采集规则;所述采集规则包括缺陷所在的文件数量、是否包含测试模块缺陷、是否包含非代码文件引起的缺陷以及是否制定缺陷关键字。
4.根据权利要求3所述的软件缺陷数据采集系统,其特征在于,所述数据采集模块从所述GitHub网站获取采集任务表及合并请求列表,具体包括:
所述数据采集模块通过所述GitHub网站提供的API接口从所述GitHub网站获取采集任务表;所述采集任务表中包括项目名称、项目所有者名称、是否已经完成远程库数据采集任务、是否已经完成本地库数据采集任务、数据采集任务是否已完成;
所述数据采集模块通过所述GitHub网站提供的API接口从所述GitHub网站获取合并请求列表;所述合并请求列表中包括标题和标签。
5.根据权利要求4所述的软件缺陷数据采集系统,其特征在于,所述数据采集模块根据所述配置文件采集所述采集任务表中未完成的任务目标项目的项目信息,生成软件项目信息表,具体包括:
所述数据采集模块根据所述配置文件从所述GitHub网站获取所述采集任务表中未完成的任务目标项目的项目信息,根据所述项目信息生成软件项目信息表;所述软件项目信息表中包括缺陷所在软件的背景信息,所述背景信息包括项目名称、项目所有者、项目编程语言、项目Git地址、项目规模、项目描述、项目标签、项目本地库地址。
6.根据权利要求5所述的软件缺陷数据采集系统,其特征在于,所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表存储至所述数据库模块中,具体包括:
判断所述合并请求的标题和标签内是否含有缺陷相关的关键字,获得第一判断结果;
若所述第一判断结果为所述合并请求的标题和标签内含有缺陷相关的关键字,根据所述合并请求的标题、标签及相关版本ID生成缺陷信息表并存储至所述数据库模块中;所述相关版本ID包括缺陷修复前版本ID、缺陷修复后版本ID和合并后版本ID。
7.根据权利要求6所述的软件缺陷数据采集系统,其特征在于,在所述数据采集模块根据所述软件项目信息表中的项目信息以及所述合并请求列表中的合并请求进行缺陷查找与标记,生成缺陷信息表存储至所述数据库模块之后,还包括:
所述数据库模块将所述采集任务表中的是否已经完成远程库数据采集任务一项的标记变更为已完成。
8.根据权利要求7所述的软件缺陷数据采集系统,其特征在于,所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表,具体包括:
所述数据采集模块根据所述缺陷信息表中的相关版本ID,从所述本地软件git仓库中提取修复缺陷前版本ID对应的修复缺陷前版本文件、缺陷修复后版本ID对应的缺陷修复后版本文件以及合并后版本ID对应的修复分支和主分支合并后版本文件;
根据所述修复缺陷前版本文件、所述缺陷修复后版本文件以及所述修复分支和主分支合并后版本文件生成缺陷数据表。
9.根据权利要求8所述的文本关键词提取系统,其特征在于,在所述数据采集模块根据所述缺陷信息表中的相关版本ID进行软件缺陷代码数据采集,生成缺陷数据表之后,还包括:
所述数据库模块将所述采集任务表中的是否已经完成本地库数据采集任务一项的标记变更为已完成。
10.根据权利要求9所述的文本关键词提取系统,其特征在于,所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行处理,生成软件缺陷数据集,具体包括:
所述数据处理模块对所述缺陷数据表中的软件缺陷数据进行软件缺陷代码处理和软件缺陷背景信息处理,生成含缺陷数据和非缺陷数据;所述含缺陷数据和所述非缺陷数据构成所述软件缺陷数据集。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910429108.5A CN110134613B (zh) | 2019-05-22 | 2019-05-22 | 一种基于代码语义及背景信息的软件缺陷数据采集系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910429108.5A CN110134613B (zh) | 2019-05-22 | 2019-05-22 | 一种基于代码语义及背景信息的软件缺陷数据采集系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110134613A true CN110134613A (zh) | 2019-08-16 |
CN110134613B CN110134613B (zh) | 2020-09-08 |
Family
ID=67572429
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910429108.5A Active CN110134613B (zh) | 2019-05-22 | 2019-05-22 | 一种基于代码语义及背景信息的软件缺陷数据采集系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110134613B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111241307A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 面向软件系统的软件项目及第三方库知识图谱构造方法 |
CN111240993A (zh) * | 2020-01-20 | 2020-06-05 | 北京航空航天大学 | 一种基于模块依赖图的软件缺陷预测方法 |
CN111459799A (zh) * | 2020-03-03 | 2020-07-28 | 西北大学 | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 |
CN112181428A (zh) * | 2020-09-28 | 2021-01-05 | 北京航空航天大学 | 一种基于抽象语法树的开源软件缺陷数据分类方法及系统 |
CN113127339A (zh) * | 2021-03-24 | 2021-07-16 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
CN113886467A (zh) * | 2021-10-25 | 2022-01-04 | 上海航天计算机技术研究所 | 一种基于关键词提取的软件缺陷库维护方法 |
CN114844832A (zh) * | 2022-03-22 | 2022-08-02 | 阿里云计算有限公司 | 硬件转发表项配置方法、设备、介质及产品 |
US20220350967A1 (en) * | 2021-05-03 | 2022-11-03 | Accenture Global Solutions Limited | Utilizing machine learning and natural language processing to determine mappings between work items of various tools |
US20230130527A1 (en) * | 2021-01-04 | 2023-04-27 | Capital One Services, Llc | Dynamic review of software updates after pull requests |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2552934C1 (ru) * | 2014-02-07 | 2015-06-10 | Государственное бюджетное образовательное учреждение высшего профессионального образования "Нижегородская государственная медицинская академия" Министерства Здравоохранения Российской Федерации (ГБОУ ВПО НижГМА Минздрава России) | Способ эндоскопического гемостаза при неварикозных гастродуоденальных кровотечениях |
CN104715047A (zh) * | 2015-03-26 | 2015-06-17 | 浪潮集团有限公司 | 一种社交网络数据采集与分析系统 |
CN107273497A (zh) * | 2017-06-16 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种漏洞信息采集方法和装置 |
CN107832781A (zh) * | 2017-10-18 | 2018-03-23 | 扬州大学 | 一种面向多源数据的软件缺陷表示学习方法 |
CN109697162A (zh) * | 2018-11-15 | 2019-04-30 | 西北大学 | 一种基于开源代码库的软件缺陷自动检测方法 |
-
2019
- 2019-05-22 CN CN201910429108.5A patent/CN110134613B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2552934C1 (ru) * | 2014-02-07 | 2015-06-10 | Государственное бюджетное образовательное учреждение высшего профессионального образования "Нижегородская государственная медицинская академия" Министерства Здравоохранения Российской Федерации (ГБОУ ВПО НижГМА Минздрава России) | Способ эндоскопического гемостаза при неварикозных гастродуоденальных кровотечениях |
CN104715047A (zh) * | 2015-03-26 | 2015-06-17 | 浪潮集团有限公司 | 一种社交网络数据采集与分析系统 |
CN107273497A (zh) * | 2017-06-16 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种漏洞信息采集方法和装置 |
CN107832781A (zh) * | 2017-10-18 | 2018-03-23 | 扬州大学 | 一种面向多源数据的软件缺陷表示学习方法 |
CN109697162A (zh) * | 2018-11-15 | 2019-04-30 | 西北大学 | 一种基于开源代码库的软件缺陷自动检测方法 |
Non-Patent Citations (5)
Title |
---|
JIAXI XU等: "A GitHub-Based Data Collection Method for Software Defect Prediction", 《2019 6TH INTERNATIONAL CONFERENCE ON DEPENDABLE SYSTEMS AND THEIR APPLICATIONS (DSA)》 * |
JING LIU等: "A Comparative Study of the Effects of Pull Request on GitHub Projects", 《2016 IEEE 40TH ANNUAL COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE》 * |
姚珂: "基于RHDB模型的缺陷信息采集系统的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
甘谊昂: "开源软件社区开发者的贡献评估方法研究", 《中国优秀硕士学位论文全文数据库·信息科技辑》 * |
类兴明: "《基于Git的软件缺陷数据源的预处理研究》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111240993A (zh) * | 2020-01-20 | 2020-06-05 | 北京航空航天大学 | 一种基于模块依赖图的软件缺陷预测方法 |
CN111241307A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 面向软件系统的软件项目及第三方库知识图谱构造方法 |
CN111459799B (zh) * | 2020-03-03 | 2023-03-10 | 西北大学 | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 |
CN111459799A (zh) * | 2020-03-03 | 2020-07-28 | 西北大学 | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 |
CN112181428A (zh) * | 2020-09-28 | 2021-01-05 | 北京航空航天大学 | 一种基于抽象语法树的开源软件缺陷数据分类方法及系统 |
US20230130527A1 (en) * | 2021-01-04 | 2023-04-27 | Capital One Services, Llc | Dynamic review of software updates after pull requests |
US12026509B2 (en) * | 2021-01-04 | 2024-07-02 | Capital One Services, Llc | Dynamic review of software updates after pull requests |
CN113127339B (zh) * | 2021-03-24 | 2023-02-10 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
CN113127339A (zh) * | 2021-03-24 | 2021-07-16 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
US20220350967A1 (en) * | 2021-05-03 | 2022-11-03 | Accenture Global Solutions Limited | Utilizing machine learning and natural language processing to determine mappings between work items of various tools |
US12014140B2 (en) * | 2021-05-03 | 2024-06-18 | Accenture Global Solutions Limited | Utilizing machine learning and natural language processing to determine mappings between work items of various tools |
CN113886467A (zh) * | 2021-10-25 | 2022-01-04 | 上海航天计算机技术研究所 | 一种基于关键词提取的软件缺陷库维护方法 |
CN113886467B (zh) * | 2021-10-25 | 2024-05-14 | 上海航天计算机技术研究所 | 一种基于关键词提取的软件缺陷库维护方法 |
CN114844832A (zh) * | 2022-03-22 | 2022-08-02 | 阿里云计算有限公司 | 硬件转发表项配置方法、设备、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN110134613B (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110134613A (zh) | 一种基于代码语义及背景信息的软件缺陷数据采集系统 | |
CN116628172B (zh) | 基于知识图谱的政务服务领域多策略融合的对话方法 | |
CN104657402B (zh) | 用于语言标签管理的方法和系统 | |
US7739257B2 (en) | Search engine | |
US7926066B2 (en) | Adaptive content platform and application integration with the platform | |
US6886007B2 (en) | Taxonomy generation support for workflow management systems | |
CN101165688B (zh) | 知识系统中资源之间的时间关联方法和系统 | |
US7505991B2 (en) | Semantic model development and deployment | |
CN108717470A (zh) | 一种具有高准确度的代码片段推荐方法 | |
WO2005010727A2 (en) | Extracting data from semi-structured text documents | |
CN101490668A (zh) | 可用源数据的重用和本地化 | |
CN101118554A (zh) | 智能交互式问答系统及其处理方法 | |
KR20080071213A (ko) | 시맨틱 웹 기반 연구정보 서비스 시스템 및 그 방법 | |
Li et al. | Deepreview: automatic code review using deep multi-instance learning | |
Vela et al. | A semi-automatic data–scraping method for the public transport domain | |
Stollberg et al. | H-Techsight—A next generation knowledge management platform | |
CN114237588A (zh) | 一种代码仓库选择方法、装置、设备及存储介质 | |
CN109299381A (zh) | 一种基于语义概念的软件缺陷检索和分析系统及方法 | |
Aizpurua et al. | Transition of accessibility evaluation tools to new standards | |
CN117519776A (zh) | 一种基于SSLDG图提取版本变更差异中显著Java文件的方法 | |
Koehnke et al. | Identifying semantic constructs in web documents to improve web site accessibility | |
CN117909559A (zh) | 一种基于互联网公开数据的企业关联信息挖掘方法 | |
Bogoni | A new normalization data platform on Oracle ADB using a Google service | |
EP1197849A2 (en) | Taxonomy generation support for workflow management systems | |
AU2006200426B2 (en) | Improved search engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |