999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向Java程序包的代碼概要自動生成技術(shù)研究*

2017-02-20 10:48:10孫小兵
計算機與生活 2017年2期
關(guān)鍵詞:語義單詞程序

柳 郁,孫小兵,2+,李 斌,2

1.揚州大學(xué) 信息工程學(xué)院,江蘇 揚州 225127

2.南京大學(xué) 計算機軟件新技術(shù)國家重點實驗室,南京 210023

面向Java程序包的代碼概要自動生成技術(shù)研究*

柳 郁1,孫小兵1,2+,李 斌1,2

1.揚州大學(xué) 信息工程學(xué)院,江蘇 揚州 225127

2.南京大學(xué) 計算機軟件新技術(shù)國家重點實驗室,南京 210023

程序理解是從軟件程序中獲得抽象在程序中的功能和知識的過程,對軟件維護有著重要的意義。研究表明,軟件維護消耗了軟件預(yù)算的50%到80%,而其中大概47%到62%的維護時間用于對軟件系統(tǒng)的理解上。提出了一種面向Java程序的包概要方法,嘗試從軟件的語義層次出發(fā),利用信息索引領(lǐng)域的潛在語義分析和數(shù)據(jù)挖掘領(lǐng)域的聚類算法對軟件程序中的語義信息進行提取分析。對相似詞匯的代碼文件進行聚類,并從中提取話題對Java程序中的包進行刻畫;對這些話題進行語義恢復(fù),并利用MiniPar,一個英文詞法分析器,來輔助生成程序中包的概要信息。實驗結(jié)果表明該方法能夠改進程序理解的效率。

程序理解;潛在語義分析;聚類;話題;概要化

1 引言

軟件系統(tǒng)生存期往往長達數(shù)十年,長時間的軟件維護與演化使得遺留軟件系統(tǒng)中包含了眾多知識,包括源代碼、文檔等。這些遺留軟件有兩大特征:海量的代碼文件和過時的說明文檔。長時間的運行和升級,使得遺留軟件系統(tǒng)中的程序代碼和說明文檔不一致,導(dǎo)致所維護的代碼變得復(fù)雜和難以理解。據(jù)統(tǒng)計,在軟件維護過程中,高達60%的時間花費在軟件理解上,特別是對程序代碼的理解[1-2]。在軟件理解過程中,源程序成為程序理解的主要信息來源。程序理解是從軟件系統(tǒng)程序中獲得抽象在程序中的功能和知識的過程[3]。程序代碼中包含兩方面的信息:一方面是基于程序組成部分間的依賴關(guān)系形成的結(jié)構(gòu)信息[4-5];另一方面是凝結(jié)著開發(fā)員知識的語義信息[6]。正是這些程序代碼中包含著自然語言信息的標(biāo)識符和注釋內(nèi)容,可以方便開發(fā)人員對程序語義功能方面的理解。

以往的程序理解技術(shù)注重對程序結(jié)構(gòu)的分析[5],通過對源程序的剖析,檢查每個程序文件的程序設(shè)計結(jié)構(gòu),追蹤對象的繼承、依賴關(guān)系,分析程序的數(shù)據(jù)結(jié)構(gòu)、標(biāo)準(zhǔn)算法和控制流程。通過圖形方式將這些信息反饋給開發(fā)維護人員,如程序的抽象語法樹、類繼承視圖、函數(shù)調(diào)用圖等。相比較而言,近來基于語義信息的程序理解方法更注重于理解程序語義功能,特別是能自動生成與代碼對應(yīng)的概要,這樣有助于開發(fā)人員直接根據(jù)這些概要來理解程序代碼,特別是對于那些無文檔或者文檔較少的程序代碼,這些概要能夠輔助理解這些代碼。

基于語義信息的方法通常是利用程序代碼中所包含的語義信息進行分析,根據(jù)最終提取的話題來幫助理解程序。例如,Maletic等人利用潛在語義分析技術(shù)對一款Moisc軟件的代碼與文檔進行語義分析輔助對程序的理解[7]。Kuhn等人利用語義聚類的方法對幾個開源項目(如JEdit、JBoss等)的程序代碼進行分析理解[8]。然而這些方法所提取的話題由多個獨立的單詞組成,在語義上缺乏連貫性,需要程序開發(fā)、維護人員事先對軟件系統(tǒng)有一定的理解。本文嘗試利用語義恢復(fù)的方法解決這一問題。以軟件程序中的語義信息作為分析材料,通過信息檢索等技術(shù)提取能夠表征系統(tǒng)的話題,并利用語義恢復(fù)方法對話題的語義進行恢復(fù),利用MiniPar[9]輔助生成對軟件程序的概要信息。本文目的在于:

(1)分析包結(jié)構(gòu)的語義成分。不同功能模塊間的詞匯存在差異,通過分析包結(jié)構(gòu)的語義成分,可以得到包的功能組成。

(2)生成包層次的概要信息。可以在包層次生成概要信息,這些概要信息反映了程序包的統(tǒng)計信息和語義信息兩部分,有助于開發(fā)人員迅速理解程序。

本文組織結(jié)構(gòu)如下:第2章介紹研究方法所使用到的信息檢索和數(shù)據(jù)挖掘技術(shù);第3章詳細地介紹本文方法;第4章進行案例分析和實驗評估;最后對方法進行總結(jié)和展望。

2 技術(shù)簡介

2.1 潛在語義分析

潛在語義分析(latent semantic indexing,LSI)是信息檢索技術(shù)中常用的技術(shù)[10-11],利用數(shù)學(xué)上的奇異值分解(sigular value decomposition,SVD)來分析術(shù)語和概念間的關(guān)系模式,并以良好的降維、降噪著稱[10]。潛在語義分析被廣泛運用到信息檢索和文本處理中,如論文審核、文檔分類等應(yīng)用中[12]。

在潛在語義分析技術(shù)中,文檔集合被表示為術(shù)語和文檔矩陣(term-document matrix),矩陣的每一列表示一個文檔,矩陣的每一行表示一個術(shù)語。對于矩陣的每一個單元ai,j,表示術(shù)語ti出現(xiàn)在文檔dj中的頻率。對于一個m行n列的文本空間,奇異值分解將其分解為3個矩陣:一個m行r列的術(shù)語矩陣、一個r行r列的奇異值矩陣和一個r行n列的文檔矩陣[11]。奇異值分解將奇異值矩陣截取為k階,k遠遠小于r。類似地將術(shù)語矩陣截取到m行k列,將文檔矩陣截取到k行n列,于是可以得到原始矩陣的一個只有k階近似的矩陣,這個矩陣保留了原始矩陣中盡可能多的信息,但將它們拆分到了更小維度。人們不僅可以得到近似矩陣,還可以得到術(shù)語與術(shù)語的關(guān)系矩陣以及文檔與文檔的關(guān)系矩陣,因此利用LSI可以實現(xiàn)對術(shù)語與文檔、術(shù)語與術(shù)語以及文檔與文檔的相似度計算。文檔的相似度通常采用余弦相似度來表示,對于兩個文檔向量A和B,它們之間的相似度可以表示為:

總的來說,潛在語義分析以一個術(shù)語文檔矩陣作為輸入,出于對術(shù)語出現(xiàn)頻率的考慮,需要對文本空間進行加權(quán),常用的加權(quán)算法為TF-IDF[13-14]。TFIDF加權(quán)算法由兩部分組成,術(shù)語頻率(tf)和逆文件頻率(idf),權(quán)重由這兩部分相乘得到,即w=tf*idf。SVD對原始文本空間進行分解,并將其截取到較低的維度,同時保存了原始文本空間盡可能多的信息。

2.2 聚類算法

