国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于RNN進(jìn)行面向主題的特征定位方法

2017-07-10 10:27:26尹春林
關(guān)鍵詞:源代碼文件夾定位

尹春林 王 煒,2* 李 彤,2 何 云

1(云南大學(xué)軟件學(xué)院 云南 昆明 650500)2(云南省軟件工程重點(diǎn)實(shí)驗(yàn)室 云南 昆明 650500)

基于RNN進(jìn)行面向主題的特征定位方法

尹春林1王 煒1,2*李 彤1,2何 云1

1(云南大學(xué)軟件學(xué)院 云南 昆明 650500)2(云南省軟件工程重點(diǎn)實(shí)驗(yàn)室 云南 昆明 650500)

軟件特征定位是軟件演化活動(dòng)得以順利展開(kāi)的前提條件。當(dāng)前特征定位研究的性能仍有待于進(jìn)一步提高。為了獲得較好的性能,在文件夾粒度上獲取主題知識(shí),將系統(tǒng)中同一個(gè)文件夾下的所有類(lèi)(class)劃分為同一個(gè)主題知識(shí)類(lèi),提出利用深度學(xué)習(xí)算法——循環(huán)神經(jīng)網(wǎng)絡(luò)RNN(Recurrent Neural Networks) 進(jìn)行面向主題的特征定位。同時(shí),在該方法的基礎(chǔ)上提出了一種改進(jìn)的模型。為了使實(shí)驗(yàn)結(jié)果更具現(xiàn)實(shí)意義,與基線(xiàn)方法和其他一些方法相比,將實(shí)驗(yàn)數(shù)據(jù)從10組提高到531組和將檢索率從15%縮小到10%,即使在這種情況下,所獲得的實(shí)驗(yàn)結(jié)果,無(wú)論是從正面與基線(xiàn)方法相比還是從側(cè)面與目前的一些特征定位方法相比,該方法都獲得了不錯(cuò)的性能。

軟件特征定位 軟件演化 深度學(xué)習(xí) 循環(huán)神經(jīng)網(wǎng)絡(luò) 面向主題

0 引 言

特征定位[1]也被稱(chēng)為概念定位[2-3]、軟件偵測(cè)[4],是程序理解領(lǐng)域一個(gè)重要的組成部分[5-6]。該研究旨在建立特征與源代碼之間映射關(guān)系,而特征[1]是指可被定義和評(píng)估的軟件功能屬性。

對(duì)特征定位的研究最早可以追溯到1992年,Wilde[4]在其論文中提出了最早的特征定位方法——軟件偵測(cè)。經(jīng)過(guò)20多年的發(fā)展特征定位研究領(lǐng)域取得了長(zhǎng)足進(jìn)步,并且在軟件維護(hù)/演化、波及效應(yīng)分析、可追溯性復(fù)原等多個(gè)研究領(lǐng)域得到了應(yīng)用。在軟件維護(hù)/演化領(lǐng)域,沒(méi)有任何一個(gè)維護(hù)/演化任務(wù)能夠脫離特征定位的支持[1,7]。維護(hù)/演化活動(dòng)是原有開(kāi)發(fā)活動(dòng)的繼續(xù),但是兩者之間存在本質(zhì)的差別:維護(hù)/演化活動(dòng)是在現(xiàn)有系統(tǒng)的約束下實(shí)施的受限開(kāi)發(fā)。因此,理解特征與代碼之間的映射關(guān)系,并據(jù)此確定執(zhí)行維護(hù)/演化活動(dòng)的起始點(diǎn)和范圍,是成功實(shí)施維護(hù)/演化活動(dòng)的基礎(chǔ)。確定維護(hù)/演化活動(dòng)影響范圍的過(guò)程稱(chēng)之為波及效應(yīng)分析[8-9]。該分析的前提通常是使用特征定位方法確定維護(hù)/演化活動(dòng)的起始點(diǎn)[1]??勺匪菪詮?fù)原[10]試圖建立軟件實(shí)體(代碼、需求文檔、設(shè)計(jì)文檔等)之間的映射關(guān)系。由于特征定位旨在建立軟件功能屬性與源代碼之間映射關(guān)系,因此可以認(rèn)為特征定位研究是可追溯性復(fù)原研究和進(jìn)行波及效應(yīng)分析的一個(gè)重要組成部分。建立高效的特征定位方法不僅對(duì)豐富程序理解研究?jī)?nèi)涵,同時(shí)對(duì)推動(dòng)多個(gè)研究領(lǐng)域的共同發(fā)展具有重要意義。

