尹春林 王 煒,2* 李 彤,2 何 云
1(云南大學軟件學院 云南 昆明 650500)2(云南省軟件工程重點實驗室 云南 昆明 650500)
基于RNN進行面向主題的特征定位方法
尹春林1王 煒1,2*李 彤1,2何 云1
1(云南大學軟件學院 云南 昆明 650500)2(云南省軟件工程重點實驗室 云南 昆明 650500)
軟件特征定位是軟件演化活動得以順利展開的前提條件。當前特征定位研究的性能仍有待于進一步提高。為了獲得較好的性能,在文件夾粒度上獲取主題知識,將系統中同一個文件夾下的所有類(class)劃分為同一個主題知識類,提出利用深度學習算法——循環神經網絡RNN(Recurrent Neural Networks) 進行面向主題的特征定位。同時,在該方法的基礎上提出了一種改進的模型。為了使實驗結果更具現實意義,與基線方法和其他一些方法相比,將實驗數據從10組提高到531組和將檢索率從15%縮小到10%,即使在這種情況下,所獲得的實驗結果,無論是從正面與基線方法相比還是從側面與目前的一些特征定位方法相比,該方法都獲得了不錯的性能。
軟件特征定位 軟件演化 深度學習 循環神經網絡 面向主題
特征定位[1]也被稱為概念定位[2-3]、軟件偵測[4],是程序理解領域一個重要的組成部分[5-6]。該研究旨在建立特征與源代碼之間映射關系,而特征[1]是指可被定義和評估的軟件功能屬性。
對特征定位的研究最早可以追溯到1992年,Wilde[4]在其論文中提出了最早的特征定位方法——軟件偵測。經過20多年的發展特征定位研究領域取得了長足進步,并且在軟件維護/演化、波及效應分析、可追溯性復原等多個研究領域得到了應用。在軟件維護/演化領域,沒有任何一個維護/演化任務能夠脫離特征定位的支持[1,7]。維護/演化活動是原有開發活動的繼續,但是兩者之間存在本質的差別:維護/演化活動是在現有系統的約束下實施的受限開發。因此,理解特征與代碼之間的映射關系,并據此確定執行維護/演化活動的起始點和范圍,是成功實施維護/演化活動的基礎。確定維護/演化活動影響范圍的過程稱之為波及效應分析[8-9]。該分析的前提通常是使用特征定位方法確定維護/演化活動的起始點[1]。可追溯性復原[10]試圖建立軟件實體(代碼、需求文檔、設計文檔等)之間的映射關系。由于特征定位旨在建立軟件功能屬性與源代碼之間映射關系,因此可以認為特征定位研究是可追溯性復原研究和進行波及效應分析的一個重要組成部分。建立高效的特征定位方法不僅對豐富程序理解研究內涵,同時對推動多個研究領域的共同發展具有重要意義。
根據分析思路的不同,目前的特征定位方法可歸結為四類[1]:靜態特征定位方法、基于文本的特征定位方法、動態特征定位方法和集成特征定位方法。
靜態方法是試圖對軟件源代碼的依賴關系和結構的進行分析,并建立特征和代碼間的映射關系[1]。動態方法試圖建立用例與執行跡之間的映射關系實現特征定位[11]。基于文本的特征定位方法[12-14]認為,源代碼中的標識符、注釋和其他文檔中蘊含有豐富的主題知識,所以源代碼與特征的關系就可以通過文本分析的方式獲得。當前基于文本的特征定位方法大致可以分為3類:基于模式識別、基于自然語言處理和基于信息檢索的特征定位方法。目前基于自然語言的特征定位查準率是最高的。基于自然語言處理的特征定位方法試圖將自然語言處理研究在詞性標注、分詞、組塊分析等研究成果嫁接于特征定位問題。本文試圖利用基于自然語言的文本特征定位方法進行研究。本文認為不同粒度的劃分、不同的程序模塊代表了不同的領域知識,即代表了不同的主題知識。本文希望獲得一個好的語言模型LM(Language Model),該模型擁有良好的分類能力,能將源代碼系統中不同的主題知識進行準確的區分。所以問題的關鍵轉化為了如何獲得一個擁有良好特征表達的LM。
目前常用的信息檢索方法模型有隱語義索引LSI(Latent Semantic Indexing)[15]、隱狄利克雷分布LDA(Latent Dirichlet Allocation)[16]、向量空間模型VSM(Vector Space Model)[17]、依賴性語言模型DLM(Dependence Language Model)[18]。雖然這些方法都獲得了一定的效果,但并不令人滿意,在實踐中也暴露出一些問題。不難發現,這些方法都不能夠將程序主題知識完整地傳遞給計算機,所以機器也就難以獲得良好的主題知識。良好的數值化方法和良好的上下文語義獲取方法是良好的主題知識表達的第一步。深度學習在自然語言處理NLP(Natural Language Process)方面給出了一些很好的數值化處理方法,如word embedding,即“詞向量”,典型的例子是google的word2vec。循環神經網絡RNN(Recurrent Neural Networks)通過不斷循環的方式更完整的保存上下文語義關系。為此,本文希望通過利用深度學習算法——循環神經網絡來進行基于文本的特征定位以期獲得更好的效果。
本文的創新點和貢獻如下:
(1) 利用RNN語言模型來獲取文本上下文語義;
(2) 文件夾粒度做主題分類;
(3) 兩組實驗對照獲得更有普遍性意義結果。
本文方法主要分為三個步驟:主題知識生成、主題建模以及特征定位。圖1為本文框架圖。