聚類是將對象集合分成由類似的對象組成的多個類的過程。聚類算法有多種,傳統(tǒng)的算法有:劃分方法如K-means算法,層次方法如AHC(agglomerative hierarchical clustering)算法,基于密度的方法如DBSCAN(density-based spatial clustering of application with noise)算法等[15-16]。本文使用自下向上的層次聚類算法(AHC算法)[15,17]。

層次聚類算法又叫樹聚類算法,它根據(jù)數(shù)據(jù)的聯(lián)接規(guī)則,通過層次架構(gòu)方式,反復(fù)將數(shù)據(jù)進行分割或者聚合,來解決層次序列的聚類問題。AHC算法是一種自下向上的層次聚類方法,實質(zhì)是自下向上合并為一棵層次樹的過程[17]。初始每個對象對當(dāng)作一個聚類,兩個聚類根據(jù)其相似度或者距離合并成一個聚類。這里利用余弦距離來表示兩個聚類間的距離或者相似性。

3 程序概要化技術(shù)

隨著程序的不斷修改,程序文檔會過時或者有些文檔會丟失,這給開發(fā)人員理解程序帶來了困難,如果能自動生成程序代碼的概要,可有效幫助開發(fā)人員理解程序。

而在軟件開發(fā)過程中,相同類型的文件如功能往往被歸檔在一個包文件中,即包往往是某一功能的集合。另外,包文件通常包含足夠多的代碼文件,也就是說包含一定的語義信息。本文主要以Java程序中包層次作為語料庫進行分析,本部分將對技術(shù)細節(jié)進行詳細介紹。

3.1 技術(shù)流程

本文的技術(shù)方法分為4部分,如圖1所示。首先從軟件程序中提取語義信息;接下來是對這些語料信息進行預(yù)處理,包括組合詞分割、去除停用詞等;然后利用潛在語義分析技術(shù)和聚類技術(shù)提取軟件程序中的話題并恢復(fù)這些話題的語義信息;最后生成相應(yīng)的概要信息。

Fig.1 Process of this paper approach圖1 方法流程

3.2 實現(xiàn)方法

3.2.1 預(yù)處理

由于目標(biāo)對象是軟件程序代碼,其中存在著許多影響信息檢索技術(shù)有效性的元素,如程序代碼中包含大量無語義的邏輯代碼,一個單詞的多種詞形,注釋中包含常見無意義單詞,文本長度和單詞出現(xiàn)頻率不一致問題等。

在預(yù)處理階段,從提取源碼中的類名、方法名、屬性和注釋入手,按照Java的編程風(fēng)格規(guī)范,標(biāo)識符必須有一定的含義,開發(fā)人員在編寫代碼時將具體的對象、業(yè)務(wù)流程轉(zhuǎn)化為具有一定含義的代碼。類名、方法名、屬性和注釋最集中反映了這些語義信息。為了解決以上的各種問題,按照如下的流程進行預(yù)處理操作。

(1)組合詞分割。Java代碼通常遵從一定的編碼風(fēng)格,如駝峰風(fēng)格,在標(biāo)識符命名上也往往由多個有具體含義的單詞組成。在類名命名上,往往由多個大寫字母開頭的單詞組成,如FileFilter、IOException等。在屬性命名上和方法名類似,第一個單詞小寫,如果其后又有單詞,則其后的單詞首字母大寫,如getTime、arrayCopy等。本文按照這些命名規(guī)則,將提取的類名、方法名、屬性名和注釋進行分割得到獨立的單詞。

(2)去除停用詞。在提取的詞匯中,會包含一些沒意義的詞,如do、doing、of、in、everything等,這些沒用的信息需要排除,本文利用自定義的停用詞表來去除停用詞。

(3)截取詞干[18]。在文本中,相同含義的單詞會有不同的形式,以remove為例,有removing、removed、removes等形式,可以將單詞截取到remove詞根。這樣做的好處是可以降低文本空間,避免話題中出現(xiàn)同詞根的情況。

(4)加權(quán)。原始的術(shù)語文檔矩陣中,每一個單元表示相應(yīng)術(shù)語在文檔中出現(xiàn)的次數(shù)。這種表示方法在文檔長度不同以及部分詞匯在文檔集中大量或較少出現(xiàn)的情況下存在著較大的不合理性。本文采用TF-IDF算法進行加權(quán)。

3.2.2 聚類和話題提取

在該步驟中,通過對包含相似詞匯的文檔進行聚類,并根據(jù)單詞和聚類的相似度提取前n個單詞作為對應(yīng)聚類功能的描述。在使用層次聚類過程中,為了降低空間維度以及去除原始空間的噪音,首先利用潛在語義分析獲得原始文本空間的近似空間[6,9,11]。由于每個文檔由組成它的詞組向量表示,文檔間的相似度可以通過兩個文檔向量的余弦距離表示,兩個文檔向量間夾角越小,兩個文檔越相似,余弦距離的絕對值越接近1,否則余弦距離接近0。在層次聚類中根據(jù)對象間的距離進行聚類,需要將相似關(guān)系轉(zhuǎn)化為距離關(guān)系,可以采用如下公式:

通過層次聚類,可以獲得文本空間聚類的基本分布情況,由此可以劃定聚類個數(shù)。不同的功能使用不同的詞匯,聚類的結(jié)果反映了包中所包含的功能。根據(jù)單詞和聚類的相似度對包的聚類進行話題提取,取前5個單詞組成對聚類描述的話題。

3.2.3 生成概要信息

在這一階段,將已經(jīng)提取的話題去匹配標(biāo)識符中的組合詞。這樣做的目的是因為在詞匯的提取過程中,需要對組合詞進行分割。比如方法名getTime被分解為get和time兩個單詞,getTime所反映的信息是獲取時間,當(dāng)話題提取到這兩個單詞的任何一個時都無法完整表示其本來的語義信息。本文嘗試通過利用已提取的話題,去查找匹配頻率較高的組合詞,獲取該話題可能代表的語義信息。

Java的代碼風(fēng)格使得人們可以根據(jù)標(biāo)識符來獲得更多的信息。Java的類名往往由一個或多個名詞組成,屬性也類似,方法名通常由動詞開頭接上名詞或者由名詞組成。本文將這些組合詞再次分割,并將分割后的多個單詞作為輸入,利用MiniPar來進行詞性分析。這樣根據(jù)話題匹配的結(jié)果可以定義概要的生成規(guī)則如表1所示。

對于最終包的概要內(nèi)容,本文主要提供兩個統(tǒng)計信息和兩個分析信息。這兩個統(tǒng)計信息是包中所含類的個數(shù)和包的聚類個數(shù)以及聚類分布情況;另外,提供包總聚類的話題以及根據(jù)這些話題分析生成的概要信息。預(yù)設(shè)生成的概要模式如下:

Table 1 Rules to generate summarization表1 概要信息生成規(guī)則

3.3 一個實際系統(tǒng)案例分析

這里選取了Eclipse環(huán)境中的IO包作為分析對象。首先載入需要分析的包文件,預(yù)處理程序?qū)某绦蛭募崛〕龊姓Z義信息的類名、方法名、屬性和注釋內(nèi)容,并對其中的組合詞進行分割。本文利用潛在語義分析建立術(shù)語文檔矩陣。

IO包中含有85個類文件,31 335行代碼,3 388個方法和1 341個屬性。原始空間包含85個源碼文檔,文檔詞匯數(shù)主要分布在100~200間,其中4個文檔包含詞匯在300以上。文檔長度集中在500左右,而部分文檔則達到了4 000以上,從這一點可以看出對原始空間加權(quán)的必要性,不同文檔長度會導(dǎo)致不同文檔中部分詞匯出現(xiàn)頻率過高。TF-IDF算法一方面考慮單詞在文檔中的作用,采用該單詞頻數(shù)在文檔長度中的比重作為局部權(quán)重,而逆向文件頻數(shù)則對出現(xiàn)該單詞文檔數(shù)目在文檔集中的比重取對數(shù),則該單詞權(quán)重由局部權(quán)重乘以逆向文件頻數(shù)得到。

本文對原始文本空間進行潛在語義分析,獲得原始空間的近似空間。文檔被表示為詞匯頻率的向量,文檔間的相似度通過余弦距離表示,取值范圍在[-1,1]之間,數(shù)值的絕對值越接近于1,則兩個文檔越相似,距離越近;反之越不相似,距離越遠。在利用層次聚類時,需要將相似度轉(zhuǎn)化為距離。層次聚類的結(jié)果展示為一棵層次樹,文檔對象根據(jù)相互間的距離聚合成一個聚類。

觀察表2中提取的話題,聚類1中話題內(nèi)容為exception onversion get put invalid,由此可以推斷出聚類1的功能為打印流、寫打印和緩沖相關(guān)。聚類5中話題為serializable object file read input,由此可以推斷出這部分功能為讀與文件和目錄相關(guān)。

Table 2 Topics of IO package表2 IO包話題

對于該IO包,可以生成兩方面信息:統(tǒng)計信息關(guān)于文件數(shù)目和聚類結(jié)果,語義信息主要是提取的話題和生成的概要信息,如下:

4 實驗及評估

本部分將利用具體的軟件系統(tǒng)來對本文技術(shù)進行實驗評估。實驗將對Java源碼rt.jar中java目錄中的幾個包文件進行分析。實驗評估主要關(guān)注如下三方面:

(1)聚類效果。聚類效果采用經(jīng)驗分析,通過實驗小組成員對源碼進行閱讀,人工劃定文本聚類,并和工具的聚類結(jié)果進行比較。

(2)話題提取。話題同樣采用人工閱讀源碼的方法給出話題,并與本文的工具進行比較。

(3)概要有效性。概要的有效性通過分組比較,一組成員閱讀程序進行理解,另一組通過閱讀概要信息,再和經(jīng)驗概要信息比較,以此判定概要信息的有效性。

4.1 參數(shù)設(shè)置

以下將對實驗過程中本文技術(shù)所涉參數(shù)進行設(shè)定,并給出合理的參數(shù)經(jīng)驗值。

(1)術(shù)語文檔矩陣的加權(quán)。考慮到文檔長度對詞頻的影響以及權(quán)衡出現(xiàn)頻率較高和頻率較低的單詞,對術(shù)語文檔矩陣進行加權(quán)操作是信息檢索中常見的處理方法。本文采用的TF-IDF加權(quán)算法是常見的一種加權(quán)算法。

(2)LSA-space維度。在利用LSI對原始的文本空間進行降維和降噪操作時,利用一個近似空間來代替原始文本空間。在對奇異值向量進行截取的過程中,截取的數(shù)值k越接近奇異值向量的長度,則近似矩陣越接近原始矩陣。考慮到本文分析的對象為近百篇文檔近千個詞匯的包文件,建議將k設(shè)置在原始規(guī)模的20%,即在10到20范圍內(nèi)。

(3)聚類數(shù)。在使用層次聚類的過程中,由于聚類規(guī)模的劃定是通過觀測聚類樹得到的,在聚類數(shù)目劃定時,不宜將數(shù)目劃定得過大,這樣不利于話題的提取。這里根據(jù)文獻[7-8]來進行聚類數(shù)的設(shè)置,設(shè)置在5個。

(4)話題數(shù)。本文的概要信息基于提取的話題,由于需要將話題用來匹配包含這些話題的組合詞,話題的設(shè)置會影響提取的組合詞個數(shù)。這里同樣根據(jù)文獻[7-8]將話題數(shù)控制在5個左右。

4.2 實驗結(jié)果與分析

在實驗階段,將實驗人員進行分組,一部分小組閱讀人工提取信息,一部分小組閱讀工具提取信息,通過比較評分來對方法進行評估。對于評估結(jié)果,采用差、中、好3個等級,并給出問題的評注。在聚類效果評估中,關(guān)注聚類數(shù)目和文檔歸類情況兩部分。在概要信息部分,關(guān)注概要的可理解性。

經(jīng)過對多個軟件程序的處理分析,得到如下實驗結(jié)果。

(1)聚類效果。由于聚類算法種類多樣,聚類效果也有不同。考慮到這一現(xiàn)實,很難對聚類算法的優(yōu)劣給出一個評估標(biāo)準(zhǔn)。本文在這一階段通過人工閱讀程序文件,分析工具聚類結(jié)果是否合理。同樣將人員分成5個小組進行評估,評估結(jié)果如表3所示。

從表3中可以看到,有3組聚類效果還是得到了實驗人員的認可,但是還有兩組聚類效果不是很滿意。詳細分析原因,主要是源碼語義信息進行聚類存在的明顯問題就是歸檔不合理和聚類數(shù)目不合理。而表中結(jié)果也反映了幾乎所有的組別均出現(xiàn)了歸檔不合理的情況。對于這種問題,如異常處理類可能會與相應(yīng)的類使用近似的詞匯,即使在功能上不同,但由于存在較多相似的詞匯,相似度較高,有可能被劃分到一個聚類中。而出現(xiàn)這些結(jié)果主要是由于采用層次聚類,聚類數(shù)目的設(shè)定是通過觀察聚類樹得到的,具有一定的不穩(wěn)定性。

Table 3 Evaluation of clustering results表3 聚類評估結(jié)果

(2)話題提取。話題是基于單詞和聚類的相似度提取前n個。在實驗過程中,將實驗人員分為5組,每一組先閱讀工具提取的話題,再閱讀程序源碼,通過人工判斷工具提取話題的效果,評估結(jié)果如表4所示。

Table 4 Evaluation of topics表4 話題評估結(jié)果

從表4結(jié)果中可以看到,實驗人員對話題整體還是認可的,基本可以通過這些話題對程序進行一定的理解。但是在通過閱讀代碼來評估話題的過程中存在著兩個主要問題,即看不懂的縮寫和不具有代表性的話題。造成這種差距的原因是多方面的:第一,在人工閱讀的過程中,對程序的理解并不是單純的基于詞頻,而工具分析的基礎(chǔ)是考慮詞頻。第二,在工具過濾停用詞的時候沒法達到人類那樣效果顯著,所有的停用詞都是預(yù)設(shè)的,不能滿足所有的情況。第三,在開發(fā)過程中會有大量開發(fā)人員約定的縮寫,如果這些縮寫包含對功能的描述,往往會占有較高的頻率,然而這些縮寫對于新接觸的人來說是看不懂的。

(3)概要信息。在分組測試的過程中,將人員分成6組。第1、2、3小組采用直接閱讀源碼的方法,第4、5、6小組利用工具進行程序理解。主要對兩組實驗人員在理解不同程序時所需的時間進行評估。實驗過程中,1、4,2、5和3、6小組分別閱讀對應(yīng)源程序和概要信息,實驗結(jié)果如表5所示。

Table 5 Time to understand program表5 程序理解時間

從表5結(jié)果中可以看到,第1、2、3小組在理解時間上遠遠大于利用工具的小組,這說明了利用本文的工具所生產(chǎn)的程序概要能夠有助于程序員對程序的理解,改進他們理解軟件程序的效率。

綜合來看,本文方法能夠在語義上給開發(fā)和維護人員提供一定的幫助,可以改進開發(fā)人員理解程序的效率。當(dāng)然,該技術(shù)還存在一些缺陷,例如在聚類數(shù)目、文檔歸類以及話題提取上仍然有一定的不足,這也是今后工作將要著重研究的地方。

4.3 實驗威脅

在實驗過程中,許多限制因素對實驗的效果造成了影響。首先,聚類方法對程序代碼理解時僅僅考慮代碼中詞匯出現(xiàn)的次數(shù),而忽略了一些結(jié)構(gòu)性語法,如循環(huán)語句,對詞頻的影響。其次,由于程序代碼并不完全符合編碼規(guī)范,導(dǎo)致預(yù)處理過程結(jié)果中包含噪音。另外,實驗中聚類和層次等參數(shù),主要依據(jù)文獻[7-8]進行設(shè)定,不同的參數(shù)值可能會取得不同效果。最后,實驗的對象類型較少,僅僅對Java項目源碼中的幾個包進行了實驗。對更多類型的軟件系統(tǒng)的實驗分析將是后期工作的一部分。

5 相關(guān)工作

程序理解是軟件維護與演化過程中的一個重要活動,近來程序概要化是程序理解的一個有效手段,開發(fā)人員直接根據(jù)這些概要來理解程序代碼。

Sridhara等人提出了能直接生成面向?qū)ο蟪绦蛑蓄惡头椒ǖ某绦蚋乓椒╗19-20]。該方法針對不同的結(jié)構(gòu),通過細化分析程序結(jié)構(gòu)中的代碼變量和執(zhí)行方法等信息來確定方法和類的意圖;最后,通過組織代碼中變量名或者是方法本身與調(diào)用方法的簽名生成描述語言來概括整個方法。Dragan等人通過識別程序中的一些方法模式,并利用方法模式作為軟件系統(tǒng)的概要化描述來分析系統(tǒng)[21]。如上這些方法主要考慮了程序的語法結(jié)構(gòu),根據(jù)語法結(jié)構(gòu)來生成程序的概要,但是忽略了程序的語義信息。而本文則主要分析程序代碼中的語義信息,能直接生成可讀性更好的系統(tǒng)包層次的概要化信息。

Alhindawi等人也通過分析程序中的語義信息進行類的理解[22],他們主要使用了文本詞的分割和辨別技術(shù)生成類文件的自然語言的注釋,這些注釋包含了類的一些相關(guān)信息供開發(fā)人員理解。而本文則針對Java程序中的包進行分析,利用LSI技術(shù)分析程序包中的主題,然后將這些主題整合成包的概要信息供開發(fā)人員理解。

6 總結(jié)與展望

本文提出了語義恢復(fù)和概要的方法來進行包層次的程序理解,利用語義恢復(fù)的方法對由多個獨立單詞組成的話題進行語義恢復(fù),并利用MiniPar生成對包層次的概要信息。通過多次實驗表明,本文方法可以生成程序的基本語義信息,提供可讀性較強的概要信息,有助于開發(fā)人員快速理解程序。因此,對于那些缺少文檔或者文檔較少的軟件代碼,本文提出的包層次的概要化方法可有效地幫助開發(fā)人員理解整個軟件。但本文方法依然存在著一些不足之處,具體如下:

(1)停用詞表需要針對軟件工程領(lǐng)域做出調(diào)整。軟件程序中的語義信息和自然語言文本信息有一定的差異,停用詞表并不通用,需要根據(jù)軟件工程領(lǐng)域制定合適的停用詞表。

(2)權(quán)衡注釋和標(biāo)識符比重。在提取過程中,文檔中的標(biāo)識符數(shù)量遠遠少于注釋中的內(nèi)容,注釋中的對功能描述影響不大的詞匯可能因頻率而影響標(biāo)識符的作用,需要進行一定的權(quán)衡。