根據(jù)分析思路的不同,目前的特征定位方法可歸結(jié)為四類(lèi)[1]:靜態(tài)特征定位方法、基于文本的特征定位方法、動(dòng)態(tài)特征定位方法和集成特征定位方法。

靜態(tài)方法是試圖對(duì)軟件源代碼的依賴(lài)關(guān)系和結(jié)構(gòu)的進(jìn)行分析,并建立特征和代碼間的映射關(guān)系[1]。動(dòng)態(tài)方法試圖建立用例與執(zhí)行跡之間的映射關(guān)系實(shí)現(xiàn)特征定位[11]?;谖谋镜奶卣鞫ㄎ环椒╗12-14]認(rèn)為,源代碼中的標(biāo)識(shí)符、注釋和其他文檔中蘊(yùn)含有豐富的主題知識(shí),所以源代碼與特征的關(guān)系就可以通過(guò)文本分析的方式獲得。當(dāng)前基于文本的特征定位方法大致可以分為3類(lèi):基于模式識(shí)別、基于自然語(yǔ)言處理和基于信息檢索的特征定位方法。目前基于自然語(yǔ)言的特征定位查準(zhǔn)率是最高的?;谧匀徽Z(yǔ)言處理的特征定位方法試圖將自然語(yǔ)言處理研究在詞性標(biāo)注、分詞、組塊分析等研究成果嫁接于特征定位問(wèn)題。本文試圖利用基于自然語(yǔ)言的文本特征定位方法進(jìn)行研究。本文認(rèn)為不同粒度的劃分、不同的程序模塊代表了不同的領(lǐng)域知識(shí),即代表了不同的主題知識(shí)。本文希望獲得一個(gè)好的語(yǔ)言模型LM(Language Model),該模型擁有良好的分類(lèi)能力,能將源代碼系統(tǒng)中不同的主題知識(shí)進(jìn)行準(zhǔn)確的區(qū)分。所以問(wèn)題的關(guān)鍵轉(zhuǎn)化為了如何獲得一個(gè)擁有良好特征表達(dá)的LM。

目前常用的信息檢索方法模型有隱語(yǔ)義索引LSI(Latent Semantic Indexing)[15]、隱狄利克雷分布LDA(Latent Dirichlet Allocation)[16]、向量空間模型VSM(Vector Space Model)[17]、依賴(lài)性語(yǔ)言模型DLM(Dependence Language Model)[18]。雖然這些方法都獲得了一定的效果,但并不令人滿(mǎn)意,在實(shí)踐中也暴露出一些問(wèn)題。不難發(fā)現(xiàn),這些方法都不能夠?qū)⒊绦蛑黝}知識(shí)完整地傳遞給計(jì)算機(jī),所以機(jī)器也就難以獲得良好的主題知識(shí)。良好的數(shù)值化方法和良好的上下文語(yǔ)義獲取方法是良好的主題知識(shí)表達(dá)的第一步。深度學(xué)習(xí)在自然語(yǔ)言處理NLP(Natural Language Process)方面給出了一些很好的數(shù)值化處理方法,如word embedding,即“詞向量”,典型的例子是google的word2vec。循環(huán)神經(jīng)網(wǎng)絡(luò)RNN(Recurrent Neural Networks)通過(guò)不斷循環(huán)的方式更完整的保存上下文語(yǔ)義關(guān)系。為此,本文希望通過(guò)利用深度學(xué)習(xí)算法——循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行基于文本的特征定位以期獲得更好的效果。

