CN103927176A - 一种基于层次主题模型的程序特征树的生成方法 - Google Patents
一种基于层次主题模型的程序特征树的生成方法 Download PDFInfo
- Publication number
- CN103927176A CN103927176A CN201410156738.7A CN201410156738A CN103927176A CN 103927176 A CN103927176 A CN 103927176A CN 201410156738 A CN201410156738 A CN 201410156738A CN 103927176 A CN103927176 A CN 103927176A
- Authority
- CN
- China
- Prior art keywords
- program
- topic model
- tree
- performance
- class file
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了软件工程领域内的一种基于层次主题模型的程序特征树的生成方法,程序特征树以树的形式将系统的特征按层次展示出来,在该树中,父节点是各种特征的混合,孩子节点都是父节点的子特征,叶子节点则为划分最细的特征,我们还将叶子节点的特征与相应的类文件进行匹配识别,该方法可有效地辅助软件维护过程中的程序理解。本发明涉及到的关键操作包括:(1)对整个软件系统进行预处理,提取其中的用户自定义标识符和注释(2)对预处理后的整个软件系统采用层次主题模型,为软件系统构建程序特征树。(3)将叶子节点的特征与相应的代码进行匹配识别。
Description
技术领域
本发明涉及一种程序理解方法,特别涉及一种建立程序特征树的方法。
背景技术
软件产品一般在满足用户不断更改的需求中需要不断地升级和维护。为了实现某个维护请求,开发人员首先需要理解整个软件系统,特别是对程序的理解。程序理解是软件维护过程中最频繁的工作。通常情况下,在软件维护过程中程序理解要占到60%以上的时间。随着软件系统的不断发展,整个系统的规模越来越大,复杂度也越来越高。为了辅助这项工作,一些程序理解技术采用聚类方法将系统划分为一些更小、更集中和更易于理解的子系统,或者采用程序依赖图来辅助开发人员理解软件系统的结构。这些方法主要的依据是程序元素之间的静态结构依赖关系。由于程序理解的目标是理解系统的一些功能点和不同的源代码是如何对应那些相关的功能特征的。因此,这些程序理解技术会忽视系统的功能特征。此前几乎没有技术可以快速直观的提供系统的特征或者主题。然而特征或者主题可以有效的帮助开发人员得到一个软件系统总体功能方面的特征信息。此外,在不同的特征层次尤其是从总体到部分会为开发人员建立一个更加易于理解的系统结构。在这个多层特征结果辅助下,开发人员会对整个系统有一个更加简单、逐步和快速的理解。
层次主题模型是指主要建立在隐含狄利克雷分布的主题模型。隐含狄利克雷分布(Latent Dirichlet Allocation简称LDA)是一种分析非结构化文本语料库的概率模型。隐含狄利克雷分布的主题模型可以提取概括整个文档的主题。层次主题模型不仅可以提取整个文档的主题而且可以将所提取出来的主题进行分层。我们利用层次主题模型为经过预处理的软件系统进行建模,为软件系统建立有层次的主题模型,最终生成软件系统的程序特征树,程序特征树以树的形式将系统的特征按层次展示出来,在该树中,父节点是特征的混合,孩子节点都是父节点的子特征,叶子节点则为划分最细的特征,最后,对叶子节点的特征与相应的代码进行匹配识别。软件系统的特征以树的形式展示出来,并且在最细的特征层次的节点识别匹配到相应的类文件,便于开发人员快速、准确、形象地理解软件系统。
发明内容
本发明的目的是提供一种基于层次主题模型的程序特征树的生成方法,使得开发人员可对整个系统有一个更加简单、逐步和快速的理解。
本发明的目的是这样实现的:一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤如下:
步骤1) 导入需要理解的软件系统的源代码;
步骤2) 提取用户自定义标识符以及注释作为研究对象,并对其进行预处理;
步骤3) 利用层次主题模型为经过预处理的对象进行建模,生成该系统的程序特征树,该程序特征树中的程序特征即为主题模型中提取的主题;
步骤4) 将叶子节点的特征与软件系统内的所有类文件进行匹配;
步骤5) 判断程序特征树是否有利于理解软件系统的大部分代码,是则输出程序特征树。
作为本发明的进一步限定,步骤2)的预处理过程包括以下步骤:
a)删除语义上和编程语言相关的关键字;
b)对一些按照驼峰规则和有下划短线相连的组合词进行分词;
c)去除英语停用词;
d)将词语的不同形式进行归一化。
作为本发明的进一步限定,步骤3)在建模时,先设定层次主题模型的层次L以及给定主题的数目K。
作为本发明的进一步限定,步骤4)的具体方法为,将所有类文件逐一与叶子节点的每个特征进行匹配,若某个类文件包含某个特征,则该类文件被分配到与该特征相关的集合中,并且,该类文件还需与其他特征进行匹配,即一个类文件可具有多个特征,同样一个特征下可具有多个类文件。
作为本发明的进一步限定,步骤5)的具体方法为,当软件系统中匹配成功的类文件数量占总类文件数量百分比大于等于80%时,判定程序特征树有利于理解软件系统的大部分代码,则输出程序特征树,否则回到步骤7)调节层次主题模型的层次和主题数目重新建模,重新将叶子节点的主题与相关类文件进行匹配。
与现有技术相比,本发明的有益效果在于, 本发明从整体到部分对系统特征分层会为开发人员建立一个更加易于理解的系统结构。在这个层次特征结果辅助下,开发人员会对整个系统有一个更加简单、逐步和快速的理解,可用于软件开发维护中。主要有如下一些优点:
(1)本发明提出利用层次LDA主题模型进行软件主题的提取,可以分析软件的功能方面的特征,从而更有助于软件开发人员对程序的直接理解和分析,找到他们感兴趣的功能代码;
(2)该发明对软件的各个特征层次进行理解,而不限于某一单一特征进行软件理解,它给出一种逐步求精的从整体到部分软件理解过程,更符合开发人员的实际软件理解过程;
(3)该发明所提出的各个特征层次的软件理解都是基于层次主题模型,目前,层次主题模型已有很多现成的工具可用。因此,该方法实施比较容易。
(4)之前程序理解方法主要的依据是程序元素之间的静态结构依赖关系。这些程序理解技术会忽视系统的功能特征而且过程复杂。特征或者主题可以有效的帮助开发人员得到一个软件系统总体功能方面的特征信息。此外,在不同的特征层次尤其是从总体到部分会为开发人员建立一个更加易于理解的系统结构。在多层特征结果辅助下,开发人员会对整个系统有一个更加简单、逐步和快速的理解。
附图说明
图1是生成程序特征树的流程图。
图2是预处理的流程图。
图3是为JHotDraw软件系统的一段源代码。
图4是本发明程序特征树示意图。
具体实施方式
下面结合具体实施例对本发明做进一步说明。
如图1-2所示,一种基于层次主题模型的程序特征树的生成方法,包括如下步骤:
步骤1) 导入需要理解的软件系统的源代码,此处例举出JHotDraw软件系统源代码的一部分进行说明,源代码如图3所示。
步骤2) 提取用户自定义标识符以及注释作为研究对象,并对其进行预处理;研究对象如下表1所示。
表1。
预处理过程包括以下步骤:
a) 删除语义上和编程语言相关的关键字,编程语言中有很多的关键字,而它们在我们理解程序的过程中是没有意义的,比如abstract、case、int、return等,将其删除,处理后如表2所示。
表2。
b) 对一些按照驼峰规则和有下划短线相连的组合词进行分词,“骆驼拼写法”又分为两种:第一个词的首字母小写,后面每个词的首字母大写,叫做“小骆驼拼写法”(lowerCamelCase);第一个词的首字母,以及后面每个词的首字母都大写,叫做“大骆驼拼写法”(UpperCamelCase),又称“帕斯卡拼写法”(PascalCase),处理后如表3所示。
表3。
c) 去除英语停用词,一些停用词包括 the、it、on、a、by、to、of 等,处理后如表4所示。
表4。
d) 将词语的不同形式进行归一化,就是将看起来不一致的多个词条归纳成一个等价类;比如changing变为change, figures转换为figure,处理后如表5所示。
表5。
步骤3)另选取4段源代码,通过预处理过程后得到的数据如表6所示。
表6。
步骤4) 利用层次主题模型为经过预处理的五个对象进行建模,给定层次模型的层次数目3,主题数目4,生成该系统的程序特征树,在经过前面的预处理之后的软件系统已经可以作为运用信息检索技术的对象,对所有经过处理的类文件运用层次主题模型建模。
步骤4) 将所有类文件逐一与叶子节点的每个特征进行匹配,若某个类文件包含某个特征,则该类文件被分配到与该特征相关的集合中,并且,该类文件还需与其他特征进行匹配,即一个类文件可具有多个特征,同样一个特征下可具有多个类文件。
步骤5) 判断程序特征树是否利于理解软件系统的大部分代码,当软件系统中匹配成功的类文件数量占总类文件数量百分比大于等于80%时,判定程序特征树有利于理解软件系统的大部分代码,则输出程序特征树,否则回到步骤7)调节层次主题模型的层次和主题数目重新建模,重新将叶子节点的主题与相关类文件进行匹配;上例中5个类文件全部分配到与主题当对应的类文件的集合中,比例为100%,该树则是最终生成的程序特征树,如图4所示。如果与主题匹配的类文件数目小于4,类文件匹配到相关的主题中的比例未达到80%,则回到步骤3)。
本发明并不局限于上述实施例,在本发明公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。
Claims (5)
1.一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤如下:
步骤1) 导入需要理解的软件系统的源代码;
步骤2) 提取用户自定义标识符以及注释作为研究对象,并对其进行预处理;
步骤3) 利用层次主题模型为经过预处理的对象进行建模,生成该系统的程序特征树,该程序特征树中的程序特征即为主题模型中提取的主题;
步骤4) 将叶子节点的特征与软件系统内的所有类文件进行匹配;
步骤5) 判断程序特征树是否有利于理解软件系统的大部分代码,是则输出程序特征树。
2.根据权利要求1所述的一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤2)的预处理过程包括以下步骤:
a)删除语义上和编程语言相关的关键字;
b)对一些按照驼峰规则和有下划短线相连的组合词进行分词;
c)去除英语停用词;
d)将词语的不同形式进行归一化。
3.根据权利要求2所述的一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤3)在建模时,先设定层次主题模型的层次L以及给定主题的数目K。
4.根据权利要求3所述的一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤4)的具体方法为,将所有类文件逐一与叶子节点的每个特征进行匹配,若某个类文件包含某个特征,则该类文件被分配到与该特征相关的集合中,并且,该类文件还需与其他特征进行匹配,即一个类文件可具有多个特征,同样一个特征下可具有多个类文件。
5.根据权利要求4所述的一种基于层次主题模型的程序特征树的生成方法,其特征在于,步骤5)的具体方法为,当软件系统中匹配成功的类文件数量占总类文件数量百分比大于等于80%时,判定程序特征树有利于理解软件系统的大部分代码,则输出程序特征树,否则回到步骤7)调节层次主题模型的层次和主题数目重新建模,重新将叶子节点的主题与相关类文件进行匹配,可用于软件开发维护中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410156738.7A CN103927176B (zh) | 2014-04-18 | 2014-04-18 | 一种基于层次主题模型的程序特征树的生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410156738.7A CN103927176B (zh) | 2014-04-18 | 2014-04-18 | 一种基于层次主题模型的程序特征树的生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103927176A true CN103927176A (zh) | 2014-07-16 |
CN103927176B CN103927176B (zh) | 2017-02-22 |
Family
ID=51145408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410156738.7A Active CN103927176B (zh) | 2014-04-18 | 2014-04-18 | 一种基于层次主题模型的程序特征树的生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103927176B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104166550A (zh) * | 2014-08-13 | 2014-11-26 | 扬州大学 | 一种面向软件维护的修改请求重新定制的方法 |
CN104572111A (zh) * | 2015-01-20 | 2015-04-29 | 扬州大学 | 一种基于相关主题模型的程序理解和特征定位方法 |
CN107038380A (zh) * | 2017-04-14 | 2017-08-11 | 华中科技大学 | 一种基于程序特征树的漏洞检测方法及系统 |
WO2021070005A1 (en) * | 2019-10-08 | 2021-04-15 | International Business Machines Corporation | Rare topic detection using hierarchical clustering |
CN113641588A (zh) * | 2021-08-31 | 2021-11-12 | 北京航空航天大学 | 一种基于lda主题建模的软件可理解性确定方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722501A (zh) * | 2011-03-31 | 2012-10-10 | 北京百度网讯科技有限公司 | 搜索引擎及其实现方法 |
CN103226580A (zh) * | 2013-04-02 | 2013-07-31 | 西安交通大学 | 一种面向交互文本的话题识别方法 |
-
2014
- 2014-04-18 CN CN201410156738.7A patent/CN103927176B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722501A (zh) * | 2011-03-31 | 2012-10-10 | 北京百度网讯科技有限公司 | 搜索引擎及其实现方法 |
CN103226580A (zh) * | 2013-04-02 | 2013-07-31 | 西安交通大学 | 一种面向交互文本的话题识别方法 |
Non-Patent Citations (4)
Title |
---|
刘红艳: ""基于hLDA层次主题模型的多文档摘要技术研究"", 《中国优秀硕士学位论文全文数据库》 * |
孙辞海等: ""基于语法特征树的代码知识点自动识别"", 《微计算机信息》 * |
封战胜: ""基于 GCC 抽象语法树文本的C源程序语义分析方法研究"", 《中国优秀硕士学位论文全文数据库》 * |
张良德: ""一种基于GCC抽象语法树的程序特征提取方法"", 《电子技术与软件工程》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104166550A (zh) * | 2014-08-13 | 2014-11-26 | 扬州大学 | 一种面向软件维护的修改请求重新定制的方法 |
CN104572111A (zh) * | 2015-01-20 | 2015-04-29 | 扬州大学 | 一种基于相关主题模型的程序理解和特征定位方法 |
CN104572111B (zh) * | 2015-01-20 | 2017-12-01 | 扬州大学 | 一种基于相关主题模型的程序理解和特征定位方法 |
CN107038380A (zh) * | 2017-04-14 | 2017-08-11 | 华中科技大学 | 一种基于程序特征树的漏洞检测方法及系统 |
CN107038380B (zh) * | 2017-04-14 | 2019-07-05 | 华中科技大学 | 一种基于程序特征树的漏洞检测方法及系统 |
WO2021070005A1 (en) * | 2019-10-08 | 2021-04-15 | International Business Machines Corporation | Rare topic detection using hierarchical clustering |
GB2604276A (en) * | 2019-10-08 | 2022-08-31 | Ibm | Rare topic detection using hierarchical clustering |
CN113641588A (zh) * | 2021-08-31 | 2021-11-12 | 北京航空航天大学 | 一种基于lda主题建模的软件可理解性确定方法及系统 |
CN113641588B (zh) * | 2021-08-31 | 2024-05-24 | 北京航空航天大学 | 一种基于lda主题建模的软件可理解性确定方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103927176B (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109388795B (zh) | 一种命名实体识别方法、语言识别方法及系统 | |
CN106649783B (zh) | 一种同义词挖掘方法和装置 | |
KR102491172B1 (ko) | 자연어 질의응답 시스템 및 그 학습 방법 | |
CN101079024B (zh) | 一种专业词表动态生成系统和方法 | |
CN108363816A (zh) | 基于句义结构模型的开放式实体关系抽取方法 | |
CN104199972A (zh) | 一种基于深度学习的命名实体关系抽取与构建方法 | |
US10528664B2 (en) | Preserving and processing ambiguity in natural language | |
CN102298638A (zh) | 使用网页标签聚类提取新闻网页内容的方法和系统 | |
CN112395385B (zh) | 基于人工智能的文本生成方法、装置、计算机设备及介质 | |
CN103778207A (zh) | 基于lda的新闻评论的话题挖掘方法 | |
US10706030B2 (en) | Utilizing artificial intelligence to integrate data from multiple diverse sources into a data structure | |
CN102033880A (zh) | 基于结构化数据集合的标注方法和装置 | |
CN111143571B (zh) | 实体标注模型的训练方法、实体标注方法以及装置 | |
CN103927176A (zh) | 一种基于层次主题模型的程序特征树的生成方法 | |
CN103324626A (zh) | 一种建立多粒度词典的方法、分词的方法及其装置 | |
CN108665141B (zh) | 一种从突发事件预案中自动抽取应急响应流程模型的方法 | |
CN110188359B (zh) | 一种文本实体抽取方法 | |
CN103324700A (zh) | 一种基于Web信息的本体概念属性学习方法 | |
Jayan et al. | A hybrid statistical approach for named entity recognition for malayalam language | |
CN101308512B (zh) | 一种基于网页的互译翻译对抽取方法及装置 | |
Al-Debagy et al. | A new decomposition method for designing microservices | |
CN106547765B (zh) | 基于sql的数据库管理方法及装置 | |
CN105786971B (zh) | 一种面向国际汉语教学的语法点识别方法 | |
CN115687563A (zh) | 一种可解释的智能判决方法、装置、电子设备及存储介质 | |
CN104123336A (zh) | 深度玻尔兹曼机模型及短文本主题分类系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |