亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于LDA和靜態(tài)分析的代碼功能識別方法

        2013-07-19 08:14:26華哲邦宋懷達(dá)趙俊峰
        計算機(jī)工程與應(yīng)用 2013年15期
        關(guān)鍵詞:開源代碼文檔

        金 靖,李 萌,華哲邦,宋懷達(dá),趙俊峰,謝 冰

        1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871

        2.北京大學(xué) 高可信軟件技術(shù)教育部重點實驗室,北京 100871

        一種基于LDA和靜態(tài)分析的代碼功能識別方法

        金 靖1,2,李 萌1,2,華哲邦1,2,宋懷達(dá)1,2,趙俊峰1,2,謝 冰1,2

        1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871

        2.北京大學(xué) 高可信軟件技術(shù)教育部重點實驗室,北京 100871

        1 引言

        軟件復(fù)用是在軟件開發(fā)中避免重復(fù)勞動的解決方案[1],而代碼復(fù)用是軟件復(fù)用中最主要的組成部分。隨著代碼復(fù)用技術(shù)不斷成熟和Internet上開源項目不斷豐富,軟件開發(fā)人員的開發(fā)行為也逐漸發(fā)生了變化。通用搜索引擎技術(shù)的發(fā)展以及各種軟件資源庫社區(qū)(如SourceForge(http:// www.sourceforge.net/)、Google Code(http://www.google. com/codesearch/)、Τrustie軟件資源庫(http://tsr.trustienet/)等)的壯大使得軟件開發(fā)人員可以迅速地從Internet上找到滿足特定功能的開源項目。如今,軟件開發(fā)人員在編程活動中越來越多地依賴于開源軟件項目提供的功能。

        理想情況下,軟件開發(fā)人員可以將開源項目的文檔和代碼結(jié)合起來學(xué)習(xí)其功能點。然而,從Internet上可以找到大量開源項目的代碼,卻很少能夠找到項目的詳細(xì)文檔。即使較好的開源項目能夠提供用戶手冊,也不足以幫助使用者全面地理解項目的功能點。因此,需要研究一種以代碼為輸入、能夠自動識別功能點的方法來幫助使用者了解開源項目具備的功能點。

        傳統(tǒng)的代碼分析技術(shù)(如控制流分析、數(shù)據(jù)流分析等)可以幫助使用者細(xì)粒度地理解項目代碼的工作機(jī)制。這些工作的受益對象一般是與項目開發(fā)、測試、維護(hù)相關(guān)的人員,這些人員往往已經(jīng)具備了項目的相關(guān)知識。然而,細(xì)粒度的底層代碼分析并不是準(zhǔn)備對開源項目進(jìn)行復(fù)用的軟件開發(fā)人員首要關(guān)心的,他們在選擇是否復(fù)用一個項目時更關(guān)注的是項目具備哪些功能點這種較為宏觀層面的問題。

        在軟件復(fù)用活動中,由于開源項目文檔的不全面以及代碼結(jié)構(gòu)的復(fù)雜性,軟件開發(fā)人員往往只能片面地了解開源項目的某些功能點,使得復(fù)用效率不高。只有當(dāng)軟件開發(fā)人員更全面地了解項目的功能點后,他們才能更好地進(jìn)行代碼復(fù)用活動。

        針對上述問題,本文提出了一種基于LDA(Latent Dirichlet Allocation)和靜態(tài)分析的代碼功能識別方法。該方法以代碼為輸入,利用LDA能夠自動挖掘文檔topic這一特性,輔以靜態(tài)分析技術(shù),自動地從代碼中識別功能點。

        具體的,本文方法包含三個步驟:

        (1)代碼預(yù)處理。用靜態(tài)分析技術(shù)和切詞技術(shù)對代碼進(jìn)行轉(zhuǎn)化,選擇合適的單詞放入詞袋,作為LDA的輸入。

        (2)用傳統(tǒng)LDA方法自動地挖掘項目中潛在的topic。挖掘出來的topic可能反映了項目的功能點,亦可能并不具備實際意義。因此,需要進(jìn)一步分析排除沒有意義的topic。

        (3)用靜態(tài)分析技術(shù)對topic進(jìn)行進(jìn)一步分析。分析同一topic下相關(guān)聯(lián)的代碼之間的關(guān)系,計算topic的內(nèi)聚度,進(jìn)而排除沒有意義的topic,識別出項目的功能點。

        2 相關(guān)研究工作

        關(guān)于程序理解的研究工作有很多,基于語言學(xué)的程序理解方法逐漸受到研究人員的重視。研究人員常用語言學(xué)統(tǒng)計的方法挖掘代碼中包含的topic,進(jìn)而對軟件項目進(jìn)行聚類或分類。

        Kuhn等人[2]用基于LSA(Latent Semantic Analysis)的方法挖掘代碼中包含的topic,對軟件制品進(jìn)行聚類。Kawaguchi等人[3]也是用基于LSA的方法對開源軟件資源庫中的軟件制品進(jìn)行分類。然而,近些年LDA逐漸成為一種更為流行的挖掘文檔topic的方法。Phan X[4]等人在分析比較了LSA、PLSA、LDA的基礎(chǔ)上證明了LDA在挖掘文檔潛在語義方面具有更大的優(yōu)勢。

        LDA一般用于處理自然語言文檔。有部分研究著眼于利用LDA技術(shù)從自然語言文檔中構(gòu)造本體。Elias Zavitsanos等人[5-6]利用LDA技術(shù)從文本語料庫中構(gòu)造層級本體(一個topic對應(yīng)于一個本體,每個topic中概率最大的詞就作為對應(yīng)該topic的本體概念),他們以在生物醫(yī)藥學(xué)領(lǐng)域為研究對象,構(gòu)造出的本體和專家給出的本體結(jié)構(gòu)十分相似。他們的實驗結(jié)果說明LDA的確是一種自動發(fā)現(xiàn)topic的有效方法。

        也有研究人員將LDA方法應(yīng)用到挖掘代碼中潛在topic的研究中:

        Pierre F.Baldi等人[7]用LDA方法驗證AOP(Aspect Oriented Programming)假設(shè)的有效性。他們以4 632個不同領(lǐng)域項目為實驗數(shù)據(jù),發(fā)現(xiàn)這些項目中出現(xiàn)頻率較高topic,然后人工分析這些topic的含義,找出不同項目中的共性topic。他們的實驗分析結(jié)果和軟件開發(fā)人員的經(jīng)驗一致:不同領(lǐng)域的共性topic主要為軟件開發(fā)實現(xiàn)中常用的Java語言相關(guān)的基本概念和方法,以及設(shè)計模式。

        Girish Maskeri等人[8]用LDA技術(shù)挖掘代碼中的topic,較為詳細(xì)地介紹了如何結(jié)合代碼結(jié)構(gòu)的信息來進(jìn)行LDA輸入的預(yù)處理。本文與之工作的區(qū)別有三:(1)在代碼中單詞選取到詞袋的步驟中過濾更加細(xì)致。(2)他們工作中關(guān)于LDA參數(shù)的設(shè)定由人工指定,本文根據(jù)他人的研究成果進(jìn)行了改進(jìn)。(3)最重要的一點,他們的工作停留在挖掘出topic為止,而有些topic是無意義的,本文對topic進(jìn)行了進(jìn)一步內(nèi)聚度分析,引伸到功能點。

        此外,Τhomas L.Griffiths等人[9]給出了關(guān)于一種判定語料庫中合適topic數(shù)量的方法。Gregor Heinrich[10]詳細(xì)地討論了LDA方法中各個參數(shù)估計的方法。本文的合適topic數(shù)量選取及參數(shù)估計即是參考他們的研究成果。

        以上所有研究工作,均未將LDA挖掘出的topic應(yīng)用到代碼功能識別中,而本文提出了一種以topic為依據(jù),識別功能點的方法。

        在介紹本文方法之前,該章末尾先描述傳統(tǒng)的LDA模型:

        在LDA模型中,輸入是一組文檔,每個文檔是單詞的集合。每個文檔視為是由topic概率組成的,而每個topic是由單詞概率組成的。設(shè)D為文檔的總數(shù)量,W為詞匯表中單詞的總數(shù)量,T為topic的總數(shù)量,有如下兩個概率矩陣:

        LDA模型假設(shè)每個topict是作用于單詞w上的多項分布,而每個文檔d是作用于topict上的多項式分布,將θ*d和?*t設(shè)為帶參數(shù)α和β的先驗Dirichlet分布:

        有不同的算法(如變分-EM算法,還有常用的Gibbs抽樣法)對α和β進(jìn)行迭代估計,使得最終收斂生成的結(jié)果模型中,所有文檔根據(jù)單詞生成的概率最大。

        可以從LDA最終結(jié)果中得到文檔-topic概率矩陣和topic-單詞概率矩陣。通過矩陣,一方面,可以得知一個topic下各個單詞的概率;另一方面,可以得知一個文檔中各個topic的概率。反過來,對于每一個topic,也可以得到各個文檔屬于該topic的概率。

        3 一種基于LDA和靜態(tài)分析的代碼功能識別方法

        軟件開發(fā)人員在開始了解一個項目時最關(guān)注于項目能提供哪些功能點。利用LDA技術(shù)分析代碼所挖掘出的topic會有助于找到代碼所實現(xiàn)的功能點。而用LDA方法挖掘出的topic,可能反映了項目的功能點,亦可能并不具備實際意義,靜態(tài)分析技術(shù)可以幫助排除無意義的topic。因此,本文對傳統(tǒng)LDA方法進(jìn)行了擴(kuò)展,提出了一種基于LDA和靜態(tài)分析的代碼功能識別方法。

        根據(jù)經(jīng)驗,很多情況下包不是基于功能點組織的,而是橫向組織的(例如,有可能包是依據(jù)用戶交互層,業(yè)務(wù)邏輯層,數(shù)據(jù)存儲層的體系架構(gòu)進(jìn)行組織的),所以包的組織結(jié)構(gòu)并不能很好地反映項目功能點。

        LDA的結(jié)果也并不能保證每個topic能夠?qū)?yīng)功能點。LDA是對文本進(jìn)行分析的,在本文方法中,LDA的輸入是對代碼的切詞與過濾后所構(gòu)成的詞袋,有可能一個topic下的各類之間關(guān)系較為緊密,也有可能關(guān)系較為松散(例如,數(shù)據(jù)庫層中的類都劃分到一起了,因為都是“***DAO”的形式)。在本文工作中,假設(shè)有緊密關(guān)系的類所組成的topic能夠?qū)?yīng)一個功能點,關(guān)系不緊密的類所組成的topic則被排除。內(nèi)聚度可以用來衡量一個topic下的各個類關(guān)系程度,故內(nèi)聚度高的topic很可能對應(yīng)一個功能點。

        本文提出的代碼功能識別方法分為三個步驟:

        (1)代碼預(yù)處理。用靜態(tài)分析技術(shù)和切詞技術(shù)對代碼進(jìn)行轉(zhuǎn)化,對候選單詞過濾后形成詞袋作為LDA的輸入。

        (2)利用傳統(tǒng)的LDA技術(shù)挖掘代碼中潛在的topic。

        (3)用靜態(tài)分析技術(shù)對LDA的輸出topic進(jìn)行進(jìn)一步內(nèi)聚度分析,判斷topic是否能夠?qū)?yīng)功能點。

        整個方法的工作流程如圖1所示。

        圖1 基于LDA和靜態(tài)分析的代碼功能識別方法流程圖

        3.1 代碼預(yù)處理

        在代碼預(yù)處理步驟中,用靜態(tài)分析技術(shù)和切詞技術(shù)對代碼進(jìn)行轉(zhuǎn)化,對候選單詞過濾后形成詞袋作為LDA的輸入。

        如何選取代碼中的單詞到詞袋是該步驟的關(guān)鍵。如果僅選取類名和接口名,獲取的單詞信息太少,生成的topic將會過于一般化,不具備可用性;而如果將代碼中每個單詞都加入到詞袋,將會造成LDA計算上巨大的開銷,并且可能包含很多噪音,產(chǎn)生的結(jié)果也不一定好。因此,本文工作最終選擇了代碼中的候選詞包括:類名,接口名,類或接口中域的名字,域所屬的類型,類或接口中方法的名字,方法的返回類型,方法的參數(shù)名,方法參數(shù)所屬的類型。本文工作選詞方法的合理性,在Pierre F.Baldi等人的實驗[7]中也得到了驗證。

        代碼元素的命名可能是好幾個單詞的組合形式(比如“StringBuffer”是有“String”和“Buffer”組成的),因此,需要考慮對代碼元素進(jìn)行切詞處理。根據(jù)開源項目中代碼的常見命名規(guī)范,可以按照詞中出現(xiàn)的大寫字母的位置進(jìn)行切詞,這樣,就能將形如“StringBuffer”的元素切成“String”和“Buffer”兩個單詞。而如果命名中出現(xiàn)幾個連續(xù)大寫字母,則說明這個極有可能是某個概念的縮寫,將其切成一個單詞,如“NameDAO”,會被切分為“Name”和“DAO”。

        此外,有些單詞組合具有特殊意義。比如,在Τrustie軟件資源庫的可信評級子系統(tǒng)中,“ΤrustWorthiness”總是作為一個單詞組合的形式出現(xiàn)的,在可信評級系統(tǒng)中作為“可信級別”的概念出現(xiàn)。故在本文工作中,將高頻出現(xiàn)的單詞組合也視做一個單詞,放到詞袋中。單詞組合的概率計算公式為:

        P(A...B)=Count(A...B)/(Count(A)*…*Count(B)) A...B為一個單詞組合,即在代碼中出現(xiàn)的一個單詞串,單詞A為串頭,以單詞B為串尾。在具體工作中,只考慮了二元單詞組合和三元單詞組合的形式,因為更長的單詞組合比較少,統(tǒng)計意義不大。

        對單詞組合按概率排序后(二元和三元分開排),在順序表中以概率值相差最大的兩個單詞組合之間的任意值作為閾值,概率高于該閾值的單詞組合加入到候選詞集,概率低于該閾值的單詞組合被舍棄。

        此外,還對候選詞集進(jìn)行了過濾:

        (1)過濾Java語言的關(guān)鍵字:所有程序都會用到Java語言的關(guān)鍵字,這些單詞反映不出與項目相關(guān)的信息。

        (2)過濾英語中常見的停用詞:這些單詞也很難反映與項目有關(guān)的信息。

        (3)過濾JDK中的類名和接口名:希望發(fā)現(xiàn)的是領(lǐng)域特定的功能,而不是編程實現(xiàn)中的共性功能,因此,有必要過濾掉JDK中的類名和接口名。

        此外,如有需要,還可以過濾一些常用工具包中的類名和接口名。

        過濾步驟完成后,需要對剩下的單詞進(jìn)行詞根化,以免因為單詞的形態(tài)對結(jié)果產(chǎn)生影響。最終形成的詞袋,就作為LDA的輸入。

        3.2 基于LDA的代碼topic挖掘方法

        GibbsLDA(http://gibbslda.sourceforge.net/)是一個實現(xiàn)了LDA方法的開源項目,該開源項目使用Gibbs抽樣方法估計參數(shù)。本文工作的LDA部分即是在此項目基礎(chǔ)上完成的。在進(jìn)行LDA迭代算法之前,需要設(shè)置一些參數(shù),如α初始值、β初始值、迭代次數(shù)和構(gòu)造的topic數(shù)量。有相關(guān)研究根據(jù)經(jīng)驗表明,當(dāng)α初始值設(shè)為50/K(K為要構(gòu)造的topic數(shù)量),β初始值s設(shè)為0.01時,LDA的結(jié)果較好[10]。本文工作α、β初始值也是按經(jīng)驗值進(jìn)行設(shè)置的。迭代次數(shù)設(shè)為1 000(根據(jù)對十幾個代碼規(guī)模差別較大的開源項目的實驗,更多的迭代次數(shù)對LDA結(jié)果影響不大)。本文工作主要關(guān)注于topic數(shù)量的設(shè)置。Τhomas L.Griffiths等人提出了一種定量的方法判斷如何選取合適的topic數(shù)量[9]:對參數(shù)topic數(shù)量從1到N進(jìn)行遍歷,對每個情況都進(jìn)行LDA計算,然后選擇使得所有文檔生成概率值之和最大的結(jié)果作為最佳結(jié)果輸出。大量實驗表明,topic數(shù)量和所有文檔生成概率值之和大致呈圖2的關(guān)系。

        圖2 topic數(shù)量和文檔生成概率值之和趨勢圖

        本文按照上述方法,對topic數(shù)量從1到200進(jìn)行遍歷,找出最佳結(jié)果。經(jīng)過對十幾個開源項目的實驗分析,遍歷范圍在200以內(nèi)足以保證出現(xiàn)圖2中的最大值拐點。

        3.3 代碼結(jié)構(gòu)的靜態(tài)分析

        LDA的結(jié)果中包含topic和代碼的關(guān)聯(lián)矩陣,通過該矩陣,可以推知代碼與一個topic的關(guān)聯(lián)概率,本文選取了0.1為閾值,關(guān)聯(lián)概率大于閾值的代碼屬于該topic。在同一個topic下的文檔所對應(yīng)的各個類之間可能關(guān)系緊密,也可能關(guān)系松散。因此,本文在LDA之后,用靜態(tài)分析技術(shù),細(xì)粒度地分析同一topic下各類之間的關(guān)系,計算內(nèi)聚度,排除無意義的topic,進(jìn)而最終判斷topic是否對應(yīng)一個功能點。

        Eclipse的抽象語法樹解析工具JDΤ(http://www.eclipse. org/jdt/)可以分析Java語言的各個元素。通過對各個元素的分析,最終得到的信息在預(yù)處理所包含的信息(類名,接口名,域的名字,域所屬的類型,方法的名字,方法的返回類型,方法的參數(shù)名,方法參數(shù)所屬的類型)基礎(chǔ)上,深入到方法體當(dāng)中的局部變量聲明和方法調(diào)用語句,這些信息對于發(fā)現(xiàn)更全面的類與類之間的關(guān)系很有幫助。此外,為了輔助代碼靜態(tài)分析中關(guān)于import包的信息查詢,本文工作還對項目所引用的Jar包進(jìn)行了分析,獲得這些Jar包中的類名和接口名。

        類與類之間具有一般-特殊、整體-部分、關(guān)聯(lián)、消息四種關(guān)系[11]。在Java代碼中,一般-特殊關(guān)系可通過關(guān)鍵字extends來實現(xiàn);整體-部分關(guān)系和關(guān)聯(lián)關(guān)系都是通過類中的域來體現(xiàn)的;消息則是通過方法體中的方法調(diào)用語句來體現(xiàn)。此外,如果類A實現(xiàn)了接口B,則接口B具備的所有關(guān)系都被添加到類A的關(guān)系集合中。

        根據(jù)靜態(tài)結(jié)構(gòu)分析的工作,可以得到所有的類與類之間的關(guān)系,判定規(guī)則如下:

        (1)一般-特殊關(guān)系:Java語言中的關(guān)鍵字“extends”用于類或接口聲明表示一般-特殊關(guān)系。

        (2)整體-部分關(guān)系和關(guān)聯(lián)關(guān)系:一個類與它的域所屬的類之間可以建立關(guān)系。從Java代碼實現(xiàn)層面上來看,整體-部分關(guān)系和關(guān)聯(lián)關(guān)系并無區(qū)別,對這兩種關(guān)系的命名均為“hasRelationΤo”。關(guān)于域所屬類全名的查找,從同一包目錄下、import語句,以及JDK中查找。

        (3)消息關(guān)系:如果類A中的一個方法中調(diào)用了類B的方法,則類A和類B具有消息關(guān)系。一個方法調(diào)用語句可能是“方法名”、“類名.方法名”或“對象名.方法名”的形式。對于“對象名.方法名”的形式,需要查找這個對象所屬的類,需要依次從局部變量聲明、方法參數(shù)聲明、方法所屬類中的域以及方法所屬類繼承的類中的域中查找。找到對象所屬類之后,類全名的查找同(2)。此外,對于“this”和“super”等關(guān)鍵字也進(jìn)行了相應(yīng)的處理。本文工作能夠為95%以上的對象找到其所屬的類。

        獲取所有關(guān)系之后,還需要判斷一個topic是否有意義。直觀來看,如果一個topic是高內(nèi)聚的,那么這個topic更可能對應(yīng)一個功能點。因此,采取計算內(nèi)聚度的方式來判斷一個topic是否有意義。

        有很多關(guān)于代碼內(nèi)聚度計算的研究,Edward B.Allen等人便是利用類與類之間的關(guān)系來計算內(nèi)聚度[12]。本文對類與類的關(guān)系進(jìn)行了細(xì)化,對上述三種關(guān)系實現(xiàn)形式分別賦予權(quán)值:

        其中,Numin,type表示內(nèi)部類之間的關(guān)系類型為type的關(guān)系數(shù),Numout,type表示內(nèi)部類與外部類之間的關(guān)系類型為type的關(guān)系數(shù),Wtype表示關(guān)系類型為type的權(quán)值。

        在本文實驗部分,對不同關(guān)系類型賦予同樣的權(quán)值,故上述公式可以簡化為:內(nèi)聚度=Numin/(Numin+Numout)。

        4 實驗分析

        Τrustie軟件資源庫是由北京大學(xué)信息學(xué)院軟件所自主研發(fā)的、開源開放的平臺,主要的用途可以為企業(yè)提供軟件資源管理的平臺。本文以北京大學(xué)Τrustie軟件資源庫項目為例進(jìn)行實驗分析說明。

        Τrustie軟件資源庫提供對軟件資源的收集、分類、存儲和檢索等功能,對軟件資源的共享、組織和管理提供支持。同時,資源庫為了保證所提供資源的質(zhì)量,集成了軟件資源的可信證據(jù)采集與可信評估的機(jī)制,更好地為軟件開發(fā)提供資源管理與共享的平臺。Τrustie軟件資源庫具有如下功能特征:

        用戶管理、資源發(fā)布、資源分類、資源存儲、資源檢索、資源下載、用戶反饋、資源可信評級。Τrustie軟件資源庫代碼一共有122個代碼文檔,有效Java代碼行數(shù)(排除空行與注釋)為13 781,屬于中等規(guī)模的項目。

        采用基于本文的LDA方法挖掘代碼潛在的topic。得到的最佳topic數(shù)量為35,表1列出了內(nèi)聚度前10的topic。

        表1 內(nèi)聚度前10的topic

        通過表1可以看出:

        (1)大部分功能點能與內(nèi)聚度較高的topic對應(yīng)。其中,有3個與資源可信評級對應(yīng)的topic,充分說明可信評級是Τrustie軟件資源庫的重要功能特征。

        (2)前10未包含對應(yīng)資源發(fā)布功能點(排在第18位的topic與之對應(yīng))的topic。資源發(fā)布功能點沒有被較好地挖掘出來的原因在于,資源發(fā)布功能點在很大程度上與資源存儲功能點重合,發(fā)布功能特征不是特別明顯。

        (3)對應(yīng)于資源存儲功能點的topic的3個代表單詞“l(fā)ength local central”和“element complex item”,并不能反映出實際功能,說明僅從幾個代表單詞來反映topic的意義有的時候效果并不好。

        本實驗還分析了內(nèi)聚度靠后的topic。表2為內(nèi)聚度排在最后5位的topic。

        表2 內(nèi)聚度靠后的5個topic

        經(jīng)過仔細(xì)觀察對應(yīng)代碼發(fā)現(xiàn),上述5個topic的確對應(yīng)不到明確的功能點,或者topic所包含的類是實現(xiàn)了比較底層的共性功能,被很多外部類調(diào)用。

        還對內(nèi)聚度前10的topic查看了每個topic下內(nèi)部類的分布情況,結(jié)果如表3。其中,第3列表示內(nèi)部類在不同包中的數(shù)目。

        通過上表可以驗證假設(shè),有的包是按照功能點組織的,而大部分包并不能很好地反映項目的功能點。

        此外,通過本實驗還發(fā)現(xiàn),有的功能點被一個topic對應(yīng),有的功能點(如資源存儲)被多個topic對應(yīng)。而對應(yīng)到同一個功能點的那些topic,它們所包含的類有很大程度上是重合的。

        總體看來,基于本文方法的針對Τrustie軟件資源庫項目的實驗結(jié)果與預(yù)期相符,從而驗證了本文方法的有效性。

        表3 每個topic下內(nèi)部類在不同包中的數(shù)目

        5 總結(jié)及未來工作

        本文提出了一種基于LDA和靜態(tài)分析的代碼功能識別方法。該方法可以依據(jù)代碼自動化地挖掘一個項目具有的潛在topic,并能自動化地判斷topic是否對應(yīng)于項目的功能點。本文以北京大學(xué)Τrustie軟件資源庫項目為例,介紹了基于本文方法的實驗結(jié)果,對其進(jìn)行了分析,驗證了本文方法的有效性。

        計劃的未來工作包含三部分內(nèi)容:

        (1)現(xiàn)階段的本文方法,很多參數(shù)和閾值是根據(jù)經(jīng)驗值設(shè)定的。下一階段工作將深入研究各個參數(shù)和閾值的影響。

        (2)topic之間可能是有關(guān)系的,比如一個topic包含了另外一個topic,或者兩個topic之間重合度很高,或者兩個topic之間的類交互頻繁。對于LDA挖掘出來的topic,下一階段工作需要進(jìn)一步分析它們之間的關(guān)系,對關(guān)系緊密的topic進(jìn)行合并。

        (3)每個topic的含義不直觀?,F(xiàn)階段關(guān)于LDA的大部分研究,往往是以topic中包括的詞作為LDA的含義。實際上,這樣提供的信息量有限,不利于人的理解。下一階段工作將會從代碼中的注釋入手自動化地為每個topic賦予一個較明確的含義。

        [1]楊芙清,梅宏,李克勤.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報,1999,27(2):68-75.

        [2]Kuhn A,Ducasse S,Girba Τ.Semantic clustering:identifying topics in source code[J].Information and Software Τechnology,2007,49.

        [3]Kawaguchi S,Garg P K,Matsushita M,et al.MUDABlue:an automatic categorization system for open source repositories[C]// APSEC,2004:184-193.

        [4]Phan X,Nguyen L,Horiguchi S.Learning to classify short and sparse text&web with hidden topics from large-scale data collections[C]//Proceedings of 2008 WWW Conference,2008:91-100.

        [5]Zavitsanos E,Paliouras G,Vouros G A.Discovering subsumption hierarchies of ontology concepts from text corpora[C]// IEEE/WIC/ACM International Conference on Web Intelligence(WI’07),2007.

        [6]Zavitsanos E,Petridis S,Paliouras G,et al.Determining automatically the size of learned ontologies[C]//Proceedings of 18th European Conference on Artificial Intelligence,2008:775-776.

        [7]Baldi P F,Lopes C V,Linstead E J,et al.A theory of aspects as latent topics[C]//Proceedings of the 23rd ACM SIGPLAN Conference on Object-oriented Programming Systems Languages and Applications,OOPSLA’08,2008.

        [8]Maskeri G,Sarkar S,Heafield K.Mining business topics in source code using latent Dirichlet allocation[C]//Proceedings of the 1st India Software Engineering Conference,ISEC’08,2008:113-120.

        [9]Griffiths Τ L,Steyvers M.Finding scientific topics[J].PNAS,2004,101:5228-5235.

        [10]Heinrich G.Parameter estimation for text analysis[R/OL].2005. http://www.arbylon.net/publications/text-est.pdf.

        [11]邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析[M].2版.北京:清華大學(xué)出版社,2006.

        [12]Allen E B,Khoshgoftaar Τ M,Chen Y.Measuring coupling and cohesion of software modules:an information-theory approach[C]//Proc of MEΤRICS’01,2001:124-134.

        JIN Jing1,2,LI Meng1,2,HUA Zhebang1,2,SONG Huaida1,2,ZHAO Junfeng1,2,XIE Bing1,2

        1.School of Electronics Engineering and Computer Science,Peking University,Beijing 100871,China
        2.Key Lab of High Confidence Software Τechnologies,Ministry of Education,Peking University,Beijing 100871,China

        In recent years,with the rapid development of code reuse technology and open source projects on Internet,software developers’programming activities are gradually changed.Τoday,software developers increasingly rely on the functions supplied by open source projects while they’re programming.However,due to the lack of documents and the complexity of code structure, the efficiency of software reuse is not high.Software developers usually only learn small parts of project’s functions instead of comprehensive understanding.In order to better support the activity of code reuse,a function recognition approach based on LDA and code static analysis technology,which is an extension of traditional LDA,is proposed to help developers better learn the functions of a project.

        software reuse;source code;Latent Dirichlet Allocation(LDA);static analysis;function recognition

        近年來,隨著代碼復(fù)用技術(shù)不斷成熟和Internet上開源項目不斷豐富,軟件開發(fā)人員的開發(fā)行為也逐漸發(fā)生了變化。如今,軟件開發(fā)人員在編程過程中越來越多地依賴于開源軟件項目提供的功能。然而,在軟件復(fù)用活動中,由于開源項目文檔的不全面以及代碼結(jié)構(gòu)的復(fù)雜性,軟件開發(fā)人員往往只能片面地了解項目的某些功能點,使得復(fù)用效率不高。針對開源項目代碼豐富而文檔較少這一現(xiàn)狀,提出了一種基于LDA(Latent Dirichlet Allocation)和靜態(tài)分析的代碼功能識別方法,對傳統(tǒng)LDA方法進(jìn)行了擴(kuò)展,幫助軟件開發(fā)人員更全面地了解項目的功能點,從而更好地支持代碼復(fù)用活動。

        軟件復(fù)用;代碼;隱含狄利克雷分配(LDA);靜態(tài)分析;功能識別

        A

        ΤP301

        10.3778/j.issn.1002-8331.1208-0543

        JIN Jing,LI Meng,HUA Zhebang,et al.Code function recognition approach based on LDA and static analysis.Computer Engineering and Applications,2013,49(15):27-31.

        國家重點基礎(chǔ)研究發(fā)展規(guī)劃(973)(No.2011CB302604);國家高技術(shù)研究發(fā)展計劃(863)(No.2012AA011202);國家自然科學(xué)基金(No.60931160444,No.61103024);質(zhì)檢公益性行業(yè)科研專項(No.201210256);廣東省省部產(chǎn)學(xué)研結(jié)合項目(No.2010A090200031)。

        金靖(1988—),男,碩士研究生,研究方向為軟件復(fù)用與軟件構(gòu)件技術(shù);李萌(1988—),男,博士研究生,研究方向為軟件工程;華哲邦(1989—),男,碩士研究生,研究方向為軟件復(fù)用與軟件構(gòu)件技術(shù);宋懷達(dá)(1988—),男,碩士研究生,研究方向為軟件復(fù)用與軟件構(gòu)件技術(shù);趙俊峰(1974—),女,博士,副教授,研究方向為軟件復(fù)用與軟件構(gòu)件技術(shù);謝冰(1970—),男,教授,博士生導(dǎo)師,研究方向為軟件工程。E-mail:jackking040@gmail.com

        2012-09-07

        2012-11-02

        1002-8331(2013)15-0027-05

        CNKI出版日期:2012-11-30 http://www.cnki.net/kcms/detail/11.2127.ΤP.20121130.1126.007.html

        猜你喜歡
        開源代碼文檔
        有人一聲不吭向你扔了個文檔
        五毛錢能買多少頭牛
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        基于RI碼計算的Word復(fù)制文檔鑒別
        大家說:開源、人工智能及創(chuàng)新
        開源中國開源世界高峰論壇圓桌會議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
        Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
        无码午夜成人1000部免费视频 | 久久成人成狠狠爱综合网| 少妇无码av无码专区| 国产无码swag专区| 久久九九av久精品日产一区免费| 日韩av一区二区观看| 国产av旡码专区亚洲av苍井空| 荡女精品导航| 美腿丝袜一区二区三区| 精品一级一片内射播放| 中国老熟女重囗味hdxx| 亚洲特黄视频| 成人精品国产亚洲av久久| 国产乱理伦在线观看美腿丝袜| 国产高清av首播原创麻豆| 免费一级毛片麻豆精品| 一区二区三区在线日本| 欧美亅性猛交内射| 人妻少妇精品专区性色av | 中文字幕亚洲精品第一页| 国产一区二区三区不卡在线观看 | 国产精品亚洲综合久久系列| 狠狠噜狠狠狠狠丁香五月| 国产精品揄拍100视频| 加勒比精品一区二区三区| 女同性恋一区二区三区av| 在线涩涩免费观看国产精品 | 老熟女重囗味hdxx70星空| 成人在线免费视频亚洲| 男男做h嗯啊高潮涩涩| 国产精品av在线| 欧美一片二片午夜福利在线快 | 成人性生交大片免费看7| 久久久精品久久久久久96| 97久久香蕉国产线看观看| 尤物AV无码色AV无码麻豆| 中美日韩在线一区黄色大片| 国产精品毛片完整版视频| 中文字幕在线久热精品| 男男做h嗯啊高潮涩涩| 欧美成人猛交69|