本文的創(chuàng)新點(diǎn)和貢獻(xiàn)如下:

(1) 利用RNN語(yǔ)言模型來(lái)獲取文本上下文語(yǔ)義;

(2) 文件夾粒度做主題分類(lèi);

(3) 兩組實(shí)驗(yàn)對(duì)照獲得更有普遍性意義結(jié)果。

1 本文方法

本文方法主要分為三個(gè)步驟:主題知識(shí)生成、主題建模以及特征定位。圖1為本文框架圖。

圖1 本文方法框架圖

1.1 主題知識(shí)劃分

一個(gè)源代碼系統(tǒng)由不同的程序模塊構(gòu)成,不同的模塊對(duì)應(yīng)于不同的功能/主題,即不同的功能/主題對(duì)應(yīng)著不同的特征。特征定位的目的就是獲得特征與源代碼之間的映射關(guān)系。本文的方法是先將源代碼系統(tǒng)利用RNN按主題知識(shí)進(jìn)行劃分,然后利用獲得的模型將程序員給出的功能描述語(yǔ)句進(jìn)行分類(lèi),抽象地描述就是“輸入功能描述就能輸出目標(biāo)代碼”,形式化描述:Y=f(X),X表示功能描述,Y表示輸出的目標(biāo)代碼,f是這種映射關(guān)系的表示。研究的目標(biāo)就是希望獲得這一個(gè)能夠準(zhǔn)確地建立起特征與源代碼之間的一致性關(guān)系的模型。因此,好的主題劃分是獲得好的特征定位的前提條件。

本文提出以下幾種劃分粒度:(1)方法/函數(shù)級(jí);(2)類(lèi)級(jí);(3)文件夾級(jí);(4)包級(jí)。方法/函數(shù)級(jí)劃分將源代碼系統(tǒng)按方法/函數(shù)進(jìn)行拆分,將一個(gè)方法/函數(shù)看做是一個(gè)數(shù)據(jù),認(rèn)為多個(gè)方法/函數(shù)共同表示一個(gè)主題。類(lèi)級(jí)劃分將源代碼系統(tǒng)按“類(lèi)”進(jìn)行劃分,將一個(gè)類(lèi)看做是一個(gè)數(shù)據(jù),認(rèn)為一個(gè)或者幾個(gè)類(lèi)共同代表一個(gè)功能/主題。文件夾級(jí)劃分將源代碼系統(tǒng)中同一個(gè)文件夾下的所有方法或者函數(shù)看做是同一個(gè)類(lèi)簇,認(rèn)為同一個(gè)文件夾下的所有類(lèi)或者函數(shù)共同代表著一個(gè)功能/主題。包級(jí)劃分將源代碼系統(tǒng)中同一個(gè)包下的所有文檔看做是同一個(gè)類(lèi)簇,認(rèn)為同一個(gè)包下的所有文檔代表著一個(gè)主題。函數(shù)級(jí)和類(lèi)級(jí)的劃分粒度比較小,所以可能一個(gè)功能就對(duì)應(yīng)多個(gè)函數(shù)或者多個(gè)類(lèi),這樣的劃分就需要先對(duì)數(shù)據(jù)進(jìn)行聚類(lèi),認(rèn)為聚類(lèi)后獲得的結(jié)果中的一個(gè)類(lèi)簇就對(duì)應(yīng)一個(gè)主題。包級(jí)的劃分是一種大的模糊的劃分方式,適合應(yīng)用到大的源代碼系統(tǒng)中進(jìn)行試驗(yàn)。程序員在進(jìn)行軟件開(kāi)發(fā)時(shí)通常會(huì)將實(shí)現(xiàn)了相同功能的類(lèi)放到同一個(gè)文件夾下,相同文件夾下的所有類(lèi)的相關(guān)關(guān)系更緊密,所以認(rèn)為同一個(gè)文件夾下的所有類(lèi)更能良好地表達(dá)同一個(gè)主題,并且這樣的劃分方式無(wú)需進(jìn)行聚類(lèi)處理就可以直接將同一個(gè)文件夾下的所有類(lèi)標(biāo)注到同一個(gè)類(lèi)簇中。所以綜合以上考慮,本文選擇文件夾粒度進(jìn)行試驗(yàn)。