圖1 本文方法框架圖
1.1 主題知識劃分
一個源代碼系統由不同的程序模塊構成,不同的模塊對應于不同的功能/主題,即不同的功能/主題對應著不同的特征。特征定位的目的就是獲得特征與源代碼之間的映射關系。本文的方法是先將源代碼系統利用RNN按主題知識進行劃分,然后利用獲得的模型將程序員給出的功能描述語句進行分類,抽象地描述就是“輸入功能描述就能輸出目標代碼”,形式化描述:Y=f(X),X表示功能描述,Y表示輸出的目標代碼,f是這種映射關系的表示。研究的目標就是希望獲得這一個能夠準確地建立起特征與源代碼之間的一致性關系的模型。因此,好的主題劃分是獲得好的特征定位的前提條件。
本文提出以下幾種劃分粒度:(1)方法/函數級;(2)類級;(3)文件夾級;(4)包級。方法/函數級劃分將源代碼系統按方法/函數進行拆分,將一個方法/函數看做是一個數據,認為多個方法/函數共同表示一個主題。類級劃分將源代碼系統按“類”進行劃分,將一個類看做是一個數據,認為一個或者幾個類共同代表一個功能/主題。文件夾級劃分將源代碼系統中同一個文件夾下的所有方法或者函數看做是同一個類簇,認為同一個文件夾下的所有類或者函數共同代表著一個功能/主題。包級劃分將源代碼系統中同一個包下的所有文檔看做是同一個類簇,認為同一個包下的所有文檔代表著一個主題。函數級和類級的劃分粒度比較小,所以可能一個功能就對應多個函數或者多個類,這樣的劃分就需要先對數據進行聚類,認為聚類后獲得的結果中的一個類簇就對應一個主題。包級的劃分是一種大的模糊的劃分方式,適合應用到大的源代碼系統中進行試驗。程序員在進行軟件開發時通常會將實現了相同功能的類放到同一個文件夾下,相同文件夾下的所有類的相關關系更緊密,所以認為同一個文件夾下的所有類更能良好地表達同一個主題,并且這樣的劃分方式無需進行聚類處理就可以直接將同一個文件夾下的所有類標注到同一個類簇中。所以綜合以上考慮,本文選擇文件夾粒度進行試驗。
1.2 主題建模
基于文本的特征定位方法通常希望獲得一個好的語言分類模型,該模型能夠良好地表達主題知識。數值化抽象是特征定位的基礎,該過程依賴于代碼語言模型的建立,通常語言模型可以抽象為關鍵詞的概率分布函數。假設源代碼SC由關鍵詞{w1,w2,…,wn}構成的文本序列,則SC對應的概率分布函數如公式(1):

(1)
式(1)可以被鏈式地分解為:

(2)

(3)
(4)
式(4)中count(wi-(n-1),…,wi-1)表示文本序列wi-(n-1),…,wi-1在語料庫中出現的次數。

1.3 特征定位

