柳 郁,孙小兵,2+,李 斌,2
1.扬州大学 信息工程学院,江苏 扬州 225127
2.南京大学 计算机软件新技术国家重点实验室,南京 210023
面向Java程序包的代码概要自动生成技术研究*
柳 郁1,孙小兵1,2+,李 斌1,2
1.扬州大学 信息工程学院,江苏 扬州 225127
2.南京大学 计算机软件新技术国家重点实验室,南京 210023
程序理解是从软件程序中获得抽象在程序中的功能和知识的过程,对软件维护有着重要的意义。研究表明,软件维护消耗了软件预算的50%到80%,而其中大概47%到62%的维护时间用于对软件系统的理解上。提出了一种面向Java程序的包概要方法,尝试从软件的语义层次出发,利用信息索引领域的潜在语义分析和数据挖掘领域的聚类算法对软件程序中的语义信息进行提取分析。对相似词汇的代码文件进行聚类,并从中提取话题对Java程序中的包进行刻画;对这些话题进行语义恢复,并利用MiniPar,一个英文词法分析器,来辅助生成程序中包的概要信息。实验结果表明该方法能够改进程序理解的效率。
程序理解;潜在语义分析;聚类;话题;概要化
软件系统生存期往往长达数十年,长时间的软件维护与演化使得遗留软件系统中包含了众多知识,包括源代码、文档等。这些遗留软件有两大特征:海量的代码文件和过时的说明文档。长时间的运行和升级,使得遗留软件系统中的程序代码和说明文档不一致,导致所维护的代码变得复杂和难以理解。据统计,在软件维护过程中,高达60%的时间花费在软件理解上,特别是对程序代码的理解[1-2]。在软件理解过程中,源程序成为程序理解的主要信息来源。程序理解是从软件系统程序中获得抽象在程序中的功能和知识的过程[3]。程序代码中包含两方面的信息:一方面是基于程序组成部分间的依赖关系形成的结构信息[4-5];另一方面是凝结着开发员知识的语义信息[6]。正是这些程序代码中包含着自然语言信息的标识符和注释内容,可以方便开发人员对程序语义功能方面的理解。
以往的程序理解技术注重对程序结构的分析[5],通过对源程序的剖析,检查每个程序文件的程序设计结构,追踪对象的继承、依赖关系,分析程序的数据结构、标准算法和控制流程。通过图形方式将这些信息反馈给开发维护人员,如程序的抽象语法树、类继承视图、函数调用图等。相比较而言,近来基于语义信息的程序理解方法更注重于理解程序语义功能,特别是能自动生成与代码对应的概要,这样有助于开发人员直接根据这些概要来理解程序代码,特别是对于那些无文档或者文档较少的程序代码,这些概要能够辅助理解这些代码。
基于语义信息的方法通常是利用程序代码中所包含的语义信息进行分析,根据最终提取的话题来帮助理解程序。例如,Maletic等人利用潜在语义分析技术对一款Moisc软件的代码与文档进行语义分析辅助对程序的理解[7]。Kuhn等人利用语义聚类的方法对几个开源项目(如JEdit、JBoss等)的程序代码进行分析理解[8]。然而这些方法所提取的话题由多个独立的单词组成,在语义上缺乏连贯性,需要程序开发、维护人员事先对软件系统有一定的理解。本文尝试利用语义恢复的方法解决这一问题。以软件程序中的语义信息作为分析材料,通过信息检索等技术提取能够表征系统的话题,并利用语义恢复方法对话题的语义进行恢复,利用MiniPar[9]辅助生成对软件程序的概要信息。本文目的在于:
(1)分析包结构的语义成分。不同功能模块间的词汇存在差异,通过分析包结构的语义成分,可以得到包的功能组成。
(2)生成包层次的概要信息。可以在包层次生成概要信息,这些概要信息反映了程序包的统计信息和语义信息两部分,有助于开发人员迅速理解程序。
本文组织结构如下:第2章介绍研究方法所使用到的信息检索和数据挖掘技术;第3章详细地介绍本文方法;第4章进行案例分析和实验评估;最后对方法进行总结和展望。
2.1 潜在语义分析
潜在语义分析(latent semantic indexing,LSI)是信息检索技术中常用的技术[10-11],利用数学上的奇异值分解(sigular value decomposition,SVD)来分析术语和概念间的关系模式,并以良好的降维、降噪著称[10]。潜在语义分析被广泛运用到信息检索和文本处理中,如论文审核、文档分类等应用中[12]。
在潜在语义分析技术中,文档集合被表示为术语和文档矩阵(term-document matrix),矩阵的每一列表示一个文档,矩阵的每一行表示一个术语。对于矩阵的每一个单元ai,j,表示术语ti出现在文档dj中的频率。对于一个m行n列的文本空间,奇异值分解将其分解为3个矩阵:一个m行r列的术语矩阵、一个r行r列的奇异值矩阵和一个r行n列的文档矩阵[11]。奇异值分解将奇异值矩阵截取为k阶,k远远小于r。类似地将术语矩阵截取到m行k列,将文档矩阵截取到k行n列,于是可以得到原始矩阵的一个只有k阶近似的矩阵,这个矩阵保留了原始矩阵中尽可能多的信息,但将它们拆分到了更小维度。人们不仅可以得到近似矩阵,还可以得到术语与术语的关系矩阵以及文档与文档的关系矩阵,因此利用LSI可以实现对术语与文档、术语与术语以及文档与文档的相似度计算。文档的相似度通常采用余弦相似度来表示,对于两个文档向量A和B,它们之间的相似度可以表示为:
总的来说,潜在语义分析以一个术语文档矩阵作为输入,出于对术语出现频率的考虑,需要对文本空间进行加权,常用的加权算法为TF-IDF[13-14]。TFIDF加权算法由两部分组成,术语频率(tf)和逆文件频率(idf),权重由这两部分相乘得到,即w=tf*idf。SVD对原始文本空间进行分解,并将其截取到较低的维度,同时保存了原始文本空间尽可能多的信息。
2.2 聚类算法
聚类是将对象集合分成由类似的对象组成的多个类的过程。聚类算法有多种,传统的算法有:划分方法如K-means算法,层次方法如AHC(agglomerative hierarchical clustering)算法,基于密度的方法如DBSCAN(density-based spatial clustering of application with noise)算法等[15-16]。本文使用自下向上的层次聚类算法(AHC算法)[15,17]。
层次聚类算法又叫树聚类算法,它根据数据的联接规则,通过层次架构方式,反复将数据进行分割或者聚合,来解决层次序列的聚类问题。AHC算法是一种自下向上的层次聚类方法,实质是自下向上合并为一棵层次树的过程[17]。初始每个对象对当作一个聚类,两个聚类根据其相似度或者距离合并成一个聚类。这里利用余弦距离来表示两个聚类间的距离或者相似性。
随着程序的不断修改,程序文档会过时或者有些文档会丢失,这给开发人员理解程序带来了困难,如果能自动生成程序代码的概要,可有效帮助开发人员理解程序。
而在软件开发过程中,相同类型的文件如功能往往被归档在一个包文件中,即包往往是某一功能的集合。另外,包文件通常包含足够多的代码文件,也就是说包含一定的语义信息。本文主要以Java程序中包层次作为语料库进行分析,本部分将对技术细节进行详细介绍。
3.1 技术流程
本文的技术方法分为4部分,如图1所示。首先从软件程序中提取语义信息;接下来是对这些语料信息进行预处理,包括组合词分割、去除停用词等;然后利用潜在语义分析技术和聚类技术提取软件程序中的话题并恢复这些话题的语义信息;最后生成相应的概要信息。
Fig.1 Process of this paper approach图1 方法流程
3.2 实现方法
3.2.1 预处理
由于目标对象是软件程序代码,其中存在着许多影响信息检索技术有效性的元素,如程序代码中包含大量无语义的逻辑代码,一个单词的多种词形,注释中包含常见无意义单词,文本长度和单词出现频率不一致问题等。
在预处理阶段,从提取源码中的类名、方法名、属性和注释入手,按照Java的编程风格规范,标识符必须有一定的含义,开发人员在编写代码时将具体的对象、业务流程转化为具有一定含义的代码。类名、方法名、属性和注释最集中反映了这些语义信息。为了解决以上的各种问题,按照如下的流程进行预处理操作。
(1)组合词分割。Java代码通常遵从一定的编码风格,如驼峰风格,在标识符命名上也往往由多个有具体含义的单词组成。在类名命名上,往往由多个大写字母开头的单词组成,如FileFilter、IOException等。在属性命名上和方法名类似,第一个单词小写,如果其后又有单词,则其后的单词首字母大写,如getTime、arrayCopy等。本文按照这些命名规则,将提取的类名、方法名、属性名和注释进行分割得到独立的单词。
(2)去除停用词。在提取的词汇中,会包含一些没意义的词,如do、doing、of、in、everything等,这些没用的信息需要排除,本文利用自定义的停用词表来去除停用词。
(3)截取词干[18]。在文本中,相同含义的单词会有不同的形式,以remove为例,有removing、removed、removes等形式,可以将单词截取到remove词根。这样做的好处是可以降低文本空间,避免话题中出现同词根的情况。
(4)加权。原始的术语文档矩阵中,每一个单元表示相应术语在文档中出现的次数。这种表示方法在文档长度不同以及部分词汇在文档集中大量或较少出现的情况下存在着较大的不合理性。本文采用TF-IDF算法进行加权。
3.2.2 聚类和话题提取
在该步骤中,通过对包含相似词汇的文档进行聚类,并根据单词和聚类的相似度提取前n个单词作为对应聚类功能的描述。在使用层次聚类过程中,为了降低空间维度以及去除原始空间的噪音,首先利用潜在语义分析获得原始文本空间的近似空间[6,9,11]。由于每个文档由组成它的词组向量表示,文档间的相似度可以通过两个文档向量的余弦距离表示,两个文档向量间夹角越小,两个文档越相似,余弦距离的绝对值越接近1,否则余弦距离接近0。在层次聚类中根据对象间的距离进行聚类,需要将相似关系转化为距离关系,可以采用如下公式:
通过层次聚类,可以获得文本空间聚类的基本分布情况,由此可以划定聚类个数。不同的功能使用不同的词汇,聚类的结果反映了包中所包含的功能。根据单词和聚类的相似度对包的聚类进行话题提取,取前5个单词组成对聚类描述的话题。
3.2.3 生成概要信息
在这一阶段,将已经提取的话题去匹配标识符中的组合词。这样做的目的是因为在词汇的提取过程中,需要对组合词进行分割。比如方法名getTime被分解为get和time两个单词,getTime所反映的信息是获取时间,当话题提取到这两个单词的任何一个时都无法完整表示其本来的语义信息。本文尝试通过利用已提取的话题,去查找匹配频率较高的组合词,获取该话题可能代表的语义信息。
Java的代码风格使得人们可以根据标识符来获得更多的信息。Java的类名往往由一个或多个名词组成,属性也类似,方法名通常由动词开头接上名词或者由名词组成。本文将这些组合词再次分割,并将分割后的多个单词作为输入,利用MiniPar来进行词性分析。这样根据话题匹配的结果可以定义概要的生成规则如表1所示。
对于最终包的概要内容,本文主要提供两个统计信息和两个分析信息。这两个统计信息是包中所含类的个数和包的聚类个数以及聚类分布情况;另外,提供包总聚类的话题以及根据这些话题分析生成的概要信息。预设生成的概要模式如下:
Table 1 Rules to generate summarization表1 概要信息生成规则
3.3 一个实际系统案例分析
这里选取了Eclipse环境中的IO包作为分析对象。首先载入需要分析的包文件,预处理程序将会从程序文件提取出含有语义信息的类名、方法名、属性和注释内容,并对其中的组合词进行分割。本文利用潜在语义分析建立术语文档矩阵。
IO包中含有85个类文件,31 335行代码,3 388个方法和1 341个属性。原始空间包含85个源码文档,文档词汇数主要分布在100~200间,其中4个文档包含词汇在300以上。文档长度集中在500左右,而部分文档则达到了4 000以上,从这一点可以看出对原始空间加权的必要性,不同文档长度会导致不同文档中部分词汇出现频率过高。TF-IDF算法一方面考虑单词在文档中的作用,采用该单词频数在文档长度中的比重作为局部权重,而逆向文件频数则对出现该单词文档数目在文档集中的比重取对数,则该单词权重由局部权重乘以逆向文件频数得到。
本文对原始文本空间进行潜在语义分析,获得原始空间的近似空间。文档被表示为词汇频率的向量,文档间的相似度通过余弦距离表示,取值范围在[-1,1]之间,数值的绝对值越接近于1,则两个文档越相似,距离越近;反之越不相似,距离越远。在利用层次聚类时,需要将相似度转化为距离。层次聚类的结果展示为一棵层次树,文档对象根据相互间的距离聚合成一个聚类。
观察表2中提取的话题,聚类1中话题内容为exception onversion get put invalid,由此可以推断出聚类1的功能为打印流、写打印和缓冲相关。聚类5中话题为serializable object file read input,由此可以推断出这部分功能为读与文件和目录相关。
Table 2 Topics of IO package表2 IO包话题
对于该IO包,可以生成两方面信息:统计信息关于文件数目和聚类结果,语义信息主要是提取的话题和生成的概要信息,如下:
本部分将利用具体的软件系统来对本文技术进行实验评估。实验将对Java源码rt.jar中java目录中的几个包文件进行分析。实验评估主要关注如下三方面:
(1)聚类效果。聚类效果采用经验分析,通过实验小组成员对源码进行阅读,人工划定文本聚类,并和工具的聚类结果进行比较。
(2)话题提取。话题同样采用人工阅读源码的方法给出话题,并与本文的工具进行比较。
(3)概要有效性。概要的有效性通过分组比较,一组成员阅读程序进行理解,另一组通过阅读概要信息,再和经验概要信息比较,以此判定概要信息的有效性。
4.1 参数设置
以下将对实验过程中本文技术所涉参数进行设定,并给出合理的参数经验值。
(1)术语文档矩阵的加权。考虑到文档长度对词频的影响以及权衡出现频率较高和频率较低的单词,对术语文档矩阵进行加权操作是信息检索中常见的处理方法。本文采用的TF-IDF加权算法是常见的一种加权算法。
(2)LSA-space维度。在利用LSI对原始的文本空间进行降维和降噪操作时,利用一个近似空间来代替原始文本空间。在对奇异值向量进行截取的过程中,截取的数值k越接近奇异值向量的长度,则近似矩阵越接近原始矩阵。考虑到本文分析的对象为近百篇文档近千个词汇的包文件,建议将k设置在原始规模的20%,即在10到20范围内。
(3)聚类数。在使用层次聚类的过程中,由于聚类规模的划定是通过观测聚类树得到的,在聚类数目划定时,不宜将数目划定得过大,这样不利于话题的提取。这里根据文献[7-8]来进行聚类数的设置,设置在5个。
(4)话题数。本文的概要信息基于提取的话题,由于需要将话题用来匹配包含这些话题的组合词,话题的设置会影响提取的组合词个数。这里同样根据文献[7-8]将话题数控制在5个左右。
4.2 实验结果与分析
在实验阶段,将实验人员进行分组,一部分小组阅读人工提取信息,一部分小组阅读工具提取信息,通过比较评分来对方法进行评估。对于评估结果,采用差、中、好3个等级,并给出问题的评注。在聚类效果评估中,关注聚类数目和文档归类情况两部分。在概要信息部分,关注概要的可理解性。
经过对多个软件程序的处理分析,得到如下实验结果。
(1)聚类效果。由于聚类算法种类多样,聚类效果也有不同。考虑到这一现实,很难对聚类算法的优劣给出一个评估标准。本文在这一阶段通过人工阅读程序文件,分析工具聚类结果是否合理。同样将人员分成5个小组进行评估,评估结果如表3所示。
从表3中可以看到,有3组聚类效果还是得到了实验人员的认可,但是还有两组聚类效果不是很满意。详细分析原因,主要是源码语义信息进行聚类存在的明显问题就是归档不合理和聚类数目不合理。而表中结果也反映了几乎所有的组别均出现了归档不合理的情况。对于这种问题,如异常处理类可能会与相应的类使用近似的词汇,即使在功能上不同,但由于存在较多相似的词汇,相似度较高,有可能被划分到一个聚类中。而出现这些结果主要是由于采用层次聚类,聚类数目的设定是通过观察聚类树得到的,具有一定的不稳定性。
Table 3 Evaluation of clustering results表3 聚类评估结果
(2)话题提取。话题是基于单词和聚类的相似度提取前n个。在实验过程中,将实验人员分为5组,每一组先阅读工具提取的话题,再阅读程序源码,通过人工判断工具提取话题的效果,评估结果如表4所示。
Table 4 Evaluation of topics表4 话题评估结果
从表4结果中可以看到,实验人员对话题整体还是认可的,基本可以通过这些话题对程序进行一定的理解。但是在通过阅读代码来评估话题的过程中存在着两个主要问题,即看不懂的缩写和不具有代表性的话题。造成这种差距的原因是多方面的:第一,在人工阅读的过程中,对程序的理解并不是单纯的基于词频,而工具分析的基础是考虑词频。第二,在工具过滤停用词的时候没法达到人类那样效果显著,所有的停用词都是预设的,不能满足所有的情况。第三,在开发过程中会有大量开发人员约定的缩写,如果这些缩写包含对功能的描述,往往会占有较高的频率,然而这些缩写对于新接触的人来说是看不懂的。
(3)概要信息。在分组测试的过程中,将人员分成6组。第1、2、3小组采用直接阅读源码的方法,第4、5、6小组利用工具进行程序理解。主要对两组实验人员在理解不同程序时所需的时间进行评估。实验过程中,1、4,2、5和3、6小组分别阅读对应源程序和概要信息,实验结果如表5所示。
Table 5 Time to understand program表5 程序理解时间
从表5结果中可以看到,第1、2、3小组在理解时间上远远大于利用工具的小组,这说明了利用本文的工具所生产的程序概要能够有助于程序员对程序的理解,改进他们理解软件程序的效率。
综合来看,本文方法能够在语义上给开发和维护人员提供一定的帮助,可以改进开发人员理解程序的效率。当然,该技术还存在一些缺陷,例如在聚类数目、文档归类以及话题提取上仍然有一定的不足,这也是今后工作将要着重研究的地方。
4.3 实验威胁
在实验过程中,许多限制因素对实验的效果造成了影响。首先,聚类方法对程序代码理解时仅仅考虑代码中词汇出现的次数,而忽略了一些结构性语法,如循环语句,对词频的影响。其次,由于程序代码并不完全符合编码规范,导致预处理过程结果中包含噪音。另外,实验中聚类和层次等参数,主要依据文献[7-8]进行设定,不同的参数值可能会取得不同效果。最后,实验的对象类型较少,仅仅对Java项目源码中的几个包进行了实验。对更多类型的软件系统的实验分析将是后期工作的一部分。
程序理解是软件维护与演化过程中的一个重要活动,近来程序概要化是程序理解的一个有效手段,开发人员直接根据这些概要来理解程序代码。
Sridhara等人提出了能直接生成面向对象程序中类和方法的程序概要方法[19-20]。该方法针对不同的结构,通过细化分析程序结构中的代码变量和执行方法等信息来确定方法和类的意图;最后,通过组织代码中变量名或者是方法本身与调用方法的签名生成描述语言来概括整个方法。Dragan等人通过识别程序中的一些方法模式,并利用方法模式作为软件系统的概要化描述来分析系统[21]。如上这些方法主要考虑了程序的语法结构,根据语法结构来生成程序的概要,但是忽略了程序的语义信息。而本文则主要分析程序代码中的语义信息,能直接生成可读性更好的系统包层次的概要化信息。
Alhindawi等人也通过分析程序中的语义信息进行类的理解[22],他们主要使用了文本词的分割和辨别技术生成类文件的自然语言的注释,这些注释包含了类的一些相关信息供开发人员理解。而本文则针对Java程序中的包进行分析,利用LSI技术分析程序包中的主题,然后将这些主题整合成包的概要信息供开发人员理解。
本文提出了语义恢复和概要的方法来进行包层次的程序理解,利用语义恢复的方法对由多个独立单词组成的话题进行语义恢复,并利用MiniPar生成对包层次的概要信息。通过多次实验表明,本文方法可以生成程序的基本语义信息,提供可读性较强的概要信息,有助于开发人员快速理解程序。因此,对于那些缺少文档或者文档较少的软件代码,本文提出的包层次的概要化方法可有效地帮助开发人员理解整个软件。但本文方法依然存在着一些不足之处,具体如下:
(1)停用词表需要针对软件工程领域做出调整。软件程序中的语义信息和自然语言文本信息有一定的差异,停用词表并不通用,需要根据软件工程领域制定合适的停用词表。
(2)权衡注释和标识符比重。在提取过程中,文档中的标识符数量远远少于注释中的内容,注释中的对功能描述影响不大的词汇可能因频率而影响标识符的作用,需要进行一定的权衡。
(3)拓展工具使用范围。目前工具仅支持Java程序,可进一步拓展到其他语言程序中。
本文后期的工作会针对这些不足进行改进,进一步提高方法的有效性和适用范围。
[1]Abran A,Bourque P,Dupuis R,et al.Guide to the software engineering body of knowledge(ironman version)[R].IEEE Computer Society,2004.
[2]Rajlich V.Software evolution and maintenance[C]//Proceedings of the 2014 Conference on Future of Software Engineering,Hyderabad,India,May 31-Jun 7,2014.New York: ACM,2014:133-144.
[3]Rugaber S.Program understanding[M]//Kent A,Williams J G.[S.l.]:Encyclopedia of Computer Science and Technology, 1996:341-368.
[4]Ducasse S,Lanza M.The class blueprint:visually supporting the understanding of glasses[J].IEEE Transactions on Software Engineering,2005,31(1):75-90.
[5]Binkley D,Beszédes Á,Islam S,et al.Uncovering dependence clusters and linchpin functions[C]//Proceedings of the 2015 IEEE International Conference on Software Maintenance and Evolution,Bremen,Germany,Sep 29-Oct 1, 2015.Piscataway,USA:IEEE,2015:141-150.
[6]Binkley D,Lawrie D J.The impact of vocabulary normalization[J].Journal of Software Evolution and Process,2015, 27(4):255-273.
[7]Maletic J I,Marcus A.Using latent semantic analysis to identify similarities in source code to support program understanding[C]//Proceedings of the 12th IEEE International Conference on Tools with Artificial Intelligence,Vietrisul Mare,Italy,Nov 15,2000.Piscataway,USA:IEEE,2000: 46-53.
[8]Kuhn A,Ducasse S,Gîrba T.Semantic clustering:identifying topics in source code[J].Information and Software Technology,2007,49(3):230-243.
[9]Nakov P,Popova A,Mateev P.Weight functions impact on LSA performance[C]//Proceedings of the EuroConference on Recent Advances in Natural Language Processing,Tzigov Chark,Bulgaria,2001:187-193.
[10]Foltz P W,Kintsch W,Landauer T K.The measurement of textual coherence with latent semantic analysis[J].Discourse Processes,2009,25(2):285-307.
[11]Deeester S,Dumais S T,Fumas G W,et al.Indexing by la-tent semantic analysis[J].Journal of the American Society of Information Science,1990,41(6):391-404.
[12]Binkley D,Heinz D,Lawrie D J,et al.Understanding LDA in source code analysis[C]//Proceedings of the 22nd International Conference on Program Comprehension,Hyderabad,India,Jun 2-3,2014.New York:ACM,2014:26-36.
[13]Dumais S T.Improving the retrieval of information from external sources[J].Behavior Research Methods:Instruments and Computers,1991,23(2):229-236.
[14]Manning C D,Raghavan P,Schutze H.Introduction to information retrieval[M].Cambridge,UK:Cambridge University Press,2008.
[15]Jain A K,Murty M N,Flynn P J.Data clustering:a review[J]. ACM Computing Surveys,1999,31(3):264-323.
[16]Steinbach M,Karypis G,Kumar V.A comparison of document clustering techniques[C]//Proceedings of the 2000 KDD Workshop on Text Mining,Boston,USA,Aug 20, 2000.New York:ACM,2000:1-2.
[17]Anquetil N,Lethbridge T.Experiments with clustering as a software remodularization method[C]//Proceedings of the 6th Working Conference on Reverse Engineering,Atlanta, USA,Oct 6-8,1999.Washington:IEEE Computer Society, 1999:235-255.
[18]Porter M F.An algorithm for suffix stripping[J].Program: Electronic Library and Information Systems,1980,14(3): 130-137.
[19]Sridhara G,Hill E,Muppaneni D,et al.Towards automatically generating summary comments for Java methods[C]// Proceedings of the 25th IEEE/ACM International Conference on Automated Software Engineering,Antwerp,Belgium,Sep 20-24,2010.New York:ACM,2010:43-52.
[20]Moreno L,Aponte J,Sridhara G,et al.Automatic generation of natural language summaries for Java classes[C]//Proceedings of the 2013 IEEE 21st International Conference on Program Comprehension,San Francisco,USA,May 20-21,2013.Piscataway,USA:IEEE,2013:23-32.
[21]Dragan N,Collard M L,Maletic J I.Using method stereotype distribution as a signature descriptor for software systems[C]//Proceedings of the 2009 IEEE International Conference on Software Maintenance,Edmonton,Canada,Sep 20-26,2009.Piscataway,USA:IEEE,2009:567-570.
[22]Alhindawi N,Dragan N,Collard M L,et al.Improving feature location by enhancing source code with stereotypes[C]// Proceedings of the 2013 IEEE International Conference on Software Maintenance,Eindhoven,The Netherlands,Sep 22-28,2013.Piscataway,USA:IEEE,2013:300-309.
LIU Yu was born in 1993.He is an M.S.candidate at Southeast University.His research interests include data mining and machine learning,etc.
柳郁(1993—),男,江苏徐州人,东南大学-蒙纳士苏州研究生院计算机专业硕士研究生,主要研究领域为数据挖掘,机器学习等。
SUN Xiaobing was born in 1985.He received the Ph.D.degree in computer science from Southeast University in 2012.Now he is an associate professor at Yangzhou University,and the senior member of CCF.His research interests include software maintenance and evolution and software data analytics,etc.
孙小兵(1985—),男,江苏姜堰人,2012年于东南大学获得博士学位,现为扬州大学副教授,CCF高级会员,主要研究领域为软件维护与演化,软件数据分析学等。发表学术论文40余篇,主持国家自然科学基金项目、江苏省教育厅自然科学基金项目等。
LI Bin was born in 1965.He received the Ph.D.degree in computer science from Nanjing University of Aeronautics and Astronautics in 2001.Now he is a professor and Ph.D.supervisor at Yangzhou University,and the senior member of CCF.His research interests include software systems and machine learning,etc.
李斌(1965—),男,江苏靖江人,2001年于南京航空航天大学获得博士学位,现为扬州大学教授、博士生导师,CCF高级会员,主要研究领域为软件系统,机器学习等。发表学术论文100余篇,主持国家自然科学基金项目等。
Research onAutomatic Summarization for Java Packages*
LIU Yu1,SUN Xiaobing1,2+,LI Bin1,2
1.School of Information Engineering,Yangzhou University,Yangzhou,Jiangsu 225127,China
2.State Key Laboratory for Novel Software Technology,Nanjing University,Nanjing 210023,China
+Corresponding author:E-mail:xbsun@yzu.edu.cn
Program comprehension is a process of acquiring knowledge from software systems and is important to software maintenance.It is estimated that about 50%to 80%software budget is spent on software maintenance,and about 47%to 62%software maintenance is spent on program comprehension.This paper proposes a novel approach to summarize the packages in a software system based on Java,which employs latent semantic indexing,a typical information retrieve technique,and hierarchical clustering to derive artifacts from source code and group source files sharing similar vocabulary.Then,topics are retrieved from these clusters and linguistic information is recovered from the generated vocabulary.Finally,this paper employs MiniPar,a parser for English language,to generate the package summarization.The experimental results show that the proposed approach can improve the efficiency of program comprehension process.
10.3778/j.issn.1673-9418.1512105
A
TP311
*The National Natural Science Foundation of China under Grant Nos.61402396,61472344(国家自然科学基金);the Postdoctoral Science Foundation of China under Grant No.2015M571489(中国博士后面上项目);the Open Funds of State Key Laboratory for Novel Software Technology of Nanjing University under Grant No.KFKT2016B21(软件新技术国家重点实验室开放课题项目); the Natural Science Foundation of the Jiangsu Higher Education Institutions under Grant No.13KJB520027(江苏省教育厅自然科学基金面上项目).
Received 2015-12,Accepted 2016-03.
CNKI网络优先出版:2016-03-07,http://www.cnki.net/kcms/detail/11.5602.TP.20160307.1710.012.html
LIU Yu,SUN Xiaobing,LI Bin.Research on automatic summarization of Java packages.Journal of Frontiers of Computer Science and Technology,2017,11(2):212-220.
Key words:program comprehension;latent semantic indexing;clustering;topic;summarization