1.2 主題建模

基于文本的特征定位方法通常希望獲得一個(gè)好的語(yǔ)言分類(lèi)模型,該模型能夠良好地表達(dá)主題知識(shí)。數(shù)值化抽象是特征定位的基礎(chǔ),該過(guò)程依賴(lài)于代碼語(yǔ)言模型的建立,通常語(yǔ)言模型可以抽象為關(guān)鍵詞的概率分布函數(shù)。假設(shè)源代碼SC由關(guān)鍵詞{w1,w2,…,wn}構(gòu)成的文本序列,則SC對(duì)應(yīng)的概率分布函數(shù)如公式(1):

(1)

式(1)可以被鏈?zhǔn)降胤纸鉃椋?/p>

(2)

(3)

(4)

式(4)中count(wi-(n-1),…,wi-1)表示文本序列wi-(n-1),…,wi-1在語(yǔ)料庫(kù)中出現(xiàn)的次數(shù)。

1.3 特征定位

(5)

Softmax回歸其實(shí)就相當(dāng)于多類(lèi)別情況下的邏輯回歸,式(5)中Softmax有k個(gè)類(lèi),也就是對(duì)應(yīng)實(shí)驗(yàn)中的38個(gè)類(lèi),并且函數(shù)將-θ×X作為指數(shù)的系數(shù),所以就有j=1…k項(xiàng)。然后除以他們的累加和,這樣做就實(shí)現(xiàn)了歸一化,使得輸出的k個(gè)數(shù)的和為1,而每一個(gè)數(shù)就代表那個(gè)類(lèi)別出現(xiàn)的概率。因此:Softmax的假設(shè)函數(shù)輸出的是一個(gè)k維列向量,每一個(gè)維度的數(shù)就代表那個(gè)類(lèi)別出現(xiàn)的概率。這樣計(jì)算出每個(gè)特征描述與每一個(gè)類(lèi)相關(guān)的概率,然后依次按概率相關(guān)程度降序排列。為此,我們獲得一個(gè)概率相關(guān)列表,越在最前面的類(lèi)就是就是相關(guān)度越大的類(lèi)。我們獲得的特征定位的結(jié)果就是每個(gè)查詢(xún)語(yǔ)句與每個(gè)類(lèi)的相似度。

2 實(shí)驗(yàn)過(guò)程及數(shù)據(jù)

2.1 實(shí)驗(yàn)所用數(shù)據(jù)數(shù)碼

文章使用源代碼系統(tǒng)是jedit4.3source[1],該系統(tǒng)包含531個(gè)class,6 400余個(gè)method,1.9萬(wàn)行代碼。同時(shí),還有272個(gè)通過(guò)使用IST(issue tracking system)和SVN(subversion)工具分析獲得的特征。其中150個(gè)特征用例搜集過(guò)執(zhí)行跡,這些特征以ID作為標(biāo)識(shí),在jEdit更新日志中可查(http://sourceforge.Net/p/jedit/bugs/search/)。每個(gè)特征對(duì)應(yīng)于3個(gè)數(shù)據(jù)文件:Queries、Traces以及GoldSet。實(shí)驗(yàn)中所用到的RNN模型代碼是基于http: //github.com/IndicoDataSolutions/passage.git中的模板進(jìn)行修改得到的,該網(wǎng)站上提供的是一個(gè)用于二分類(lèi)的代碼模板,修改后可以用于多分類(lèi)。

2.2 實(shí)驗(yàn)過(guò)程及參數(shù)設(shè)置

本文選用的源代碼系統(tǒng)jedit4.3包含分布在38個(gè)文件夾下的531個(gè)class,每個(gè)class是一個(gè)以“.java”為后綴名的文件。RNN屬于監(jiān)督學(xué)習(xí),需要使用標(biāo)簽數(shù)據(jù),于是我們就進(jìn)行了人工標(biāo)記,將同一個(gè)文件夾下的class標(biāo)注為同一個(gè)類(lèi)簇,數(shù)據(jù)的標(biāo)簽名就選用阿拉伯?dāng)?shù)字0到37進(jìn)行表示。表1是38帶標(biāo)簽的數(shù)據(jù)示意圖,其中一個(gè)數(shù)據(jù)用一個(gè)類(lèi)的路徑來(lái)表示(后同)。

