当前位置: 首页 > 专利查询>北京大学专利>正文

一种软件文档中核心代码元素的挖掘方法及系统技术方案

技术编号:17779433 阅读:28 留言:0更新日期:2018-04-22 07:48
本发明专利技术涉及一种软件文档中核心代码元素的挖掘方法及系统。该方法包括:1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档‑代码关联关系集合;2)从候选文档‑代码关联关系的相关软件文档与软件代码中抽取文本和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;3)利用带有标注核心代码元素的训练数据的特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别软件文档中的核心代码元素。该系统包括:软件文档与软件代码预处理模块、特征抽取模块、分类学习算法模块。本发明专利技术能够追踪并度量软件文档与软件代码间的关联关系,区分核心关联和噪音关联。

【技术实现步骤摘要】
一种软件文档中核心代码元素的挖掘方法及系统
本专利技术涉及软件文档-代码关联关系追踪领域,尤其涉及一种软件文档中核心代码元素的挖掘方法及系统。
技术介绍
长期以来,软件可追踪性研究一直受到广泛的关注。研究者们试图通过挖掘软件代码与各类自然语言文档之间潜在的关联关系,建立软件文档与软件代码的可追踪性关联。这对于程序理解、需求工程、软件维护等多个方面均有重要意义。现有的软件文档与软件代码关联关系挖掘方法可以分为两类:一、基于信息检索的方法。该方法基本思想是把软件代码作为查询条件在候选软件文档中进行信息检索,根据相似度排序在满足一定要求(例如相似度阈值或相关程度排名)的软件文档与软件代码之间建立关联。二、基于程序分析技术的方法。该方法通过识别软件文档中出现的代码元素(例如类名、方法名等),判断其所属的代码单元,并在软件文档和代码单元间建立可追踪性关联。如何基于上下文判断代码元素所属的代码单元(消歧)是该方法的重点。上述软件文档与软件代码关联关系挖掘方法存在以下问题:(1)第一类方法受限于软件代码中标识符的命名应该是自解释的,或存在足够的代码注释,对一些软件项目来说效果不能令人满意。一方面是因为这类方法将软件代码当作普通文本处理,在将其转化为特征向量的过程中,损失了大量软件代码特有的结构语义信息;另一方面是因为软件文档和代码中每个特征(代码元素)的重要程度与出现次数基本无关,而信息检索的基础是进行关键字匹配。如果软件文档中没有出现该关键字或关键词的词频不高,则可能导致检索效果不佳。此外,软件文档中更多可能使用同义词、近义词或缩写词,这也对信息检索方法的效果造成了比较大的挑战。(2)第二类方法目前重点关注于识别文档中代码元素所属的代码单元,并没有对这些关联的强弱/真假做出区分和判断。事实上,软件文档可能存在多个代码元素,但文档内容其实是围绕其中一个代码元素来进行阐述的,称为核心代码元素。因此,在软件文档-代码关联过程中,需要识别和建立软件文档与其核心代码元素之间的关联(强关联/真关联);而那些仅仅用于背景或补充描述出现在文档中的其他代码元素,与软件文档并没有太大关系,对软件文档-代码关联追踪来说即是噪音(噪音关联/假关联)。噪音关联会极大影响软件文档与软件代码间关联关系追踪的准确性。由于现有技术中并不存在一个能够度量软件文档与软件代码间关联关系并挖掘文档核心代码元素的方法。因此,研究一种更好的软件文档与软件代码间关联关系追踪方法十分必要。
技术实现思路
本专利技术的目的是提供一种软件文档中核心代码元素的挖掘方法及系统,以改进软件文档-代码之间的关联关系追踪的效果。该方法及系统能够追踪并度量软件文档与软件代码间的关联关系,区分核心关联和噪音关联。一种软件文档中核心代码元素的挖掘方法,其步骤包括:1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;2)从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;3)将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。进一步地,步骤1)包括以下子步骤:1-1)对获取的软件文档进行解析:根据XML标签抽取软件文档中有意义的文本部分(如问答文档中问题的题目、描述信息),构建软件文档对应的文档实体;对文档内容进行分段(分段依据为文档中的自然段和空白行),并识别和标明文档中的代码片段和超链接;根据文档内容中存在的“<code>”和“</code>”识别文档中的代码片段;1-2)对获取的软件源代码进行解析:基于所获取的源代码,利用工具JDT,生成抽象语法树;遍历抽象语法树,获取软件项目的代码元素列表,基于代码元素之间的关联关系并构建代码结构图。1-3)基于程序语法规则和命名规则构建正则表达式,根据正则表达式从步骤1-1)中的软件文档实体中抽取近似代码元素,并将其和步骤1-2)中获取的代码元素列表进行匹配,若近似代码元素和某个代码元素相同,则建立相应文档实体与代码元素间的关联关系,得到候选文档-代码关联关系集合。进一步地,步骤2)包括以下子步骤:2-1)从文档中提取的特征包括:词频特征(TF-IDF)、代码元素在文档中的位置特征(Location)、文档中的特定句法(Expwords)、文档与代码元素注释的文本相似度(DocSimilarity)、关联文档中代码元素的词频特征(R-TF-IDF);2-2)从代码中提取的特征包括:代码元素的类型(Type)、代码元素间的关联(Relation)以及代码元素间的距离(Distance)。2-3)基于上述特征,按照libSVM格式等构建用于度量软件文档与软件代码间关联关系的特征向量。进一步地,步骤3)包括以下子步骤:3-1)对每个标注好核心代码元素的文档,抽取上述文档和代码特征构建特征向量,输入基于决策树的分类模型进行学习,调优参数,得到分类学习模型;3-2)基于上述分类学习模型识别一个软件文档的核心代码元素。当文档中某代码元素获取的度量值的排名超过阈值时,该代码元素为该文档的核心代码元素。一种软件文档中核心代码元素的挖掘系统,包括软件文档与软件代码预处理模块、特征抽取模块和分类学习算法模块;所述软件文档与软件代码预处理模块用于对待处理软件项目的软件文档和源代码进行收集、解析和预处理,识别软件文档中的所有代码元素,得到候选的文档-代码关联关系集合;所述特征抽取模块用于从上述候选文档-代码关联关系的相关软件文档与软件代码中抽取文本和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;所述分类学习算法模块用于将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到学习模型,通过所述学习模型识别待识别的软件文档中的核心代码元素。进一步地,所述软件文档与软件代码预处理模块包括文档和源代码收集模块、文档和源代码解析模块和软件文档中代码元素识别模块;其中所述文档和源代码收集模块包括文档收集模块和源代码收集模块;所述文档和源代码解析模块包括文档预处理模块、文档解析模块和源代码解析模块;所述软件文档中代码元素识别模块包括近似代码元素抽取模块、代码元素匹配模块和清洗去歧模块;所述文档收集模块用于收集待处理软件项目中软件文档的源数据;所述源代码收集模块用于收集待处理软件项目的源代码;所述文档预处理模块用于解析上述源数据中的文档信息;所述文档解析模块用于划分文档段落并对文档段落进行分类,识别文档中的超链接并对文档内容进行过滤清洗;所述源代码解析模块用于解析上述源代码,得到待处理软件项目的代码元素列表;所述代码元素包括类(class)、方法(method)、接口(interface);所述近似代码元素抽取模块用于基于程序语法规则和命名规则构建正则表达式,并根据正则表达式从待处理软件项目的软件文档中抽取近似代码元素;所述代码元素匹配模块用于对近似代码元素和上述源代码解析模块解析出的代码元素进行匹配,若近似代码元素和代码元素相同,则建立文档与代码间的关联关系本文档来自技高网
...
一种软件文档中核心代码元素的挖掘方法及系统

【技术保护点】
一种软件文档中核心代码元素的挖掘方法,其特征在于,包括以下步骤:1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档‑代码关联关系集合;2)从候选文档‑代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;3)将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。

【技术特征摘要】
1.一种软件文档中核心代码元素的挖掘方法,其特征在于,包括以下步骤:1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;2)从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;3)将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。2.如权利要求1所述的方法,其特征在于,步骤1)包括以下子步骤:1-1)对获取的软件文档进行解析:根据XML标签抽取软件文档中有意义的文本部分,构建软件文档对应的文档实体;对文档内容进行分段,并识别和标明文档中的代码片段和超链接;根据文档内容中存在的“<code>”和“</code>”识别文档中的代码片段;1-2)对获取的软件源代码进行解析:基于所获取的源代码,利用工具JDT,生成抽象语法树;遍历抽象语法树,获取软件项目的代码元素列表,基于代码元素之间的关联关系并构建代码结构图;1-3)基于程序语法规则和命名规则构建正则表达式,根据正则表达式从步骤1-1)中的软件文档实体中抽取近似代码元素,并将其和步骤1-2)中获取的代码元素列表进行匹配,若近似代码元素和某个代码元素相同,则建立相应文档实体与代码元素间的关联关系,得到候选文档-代码关联关系集合。3.如权利要求1所述的方法,其特征在于,步骤2)包括以下子步骤:2-1)从文档中提取特征,提取的特征包括:词频特征、代码元素在文档中的位置特征、文档中的特定句法、文档与代码元素注释的文本相似度、关联文档中代码元素的词频特征;2-2)从代码中提取特征,提取的特征包括:代码元素的类型、代码元素间的关联以及代码元素间的距离;2-3)基于从文档和代码中提取的特征,按照libSVM格式构建用于度量软件文档与软件代码间关联关系的特征向量。4.如权利要求1所述的方法,其特征在于,步骤3)包括以下子步骤:3-1)对每个标注好核心代码元素的文档,抽取文档和代码特征构建特征向量,输入基于决策树的分类模型进行学习,通过调优参数得到分类学习模型;3-2)基于分类学习模型识别软件文档的核心代码元素,当文档中某代码元素获取的度量值的排名超过阈值时,该代码元素为该文档的核心代码元素。5.一种软件文档中核心代码元素的挖掘系统,其特征在于,包括:软件文档与软件代码预处理模块,用于对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;特征抽取模块...

【专利技术属性】
技术研发人员:邹艳珍曹英魁谢冰
申请(专利权)人:北京大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1