(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—),男,江蘇徐州人,東南大學(xué)-蒙納士蘇州研究生院計算機專業(yè)碩士研究生,主要研究領(lǐng)域為數(shù)據(jù)挖掘,機器學(xué)習(xí)等。

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年于東南大學(xué)獲得博士學(xué)位,現(xiàn)為揚州大學(xué)副教授,CCF高級會員,主要研究領(lǐng)域為軟件維護與演化,軟件數(shù)據(jù)分析學(xué)等。發(fā)表學(xué)術(shù)論文40余篇,主持國家自然科學(xué)基金項目、江蘇省教育廳自然科學(xué)基金項目等。

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年于南京航空航天大學(xué)獲得博士學(xué)位,現(xiàn)為揚州大學(xué)教授、博士生導(dǎo)師,CCF高級會員,主要研究領(lǐng)域為軟件系統(tǒng),機器學(xué)習(xí)等。發(fā)表學(xué)術(shù)論文100余篇,主持國家自然科學(xué)基金項目等。

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(國家自然科學(xué)基金);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(軟件新技術(shù)國家重點實驗室開放課題項目); the Natural Science Foundation of the Jiangsu Higher Education Institutions under Grant No.13KJB520027(江蘇省教育廳自然科學(xué)基金面上項目).

Received 2015-12,Accepted 2016-03.

CNKI網(wǎng)絡(luò)優(yōu)先出版: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

猜你喜歡
語義單詞程序
語言與語義
單詞連一連
試論我國未決羈押程序的立法完善
看圖填單詞
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
“上”與“下”語義的不對稱性及其認知闡釋
創(chuàng)衛(wèi)暗訪程序有待改進
認知范疇模糊與語義模糊
最難的單詞
主站蜘蛛池模板: 中国国语毛片免费观看视频| 欧美精品啪啪一区二区三区| 四虎影院国产| 另类欧美日韩| 国产乱码精品一区二区三区中文 | 久久6免费视频| 亚洲久悠悠色悠在线播放| 色偷偷一区二区三区| 午夜毛片免费观看视频 | 精品国产欧美精品v| 中文字幕人妻无码系列第三区| 99热这里只有精品免费国产| 国产白浆在线| 麻豆精品视频在线原创| 72种姿势欧美久久久久大黄蕉| 欧美日韩国产精品va| 黄色片中文字幕| 亚洲国产日韩一区| 亚洲动漫h| 91青青在线视频| 最新国产午夜精品视频成人| 亚洲综合婷婷激情| 国产国拍精品视频免费看| 成人字幕网视频在线观看| 天天综合天天综合| 国产在线麻豆波多野结衣| 免费国产高清精品一区在线| 国产小视频a在线观看| 国产最新无码专区在线| 欧日韩在线不卡视频| 国产毛片不卡| 狠狠色噜噜狠狠狠狠色综合久| 国产浮力第一页永久地址| 亚洲日韩AV无码精品| 欧美在线天堂| 成人a免费α片在线视频网站| 国产精品网拍在线| 亚洲综合欧美在线一区在线播放| jizz在线免费播放| 免费精品一区二区h| 国产成人91精品| 日韩欧美国产成人| 国产国模一区二区三区四区| jizz国产视频| 亚洲综合久久成人AV| 国产精品浪潮Av| 57pao国产成视频免费播放| 国产成人高清精品免费5388| 手机精品视频在线观看免费| 日韩福利在线视频| 九九九精品成人免费视频7| 国产亚洲视频在线观看| 欧美一级特黄aaaaaa在线看片| 国产成人综合在线观看| 91高清在线视频| 亚洲成a人在线观看| 影音先锋丝袜制服| 欧美色视频日本| 欧美一区二区三区香蕉视| 乱人伦视频中文字幕在线| 97成人在线视频| 重口调教一区二区视频| 国产精品亚洲片在线va| 亚洲爱婷婷色69堂| 国产午夜福利亚洲第一| 国产精品无码翘臀在线看纯欲| 五月婷婷伊人网| 国产人人干| 日韩av电影一区二区三区四区| 一区二区日韩国产精久久| 亚洲人成在线精品| 91视频精品| 国产午夜精品一区二区三区软件| 免费国产小视频在线观看| 亚洲一级毛片在线观播放| 亚洲综合精品香蕉久久网| 欧洲欧美人成免费全部视频| 色香蕉网站| 国产精品亚欧美一区二区| 精品丝袜美腿国产一区| 婷婷伊人五月| 伊人久久精品无码麻豆精品 |