表1 標(biāo)簽數(shù)據(jù)示意

表2表示同一個(gè)文件夾下的所有類(lèi),這些類(lèi)屬于同一個(gè)類(lèi)簇,都被劃分到類(lèi)“0”中。

表2 同一文件夾下所有類(lèi)標(biāo)注為同一類(lèi)

模型的輸入是分別屬于38個(gè)類(lèi)的531個(gè)數(shù)據(jù)。首先是對(duì)獲得的訓(xùn)練數(shù)據(jù)集和預(yù)測(cè)數(shù)據(jù)集進(jìn)行簡(jiǎn)單的預(yù)處理。每一個(gè).java文件都包含大量的注釋?zhuān)覀冋J(rèn)為注釋更能很好地表達(dá)主題知識(shí),所以也將其保留下來(lái)不做特殊處理。由于RNN可以獲取上下文語(yǔ)義關(guān)系,所以與傳統(tǒng)的預(yù)處理不同,本文的預(yù)處理不做停詞、分詞和詞干還原等操作,僅僅只是將文本中對(duì)表達(dá)主題毫無(wú)幫助的那些注釋符號(hào)去掉,如分割線(xiàn)“————”。訓(xùn)練模型的數(shù)據(jù)準(zhǔn)備完畢,接下來(lái)就可以訓(xùn)練生成RNN模型了。實(shí)驗(yàn)數(shù)據(jù)集被劃分成兩部分:訓(xùn)練數(shù)據(jù)集和預(yù)測(cè)數(shù)據(jù)集,訓(xùn)練數(shù)據(jù)集用來(lái)訓(xùn)練生成模型,預(yù)測(cè)數(shù)據(jù)集用來(lái)挑選模型。從每一個(gè)類(lèi)簇中挑選出一個(gè)數(shù)據(jù)作為預(yù)測(cè)數(shù)據(jù)集,剩余的作為訓(xùn)練數(shù)據(jù)集,如果存在一個(gè)類(lèi)簇,該類(lèi)簇只含一個(gè)數(shù)據(jù)則該數(shù)據(jù)既作為訓(xùn)練數(shù)據(jù)也作為預(yù)測(cè)數(shù)據(jù)。而我們的模型不但對(duì)預(yù)測(cè)數(shù)據(jù)集進(jìn)行預(yù)測(cè)也對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行預(yù)測(cè)。挑選出對(duì)訓(xùn)練數(shù)據(jù)集和對(duì)預(yù)測(cè)數(shù)據(jù)集預(yù)測(cè)準(zhǔn)確率高的模型進(jìn)行特征定位的實(shí)驗(yàn)。下面是我們選用的RNN模板需要設(shè)置的幾個(gè)參數(shù):

