尹春林,王 煒,2+,李 彤,2,何 云,熊文軍,周小煊
1.云南大學(xué) 軟件學(xué)院,昆明 650091
2.云南省軟件工程重點實驗室,昆明 650091
利用RNNLM面向主題的特征定位方法*
尹春林1,王 煒1,2+,李 彤1,2,何 云1,熊文軍1,周小煊1
1.云南大學(xué) 軟件學(xué)院,昆明 650091
2.云南省軟件工程重點實驗室,昆明 650091
Abstract:Software feature location is the guarantee of software evolution.Textual based feature location method is an important part of the current research on feature location.The current feature location method based on text regards the code key words as the independent identically distributed individual,and ignores the context of the code.For this question mentioned above,this paper proposes a source code topic modeling method by using deep learning language model RNNLM(recurrent neural networks language model),and realizes localization features on this basis.The experimental results show that the precision rate is improved by 8.61%and 2.61%compared with the text feature localization based on LDA(latent Dirichlet allocation)and LSI(latent semantic indexing),indicating that the method has better precision.
Key words:software feature location;software evolution;RNNLM;topic modeling
軟件特征定位是軟件演化活動順利展開的保證。基于文本的特征定位方法是目前特征定位研究的一個重要組成部分。當(dāng)前基于文本的特征定位方法將代碼關(guān)鍵詞視為獨立同分布的個體,忽略了代碼間的語境。針對上述問題,基于深度學(xué)習(xí)語言模型RNNLM(recurrent neural networks language model)提出了一種源代碼主題建模方法,并在此基礎(chǔ)上實現(xiàn)了特征定位。實驗結(jié)果表明,與基于LDA(latent Dirichlet allocation)和LSI(latent semantic indexing)的文本特征定位相比較,查準(zhǔn)率提高8.61%和2.61%,表明該方法具有較優(yōu)的查準(zhǔn)率。
軟件特征定位;軟件演化;RNNLM;主題建模
特征定位(feature location)[1]也被稱為概念定位(concept location)[2-3]或者軟件偵測(software reconnaissance)[4],是程序理解領(lǐng)域一個重要的組成部分[5-6]。該研究旨在建立特征與源代碼之間映射關(guān)系,而特征(features)[1]是指可被定義和評估的軟件功能屬性。
對特征定位的研究最早可以追溯到1992年,Wilde等人提出了最早的特征定位方法——軟件偵測(software reconnaissance)[4]。在軟件維護(hù)/演化領(lǐng)域,沒有任何一個維護(hù)/演化任務(wù)能夠脫離特征定位的支持[1,7]。維護(hù)/演化活動是在現(xiàn)有系統(tǒng)的約束下實施的受限開發(fā)。因此,理解特征與代碼之間的映射關(guān)系,并據(jù)此確定執(zhí)行維護(hù)/演化活動的起始點和范圍,是成功實施維護(hù)/演化活動的基礎(chǔ)。確定維護(hù)/演化活動影響范圍的過程稱為波及效應(yīng)分析[8-9]。該分析的前提通常是使用特征定位方法確定維護(hù)/演化活動的起始點[1]??勺匪菪詮?fù)原[10]試圖建立軟件實體(代碼、需求文檔、設(shè)計文檔等)之間的映射關(guān)系。特征定位旨在建立軟件功能屬性與源代碼之間的映射關(guān)系,因此可以認(rèn)為特征定位研究是可追溯性復(fù)原研究的一個重要組成部分。建立高效的特征定位方法不僅可以豐富程序理解研究內(nèi)涵,同時對推動多個研究領(lǐng)域的共同發(fā)展具有重要意義。
按分析方式的不同特征定位可以分為靜態(tài)特征定位、動態(tài)特征定位、基于文本的特征定位和混合特征定位。經(jīng)過實驗驗證,基于文本的特征定位較靜態(tài)特征定位和動態(tài)特征定位具有較高的查準(zhǔn)率,因而受到了業(yè)界的廣泛重視。
當(dāng)前基于文本的特征定位方法大致可以分為3類:基于模式識別、基于自然語言處理和基于信息檢索的特征定位方法。基于模式識別的特征定位方法是3種方法中最簡單的一種,其思想是程序員使用正則表達(dá)式描述軟件特征,定位算法根據(jù)特征描述對代碼進(jìn)行檢索,并將檢索結(jié)果作為特征定位結(jié)果進(jìn)行輸出。
基于自然語言處理的特征定位方法試圖將自然語言處理在詞性標(biāo)注、分詞、組塊分析等方面的研究成果嫁接于特征定位問題。而實驗證明,基于自然語言處理的特征定位方法較基于模式匹配的特征定位方法在查準(zhǔn)率和執(zhí)行效率方面都有不同程度的提高。
基于信息檢索的特征定位方法顧名思義是將信息檢索領(lǐng)域成熟的方法應(yīng)用于特征定位問題。其思想是程序員使用自然語言對特征進(jìn)行描述,通過度量特征描述與代碼之間的語義相似度實現(xiàn)特征定位。基本計算流程如下:
(1)生成語料庫。根據(jù)不同的粒度,為源代碼中每一個實體(類、方法等)建立一個文本文件。文件中保存著代碼實體中出現(xiàn)過的關(guān)鍵詞。所有文本文件構(gòu)成語料庫。
(2)預(yù)處理。包含去除停詞(stop words)、分詞、詞干還原三部分。在去除停詞步驟中將刪除與特征知識不相關(guān)的詞,例如代碼中出現(xiàn)的冠詞、不定冠詞等。代碼中的變量名經(jīng)常按照一定的法則由多個實詞組合而成(例如駝峰命名法)。分詞操作將連續(xù)的字符序列按照一定的規(guī)則拆分成若干單詞,例如tableOpen拆分成為table和open兩個詞。詞干還原將意義相近的同源詞和同一個單詞的不同形態(tài)進(jìn)行歸并,例如inserting還原成為insert。
(3)數(shù)值化表示。將經(jīng)過預(yù)處理的語料轉(zhuǎn)換為便于計算的數(shù)值化形式。常見的數(shù)值化方法是基于“詞袋”模式[11]的Document Term Matrix[12]矩陣或TFIDF[13]矩陣。
(4)特征描述數(shù)值化表示。將程序員提供的特征描述數(shù)值化,使之與經(jīng)過轉(zhuǎn)換的代碼矩陣具有相同的維度。
(5)特征定位。使用信息檢索算法對步驟(3)生成的源代碼矩陣進(jìn)行索引、語義分析、主題建模等操作。計算特征描述與信息檢索結(jié)果之間的相似度。設(shè)定閾值,凡大于閾值的代碼實體被認(rèn)為是特征定位結(jié)果。
常用的信息檢索方法有隱語義索引(latent semantic indexing,LSI)[14]、隱狄利克雷分布(latent Dirichlet allocation,LDA)[15]、向量空間模型(vector space model,VSM)[16]、依賴性語言模型(dependence language model,DLM)[17]。由于代碼也是一種特殊的文本,致使信息檢索技術(shù)應(yīng)用于特征定位研究并不需要太多的轉(zhuǎn)換,從而定位算法查準(zhǔn)率較傳統(tǒng)動態(tài)、靜態(tài)定位方法有所提高[1,5],恰當(dāng)?shù)匕l(fā)揮了信息檢索研究成果對特征定位研究的支持。然而,基于信息檢索的特征定位方法在實踐中也暴露出一些問題。代碼的數(shù)值化抽象是特征定位的基礎(chǔ),但源代碼具有區(qū)別于自然語言的構(gòu)詞法則(例如變量的駝峰構(gòu)詞法)、關(guān)鍵詞(例如編程語言定義的操作符)、段落標(biāo)識(自然語言以回車符作為段落標(biāo)識,而程序則以“}”等符號作為標(biāo)識)、關(guān)鍵詞上下文語義關(guān)聯(lián)性更弱等特點。當(dāng)前主流的代碼數(shù)值化方式(LDA、LSI等)均使用“詞袋”模型[11],即認(rèn)為源代碼對應(yīng)的概率分布函數(shù)僅與關(guān)鍵詞本身有關(guān),與關(guān)鍵詞的上下文環(huán)境無關(guān),是一種上下文無關(guān)模型。該模型的缺陷在于:(1)無法刻畫代碼上下文對關(guān)鍵詞的影響;(2)非平滑性,測試數(shù)據(jù)中若有一些關(guān)鍵詞在訓(xùn)練數(shù)據(jù)中沒有出現(xiàn),導(dǎo)致整個代碼的概率為0;(3)代碼向量維度高、稀疏,給后續(xù)計算造成了維度災(zāi)難(curse of dimension)。
針對當(dāng)前基于信息檢索特征定位方法存在的問題,本文提出了一種基于深度學(xué)習(xí)語言模型RNNLM(recurrent neural networks language model)的面向主題的特征定位方法。
本文的主要貢獻(xiàn)有以下幾方面:
(1)利用深度學(xué)習(xí)語言模型RNNLM獲取程序上下文語義,以期支持特征定位。
(2)提出了代碼類標(biāo)定義方法。RNN(recurrent neural network)屬于監(jiān)督學(xué)習(xí),需要帶標(biāo)簽數(shù)據(jù),源代碼本身沒有標(biāo)簽數(shù)據(jù),本文以“類”為粒度,提出了一種代碼標(biāo)簽定義方法。
(3)源代碼數(shù)值化。即詞向量的生成,將源代碼數(shù)值化可以更精準(zhǔn)、良好地表達(dá)文本上下文語義相似性關(guān)系,使得特征定位的基礎(chǔ)更牢靠。
本文組織結(jié)構(gòu)如下:第2章給出了利用深度學(xué)習(xí)算法RNN進(jìn)行特征定位的基本框架。第3章對實驗環(huán)節(jié)進(jìn)行描述,設(shè)定了基線方法,設(shè)計了實驗步驟,并定義了實驗效果的量化指標(biāo)。通過對比基線方法與本文方法的實驗結(jié)果,對有效性進(jìn)行了分析。第4章對本實驗的不足及將來的研究工作進(jìn)行總結(jié)。
本文方法框架如圖1所示,主要分為三部分:生成語料庫,代碼數(shù)值化轉(zhuǎn)換和特征定位。其中,語料庫生成使用文本分析方法,利用循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型生成詞向量,最后對給定查詢進(jìn)行相似度計算并輸出按相似度降序的結(jié)果,也就是特征定位的過程。
Fig.1 Method frame of this paper圖1 本文方法框架圖
一個軟件系統(tǒng)可以被劃分成不同的功能或者不同的模塊,一個主題對應(yīng)于一個功能或者一個模塊。基于文本的特征定位方法[18-19]認(rèn)為源代碼中的變量名、函數(shù)名、class(類)名、API函數(shù)、注釋等關(guān)鍵詞中蘊含了豐富的主題知識,可以通過它們建立源代碼與特征之間的映射關(guān)系?;赗NNLM的特征定位方法本質(zhì)上是先對語料庫進(jìn)行主題知識建模再對查詢語句進(jìn)行分類,精準(zhǔn)的主題劃分對主題建模結(jié)果的好壞具有決定性的作用,不同粒度的主題劃分獲得的實驗效果也不一樣。本文進(jìn)行方法/函數(shù)粒度、類粒度、文件夾粒度和包粒度4種劃分。函數(shù)級的劃分粒度過小,可能需要多個函數(shù)才能共同表達(dá)一個主題知識,為此需要先進(jìn)行聚類運算;文件夾和包級別的劃分粒度偏大,適合大型軟件系統(tǒng)的特征定位。結(jié)合本文所選源代碼系統(tǒng),認(rèn)為“類”級的劃分對體現(xiàn)本文方法的主題知識更加理想,因此選擇在類一級上進(jìn)行主題知識分析。主題知識的獲取如下:
(1)獲取語料
源代碼中一個class能夠體現(xiàn)一個主題。本文使用的源代碼系統(tǒng)是一個完整的原始系統(tǒng),系統(tǒng)中除了包含類文件還包含其他一些無關(guān)文檔,因此首先需要從源代碼系統(tǒng)中將class文件提取出來。將源代碼中的所有class文件提取出來后,就獲得了一個初始語料庫。
(2)語料標(biāo)注
由于使用的RNN屬于監(jiān)督學(xué)習(xí),在訓(xùn)練時需要有標(biāo)定的數(shù)據(jù),而目前的語料還是無標(biāo)簽數(shù)據(jù),接下來的工作就是給這些數(shù)據(jù)貼上標(biāo)簽。本文使用數(shù)字作為標(biāo)簽名,標(biāo)注方式如表1所示。
Table 1 Labelling method表1 貼標(biāo)簽標(biāo)記方法
表1表示由3個帶標(biāo)簽的class組成的一個語料庫,其中第一列表示一個從源代碼中提取出來的classID,第二列表示該行所對應(yīng)class的文本內(nèi)容,第三列表示該行所對應(yīng)class的標(biāo)簽。
(3)預(yù)處理
傳統(tǒng)的文本特征定位需要對獲得的語料庫進(jìn)行預(yù)處理,主要包含分詞、詞根還原和去除停用詞三方面的操作。分詞就是將源代碼中的復(fù)合詞拆分,比如一個方法名由ActionSet組成,則將其拆分為Action和Set兩個詞;詞根還原用于將同義詞進(jìn)行歸并,以及將一個詞的不同形態(tài)進(jìn)行還原;去除停用詞將謂詞、運算符等不包含主題知識的詞匯剔除。
由于本文使用RNNLM進(jìn)行特征定位,而RNNLM是可以提取復(fù)雜的上下文語義關(guān)系的。僅將每一個.java文件里的所有內(nèi)容提取出來作為一個數(shù)據(jù),保留文件中各關(guān)鍵詞出現(xiàn)的順序和形式。因此并不需要像傳統(tǒng)的文本特征定位那樣進(jìn)行繁瑣的預(yù)處理,僅需將代碼中的部分注釋(有一些注釋僅僅表達(dá)了開源軟件使用的開源協(xié)議,對表達(dá)程序功能語義毫無作用,為了節(jié)省運行時間和計算機(jī)資源等,需要對這類符號進(jìn)行一個簡單的處理,處理方式是將它刪除)刪除后就可以作為輸入。這樣與傳統(tǒng)的文本特征定位相比,本文方法更能完整地保留主題知識。
通常的“詞袋”語言模型可以抽象為關(guān)鍵詞的概率分布函數(shù)。形式化地來說,假設(shè)源代碼SC是由{w1,w2,…,wn}構(gòu)成的文本序列,則SC對應(yīng)的概率分布函數(shù)如式(1):
其中,條件概率P(w1),P(w2|w1),…,P(wn|w1,w2,…,wn-1)是源代碼聯(lián)合概率模型P(SC)的參數(shù)。之前提到這樣的模型存在非平滑,向量維度大、稀疏,無法反映關(guān)鍵詞上下文語境等問題。如何將以字符串為基礎(chǔ)的源代碼抽象為對應(yīng)的數(shù)值化形式,解決傳統(tǒng)源代碼向量維度大、稀疏,無法反映關(guān)鍵詞上下文語境等問題決定了特征定位方法的好壞。本文采用可以對更復(fù)雜的上下文進(jìn)行建模的RNNLM對代碼進(jìn)行抽象。
該抽象機(jī)制不是像普通的神經(jīng)網(wǎng)絡(luò)那樣直接對P(wi|wi-(n-1),…,wi-1)進(jìn)行式(2)這樣的近似計算,RNNLM是直接對P(wi|wi-(n-1),…,wi-1)進(jìn)行建模求解。RNNLM也并不像n-gram model那樣對n元近似求解,而是使用迭代的方式對其進(jìn)行建模求解。RNNLM可以利用所有的上文信息,對當(dāng)前詞進(jìn)行預(yù)測。實驗直接利用RNNLM對語料庫進(jìn)行建模,映射出每一個class與其標(biāo)簽的一一對應(yīng)關(guān)系。class與標(biāo)簽名建立對應(yīng)關(guān)系的過程大概如下:
(1)將語料庫中每一個class源代碼用one-hot表示成詞向量。
(2)將第1步生成的詞向量進(jìn)行RNN訓(xùn)練,最終轉(zhuǎn)換成類似于[0.056,-0.267,-0.898,0.111,-0.281,0.567,…]這樣的低維實數(shù)短向量。
(3)利用第2步獲得的詞向量通過Softmax建立每個class與其對應(yīng)類標(biāo)的映射,即獲得RNN隱藏層中的激活函數(shù)Softmax的參數(shù)θ:
這樣的低維實數(shù)短向量可以避免傳統(tǒng)抽象方法帶來的稀疏性,從而可以避免相關(guān)或者相似詞之間的獨立性,兩個相似詞之間的距離可能就更短了。同時,相似詞的詞向量之間的距離相近了,這就讓基于詞向量設(shè)計的一些模型自帶平滑功能[20-21]。
特征定位是將程序員提供的特征描述與模型中的主題進(jìn)行匹配的過程,即識別特征描述與哪些程序源代碼相關(guān)。同樣將程序員提交的query(查詢語句)經(jīng)過像2.2節(jié)一樣的數(shù)值化后用RNN進(jìn)行訓(xùn)練,訓(xùn)練完成后就可以將訓(xùn)練生成的詞向量交給2.2節(jié)獲得的Softmax參數(shù)模型進(jìn)行分類。這一分類過程其實就是計算查詢語句的詞向量與哪一個class詞向量的相似度最高的過程。本質(zhì)上這也是一個多分類問題。Softmax分類函數(shù)如式(3):
Softmax回歸其實就相當(dāng)于多類別情況下的邏輯回歸,式(3)中Softmax有k個類,并且函數(shù)將(-θ*X)作為指數(shù)的系數(shù),因此就有j=1…k項。然后除以它們的累加和,這樣做就實現(xiàn)了歸一化,使得輸出的k個數(shù)的和為1。因此Softmax的假設(shè)函數(shù)輸出的是一個k維列向量,每一個維度的值就代表與該維度索引值對應(yīng)的類出現(xiàn)的概率,比如輸出這樣一個列向量[0.5,0.3,0.2],0.5就代表第0類出現(xiàn)的概率為0.5。這樣計算出每個特征描述與每一個class的概率,然后依次按概率降序排列。為此,獲得一個概率相關(guān)列表,越在前面的class就是相關(guān)度越大的class。本文獲得的特征定位的結(jié)果就是每個查詢語句與每個class的相似度。
為了對實驗結(jié)果進(jìn)行客觀、有效的評估,將文獻(xiàn)[18,23]的方法作為基線方法進(jìn)行對比論證。
為了確保實驗結(jié)果的客觀性和正確性,本文使用文獻(xiàn)[1]提供的iEdit 4.3[1]基準(zhǔn)數(shù)據(jù)集進(jìn)行測試。該數(shù)據(jù)集源代碼包含531個類(class),6 400余個方法(method),1.9萬行源代碼。同時,還有272個通過使用IST(issue tracking system)和SVN(subversion)工具分析獲得的特征。每一個特征對應(yīng)于兩個數(shù)據(jù)文件。
(1)Queries:以“ShortDescription[ID].txt”和“Long-Description[ID].txt”命名的文件,特征的文本描述,該數(shù)據(jù)主要來源于jEdit版本更新時的改動說明文本。LongDescription是詳細(xì)描述,ShortDescription是概括性短語描述。在實驗中,把ShortDescription作為定位特征時的查詢內(nèi)容。
(2)GoldSet:以“GoldSet[ID].txt”命名的文件,記錄了與特征實際相關(guān)的源代碼,這個數(shù)據(jù)用于驗證定位結(jié)果的正確性[22]。
第2章已經(jīng)介紹了語料庫的生成過程,這里就不再做詳細(xì)介紹。有了語料庫,人們就可以對語料庫進(jìn)行建模訓(xùn)練,本文選用RNN語言模型來獲取主題知識。對語料庫進(jìn)行簡單的預(yù)處理后就可以用作實驗的輸入數(shù)據(jù)了,但當(dāng)前的數(shù)據(jù)還是文本數(shù)據(jù),并不能被計算機(jī)處理,因此還要將這些數(shù)據(jù)數(shù)值化,即詞向量的生成。在RNNLM中詞向量的訓(xùn)練生成是伴隨著循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型的訓(xùn)練生成產(chǎn)生的,詞向量相當(dāng)于是以參數(shù)的形式存在于RNNLM中。因此本文的詞向量與RNN模型是捆綁在一起訓(xùn)練的。
為了能得到一個好的模型,本文設(shè)定了一組驗證集(實驗中因為531個數(shù)據(jù)沒有兩個屬于同一類,所以驗證集同樣是531個訓(xùn)練數(shù)據(jù)中的一小部分),設(shè)置驗證集的目的是用來選取模型,挑選對驗證集預(yù)測準(zhǔn)確率高的模型來做特征定位。圖2是其中訓(xùn)練的兩個模型的統(tǒng)計結(jié)果,橫坐標(biāo)是訓(xùn)練模型時迭代的次數(shù),縱坐標(biāo)是驗證集準(zhǔn)確率。兩個模型訓(xùn)練的不同之處是模型1迭代一次訓(xùn)練10個數(shù)據(jù),模型2迭代一次訓(xùn)練50個數(shù)據(jù),兩個模型都迭代了100次。由此可知模型預(yù)測的準(zhǔn)確率與迭代次數(shù)和每次訓(xùn)練的實驗數(shù)目有關(guān)。因為數(shù)據(jù)集都是不相同的,但又想將每個數(shù)據(jù)都用于模型的訓(xùn)練,所以驗證集就和訓(xùn)練集有交叉,即驗證集是訓(xùn)練集的子集。但實驗也發(fā)現(xiàn)并不是對驗證集準(zhǔn)確率高的模型特征定位結(jié)果的準(zhǔn)確率也高。本文選擇了模型2這樣相對穩(wěn)定單調(diào)的模型來進(jìn)行下一步的實驗。
Fig.2 Comparison of models圖2 模型對比
本文使用的RNNLM模板并不需要設(shè)置太多的參數(shù),其中需要設(shè)置的參數(shù)有以下幾個。
隱藏層(layers)中的Embedding、GatedRecurrent和Dense設(shè)置。
(1)Embedding(詞向量):size=128;
(2)GatedRecurrent(門機(jī)制循環(huán)):size=256,激活函數(shù)activation=tanh;
(3)Dense(輸出設(shè)置):size=531,激活函數(shù)activation=softmax,訓(xùn)練生成softmax的參數(shù)θ,輸出531個類。
RNN模型(model)僅有兩個參數(shù)需要設(shè)置。
(1)layers=layers,隱藏層使用上面設(shè)置好的layers;
(2)cost=cce,“cce”為以softmax為輸出的多分類損失函數(shù)。
在傳統(tǒng)的特征定位中評判實驗結(jié)果好壞通常使用信息檢索中常用的兩個指標(biāo):查全率(Recall)和查準(zhǔn)率(Precision)[22]。
定義1Recall表示查全率,correct代表與特征相關(guān)的代碼總量,retrieved代表使用特征定位方法檢索出來的代碼量,則查全率的定義為:
定義2Precision表示查準(zhǔn)率,correct代表與特征相關(guān)的代碼總量,retrieved代表使用特征定位方法檢索出來的代碼量,則查準(zhǔn)率的定義為:
由定義可以看出,查全率和查準(zhǔn)率之間存在一定的互逆關(guān)系。從定義1可見,特征相關(guān)代碼總量固定,當(dāng)增加檢索出來的代碼量retrieved時會獲得較高的查全率,極端情況下檢索出所有代碼可以獲得百分之百的查準(zhǔn)率。但從定義2知道,當(dāng)檢索出來的代碼量增加也就意味著分母增加,查準(zhǔn)率下降。
特征定位的目的是找到特征相關(guān)的源代碼,并不是很注重查全率的提高,而是更加看重查準(zhǔn)率的提升,原因是只有找到一個與特征相關(guān)的源代碼就可以把接下來的工作交給波及效應(yīng)分析來處理。傳統(tǒng)的基于文本的特征定位方法使用經(jīng)驗閾值α=0.075作為判定文本與特征是否具有相關(guān)性的標(biāo)準(zhǔn)[18],但在數(shù)據(jù)規(guī)模較大時,取α=0.075效果并不理想。而文獻(xiàn)[22]推薦取相似度最高的10%~15%的源代碼作為結(jié)果,然而這樣的判定方式通常會擴(kuò)大后續(xù)軟件演化的范圍和降低演化的效率。同時,目前在特征定位中已有很多學(xué)者都認(rèn)為可以通過判定實驗檢索出代碼中第一個與實際特征相關(guān)的代碼排在第幾位來衡量實驗方案的好壞。
綜上看來,最理想的特征定位應(yīng)該是只定位出一個相關(guān)代碼,該代碼恰好是與特征相關(guān)的代碼,接下來的工作交給波及效應(yīng)分析來進(jìn)行。傳統(tǒng)特征定位在計算查準(zhǔn)率時通常取檢索結(jié)果的前10%~15%(即定義2中的retrieved)來計算,如本實驗中有531個class,則取檢索出來的高相似度的前10%有53.1個。假設(shè)有這樣一個例子:在定位特征f時,輸入query描述語句,方法檢索出來的高相似度的前10%個class為retrieved={r1,r2,…,r50},ri表示檢索出來的一個類。假設(shè)實際與特征f相關(guān)的代碼類個數(shù)有20個,即correct={c1,c2,…,ci,…,c20},ci表示一個與特征f實際相關(guān)的類,假如retrieved中有5個類與correct中的類相同,則查準(zhǔn)率約為10%。然而人們并不能確定在retrieved中與correct中相同的這5個類是前5個,最壞的情況可能這5個類在retrieved中是排在最后的5個。在這個例子中用定義2的方法獲得的查準(zhǔn)率為10%。然而不難發(fā)現(xiàn)這種情況下前48個類都不是與特征相關(guān)的類,這10%的查準(zhǔn)率是虛的,對進(jìn)行軟件維護(hù)并沒有太大實際意義。因此綜合以上幾種觀點,本實驗只檢索出一個認(rèn)為高度與特征實際相關(guān)的源代碼類來計算查準(zhǔn)率,也就是只取前1.9%(1/531)個類進(jìn)行查準(zhǔn)率的計算。此時的查準(zhǔn)率計算由定義3進(jìn)行闡述。
定義3Precision代表查準(zhǔn)率,若Ri是實驗檢索出的與特征i相似度最高的代碼,Ri的確與特征i相關(guān),則記Resulti=1,否則Resulti=0,則查準(zhǔn)率定義為:
其中,n表示特征的數(shù)量。本文對50個特征進(jìn)行了實驗。本實驗只檢索出一個相似度最高的代碼類出來,因此就不做查全率的計算。但認(rèn)為這不會對實驗的評價造成影響。
為了驗證本文方法的有效性,將文獻(xiàn)[18,23]提出的LSI和LDA方法作為基線方法,使用基準(zhǔn)數(shù)據(jù)集進(jìn)行正面對比實驗。本文實驗測試了50個數(shù)據(jù)計算查準(zhǔn)率,基線方法僅測試了10個數(shù)據(jù)。圖3是本文方法與兩種方法查準(zhǔn)率和檢索率(即實驗檢索出來用于計算查準(zhǔn)率的代碼量與實驗代碼總量的比值)的對比情況。本文方法獲得的平均查準(zhǔn)率為11.11%,檢索率為1.9%;而基線方法的平均查準(zhǔn)率為8.5%和2.5%,檢索率卻為15.0%和5.0%。
Fig.3 Comparison of experimental result圖3 實驗結(jié)果對比
表2對3種方法的數(shù)據(jù)進(jìn)行了對比。從表2中可以看出ArgoUML類個數(shù)要比jEdit大,取5%仍然有78個類,jEdit取10%~15%有53~79個類,本文方法測試的數(shù)據(jù)個數(shù)比文獻(xiàn)[18,23]都多40個。為了更有效地驗證本文方法的有效性和公正性,本文還做了一組自我對照組,同樣挑選出了與文獻(xiàn)[18]方法相同的10個數(shù)據(jù)進(jìn)行了測試,表3是被測試的10個數(shù)據(jù),“ID”是每個數(shù)據(jù)對應(yīng)的ID號,“GoldSet”是與對應(yīng)特征實際相關(guān)的class數(shù)。
Table 2 Test data and retrieve amount表2 測試數(shù)據(jù)和檢索量對比
10個相同數(shù)據(jù)測試結(jié)果如表4。表4中“本文實驗1”是測試了50個數(shù)據(jù)的結(jié)果,“本文實驗2”是測試了10個實驗的結(jié)果,然而測試10個數(shù)據(jù)的查準(zhǔn)率為20%,比“本文實驗1”測試了50個數(shù)據(jù)的查準(zhǔn)率11.11%和文獻(xiàn)[18]方法測試了10個數(shù)據(jù)的查準(zhǔn)率8.5%都要高。這說明在這10個測試中有2個正確地匹配到了相關(guān)特征。
通過實驗的對比論證可以看出,本文方法較其他方法都有更優(yōu)的查準(zhǔn)率。
Table 3 10 data sets表3 10個數(shù)據(jù)集
Table 4 10 experimental test results表4 10個實驗測試結(jié)果
使用的RNN是監(jiān)督學(xué)習(xí),監(jiān)督學(xué)習(xí)在訓(xùn)練階段需要有標(biāo)簽數(shù)據(jù),而人們常用的基準(zhǔn)實驗數(shù)據(jù)集jEdit、muCommander、JabRef和 ArgoUML 等都是無標(biāo)簽數(shù)據(jù)集,這就需要手動對源代碼進(jìn)行劃分。劃分的依據(jù)是按主題知識進(jìn)行劃分,劃分的好壞將會影響分類的結(jié)果。作者嘗試過不同的劃分方式,比如將系統(tǒng)中的同一個文件夾下的所有源代碼類劃分成一個大類,然而實驗發(fā)現(xiàn)這樣做存在一個問題,數(shù)據(jù)集jEdit中與實際特征相關(guān)的代碼是類一級的粒度,那么同一個文件夾下可能有多個類,但這些類都被標(biāo)注到了同一個類簇中,最后定位出來的就是同一個文件夾下的所有類,這個類簇中包含類的數(shù)量多少不一,有的與實際特征相關(guān),有的不相關(guān)。這樣即使定位出一個文件夾,也不能確定該文件夾下的這些類到底哪一個與特征更相關(guān),即不能夠確定該文件夾下的類的相關(guān)權(quán)重,因此還要進(jìn)行二次篩選。這就給計算查準(zhǔn)率等帶來了很大麻煩。
定義4假設(shè)S是源代碼系統(tǒng),該系統(tǒng)包含50個文件夾,S={s1,s2,…,si,…,s50},si是該系統(tǒng)中的一個文件夾,該文件夾包含n(n<531)個類,T是S的一個子集T={t1,t2,…,ti},i≤50,其中ti文件夾下至少包含一個源代碼類。ti={c1,c2,…,ci},i<531,ci代表一個類。
每一個文件下的類能表達(dá)同一個主題知識,于是將系統(tǒng)S按文件夾劃分成50個類簇,每個類簇至少包含一個類對象,到此已給系統(tǒng)S貼上標(biāo)簽,接下來用RNN訓(xùn)練,最后進(jìn)行特征定位。然而按這樣的思路定位出來的是一個類簇,而每個類簇的類對象個數(shù)多少不一,有的甚至多于源代碼總類個數(shù)的15%,而有的僅有一個類,這樣劃分得出的結(jié)果難以確定每一個文件夾下哪些類是與相關(guān)特征有關(guān)。
自從2006年Hinton等人提出深度學(xué)習(xí)到現(xiàn)在,其在很多領(lǐng)域取得了令人矚目的成就,特別是在語音、圖像識別和自然語言處理等方面。然而基于文本的特征定位大部分工作是與文本打交道,本文提出運用深度學(xué)習(xí)算法RNN來進(jìn)行基于文本的特征定位。與傳統(tǒng)的軟件特征定位不同,深度學(xué)習(xí)在訓(xùn)練模型前運用了數(shù)值化的方式對文本進(jìn)行預(yù)處理,使特征的主題知識得以更完好地保存下來,這就避免了分詞、停詞、詞根還原和使用TF-IDF矩陣來表達(dá)主題知識產(chǎn)生的特征表達(dá)不好的短板,對后來主題知識的分類打下了很好的基礎(chǔ)。同時由于波及效應(yīng)分析的發(fā)展,縮小檢索范圍對軟件演化、軟件維護(hù)更具有實際意義。目前一些學(xué)者認(rèn)為可以通過評估檢索出來的代碼中第一個與實際特征一致的代碼排在第幾個位置來評估實驗方案的好壞,本文只是用提取出的代碼中相似度最高的一個代碼類來做查準(zhǔn)率的計算,自然也就去掉了查全率的計算,但是這樣評估研究結(jié)果的查準(zhǔn)率更有助于后續(xù)軟件演化效率的提高。然而本文利用最低的檢索量獲得了更高的查準(zhǔn)率,從另一方面來說這也是特征定位最理想的狀況,也更具有普遍意義和實際意義。
RNN是一個監(jiān)督學(xué)習(xí),需要有標(biāo)注的數(shù)據(jù)集,但是通常用在特征定位的數(shù)據(jù)集都是無標(biāo)簽數(shù)據(jù)集,并且數(shù)據(jù)標(biāo)簽標(biāo)注的標(biāo)準(zhǔn)、粒度及方法等都會影響到領(lǐng)域主題知識的表達(dá)。實驗中嘗試將同一個文件夾下的所有類劃分成同一個主題,但并沒有取得很好的效果。這也提示人們探索更好的標(biāo)注方式。
同時,訓(xùn)練RNN需要大量的數(shù)據(jù)集才能取得良好的效果,而本文實驗采用的是jEdit4.3按類級粒度進(jìn)行劃分,劃分后僅有531個數(shù)據(jù)集,這對本文的模型訓(xùn)練增加了一定的難度。因此未來可以將數(shù)據(jù)集劃分粒度減小一些,比如按方法進(jìn)行劃分,或者找一個更大的系統(tǒng)來進(jìn)行訓(xùn)練,以獲得更好的結(jié)果。同時希望在目前的基礎(chǔ)上增加動態(tài)層來提高查準(zhǔn)率。
[1]Dit B,Revelle M,Gethers M,et al.Feature location in source code:a taxonomy and survey[J].Journal of Software Maintenance&Evolution Research&Practice,2013,25(1):53-95.
[2]Abebe S L,Alicante A,Corazza A,et al.Supporting concept location through identifier parsing and ontology extraction[J].Journal of Systems and Software,2013,86(11):2919-2938.
[3]Scanniello G,Marcus A,Pascale D.Link analysis algorithms for static concept location:an empirical assessment[J].Empirical Software Engineering,2015,20(6):1666-1720.
[4]Wilde N,Gomez JA,Gust T,et al.Locating user functionality in old code[C]//Proceedings of the 1992 Conference on Software Maintenance,Orlando,USA,Nov 9-12,1992.Piscataway,USA:IEEE,1992:200-205.
[5]Alhindawi N,Alsakran J,Rodan A,et al.A survey of concepts location enhancement for program comprehension and maintenance[J].Journal of Software Engineering and Applications,2014,7:413-421.
[6]Dit B,Revelle M,Poshyvanyk D.Integrating information retrieval,execution and link analysis algorithms to improve feature location in software[J].Empirical Software Engineering,2013,18(2):277-309.
[7]Rajlich V,Gosavi P.Incremental change in object-oriented programming[J].IEEE Software,2004,21(4):62-69.
[8]Li Bixin,Sun Xiaobing,Leung H,et al.A survey of codebased change impact analysis techniques[J].Software Testing,Verification&Reliability,2013,23(8):613-646.
[9]Wang Wei,Li Tong,He Yun,et al.A hybrid analysis method for ripple effect of software evolution activities[J].Journal of Computer Research and Development,2016,53(3):503-516.
[10]Lucia A D,Marcus A,Oliveto R,et al.Information retrieval methods for automated traceability recovery[M]//Software and Systems Traceability.London:Springer,2012:71-98.
[11]Wikipedia.Bag of words model[EB/OL].[2016-07-18].https://en.wikipedia.org/wiki/Bag-of-words_model.
[12]Salton G,Buckley C.Term-weighting approaches in automatic text retrieval[J].Information Processing&Management,1988,24(5):513-523.
[13]Robertson S.Understanding inverse document frequency:on theoretical arguments for IDF[J].Journal of Documentation,2004,60(5):503-520.
[14]Dumais S T,Dumais S T,Landauer T K,et al.Latent semantic analysis[J].Annual Review of Information Science and Technology,2004,38(1):188-230.
[15]Blei D M,Ng A Y,Jordan M I.Latent Dirichlet allocation[J].Journal of Machine Learning Research,2003,3:993-1022.
[16]Salton G,Wong A,Yang C S.A vector space model for automatic indexing[J].Communications of the ACM,1975,18(11):613-620.
[17]Gao Jianfeng,Nie Jianyun,Wu Guangyuan,et al.Dependence language model for information retrieval[C]//Proceedings of the 27th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval,Sheffield,UK,Jul 25-29,2004.New York:ACM,2004:170-177.
[18]Marcus A,Sergeyev A,Rajlich V,et al.An information retrieval approach to concept location in source code[C]//Proceedings of the 11th Working Conference on Reverse Engineering,Delft,Netherlands,Nov 8-12,2004.Washington:IEEE Computer Society,2004:214-223.
[19]Petrenko M,Rajlich V,Vanciu R.Partial domain comprehension in software evolution and maintenance[C]//Proceedings of the 16th International Conference on Program Comprehension,Amsterdam,Jun 10-13,2008.Washington:IEEE Computer Society,2008:13-22.
[20]Licstar.Deep learning in NLP[EB/OL].[2016-07-18].http://licstar.net/archives/328.
[21]Lai Siwei.Word and document embeddings based on neural network approaches[D].Beijing:University of Chinese Academy of Sciences,2016.
[22]Ju Xiaolin,Jiang Shujuan,Zhang Yanmei,et al.Advances in fault localization techniques[J].Journal of Frontiers of Computer Science and Technology,2012,6(6):481-494.
[23]Han Junming,Wang Wei,Li Tong,et al.Feature locationmethod of evolved software[J].Journal of Frontiers of Computer Science and Technology,2016,10(9):1201-1210.
附中文參考文獻(xiàn):
[9]王煒,李彤,何云,等.一種軟件演化活動波及效應(yīng)混合分析方法[J].計算機(jī)研究與發(fā)展,2016,53(3):503-516.
[21]來斯惟.基于神經(jīng)網(wǎng)絡(luò)的詞和文檔語義向量表示方法研究[D].北京:中國科學(xué)院大學(xué),2016.
[22]鞠小林,姜淑娟,張艷梅,等.軟件故障定位技術(shù)進(jìn)展[J].計算機(jī)科學(xué)與探索,2012,6(6):481-494.
[23]韓俊明,王煒,李彤,等.演化軟件的特征定位方法[J].計算機(jī)科學(xué)與探索,2016,10(9):1201-1210.
Using RNNLM to Conduct Topic Oriented Feature Location Method*
YIN Chunlin1,WANG Wei1,2+,LI Tong1,2,HE Yun1,XIONG Wenjun1,ZHOU Xiaoxuan1
1.College of Software,Yunnan University,Kunming 650091,China
2.Key Laboratory for Software Engineering of Yunnan Province,Kunming 650091,China
A
TP311.5
+Corresponding author:E-mail:wangwei@ynu.edu.cn
YIN Chunlin,WANG Wei,LI Tong,et al.Using RNNLM to conduct topic oriented feature location method.Journal of Frontiers of Computer Science and Technology,2017,11(10):1599-1608.
ISSN 1673-9418 CODEN JKYTA8
Journal of Frontiers of Computer Science and Technology
1673-9418/2017/11(10)-1599-10
10.3778/j.issn.1673-9418.1609035
E-mail:fcst@vip.163.com
http://www.ceaj.org
Tel:+86-10-89056056
*The National Natural Science Foundation of China under Grant Nos.61462092,61262024,61379032(國家自然科學(xué)基金);the Key Project of Natural Science Foundation of Yunnan Province under Grant No.2015FA014(云南省自然科學(xué)基金重點項目);the Natural Science Foundation of Yunnan Province under Grant No.2013FB008(云南省自然科學(xué)基金);the Science Research Fund of Yunnan Provincial Department of Education under Grant No.2016YJS007(云南省教育廳科學(xué)研究基金).
Received 2016-09,Accepted 2016-11.
CNKI網(wǎng)絡(luò)優(yōu)先出版:2016-11-25,http://www.cnki.net/kcms/detail/11.5602.TP.20161125.1530.006.html
YIN Chunlin was born in 1991.He is an M.S.candidate at Yunnan University,and the member of CCF.His research interests include software engineering,software evolution and data mining.
尹春林(1991—),男,云南保山人,云南大學(xué)碩士研究生,CCF會員,主要研究領(lǐng)域為軟件工程,軟件演化,數(shù)據(jù)挖掘。主持云南省教育廳科學(xué)基金研究生項目1項。
WANG Wei was born in 1979.He received the Ph.D.degree in system analysis and integration from Yunnan University in 2009.Now he is an associate professor at Yunnan University,and the member of CCF.His research interests include software engineering,software evolution and data mining.
王煒(1979—),男,云南昆明人,2009年于云南大學(xué)系統(tǒng)分析與集成專業(yè)獲得博士學(xué)位,現(xiàn)為云南大學(xué)副教授,CCF會員,主要研究領(lǐng)域為軟件工程,軟件演化,數(shù)據(jù)挖掘。發(fā)表學(xué)術(shù)論文15篇,出版教材1部,主持省部級項目5項。
LI Tong was born in 1963.He received the Ph.D.degree in software engineering from De Montfort University in 2007.Now he is a professor and Ph.D.supervisor at Yunnan University,and the senior member of CCF.His research interests include software engineering and information security.
李彤(1963—),男,河北石家莊人,2007年于英國De Montfort大學(xué)軟件工程專業(yè)獲得博士學(xué)位,現(xiàn)為云南大學(xué)軟件學(xué)院院長、教授、博士生導(dǎo)師,CCF高級會員,主要研究領(lǐng)域為軟件工程,信息安全。發(fā)表學(xué)術(shù)論文100余篇、專著2部、教材5部,主持國家級項目5項、省部級項目14項、其他項目20余項。
HE Yun was born in 1989.He is a Ph.D.candidate at Yunnan University,and the student member of CCF.His research interests include software engineering,software evolution and data mining.
何云(1989—),男,云南建水人,云南大學(xué)博士研究生,CCF學(xué)生會員,主要研究領(lǐng)域為軟件工程,軟件演化,數(shù)據(jù)挖掘。
XIONG Wenjun was born in 1988.He is an M.S.candidate at Yunnan University.His research interests include software repository mining and software requirement prediction.
熊文軍(1988—),男,云南臨滄人,云南大學(xué)碩士研究生,主要研究領(lǐng)域為軟件倉庫挖掘,軟件需求預(yù)測。
ZHOU Xiaoxuan was born in 1993.She is an M.S.candidate at Yunnan University,and the student member of CCF.Her research interests include software engineering,software evolution and data mining.
周小煊(1993—),女,吉林長春人,云南大學(xué)碩士研究生,CCF學(xué)生會員,主要研究領(lǐng)域為軟件工程,軟件演化,數(shù)據(jù)挖掘。