(5)
Softmax回歸其實就相當于多類別情況下的邏輯回歸,式(5)中Softmax有k個類,也就是對應實驗中的38個類,并且函數將-θ×X作為指數的系數,所以就有j=1…k項。然后除以他們的累加和,這樣做就實現了歸一化,使得輸出的k個數的和為1,而每一個數就代表那個類別出現的概率。因此:Softmax的假設函數輸出的是一個k維列向量,每一個維度的數就代表那個類別出現的概率。這樣計算出每個特征描述與每一個類相關的概率,然后依次按概率相關程度降序排列。為此,我們獲得一個概率相關列表,越在最前面的類就是就是相關度越大的類。我們獲得的特征定位的結果就是每個查詢語句與每個類的相似度。
2.1 實驗所用數據數碼
文章使用源代碼系統是jedit4.3source[1],該系統包含531個class,6 400余個method,1.9萬行代碼。同時,還有272個通過使用IST(issue tracking system)和SVN(subversion)工具分析獲得的特征。其中150個特征用例搜集過執行跡,這些特征以ID作為標識,在jEdit更新日志中可查(http://sourceforge.Net/p/jedit/bugs/search/)。每個特征對應于3個數據文件:Queries、Traces以及GoldSet。實驗中所用到的RNN模型代碼是基于http: //github.com/IndicoDataSolutions/passage.git中的模板進行修改得到的,該網站上提供的是一個用于二分類的代碼模板,修改后可以用于多分類。
2.2 實驗過程及參數設置
本文選用的源代碼系統jedit4.3包含分布在38個文件夾下的531個class,每個class是一個以“.java”為后綴名的文件。RNN屬于監督學習,需要使用標簽數據,于是我們就進行了人工標記,將同一個文件夾下的class標注為同一個類簇,數據的標簽名就選用阿拉伯數字0到37進行表示。表1是38帶標簽的數據示意圖,其中一個數據用一個類的路徑來表示(后同)。

表1 標簽數據示意
表2表示同一個文件夾下的所有類,這些類屬于同一個類簇,都被劃分到類“0”中。

表2 同一文件夾下所有類標注為同一類
模型的輸入是分別屬于38個類的531個數據。首先是對獲得的訓練數據集和預測數據集進行簡單的預處理。每一個.java文件都包含大量的注釋,我們認為注釋更能很好地表達主題知識,所以也將其保留下來不做特殊處理。由于RNN可以獲取上下文語義關系,所以與傳統的預處理不同,本文的預處理不做停詞、分詞和詞干還原等操作,僅僅只是將文本中對表達主題毫無幫助的那些注釋符號去掉,如分割線“————”。訓練模型的數據準備完畢,接下來就可以訓練生成RNN模型了。實驗數據集被劃分成兩部分:訓練數據集和預測數據集,訓練數據集用來訓練生成模型,預測數據集用來挑選模型。從每一個類簇中挑選出一個數據作為預測數據集,剩余的作為訓練數據集,如果存在一個類簇,該類簇只含一個數據則該數據既作為訓練數據也作為預測數據。而我們的模型不但對預測數據集進行預測也對訓練數據集進行預測。挑選出對訓練數據集和對預測數據集預測準確率高的模型進行特征定位的實驗。下面是我們選用的RNN模板需要設置的幾個參數:
(1) 隱藏層layers:[ Embedding(size=128);GatedRecurrent(size=256,activation=′tanh′, gate_activation=′steeper_sigmoid′,init=′orthogonal′,seq_output=False);Dense(size=531,activation=′softmax′, init=′orthogonal′)]
(2) 模型model=RNN(layers=layers, cost=′cce′)
“cce”在模板中是一個設置為多分類并用softmax進行輸出的參數,在訓練生成RNN模型同時獲得用于計算相似度的softmax的參數θ。在訓練了多個模型之后文章使用了一個預測準確率相對較高的模型:預測訓練數據集準確率為91%,預測預測數據集準確率為52%。該模型每次訓練100個數據,迭代訓練150次獲得。模型選定之后接下來的工作就是進行特征定位。本文選用的是Queries里面的“ShortDescription[ID].txt”作為查詢語句,提交查詢語句之后輸出該查詢語句與每一個class的相似度,選取相似度最高的前10%進行輸出。
3.1 實驗結果分析
本文主要將文獻[13]作為基線方法與本文的方法進行對比。基線方法在函數級粒度上進行預處理后生成語料庫,然后進行Single Value Decomposition(SVD)生成LSI space,最后輸入query進行查詢,詳細介紹看文獻[13]。同時也與文獻[23-24]中提出來的方法進行一個側面的對比,文獻[24]是動態特征定位和靜態特征定位相結合獲得的結果,文獻[23]中使用的數據集是ArgoUML,ArgoUML數據集比iEdit大,包含1 562個類和96個包。為了驗證本文方法的有效性,我們還設計了一組自我對照實驗,即測試了與基線方法和文獻[24]相同的10個數據。為了獲得一個較公平的評價標準通常使用信息檢索中提供的查全率、查準率和調和平均數F(F-measure)來度量特征定位技術的綜合性能[11]。表3是各種實驗對比情況。

表3 實驗結果對比
在表3中“本文531”是指利用本文提出的方法測試了531個數據的實驗,“本文10”是指利用本文提出的方法測試了10個數據的對照試驗。表3的檢索率是指輸出與查詢語句相似度高的實驗數據個數占實驗數據總個數的比例,一般用文獻[13]推薦的方法取相似度高的前10%~15%。從表3可見,在同樣取10個相同的數據進行測試的情況下,本文方法的平均查準率為8.07%,平均查全率為75.30%,調和平均數為14.58%,檢索率為10%;基線方法平均查準率8.50%,調和平均數13.86%,檢索率為15%,而平均查全率只有62.78%。在我們將實驗數據個數從10個擴大到531(全部實驗數據)個且檢索率依然為10%的情況下,仍然取得了6.1%的查準率、43.01%的查全率和10.68%的調和平均數。雖然較基線方法有所下降,但是我們的實驗數據對象是全部的試驗數據。我們也認為只有在所有的數據上進行試驗才更具有普遍意義和更具有可信度,單純從幾個數據來說可能存在一定的偶然性,就本實驗來說,在我們取10個數據的情況下獲得的查全率為75.3%就比基線方法和其他方法都要高很多。同時特征定位的理想目標是獲得特征與源代碼的準確映射關系,所以認為越低的檢索率對特征定位越有意義。由于文獻[23]是在另一個數據集上的實驗,該數據集個數要遠大于我們的實驗數據集,雖然他的檢索率為5%,但計算下來也跟iEdit 4.3的15%僅相差1個數據。綜合以上比較發現,本文方法綜合性能更優。
3.2 實驗不足
由于實驗檢索出來的結果是按相似度進行降序,與查詢語句相似度高的類簇排在前面,而一個類簇里至少包含一個以上類,多的包含實驗總數據的10%(約53個)以上,由于每一個類簇里面的數據是無序的,所以存在這樣的一些數據,雖然這些數據包含在我們檢索出來的類簇中,但是沒有辦法計算在查準率和查全率中。比如在一組實驗中檢索出了兩個與特征相關的類簇,這兩個類簇包含的類的個數加起來超過了53個,這樣就得將相似度低的第二個類簇的一些類去除,然而第二個類簇里的類與特征的相似度是未知的,所以保留哪些類難以確定。
3.3 基于本文方法提出的新模型
混合特征定位的方法通常會獲得更好的結果,一種方法是:“動態+文本”,該方法先利用動態特征定位約減搜索空間再進行基于文本的特征定位。這種方法的缺陷是每進行一次特征定位就需要進行一次建模,即需要對每一個查詢語句都進行一次“動態+文本”的特征定位。這樣的方式工程量大沒有什么現實意義的。然而利用RNN可以先對所有的數據建一個文本模型,該模型的作用是計算每一個類與查詢語句的相似度并進行排序,然后再在該模型的頂部加一層動態層,與前面提到的方法不同的是此處的動態層的作用是通過將動態層輸出的結果與基于文本的方式輸出的結果進行交集計算來提高準確率和查全率。模型形式化見式(6):
F=f(X)∩R=g(Z)
(6)
式中,F是基于文本的特征定位的輸出,該輸出包含每一個類的類名及其與查詢語句的相似度,X是基于文本的輸入,f是映射關系;R是動態特征定位的輸出,Z是動態特征定位的輸入,g是映射關系。最后將式(6)得到的結果按F的相似度進行降序,排在最前面的就是模型定位的最終結果。此模型是以利用RNN行進基于文本的特征定位為前提,劃分粒度選擇類級別。該模型的好處是可以保證在當前的模型的基礎上提高綜合性能,并且相對與“動態+文本”的特征定位來說減少了工程量。
軟件特征定位是軟件演化活動得以順利展開的保證。然而目前的特征定位無論是查準率還是查全率都還處于一個很低水平。本文從基于文本的特征定位出發提出在文件夾粒度上利用RNN進行面向主題的特征定位。本文認為主題劃分的好壞直接影響到特征定位的結果,本文還提出了幾種不同的主題劃分方式,同時選擇了“文件夾級”粒度的劃分方式來進行試驗。通過實驗結果的對比得知雖然我們的方法存在一定的缺陷,但還是對利用深度學習進行特征定位進行了一定的探索,試驗的綜合性能也較優。最后還提出了一個“基于文本的特征定位+動態特征定位”模型,未來的工作分兩部分:一是繼續探索用其他粒度劃分主題,二是利用本文提出的新模型進行試驗論證。
[1] Dit B, Revelle M, Gethers M, et al. Feature location in source code: a taxonomy and survey[J]. Journal of Software: Evolution and Process, 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 & 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 J A, Gust T, et al. Locating user functionality in old code[C]// Software Maintenance, 1992. Proceerdings. Conference on. IEEE Xplore, 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(5): 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 B, Sun X, Leung H, et al. A survey of code-based change impact analysis techniques[J]. Software Testing Verification & Reliability, 2013, 23(8):613-646.
[9] 王煒, 李彤, 何云,等. 一種軟件演化活動波及效應混合分析方法[J]. 計算機研究與發展, 2016, 53(3):503-516.
[10] Lucia A D, Marcus A, Oliveto R, et al. Information retrieval methods for automated traceability recovery, in Software and systems traceability[M]. London: Springer, 2012.
[11] Ju Xiaolin, Jiang Shujuan, Zhang Yanmei, et al. Advanced in Fault Localization techniques[J]. Journal of Frontiers of Computer Science and Technology, 2012, 6(6):481-494.
[12] Petrenko M, Rajlich V, Vanciu R. Partial domain comprehension in software evolution and maintenance[C]// Proceedings of the 16th IEEE International Conference on Program Comprehension (ICPC ’08), Amsterdam, Netherlands, Jun 10-13, 2008. Washington, DC, USA: IEEE Computer Society, 2008: 13-22.
[13] 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 (WCRE’04), Delft, Netherlands, Nov 8-12, 2004. Washington, DC, USA: IEEE Computer Society, 2004: 214-223.
[14] Hill E, Pollock L, Vijay-Shanker K. Automatically Capturing Source Code Context of NL-Queries for Software Maintenance and Reuse[C]// Proceedings of the 31st IEEE International Conference on Software Engineering (ICSE’09), Vancouver, BC, May 16-24, 2009. Washington, DC, USA: IEEE Computer Society, 2009: 232-242.
[15] Dumais S T. Latent semantic analysis[J]. Annual review of information science and technology, 2004, 38(1): 188-230.
[16] Blei D M, Ng A Y, Jordan M I. Latent dirichlet allocation[J]. Journal of Machine Learning Research, 2003, 3:993-1022.
[17] Salton G. A vector space model for automatic indexing[J]. Communications of the Acm, 1974, 18(11):613-620.
[18] Gao J, Nie J Y, Wu G, et al. Dependence language model for information retrieval[C]// SIGIR 2004: Proceedings of the, International ACM SIGIR Conference on Research and Development in Information Retrieval, Sheffield, Uk, July. 2004:170-177.
[19] Xu W, Rudnicky A. Can artificial neural networks learn language models?[C]// International Conference on Spoken Language Processing, Icslp 2000 / INTERSPEECH 2000, Beijing, China, October. DBLP, 2000:202-205.
[20] Bengio Y, Senecal J S. Adaptive importance sampling to accelerate training of a neural probabilistic language model[J]. IEEE Transactions on Neural Networks, 2008, 19(4):713-22.
[21] 來斯惟.基于神經網絡的詞和文檔語義向量表示方法研究[D].北京:中國科學院自動化研究所,2016.
[22] Mikolov T, Karafiát M, Burget L, et al. Recurrent neural network based language model[C]// Conference of the International Speech Communication Association, Makuhari, Chiba, Japan, September. 2010.
[23] 韓俊明, 王煒, 李彤,等. 演化軟件的特征定位方法[J]. 計算機科學與探索, 2016, 10(9):1201-1210.
[24] 何云, 王煒, 李彤,等. 面向行為主題的軟件特征定位方法[J]. 計算機科學與探索, 2014, 8(12):1452-1462.
TOPIC ORIENTED FEATURE LOCALIZATION METHOD BASED ON RNN
Yin Chunlin1Wang Wei1,2*Li Tong1,2He Yun1
1(SchoolofSoftware,YunnanUniversity,Kunming650500,Yunnan,China)2(KeyLaboratoryforSoftwareEngineeringofYunnanProvince,Kunming650500,Yunnan,China)
Software feature localization is a prerequisite for the smooth development of software evolution. The performance of the current feature location study still needs to be further improved. In order to obtain better performance, get the subject knowledge in the folder granularity was gotten. All the classes under a folder in the system were divided into the same subject knowledge class, This paper proposed a topic-oriented feature locating using depth learning algorithm-Recurrent Neural Networks(RNN). At the same time, an improved model was proposed based on this method. In order to make the experimental results more realistic, compared with the baseline method and other methods, this article will test data from 10 to 531 group and the retrieval rate from 15% to 10%. The experimental results show that this method has better performance than either the baseline method or the feature orientation method.
Software feature localization Software evolution Deep learning Recurrent neural network Topic oriented
2016-07-23。尹春林,碩士生,主研領域:軟件過程,軟件演化,特征定位等。王煒,副教授。李彤,教授。何云,博士生。
TP311.52
A
10.3969/j.issn.1000-386x.2017.06.003