(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”在模板中是一個(gè)設(shè)置為多分類(lèi)并用softmax進(jìn)行輸出的參數(shù),在訓(xùn)練生成RNN模型同時(shí)獲得用于計(jì)算相似度的softmax的參數(shù)θ。在訓(xùn)練了多個(gè)模型之后文章使用了一個(gè)預(yù)測(cè)準(zhǔn)確率相對(duì)較高的模型:預(yù)測(cè)訓(xùn)練數(shù)據(jù)集準(zhǔn)確率為91%,預(yù)測(cè)預(yù)測(cè)數(shù)據(jù)集準(zhǔn)確率為52%。該模型每次訓(xùn)練100個(gè)數(shù)據(jù),迭代訓(xùn)練150次獲得。模型選定之后接下來(lái)的工作就是進(jìn)行特征定位。本文選用的是Queries里面的“ShortDescription[ID].txt”作為查詢(xún)語(yǔ)句,提交查詢(xún)語(yǔ)句之后輸出該查詢(xún)語(yǔ)句與每一個(gè)class的相似度,選取相似度最高的前10%進(jìn)行輸出。

3 實(shí)驗(yàn)結(jié)果及分析

3.1 實(shí)驗(yàn)結(jié)果分析

本文主要將文獻(xiàn)[13]作為基線(xiàn)方法與本文的方法進(jìn)行對(duì)比。基線(xiàn)方法在函數(shù)級(jí)粒度上進(jìn)行預(yù)處理后生成語(yǔ)料庫(kù),然后進(jìn)行Single Value Decomposition(SVD)生成LSI space,最后輸入query進(jìn)行查詢(xún),詳細(xì)介紹看文獻(xiàn)[13]。同時(shí)也與文獻(xiàn)[23-24]中提出來(lái)的方法進(jìn)行一個(gè)側(cè)面的對(duì)比,文獻(xiàn)[24]是動(dòng)態(tài)特征定位和靜態(tài)特征定位相結(jié)合獲得的結(jié)果,文獻(xiàn)[23]中使用的數(shù)據(jù)集是ArgoUML,ArgoUML數(shù)據(jù)集比iEdit大,包含1 562個(gè)類(lèi)和96個(gè)包。為了驗(yàn)證本文方法的有效性,我們還設(shè)計(jì)了一組自我對(duì)照實(shí)驗(yàn),即測(cè)試了與基線(xiàn)方法和文獻(xiàn)[24]相同的10個(gè)數(shù)據(jù)。為了獲得一個(gè)較公平的評(píng)價(jià)標(biāo)準(zhǔn)通常使用信息檢索中提供的查全率、查準(zhǔn)率和調(diào)和平均數(shù)F(F-measure)來(lái)度量特征定位技術(shù)的綜合性能[11]。表3是各種實(shí)驗(yàn)對(duì)比情況。

表3 實(shí)驗(yàn)結(jié)果對(duì)比

在表3中“本文531”是指利用本文提出的方法測(cè)試了531個(gè)數(shù)據(jù)的實(shí)驗(yàn),“本文10”是指利用本文提出的方法測(cè)試了10個(gè)數(shù)據(jù)的對(duì)照試驗(yàn)。表3的檢索率是指輸出與查詢(xún)語(yǔ)句相似度高的實(shí)驗(yàn)數(shù)據(jù)個(gè)數(shù)占實(shí)驗(yàn)數(shù)據(jù)總個(gè)數(shù)的比例,一般用文獻(xiàn)[13]推薦的方法取相似度高的前10%~15%。從表3可見(jiàn),在同樣取10個(gè)相同的數(shù)據(jù)進(jìn)行測(cè)試的情況下,本文方法的平均查準(zhǔn)率為8.07%,平均查全率為75.30%,調(diào)和平均數(shù)為14.58%,檢索率為10%;基線(xiàn)方法平均查準(zhǔn)率8.50%,調(diào)和平均數(shù)13.86%,檢索率為15%,而平均查全率只有62.78%。在我們將實(shí)驗(yàn)數(shù)據(jù)個(gè)數(shù)從10個(gè)擴(kuò)大到531(全部實(shí)驗(yàn)數(shù)據(jù))個(gè)且檢索率依然為10%的情況下,仍然取得了6.1%的查準(zhǔn)率、43.01%的查全率和10.68%的調(diào)和平均數(shù)。雖然較基線(xiàn)方法有所下降,但是我們的實(shí)驗(yàn)數(shù)據(jù)對(duì)象是全部的試驗(yàn)數(shù)據(jù)。我們也認(rèn)為只有在所有的數(shù)據(jù)上進(jìn)行試驗(yàn)才更具有普遍意義和更具有可信度,單純從幾個(gè)數(shù)據(jù)來(lái)說(shuō)可能存在一定的偶然性,就本實(shí)驗(yàn)來(lái)說(shuō),在我們?nèi)?0個(gè)數(shù)據(jù)的情況下獲得的查全率為75.3%就比基線(xiàn)方法和其他方法都要高很多。同時(shí)特征定位的理想目標(biāo)是獲得特征與源代碼的準(zhǔn)確映射關(guān)系,所以認(rèn)為越低的檢索率對(duì)特征定位越有意義。由于文獻(xiàn)[23]是在另一個(gè)數(shù)據(jù)集上的實(shí)驗(yàn),該數(shù)據(jù)集個(gè)數(shù)要遠(yuǎn)大于我們的實(shí)驗(yàn)數(shù)據(jù)集,雖然他的檢索率為5%,但計(jì)算下來(lái)也跟iEdit 4.3的15%僅相差1個(gè)數(shù)據(jù)。綜合以上比較發(fā)現(xiàn),本文方法綜合性能更優(yōu)。

