CN107133079A - 一种基于问题报告的软件语义摘要自动生成方法 - Google Patents
一种基于问题报告的软件语义摘要自动生成方法 Download PDFInfo
- Publication number
- CN107133079A CN107133079A CN201710380665.3A CN201710380665A CN107133079A CN 107133079 A CN107133079 A CN 107133079A CN 201710380665 A CN201710380665 A CN 201710380665A CN 107133079 A CN107133079 A CN 107133079A
- Authority
- CN
- China
- Prior art keywords
- software
- code
- information
- change record
- semantic
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于问题报告的软件语义摘要自动生成方法,先构建开源软件信息数据库;然后获取项目托管社区中的问题报告数据和代码变更记录数据,并将之存储在数据库的问题报告数据表和代码变更记录数据表中;再使用正则表达式从代码变更记录中抽取其出现的问题报告id;然后对问题报告与软件代码进行位置匹配,最后进行语义提取与聚类,将生成的语义摘要存储在数据库的软件语义摘要数据表中。本发明通过软件的问题报告和代码变更记录为软件的代码文件或代码段自动标注语义信息,可提高开发人员复用软件的效率。
Description
技术领域
本发明涉及软件开发领域,尤其涉及一种基于问题报告的软件语义摘要的自动生成方法。
背景技术
软件复用技术是指在软件开发中,对现有资源的再利用从而避免重复劳动的解决方案。通过软件复用,可以极大的提高软件开发效率和质量。例如著名的手机照片分享应用Instagram,在其发展之初只有5名技术人员,后端工程师不到3人,却利用了十多款开源软件,在仅仅8周时间内,打造了最初的Instagram,并通过提供的稳定服务吸引了大批用户,软件复用的作用可见一斑。
同时,开源软件的发展为软件复用提供了丰富的资源。与商业软件不同,开源软件的代码是公开的,其他的软件开发者可以选择对整个软件或是软件中部分代码进行复用。但是开发者在复用之前,首先要了解其要复用的整个软件、目标文档或者某一段代码是如何工作的、有什么样的功能。对于整个软件来说,开发者可以从软件简介和文档中了解;对于细粒度的代码段来说,开发者可以通过代码段中的注释了解代码的实现过程。但是对于粗粒度的代码文件或者是规模大的代码,则很难从上述两种方式中进行了解,因为软件文档多是从整体功能和使用方式方面进行阐释,而注释又有很强的针对性,多个注释的拼接对了解大规模代码功能并没有帮助。人工通过读代码的方式效率又非常低,这与软件复用的初衷不符。因此对大粒度的代码文件或者代码段进行语义标注成为亟待解决的问题。
开源软件的项目托管平台(如GitHub、GitLab等)已成为开源软件开发和维护过程中的重要角色,为开发者提供项目托管和开发进程管理的多项功能,极大的方便了开源软件的分布式开发。项目托管平台中存储着软件开发过程中产生的多种数据,如开发者的提交记录,pull-request数据,问题报告信息等,这些数据中包含大量的语义信息,本发明希望通过项目托管社区中存在的文本数据生成软件的语义摘要,方便开发者在大粒度的复用过程中迅速了解目标代码块或文件的功能。尤其是其中包含很多issue(问题报告),这些issue有详细的标题和描述信息。这些issue往往对应着某些功能的添加或者某些缺陷的修复。对于一个功能运转良好的软件项目,issue的提交、解决、关闭整体流程非常规范。其中核心规范在于开发人员在提交代码的时候会将解决的问题编号、或者问题内容写到commit的信息中。因此,这样的信息能够帮助我们将软件开发历史(如文件、模块、代码的修改)和问题报告中的语义信息关联起来,从而给软件模块的语义进行标注。
发明内容
为实现上述目的,本发明提供一种基于问题报告的软件语义摘要自动生成方法,包括如下步骤:
S1、构建开源软件信息数据库,所述开源软件信息数据库包含问题报告数据表、代码变更记录数据表和软件语义摘要数据表;
S2、获取项目托管社区中的问题报告数据和代码变更记录数据,并将之存储在数据库的问题报告数据表和代码变更记录数据表中;
S3、使用正则表达式从代码变更记录中抽取其出现的问题报告id;
S4、问题报告与软件代码位置匹配:通过代码变更记录数据将问题报告中的描述信息和代码位置关联,具体包括:
S401、问题报告与代码变更记录匹配:使用代码变更记录中出现的#id寻找相关id的问题报告;
S402、语义信息合并:将问题报告中的标题和描述,以及代码变更记录的描述信息合并记作d,将其作为文件或代码片段f的原始语义信息,写入数据库的软件语义摘要数据表中;
S5、语义提取与聚类:对于原始描述信息d,使用文档主题生成模型生成若干主题词或短语,生成的主题词或短语作为文件或代码片段f的语义摘要存储在数据库的软件语义摘要数据表中。
进一步地,步骤S1中,问题报告数据表的存储格式为[标题,描述,#id],代码变更记录数据表的存储格式为[描述,变更信息,变更位置],软件语义摘要数据表的存储格式为[代码位置,原始语义信息,语义摘要]。
进一步地,步骤S2中,软件问题报告信息包括:问题报告的标题、描述和ID;代码变更记录的信息包括:描述、变更信息和变更位置。
步骤S2中,社区问题报告和代码变更记录数据可通过官方API获得或通过通用的网络爬虫获取。
步骤S2中,开发人员在提交的代码变更记录的描述信息中注明此次代码变更相关的问题报告,以“close#id”或“fix#id”的形式记录。
进一步地,步骤S402中,将代码位置和原始描述信息以[代码位置,原始语义信息]的格式存储于数据库的软件语义摘要数据表。
进一步地,步骤S402中,语义摘要信息以[代码位置,语义摘要]的格式存储于数据库的软件语义摘要数据表。
本发明针对开源软件的项目托管平台中存在的大量开源软件的代码,可从项目托管平台中问题报告提取软件语义,自动生成代码文件语义摘要,为软件开发人员在选择复用资源时提供帮助,提高开发人员复用软件的效率。
附图说明
图1为本发明的方法流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明提供一种基于问题报告的软件语义摘要自动生成方法,包括如下步骤:
S1、构建开源软件信息数据库,所述开源软件信息数据库包含问题报告数据表、代码变更记录数据表和软件语义摘要数据表。其中,问题报告数据表的存储格式为[标题,描述,#id],代码变更记录数据表的存储格式为[描述,变更信息,变更位置],软件语义摘要数据表的存储格式为[代码位置,原始语义信息,语义摘要]。
S2、获取项目托管社区中的问题报告数据和代码变更记录数据,并将之存储在数据库的问题报告数据表和代码变更记录数据表中。其中,社区问题报告和代码变更记录数据可通过官方API获得或通过通用的网络爬虫获取;软件问题报告信息包括:问题报告的标题、描述和ID;代码变更记录的信息包括:描述、变更信息和变更位置;开发人员在提交的代码变更记录的描述信息中注明此次代码变更相关的问题报告,以“close#id”或“fix#id”的形式记录。
S3、使用正则表达式从代码变更记录中抽取其出现的问题报告id。
以项目托管平台GitHub中Rails项目为例,Rails的代码变更记录中有一条记录的描述信息为:“Make time travel work with subclasses of Time/Date/Datetime.Closes #27614.Previously when calling‘now’on a subclass of e.g.‘Time’it would return an instance of‘Time’instead of returning an instance ofthe subclass.This way,we always returen the correct class.”。使用正则匹配提取该代码记录相关的问题报告编号#27614。
S4、问题报告与软件代码位置匹配:通过代码变更记录数据将问题报告中的描述信息和代码位置关联,具体包括:
S401、问题报告与代码变更记录匹配:使用代码变更记录中出现的#id寻找相关id的问题报告。将代码位置和原始描述信息以[代码位置,原始语义信息]的格式存储于数据库的软件语义摘要数据表。
下面结合具体事例阐释本步骤S401的实施过程。步骤S3中从一条代码变更记录中提取了相关的问题报告#27614.本步骤S401中,首先从Rails项目的问题报告中找到编号为27614的问题报告,其标题为“Time travel using TimeHelpers breaks subclasses ofTime”。然后将该问题报告的标题和描述以及代码变更记录中的描述信息合并作为原始语义信息写入数据库的软件语义摘要数据表中。
S402、语义信息合并:将问题报告中的标题和描述,以及代码变更记录的描述信息合并记作d,将其作为文件或代码片段f的原始语义信息,写入数据库的软件语义摘要数据表中;语义摘要信息以[代码位置,语义摘要]的格式存储于数据库的软件语义摘要数据表。
S5、语义提取与聚类:对于原始描述信息d,使用文档主题生成模型生成若干主题词或短语,生成的主题词或短语作为文件或代码片段f的语义摘要存储在数据库的软件语义摘要数据表中。文档主题生成模型可以使用Java语言的开源工具JGibbLDA实现。
综上所述,本发明通过软件的问题报告和代码变更记录为软件的代码文件或代码段自动标注语义信息,可提高开发人员复用软件的效率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素”。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (7)
1.一种基于问题报告的软件语义摘要自动生成方法,其特征在于,包括如下步骤:
S1、构建开源软件信息数据库,所述开源软件信息数据库包含问题报告数据表、代码变更记录数据表和软件语义摘要数据表;
S2、获取项目托管社区中的问题报告数据和代码变更记录数据,并将之存储在数据库的问题报告数据表和代码变更记录数据表中;
S3、使用正则表达式从代码变更记录中抽取其出现的问题报告id;
S4、问题报告与软件代码位置匹配:通过代码变更记录数据将问题报告中的描述信息和代码位置关联,具体包括:
S401、问题报告与代码变更记录匹配:使用代码变更记录中出现的#id寻找相关id的问题报告;
S402、语义信息合并:将问题报告中的标题和描述,以及代码变更记录的描述信息合并记作d,将其作为文件或代码片段f的原始语义信息,写入数据库的软件语义摘要数据表中;
S5、语义提取与聚类:对于原始描述信息d,使用文档主题生成模型生成若干主题词或短语,生成的主题词或短语作为文件或代码片段f的语义摘要存储在数据库的软件语义摘要数据表中。
2.如权利要求1所述的方法,其特征在于,步骤S1中,问题报告数据表的存储格式为[标题,描述,#id],代码变更记录数据表的存储格式为[描述,变更信息,变更位置],软件语义摘要数据表的存储格式为[代码位置,原始语义信息,语义摘要]。
3.如权利要求1所述的方法,其特征在于,步骤S2中,软件问题报告信息包括:问题报告的标题、描述和ID;代码变更记录的信息包括:描述、变更信息和变更位置。
4.如权利要求1所述的方法,其特征在于,步骤S2中,社区问题报告和代码变更记录数据可通过官方API获得或通过通用的网络爬虫获取。
5.如权利要求1所述的方法,其特征在于,步骤S2中,开发人员在提交的代码变更记录的描述信息中注明此次代码变更相关的问题报告,以“close#id”或“fix#id”的形式记录。
6.如权利要求1所述的方法,其特征在于,步骤S402中,将代码位置和原始描述信息以[代码位置,原始语义信息]的格式存储于数据库的软件语义摘要数据表。
7.如权利要求1所述的方法,其特征在于,步骤S402中,语义摘要信息以[代码位置,语义摘要]的格式存储于数据库的软件语义摘要数据表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710380665.3A CN107133079B (zh) | 2017-05-25 | 2017-05-25 | 一种基于问题报告的软件语义摘要自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710380665.3A CN107133079B (zh) | 2017-05-25 | 2017-05-25 | 一种基于问题报告的软件语义摘要自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107133079A true CN107133079A (zh) | 2017-09-05 |
CN107133079B CN107133079B (zh) | 2019-12-20 |
Family
ID=59732885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710380665.3A Active CN107133079B (zh) | 2017-05-25 | 2017-05-25 | 一种基于问题报告的软件语义摘要自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107133079B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN108491459A (zh) * | 2018-03-05 | 2018-09-04 | 中国人民解放军国防科技大学 | 一种软件代码摘要自动生成模型的优化方法 |
CN108519890A (zh) * | 2018-04-08 | 2018-09-11 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
CN109857648A (zh) * | 2019-01-14 | 2019-06-07 | 复旦大学 | 一种api误用的变更模式挖掘方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104991858A (zh) * | 2015-06-12 | 2015-10-21 | 扬州大学 | 一种面向代码修改的概要及标签自动生成方法 |
CN106202203A (zh) * | 2016-06-23 | 2016-12-07 | 扬州大学 | 基于终身主题模型的bug知识库的建立方法 |
-
2017
- 2017-05-25 CN CN201710380665.3A patent/CN107133079B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104991858A (zh) * | 2015-06-12 | 2015-10-21 | 扬州大学 | 一种面向代码修改的概要及标签自动生成方法 |
CN106202203A (zh) * | 2016-06-23 | 2016-12-07 | 扬州大学 | 基于终身主题模型的bug知识库的建立方法 |
Non-Patent Citations (3)
Title |
---|
SHAMIMA YEASMIN等: ""How Should We Read and Analyze Bug Reports: An Interactive Visualization using Extractive Summaries and Topic Evolution"", 《CASCON"15 PROCEEDINGS OF THE 25TH ANNUAL INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE AND SOFTWARE ENGINEERING》 * |
TIEN-DUY B. LE等: ""RCLinker: Automated Linking of Issue Reports and Commits Leveraging Rich Contextual Information"", 《ICPC "15 PROCEEDINGS OF THE 2015 IEEE 23RD INTERNATIONAL CONFERENCE ON PROGRAM COMPREHENSION》 * |
李文鹏 等: ""基于LDA的软件代码主题摘要自动生成方法"", 《计算机科学》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN108491459A (zh) * | 2018-03-05 | 2018-09-04 | 中国人民解放军国防科技大学 | 一种软件代码摘要自动生成模型的优化方法 |
CN108491459B (zh) * | 2018-03-05 | 2021-10-26 | 中国人民解放军国防科技大学 | 一种软件代码摘要自动生成模型的优化方法 |
CN108519890A (zh) * | 2018-04-08 | 2018-09-11 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
CN108519890B (zh) * | 2018-04-08 | 2021-07-20 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
CN109857648A (zh) * | 2019-01-14 | 2019-06-07 | 复旦大学 | 一种api误用的变更模式挖掘方法 |
CN109857648B (zh) * | 2019-01-14 | 2021-12-28 | 复旦大学 | 一种api误用的变更模式挖掘方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107133079B (zh) | 2019-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Russell-Rose et al. | The Reuters Corpus Volume 1-from Yesterday's News to Tomorrow's Language Resources. | |
RU2328032C2 (ru) | Система и способ проверки правильности документов xml и выдачи сообщения о нарушениях схемы | |
CN107133079A (zh) | 一种基于问题报告的软件语义摘要自动生成方法 | |
CN102236645B (zh) | 基于语义逻辑的类自然语言人机对话装置 | |
US7617444B2 (en) | File formats, methods, and computer program products for representing workbooks | |
CN107145480B (zh) | 一种基于Word进行XBRL报告编制的方法 | |
US9110873B2 (en) | Platform-independent data application description language | |
US20140222822A1 (en) | Content revision using question and answer generation | |
CA2701046A1 (en) | Analysis of a system for matching data records | |
CN102207948A (zh) | 一种事件陈述句素材库的生成方法 | |
CN101488086A (zh) | 一种基于领域模型的软件生成方法及装置 | |
CN112232074A (zh) | 实体关系抽取方法、装置、电子设备及存储介质 | |
CN101499063A (zh) | 基于跟踪的数据库模式演进方法及*** | |
CN108446401A (zh) | 题库*** | |
CN109299074A (zh) | 一种基于模板化数据库视图的数据校验方法及*** | |
CN103455589A (zh) | 产品工厂模式下的产品数据迁移方法、装置及*** | |
CN115293124A (zh) | 软件工程化文档自动生成方法及装置 | |
CN103107919A (zh) | 一种网络资源建模方法和*** | |
CN102171696B (zh) | 定制资料的生成方法和装置 | |
CN115713309A (zh) | 内审*** | |
CN102096663A (zh) | 一种数据表编辑方法及数据库服务器 | |
Carriero et al. | Empirical ontology design patterns and shapes from Wikidata | |
CN111639478A (zh) | 一种基于excel文档的数据自动稽核方法及*** | |
CN104881455A (zh) | 一种基于mysql的结构差异处理方法及*** | |
Pichler et al. | Registry support for core component evolution |
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 |