3.2 實(shí)驗(yàn)不足

由于實(shí)驗(yàn)檢索出來(lái)的結(jié)果是按相似度進(jìn)行降序,與查詢(xún)語(yǔ)句相似度高的類(lèi)簇排在前面,而一個(gè)類(lèi)簇里至少包含一個(gè)以上類(lèi),多的包含實(shí)驗(yàn)總數(shù)據(jù)的10%(約53個(gè))以上,由于每一個(gè)類(lèi)簇里面的數(shù)據(jù)是無(wú)序的,所以存在這樣的一些數(shù)據(jù),雖然這些數(shù)據(jù)包含在我們檢索出來(lái)的類(lèi)簇中,但是沒(méi)有辦法計(jì)算在查準(zhǔn)率和查全率中。比如在一組實(shí)驗(yàn)中檢索出了兩個(gè)與特征相關(guān)的類(lèi)簇,這兩個(gè)類(lèi)簇包含的類(lèi)的個(gè)數(shù)加起來(lái)超過(guò)了53個(gè),這樣就得將相似度低的第二個(gè)類(lèi)簇的一些類(lèi)去除,然而第二個(gè)類(lèi)簇里的類(lèi)與特征的相似度是未知的,所以保留哪些類(lèi)難以確定。

3.3 基于本文方法提出的新模型

混合特征定位的方法通常會(huì)獲得更好的結(jié)果,一種方法是:“動(dòng)態(tài)+文本”,該方法先利用動(dòng)態(tài)特征定位約減搜索空間再進(jìn)行基于文本的特征定位。這種方法的缺陷是每進(jìn)行一次特征定位就需要進(jìn)行一次建模,即需要對(duì)每一個(gè)查詢(xún)語(yǔ)句都進(jìn)行一次“動(dòng)態(tài)+文本”的特征定位。這樣的方式工程量大沒(méi)有什么現(xiàn)實(shí)意義的。然而利用RNN可以先對(duì)所有的數(shù)據(jù)建一個(gè)文本模型,該模型的作用是計(jì)算每一個(gè)類(lèi)與查詢(xún)語(yǔ)句的相似度并進(jìn)行排序,然后再在該模型的頂部加一層動(dòng)態(tài)層,與前面提到的方法不同的是此處的動(dòng)態(tài)層的作用是通過(guò)將動(dòng)態(tài)層輸出的結(jié)果與基于文本的方式輸出的結(jié)果進(jìn)行交集計(jì)算來(lái)提高準(zhǔn)確率和查全率。模型形式化見(jiàn)式(6):

F=f(X)∩R=g(Z)

(6)

式中,F(xiàn)是基于文本的特征定位的輸出,該輸出包含每一個(gè)類(lèi)的類(lèi)名及其與查詢(xún)語(yǔ)句的相似度,X是基于文本的輸入,f是映射關(guān)系;R是動(dòng)態(tài)特征定位的輸出,Z是動(dòng)態(tài)特征定位的輸入,g是映射關(guān)系。最后將式(6)得到的結(jié)果按F的相似度進(jìn)行降序,排在最前面的就是模型定位的最終結(jié)果。此模型是以利用RNN行進(jìn)基于文本的特征定位為前提,劃分粒度選擇類(lèi)級(jí)別。該模型的好處是可以保證在當(dāng)前的模型的基礎(chǔ)上提高綜合性能,并且相對(duì)與“動(dòng)態(tài)+文本”的特征定位來(lái)說(shuō)減少了工程量。

4 結(jié) 語(yǔ)

軟件特征定位是軟件演化活動(dòng)得以順利展開(kāi)的保證。然而目前的特征定位無(wú)論是查準(zhǔn)率還是查全率都還處于一個(gè)很低水平。本文從基于文本的特征定位出發(fā)提出在文件夾粒度上利用RNN進(jìn)行面向主題的特征定位。本文認(rèn)為主題劃分的好壞直接影響到特征定位的結(jié)果,本文還提出了幾種不同的主題劃分方式,同時(shí)選擇了“文件夾級(jí)”粒度的劃分方式來(lái)進(jìn)行試驗(yàn)。通過(guò)實(shí)驗(yàn)結(jié)果的對(duì)比得知雖然我們的方法存在一定的缺陷,但還是對(duì)利用深度學(xué)習(xí)進(jìn)行特征定位進(jìn)行了一定的探索,試驗(yàn)的綜合性能也較優(yōu)。最后還提出了一個(gè)“基于文本的特征定位+動(dòng)態(tài)特征定位”模型,未來(lái)的工作分兩部分:一是繼續(xù)探索用其他粒度劃分主題,二是利用本文提出的新模型進(jìn)行試驗(yàn)論證。

[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] 王煒, 李彤, 何云,等. 一種軟件演化活動(dòng)波及效應(yīng)混合分析方法[J]. 計(jì)算機(jī)研究與發(fā)展, 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] 來(lái)斯惟.基于神經(jīng)網(wǎng)絡(luò)的詞和文檔語(yǔ)義向量表示方法研究[D].北京:中國(guó)科學(xué)院自動(dòng)化研究所,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]. 計(jì)算機(jī)科學(xué)與探索, 2016, 10(9):1201-1210.

[24] 何云, 王煒, 李彤,等. 面向行為主題的軟件特征定位方法[J]. 計(jì)算機(jī)科學(xué)與探索, 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。尹春林,碩士生,主研領(lǐng)域:軟件過(guò)程,軟件演化,特征定位等。王煒,副教授。李彤,教授。何云,博士生。

TP311.52

A

10.3969/j.issn.1000-386x.2017.06.003

猜你喜歡
源代碼文件夾定位
人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
磁力文件夾
基于TXL的源代碼插樁技術(shù)研究
《導(dǎo)航定位與授時(shí)》征稿簡(jiǎn)則
Smartrail4.0定位和控制
軟件源代碼非公知性司法鑒定方法探析
找準(zhǔn)定位 砥礪前行
調(diào)動(dòng)右鍵 解決文件夾管理三大難題
揭秘龍湖產(chǎn)品“源代碼”
青年擇業(yè)要有準(zhǔn)確定位
昌都县| 福清市| 宜昌市| 淮阳县| 博爱县| 左权县| 宜阳县| 满城县| 崇左市| 武山县| 沾化县| 大理市| 武宁县| 嘉禾县| 延川县| 黄陵县| 区。| 拜城县| 同心县| 凯里市| 阳新县| 伊春市| 宿松县| 静乐县| 炉霍县| 沂源县| 武川县| 奉节县| 鄂尔多斯市| 塔城市| 蒙山县| 土默特左旗| 乐都县| 南召县| 西宁市| 东海县| 汕尾市| 探索| 马公市| 隆尧县| 山西省|