何 云 李 彤, 王 煒, 李 響 蘭 微
1(云南大學(xué)軟件學(xué)院 昆明 650091)2 (云南省軟件工程重點(diǎn)實(shí)驗(yàn)室(云南大學(xué)) 昆明 650091)
特征(feature)指軟件系統(tǒng)中可識(shí)別的功能屬性.特征定位(feature location)旨在建立特征與源代碼之間的映射關(guān)系,是一切軟件演化活動(dòng)得以順利實(shí)施的先決條件之一[1].軟件特征定位是一種面向軟件維護(hù)的智能推薦技術(shù),可為開發(fā)人員在龐大的源代碼數(shù)據(jù)中找到軟件維護(hù)任務(wù)對(duì)應(yīng)的起始位置.Wilde等人[2]于1992年提出了最早的特征定位方法——軟件偵測(cè)(software reconnaissance),經(jīng)過20多年的發(fā)展,成為波及效應(yīng)分析[3]、軟件復(fù)用[4]、需求可追蹤性分析[5]等領(lǐng)域的支柱性技術(shù).當(dāng)前軟件特征定位技術(shù)根據(jù)輸入數(shù)據(jù)的不同大致分為4類[6]:靜態(tài)方法[7-8](static method)、動(dòng)態(tài)方法[9-10](dynamic method)、文本方法[11-12](textual method)和混合方法[13-14](hybrid method).文本方法由于具有高易用性、強(qiáng)擴(kuò)展性和低開銷等優(yōu)點(diǎn),成為了當(dāng)前特征定位領(lǐng)域研究的熱點(diǎn).現(xiàn)有文本特征定位方法可分為3類:基于自然語(yǔ)言處理[12]、基于信息檢索[1,15-16]或基于模式匹配[17]實(shí)現(xiàn).近年來(lái),機(jī)器學(xué)習(xí)特別是深度學(xué)習(xí)的發(fā)展促進(jìn)了信息檢索研究,同時(shí)也使基于信息檢索的特征定位方法成為了當(dāng)前研究的熱點(diǎn).
基于信息檢索的特征定位方法有2個(gè)難點(diǎn):
1) 減少代碼語(yǔ)料中噪聲數(shù)據(jù).除蘊(yùn)含功能語(yǔ)義信息的關(guān)鍵詞外,源代碼中還存在大量的無(wú)語(yǔ)義詞匯噪聲,例如代碼的關(guān)鍵詞new,public等.噪聲數(shù)據(jù)導(dǎo)致經(jīng)過索引的代碼向量維度高、稀疏性強(qiáng),使代碼與查詢語(yǔ)句間相似度計(jì)算準(zhǔn)確率下降,整體影響特征定位的性能.以僅含有531個(gè)類的jEdit為例[14],在共計(jì)含有10 915個(gè)不重復(fù)源代碼關(guān)鍵詞的情況下,其單個(gè)類(class)內(nèi)含有的關(guān)鍵詞僅為幾十至幾百個(gè)單詞不等.現(xiàn)有基于信息檢索的特征定位方法通過人為設(shè)定停用詞表對(duì)源代碼的噪聲數(shù)據(jù)進(jìn)行過濾.由于源代碼在預(yù)處理階段會(huì)產(chǎn)生大量的未在停詞表中定義的無(wú)實(shí)際語(yǔ)義的關(guān)鍵詞,降低了停詞表對(duì)關(guān)鍵詞的過濾作用.
2) 基于信息檢索的特征定位方法假設(shè)“源代碼中的標(biāo)識(shí)符、注釋等關(guān)鍵詞蘊(yùn)含了與軟件功能相關(guān)的語(yǔ)義信息”.開發(fā)人員使用記錄了功能特征的自然語(yǔ)言作為查詢語(yǔ)句.通過計(jì)算查詢語(yǔ)句與源代碼之間的語(yǔ)義相似度,實(shí)現(xiàn)特征與源代碼之間的映射關(guān)系識(shí)別.上述計(jì)算需要將代碼和查詢語(yǔ)句轉(zhuǎn)化為向量.當(dāng)前研究大多采用信息檢索方法實(shí)現(xiàn)源代碼到索引空間內(nèi)向量的轉(zhuǎn)化.索引方法可以分為2類:基于“詞袋”模型(bag of word)[18]的索引方法和基于詞嵌入模型(word embedding)[19-20]的索引方法.基于“詞袋”模型的方法優(yōu)點(diǎn)在于計(jì)算簡(jiǎn)單、對(duì)單獨(dú)詞匯信息保持較完整,但其假設(shè)源代碼中關(guān)鍵詞是獨(dú)立同分布的,沒有上下文信息.文獻(xiàn)[16]指出代碼同樣具有上下文信息.詞嵌入模型能夠有效刻畫源代碼關(guān)鍵詞的上下文信息,同時(shí)能夠有效地選擇關(guān)鍵詞.但該方法涉及大規(guī)模參數(shù)調(diào)優(yōu),參數(shù)取值對(duì)該方法的性能優(yōu)劣起到?jīng)Q定性作用,參數(shù)的選擇嚴(yán)重依賴于開發(fā)人員的領(lǐng)域知識(shí)和經(jīng)驗(yàn)知識(shí).同時(shí),詞嵌入模型非常強(qiáng)調(diào)詞匯上下文關(guān)系,但源代碼數(shù)據(jù)格式的特殊性導(dǎo)致其語(yǔ)法結(jié)構(gòu)并不十分嚴(yán)格,因此在特征定位問題中單純依賴詞匯上下文關(guān)系刻畫源代碼之間的相似度也是不完備的.現(xiàn)有特征定位方法均是基于單一索引方法實(shí)現(xiàn)的,導(dǎo)致性能上各有優(yōu)劣,均不能精確刻畫源代碼與查詢之間的相似度.
為解決以上2個(gè)難點(diǎn)問題,本文提出了一種面向軟件特征定位問題的語(yǔ)義相似度集成方法.本文主要貢獻(xiàn)有3個(gè)方面:
1) 提出基于詞性標(biāo)注的源代碼語(yǔ)料降噪方法.引入詞性過濾對(duì)源代碼關(guān)鍵詞進(jìn)行預(yù)處理,并討論了源代碼關(guān)鍵詞中的詞性問題.通過過濾特定詞性詞匯,在縮減索引空間內(nèi)向量稀疏性的同時(shí),提高了相似度計(jì)算的準(zhǔn)確性,提升了特征定位性能.
2) 提出了一種集成“詞袋”模型與詞嵌入模型的語(yǔ)義相似度計(jì)算方法.該方法以源代碼自身結(jié)構(gòu)的“內(nèi)聚度”和“耦合度”作為評(píng)價(jià)指標(biāo),將“詞袋”模型索引方法與詞嵌入模型索引方法所計(jì)算出的相似度進(jìn)行集成,獲得了更為精確的相似性度量.
3) 基于公開的數(shù)據(jù)集設(shè)計(jì)了完整的實(shí)驗(yàn),詳細(xì)報(bào)告了實(shí)驗(yàn)過程和結(jié)果,表明本文方法與現(xiàn)有信息檢索軟件特征定位方法[15-16,21]相比,具有更高的定位性能.
如圖1所示,現(xiàn)有基于信息檢索的特征定位方法基本流程大致相似,包含3個(gè)基本步驟:預(yù)處理、索引、獲取結(jié)果.
Step1. 預(yù)處理.包含提取關(guān)鍵詞、分詞、詞根還原和去除停用詞4部分.根據(jù)不同的粒度(類、方法等),提取源代碼實(shí)體中的關(guān)鍵詞,為源代碼中每一個(gè)實(shí)體建立一個(gè)代碼文檔.分詞操作將連續(xù)的字符串按照一定的特殊字符(例如駝峰命名法)或規(guī)則拆分成若干獨(dú)立的單詞.詞根還原將意義相近的同源詞和同一個(gè)關(guān)鍵詞的不同形態(tài)進(jìn)行歸并,例如:inserting還原成insert.去除停用詞操作刪除代碼中停詞表記錄的詞.例如源代碼中的數(shù)字、定冠詞、不定冠詞、單個(gè)字母等.預(yù)處理的好壞將決定源代碼語(yǔ)料中關(guān)鍵詞的多寡,并最終影響索引算法輸出向量維度的大小以及稀疏性等.
Step2. 索引.將經(jīng)過預(yù)處理的語(yǔ)料轉(zhuǎn)換為索引空間內(nèi)的數(shù)值化向量形式,即將語(yǔ)料轉(zhuǎn)化為矩陣M,第i個(gè)代碼文檔對(duì)應(yīng)矩陣中第i個(gè)列向量mi.用戶提交描述特征的查詢語(yǔ)句Q,將預(yù)處理后的Q轉(zhuǎn)化為索引空間內(nèi)向量q.
Step3. 獲取結(jié)果.計(jì)算源代碼向量mi與查詢語(yǔ)句向量q之間的相似度,并按照相似度進(jìn)行降序排列.相似度通常使用距離的形式進(jìn)行表達(dá).距離越近則相似度越高,認(rèn)為該源代碼具有查詢語(yǔ)句描述的特征可能性越大.設(shè)定閾值h,將與查詢向量q之間相似度大于h的源代碼向量m1,m2,…,mn作為特征定位算法的輸出結(jié)果,即檢索結(jié)果.
Fig. 1 The basic flow of existing information retrieval feature location methods圖1 現(xiàn)有基于信息檢索的特征定位方法基本流程
圍繞基于信息檢索的特征定位方法基本步驟,各國(guó)學(xué)者開了很多研究工作:
預(yù)處理大多使用成熟的自然語(yǔ)言處理技術(shù)[15-16,22]實(shí)現(xiàn).分詞采用Lucene①Lucene分詞:https:lucene.apache.orgcore5_4_0coreorgapacheluceneanalysisTokenizer.html,NLTK②NLTK分詞:http:www.nltk.orgapinltk.tokenize.html等工具實(shí)現(xiàn);停用詞表大多使用自然語(yǔ)言處理成熟的停詞表,例如NLTK③NLTK停詞表:https:gist.github.comsebleier554280或者Lucene④Lucene停詞表:https:lucene.apache.orgcore6_1_0analyzers-commonorgapacheluceneanalysiscoreStopFilter.html提供的停詞表;詞根還原大多采用Poter Stemmer⑤Poter Stemmer:https:www.drupal.orgprojectporterstemmer,Lovins Stemmer⑥Lovins Stemmer:http:snowball.tartarus.orgalgorithmslovinsstemmer.html,Lancaster Stemmer⑦Lancaster Stemmer:https:github.comwooormlancaster-stemmer.上述工作均假設(shè)分詞、詞根還原、去除停用詞3種操作能夠提高特征定位算法的準(zhǔn)確性.當(dāng)前基于信息檢索的特征定位方法通過停用詞表方式過濾噪聲詞匯,均直接引用自然語(yǔ)言處理領(lǐng)域中的停用詞表.但停用詞表對(duì)噪聲的過濾性能有限,主要原因在于停用詞表中的詞匯是人為指定的,極易出現(xiàn)誤差,尤其是大規(guī)模語(yǔ)料庫(kù)中,編制停用詞表時(shí)極易造成停用詞匯的遺漏.
語(yǔ)料中關(guān)鍵字的多寡將影響后續(xù)索引代碼語(yǔ)料和查詢語(yǔ)句向量的維度和稀疏性,維度和稀疏性對(duì)特征定位問題中語(yǔ)義相似度的計(jì)算具有重要意義.現(xiàn)有特征定位方法直接引用傳統(tǒng)信息檢索領(lǐng)域中的預(yù)處理方式,在經(jīng)過預(yù)處理后語(yǔ)料庫(kù)仍保留了數(shù)量龐大的關(guān)鍵詞.例如,文獻(xiàn)[14]對(duì)僅有531個(gè)類的jEdit4.3進(jìn)行預(yù)處理后的不重復(fù)關(guān)鍵詞仍多達(dá)10 915個(gè).這使得后續(xù)索引步驟生成的代碼向量維度和稀疏性都很高.
語(yǔ)料庫(kù)及查詢語(yǔ)句的索引是基于信息檢索的特征定位方法中最為關(guān)鍵的步驟,同時(shí)也是研究成果最為集中的部分.自2004年Marcus等人[21]使用LSI(latent semantic indexing)實(shí)現(xiàn)特征定位以來(lái),研究成果相繼涌現(xiàn).Poshyvanyk等人[23]提出了形式化概念分析方法(formal concept analysis),Cleary等人[24]將錯(cuò)誤報(bào)告(bug issues)、郵件列表(mailing lists)、外部文檔等非代碼數(shù)據(jù)與代碼數(shù)據(jù)同時(shí)作為輸入,在某些環(huán)境下提升了定位的準(zhǔn)確性.Biggers等人[15]應(yīng)用LDA(latent Dirichlet allocation)進(jìn)行索引,且與基于LSI的特征定位方法進(jìn)行了比對(duì).
LSI是一種有效的代碼索引工具.由于代碼是一種特殊的自然語(yǔ)言,LSI基于矩陣分解技術(shù),具有識(shí)別同義詞和壓縮向量維數(shù)的能力.同時(shí),LSI可在不知道代碼的語(yǔ)法規(guī)則的前提下實(shí)現(xiàn)索引.LDA與LSI具有相似功能,但LDA具有更為復(fù)雜的數(shù)學(xué)模型,其定位性能在部分?jǐn)?shù)據(jù)集上略優(yōu)于LSI.無(wú)論LSI還是LDA,均是一種基于“詞袋”模型的索引方法.該類模型的優(yōu)點(diǎn)在于計(jì)算簡(jiǎn)單,無(wú)需太多領(lǐng)域知識(shí)協(xié)助.但“詞袋”模型建立于無(wú)序性假設(shè)(exchange-ability)基礎(chǔ)上,認(rèn)為源代碼中的關(guān)鍵詞是獨(dú)立同分布,關(guān)鍵詞的上下文對(duì)其不產(chǎn)生影響.
2015年Corley等人[16]基于詞嵌入模型,應(yīng)用深度學(xué)習(xí)方法Doc2vec進(jìn)行了特征定位研究,并在實(shí)驗(yàn)中取得了優(yōu)于LDA的定位效果.基于詞嵌入模型的索引方法,不但壓縮了源代碼向量的維數(shù),并且記錄了關(guān)鍵詞之間的上下文關(guān)系.該類模型對(duì)文本進(jìn)行索引時(shí),以詞匯共現(xiàn)關(guān)系為主要依據(jù),最為經(jīng)典的例子是可根據(jù)詞匯共現(xiàn)關(guān)系推測(cè)出“king-queen=man-woman”.但此類模型涉及大規(guī)模的參數(shù)調(diào)優(yōu)問題,如向量維數(shù)、訓(xùn)練窗口數(shù)、采樣閾值、學(xué)習(xí)速率、聚類個(gè)數(shù)等,均對(duì)程序員有較高的領(lǐng)域知識(shí)和經(jīng)驗(yàn)知識(shí)要求.同時(shí),與自然語(yǔ)言文本不同,源代碼文本格式較為特殊,其構(gòu)成并不遵循嚴(yán)格的語(yǔ)法結(jié)構(gòu),詞匯共現(xiàn)關(guān)系并不完全等價(jià)于語(yǔ)義上的相似.因此,詞嵌入模型完全依賴詞共現(xiàn)關(guān)系刻畫源代碼關(guān)鍵詞之間的相似度也是具有其局限性的.
“詞袋”模型等價(jià)于一種上下文無(wú)關(guān)文法,擅長(zhǎng)于建模代碼間關(guān)鍵詞的差異信息(例如LSI關(guān)注于代碼關(guān)鍵詞詞頻的差異,LDA關(guān)注于代碼主題概率分布的差異);詞嵌入模型等價(jià)于一種上下文相關(guān)模型,擅長(zhǎng)于建模代碼內(nèi)關(guān)鍵詞的上下文信息.這種傾向性導(dǎo)致不同模型對(duì)源代碼語(yǔ)料的索引必然存在不同方面的信息損失,且這種損失是存在互補(bǔ)關(guān)系的.
基于信息檢索的特征定位方法建立在語(yǔ)義相似度計(jì)算基礎(chǔ)之上,當(dāng)前研究中對(duì)相似性計(jì)算結(jié)果影響較大的2個(gè)待解決問題可總結(jié)為:噪聲問題和索引方法的選擇問題.
1) 噪聲問題.現(xiàn)有方法預(yù)處理步驟雖然可過濾一部分噪聲數(shù)據(jù),但這種過濾是不完全的.索引步驟中,LSI借助奇異值分解實(shí)現(xiàn)索引,但該方法僅將詞頻矩陣通過坐標(biāo)變換方法實(shí)現(xiàn)空間轉(zhuǎn)換,當(dāng)變換空間維數(shù)小于原空間維數(shù)時(shí),實(shí)現(xiàn)降維但無(wú)法識(shí)別哪些關(guān)鍵詞是噪聲;LDA認(rèn)為代碼是由具有多個(gè)主題的概率分布混合而成,同樣不具備識(shí)別哪個(gè)分布式噪聲的能力;Doc2vec使用深度網(wǎng)絡(luò)實(shí)現(xiàn)詞頻向量的非線性變換與特征選擇,也不具備噪聲識(shí)別的能力.本文第1個(gè)研究目的是尋找適合于源代碼數(shù)據(jù)特性的噪聲過濾方式,進(jìn)一步提升信息檢索特征定位方法預(yù)處理步驟的噪聲過濾性能,間接提高語(yǔ)義相似度計(jì)算的精確度,以期獲得更為準(zhǔn)確的特征定位結(jié)果.
2) 索引方法的選擇問題.當(dāng)前基于信息檢索的特征定位方法,索引步驟均直接引用了傳統(tǒng)信息檢索領(lǐng)域的索引方法.不同索引方法,在性能上存在其特定優(yōu)勢(shì)與局限性.以單一索引方法為基礎(chǔ)建立起來(lái)的相似性度量,必然存在失準(zhǔn)問題.本文第2個(gè)研究目的是尋找一種語(yǔ)義相似度集成方法.該方法應(yīng)契合源代碼數(shù)據(jù)自身特性,可將不同索引方法計(jì)算出的語(yǔ)義相似度進(jìn)行集成,從而實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ),提高相似性計(jì)算的精確度,進(jìn)一步提高基于信息檢索的特征定位方法性能.
“詞袋”模型索引方法生成形如(1,0,2,0,…,0,0,1)的長(zhǎng)稀疏向量,該向量每個(gè)維度代表一個(gè)單詞的出現(xiàn)頻度.該模型假設(shè)每個(gè)單詞均為獨(dú)立同分布的,只以每個(gè)詞匯的出現(xiàn)頻度刻畫源代碼文本,并未記錄任何詞匯間的共現(xiàn)或上下文信息.因此,該模型索引方法可完整記錄每個(gè)獨(dú)立詞匯信息,卻無(wú)任何詞匯上下文信息.
詞嵌入模型生成形如(0.723,0.051,…,0.231,0.321,0.4231,0.448)的短實(shí)值向量,其記錄的是映射于低維空間內(nèi)的詞之間的共現(xiàn)關(guān)系,即詞匯的上下文關(guān)系.該模型以詞匯間的共現(xiàn)刻畫源代碼文本,由于這種刻畫是通過訓(xùn)練詞匯間的共現(xiàn)關(guān)系并映射于一個(gè)低維空間內(nèi),映射過程會(huì)造成大量獨(dú)立詞匯信息的損失.因此,該模型索引方法優(yōu)勢(shì)在于可有效記錄詞匯上下文信息,卻以損失獨(dú)立詞匯信息為代價(jià).
綜上,2種模型索引方法之間存在極強(qiáng)的互補(bǔ)關(guān)系,因此可通過合理集成實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ),提高相似性計(jì)算的精確度,進(jìn)一步提高基于信息檢索的特征定位方法性能.
在現(xiàn)有基于信息檢索的特征定位方法基礎(chǔ)上,本文主要工作如圖2中深色四邊形所示.預(yù)處理步驟,引入詞性過濾,進(jìn)一步過濾源代碼關(guān)鍵詞中的噪聲信息,提高后續(xù)相似度計(jì)算的準(zhǔn)確性.構(gòu)建語(yǔ)料庫(kù)后,索引步驟分別使用基于“詞袋”模型的索引方法和基于詞嵌入模型的索引方法對(duì)源代碼進(jìn)行索引,并在各自索引空間內(nèi)計(jì)算語(yǔ)義相似度.然后,以軟件源代碼內(nèi)部模塊的“內(nèi)聚度”和“耦合度”作為評(píng)價(jià)指標(biāo),將2種索引空間內(nèi)所計(jì)算的相似度進(jìn)行集成,獲取最終語(yǔ)義相似度.最后,以集成的語(yǔ)義相似度作為源代碼與特征之間的相似性度量,生成定位結(jié)果.
Fig. 2 Semantic similarity integration method for software feature location problem圖2 面向軟件特征定位問題的語(yǔ)義相似度集成方法
在自然語(yǔ)言處理領(lǐng)域,詞性標(biāo)注有助于充分利用英語(yǔ)詞匯以及句子中所蘊(yùn)含的語(yǔ)義知識(shí)[25].文獻(xiàn)[25]專門討論過源代碼中的詞性問題,認(rèn)為詞性對(duì)源代碼文本相關(guān)研究具有重要意義.針對(duì)源代碼中噪聲過濾不完整導(dǎo)致的相似度計(jì)算困難問題,本文方法在預(yù)處理步驟引入詞性過濾,僅保留語(yǔ)料庫(kù)中的名詞、名詞性詞組、動(dòng)詞、動(dòng)詞性詞組、形容詞、形容詞性詞組、副詞及副詞詞組成分作為關(guān)鍵詞,建立基于詞性的關(guān)鍵詞篩選方法,降低關(guān)鍵詞的數(shù)量.
為提高源代碼的可讀性,源代碼的變量名、類名、方法名等均由有意義的實(shí)詞充當(dāng).這里所指的“有意義”即蘊(yùn)含“語(yǔ)義知識(shí)”的意思.源代碼中語(yǔ)義知識(shí)通常是通過名詞、動(dòng)詞、形容詞和副詞4種詞性的關(guān)鍵詞表達(dá)的.作為功能實(shí)體被執(zhí)行時(shí),源代碼中的名詞表述了對(duì)應(yīng)的功能實(shí)體在執(zhí)行過程中被調(diào)用的“對(duì)象”(變量、類、方法等),動(dòng)詞表述了對(duì)這些“對(duì)象”執(zhí)行的“動(dòng)作”,形容詞表述了這些“對(duì)象”有什么樣的“特點(diǎn)”,而副詞表述了“如何”對(duì)這些“對(duì)象”進(jìn)行“動(dòng)作”.因此,這4類詞性詞匯在源代碼關(guān)鍵詞中可被認(rèn)為是源代碼語(yǔ)義知識(shí)的主要載體,故在詞性過濾算法中只予以保留這4類詞匯.
假設(shè)存在由3個(gè)源代碼文本向量所組成的語(yǔ)料庫(kù)D={Class1,Class2,Class3},其中每個(gè)向量對(duì)應(yīng)于源代碼中的1個(gè)類(class).圖3表示了該語(yǔ)料庫(kù)在詞性過濾前后進(jìn)行文本向量化,向量在空間中的分布情況.有色圓代表蘊(yùn)含功能語(yǔ)義信息的詞性單詞,無(wú)底色圓代表不含功能語(yǔ)義信息的詞性詞.向量Class1與向量Class2間的夾角為α,向量Class2與向量Class3間的夾角為β.從圖3(a)中可看出,由于不含功能語(yǔ)義信息詞性單詞的干擾,導(dǎo)致向量重心的偏移,此時(shí)α>β,以余弦距離作為向量間相似度定義,則有Sim((Class1,Class2)>Sim(Class2,Class3).對(duì)源代碼進(jìn)行詞性過濾后,其向量化表示如圖3(b)所示,因不含功能語(yǔ)義信息單詞被過濾,向量重心發(fā)生變化,從而有Sim(Class1,Class2) Fig. 3 The vectors distribution in the indexing space before and after POS filtering圖3 詞性過濾前后向量在索引空間中的分布 定義1. 源代碼語(yǔ)料庫(kù).Da是所有源代碼關(guān)鍵詞w的集合,即Da={w1,w2,…,wi,…,wn},其中wi代表語(yǔ)料庫(kù)中的第i個(gè)源代碼關(guān)鍵詞,該語(yǔ)料庫(kù)共由n個(gè)源代碼關(guān)鍵詞組成. 定義2. 詞性.詞性是由10個(gè)元所組成的集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj},其中tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj分別代表詞性:名詞、代詞、形容詞、數(shù)詞、副詞、冠詞、介詞、連詞和感嘆詞.Da與post存在映射關(guān)系o′: (w1,w2,…,wn)→t=o′(Da),t為集合post中的元.蘊(yùn)含語(yǔ)義知識(shí)的詞性為集合postin={tn,tadj,tv,tadv}. 算法1詳細(xì)描述了詞性過濾的計(jì)算過程. 算法1. 詞性過濾算法. 輸入:Da,postin; 輸出:Dc. ①Dc=?,T={tag1,tag2,…,tagn}; ② for eachtagi∈T ③tagi=null; ④ end for ⑤ for eachwi∈Da ⑥tagi=posTaging(wi); ⑦ end for ⑧ for eachtagi∈T ⑨ iftagi∈postin ⑩ insertwitoDc; 算法1輸入為所有源代碼關(guān)鍵詞集合Da以及蘊(yùn)含語(yǔ)義知識(shí)的詞性集合postin,輸出為過濾掉不蘊(yùn)含語(yǔ)義知識(shí)詞性關(guān)鍵詞后的語(yǔ)料庫(kù)Dc.行①初始化存儲(chǔ)結(jié)果用的集合Dc=?,同時(shí)定義另一個(gè)集合T={tag1,tag2,…,tagn}用于標(biāo)記每個(gè)關(guān)鍵詞的詞性.T中的元素與Da中的元素存在一一對(duì)應(yīng)關(guān)系,即Da中關(guān)鍵詞wi對(duì)應(yīng)于T中的tagi,由于Da中共有n個(gè)源代碼關(guān)鍵詞,因此T的元素個(gè)數(shù)也為n.行②~④先對(duì)T中的所有元素進(jìn)行初始化,將其初始值設(shè)為null.行⑤~⑦識(shí)別Da中每個(gè)源代碼關(guān)鍵詞wi的詞性,并將識(shí)別的結(jié)果存儲(chǔ)于對(duì)應(yīng)的tagi,這里函數(shù)posTaging(wi)的返回值為集合post={tn,tpron,tadj,tnum,tv,tadv,tart,tprep,tconj,tinterj}中的1個(gè)元素.行⑧~⑨檢查T中的每一個(gè)元素tagi,若tagi∈postin={tn,tadj,tv,tadv},則將對(duì)應(yīng)的wi插入到結(jié)果集合Dc中.行返回結(jié)果Dc. 基于信息檢索的特征定位方法,核心在于量化地計(jì)算源代碼與查詢間的語(yǔ)義相似性.相似性問題均可通過向量空間內(nèi)距離的方式進(jìn)行定義、度量或推導(dǎo).現(xiàn)有基于信息檢索的特征定位方法在將源代碼語(yǔ)料庫(kù)和查詢語(yǔ)句進(jìn)行向量化索引后,以索引空間內(nèi)源代碼向量與查詢向量之間的距離作為度量,刻畫兩者的相似度.由于不同模型的索引方法在進(jìn)行向量轉(zhuǎn)化時(shí),具有其特定優(yōu)勢(shì)和局限性,在此基礎(chǔ)上計(jì)算出的向量間距離并不能充分刻畫向量間的相似度.至此,比較自然的想法是將不同索引空間內(nèi)的相似度(即距離)進(jìn)行集成,充分利用不同索引方法的優(yōu)勢(shì)特性,獲得更為精確的相似度計(jì)算結(jié)果.關(guān)鍵問題在于:如何將不同索引空間內(nèi)的距離信息在適當(dāng)尺度內(nèi)進(jìn)行合理有效集成. 文獻(xiàn)[26-27]已經(jīng)證明若干距離的線性組合依然是一個(gè)距離,因此針對(duì)任意一對(duì)源代碼向量mi和查詢語(yǔ)句向量q,兩者間相似度可以描述成為不同索引空間中距離的線性組合,即 其中dk(mi,q)表示第k種距離計(jì)算方法.該問題的核心是尋找參數(shù)ωk,使相似性刻畫最優(yōu).顯然直接計(jì)算最優(yōu)參數(shù)ωk是困難的,因此本文方法將距離計(jì)算中的參數(shù)設(shè)置問題轉(zhuǎn)化為求源代碼結(jié)構(gòu)最優(yōu)問題.具體來(lái)說(shuō),由于代碼中的每一個(gè)類是按照“高內(nèi)聚低耦合”的原則進(jìn)行組織,即位于同一個(gè)類(class)中的各個(gè)方法(method)間具有高內(nèi)聚度,而功能模塊間具有較低耦合度.故而,最優(yōu)的距離計(jì)算方法一定是最能反映源代碼“高內(nèi)聚低耦合”屬性的計(jì)算方法. 定義3. 模塊類簇.在按“高內(nèi)聚低耦合”方式構(gòu)建的軟件系統(tǒng)內(nèi),是指具有相似或相關(guān)功能的源代碼被放置在同一個(gè)模塊內(nèi),每個(gè)模塊稱為一個(gè)模塊類簇.一個(gè)軟件系統(tǒng)是由多個(gè)模塊類簇組成的. 例如,在面向?qū)ο筌浖到y(tǒng)中,一個(gè)類(class)是由其內(nèi)部的多個(gè)方法(method)組成的模塊類簇.在結(jié)構(gòu)化軟件系統(tǒng)中,一個(gè)源代碼文件可以理解為是由一群函數(shù)(function)組成的模塊類簇. 假設(shè)有一個(gè)軟件系統(tǒng),該軟件系統(tǒng)由2個(gè)源代碼模塊類簇內(nèi)的多個(gè)源代碼組成.軟件系統(tǒng)結(jié)構(gòu)上的模塊類簇分布應(yīng)為圖4(a)所示,實(shí)心圓點(diǎn)代表模塊類簇1中的源代碼,十字符號(hào)代表模塊類簇2中的源代碼.不同模塊的源代碼根據(jù)“高內(nèi)聚低耦合”原則,被規(guī)整地置于2個(gè)模塊類簇中.分別使用2種不同的索引方法對(duì)圖4(a)中源代碼進(jìn)行索引,其向量在相應(yīng)索引空間內(nèi)的分布分別如圖4(b)和圖4(c)所示.對(duì)比圖4(b)與圖4(c)可發(fā)現(xiàn),圖4(b)索引空間1內(nèi)源代碼向量分布更接近于圖4(a)源代碼原始結(jié)構(gòu)上的分布,其內(nèi)所有源代碼均被明顯地分隔于2個(gè)模塊類簇內(nèi).而圖4(c)索引空間2內(nèi)的源代碼則分布相對(duì)較為混沌,2個(gè)模塊類簇內(nèi)源代碼分布出現(xiàn)了較大重疊區(qū)域.此時(shí),可認(rèn)為索引方法1對(duì)于源代碼的轉(zhuǎn)換更為貼近源代碼本身結(jié)構(gòu),則其所計(jì)算出的相似度(距離)更為合理,在線性組合集成時(shí)應(yīng)予以較高權(quán)值.而索引方法2則反之.基于這種思想,本文認(rèn)為可以用模塊類簇的外距和內(nèi)距對(duì)不同索引方法生成的向量空間進(jìn)行合理性度量,從而計(jì)算出優(yōu)化的距離加權(quán)參數(shù)ωk. 在此基礎(chǔ)之上,本文提出了一種面向特征定位問題的語(yǔ)義相似度集成方法,該方法能夠?qū)⒉煌饕臻g內(nèi)的相似度(距離)進(jìn)行線性組合集成,根據(jù)索引空間內(nèi)向量分布與源代碼本身結(jié)構(gòu)的一致性程度,計(jì)算出集成時(shí)的加權(quán)參數(shù),從而獲得能夠充分刻畫源代碼與特征之間相似度的距離表達(dá).下面將對(duì)本文方法進(jìn)行詳細(xì)介紹: 定義4. 內(nèi)距.若某軟件源代碼是由m個(gè)模塊類簇構(gòu)成的,分別計(jì)算位于同一個(gè)模塊類簇內(nèi)所有源代碼間距離的均值,將計(jì)算出的m個(gè)均值相加即為該軟件源代碼的內(nèi)距interDis.內(nèi)距interDis的計(jì)算公式為 Fig. 4 Source code module clusters distribution in different index space圖4 源代碼模塊模塊類簇在不同向量空間內(nèi)的分布 圖5示例了一個(gè)由2個(gè)模塊類簇組成的軟件系統(tǒng),圖5中圓點(diǎn)和十字符號(hào)分別代表2個(gè)模塊類簇內(nèi)的源代碼數(shù)據(jù)點(diǎn).每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)于1個(gè)方法(method),每個(gè)多邊形框內(nèi)所有的數(shù)據(jù)點(diǎn)構(gòu)成1個(gè)模塊類簇,這樣的1個(gè)模塊類簇可以是1個(gè)類(class),也可以是1個(gè)文件夾.模塊類簇2中虛線標(biāo)示了模塊類簇內(nèi)2個(gè)源代碼之間的距離.分別計(jì)算出所有位于模塊類簇2內(nèi)源代碼間的距離,然后取均值,再以同樣方式求出模塊類簇1內(nèi)所有源代碼間的距離均值,這2個(gè)均值相加即為該軟件系統(tǒng)的內(nèi)距;實(shí)心三角和實(shí)心正方形分別代表了2個(gè)模塊類簇的重心,其間的距離即為軟件系統(tǒng)的外距. Fig. 5 Distance definitions about module cluster圖5 與模塊類簇相關(guān)距離定義 在此基礎(chǔ)之上,本文提出相似性算法的詳細(xì)計(jì)算過程如下: 算法2. 語(yǔ)義相似度集成方法. 輸入:Sim1,Sim2,D1,D2; 輸出:查詢語(yǔ)句與各源代碼的相似度集合Simint. ④ end for ⑥interDis2=interDis2+calculateInter- ⑦ end for ⑩ end for interDis1)+(exterDis1interDis1)), ω2=(exterDis2interDis2)((exterDis2 interDis2)+(exterDis2interDis2)); 算法2行①對(duì)本中所使用變量進(jìn)行初始化.行②~⑦分別計(jì)算2種索引空間內(nèi)軟件源代碼的內(nèi)距,行⑧~分別計(jì)算2種索引空間內(nèi)軟件源代碼的外距.行分別計(jì)算距離進(jìn)行線性組合時(shí)所用參數(shù)ω1和ω2.行~使用參數(shù)對(duì)2個(gè)索引空間內(nèi)計(jì)算出的相似度距離進(jìn)行線性組合,并求出最終相似度.行返回結(jié)果. 為驗(yàn)證本文方法的性能,詞性過濾步驟將最新基于詞嵌入模型Doc2vec的信息檢索特征定位方法[16]作為基線方法,相似度集成步驟將LSI[21],LDA[15],Doc2vec[16]作為基線方法,通過公開基準(zhǔn)數(shù)據(jù)集進(jìn)行對(duì)比實(shí)驗(yàn)測(cè)試.本文實(shí)驗(yàn),主要圍繞以下研究問題(research questions)展開: 研究問題1. 詞性過濾步驟是否能夠在現(xiàn)有方法基礎(chǔ)上提升特征定位性能?能夠提升多少性能? 研究問題2. 本文提出的語(yǔ)義相似度集成算法是否能夠在現(xiàn)有方法基礎(chǔ)上提升定位性能?能夠提升多少性能? 本文方法的有效性建立在“軟件的源代碼是高質(zhì)量的”基礎(chǔ)上,高質(zhì)量的源代碼有2個(gè)標(biāo)準(zhǔn):語(yǔ)料庫(kù)內(nèi)的關(guān)鍵詞有意義和源代碼以“高內(nèi)聚低耦合”結(jié)構(gòu)進(jìn)行組織.語(yǔ)料庫(kù)內(nèi)關(guān)鍵詞的質(zhì)量,可通過統(tǒng)計(jì)無(wú)意義詞匯在源代碼中的占比進(jìn)行評(píng)估,具體將在3.1節(jié)討論.源代碼是否以“高內(nèi)聚低耦合”結(jié)構(gòu)組織,則可通過以下方式驗(yàn)證:若源代碼的結(jié)構(gòu)是“高內(nèi)聚低耦合”的,則通過索引方法的外距與內(nèi)距之商可以有效評(píng)估出相應(yīng)索引方法的特征定位性能.將A和B這2種索引方法進(jìn)行相似度集成,假如軟件系統(tǒng)源代碼組織是“高內(nèi)聚低耦合”的,當(dāng)通過A方法計(jì)算出的源代碼外距與內(nèi)距之商(即加權(quán)時(shí)的權(quán)值)高于B方法時(shí),可認(rèn)為A方法更符合源代碼的分布.此時(shí),單獨(dú)使用A方法進(jìn)行定位,定位性能應(yīng)高于單獨(dú)使用B方法.反之,則B方法的定位性能應(yīng)高于A方法.通過驗(yàn)證這種一致性,可以驗(yàn)證軟件系統(tǒng)的源代碼是否具有“高內(nèi)聚低耦合”特性.因此,本文實(shí)驗(yàn)部分還需驗(yàn)證以下問題: 研究問題3. 索引方法對(duì)源代碼內(nèi)聚耦合性的符合程度是否與索引方法定位性能的分布一致? 為保證實(shí)驗(yàn)的客觀性,選擇已有的基準(zhǔn)數(shù)據(jù)集(benckmark)進(jìn)行實(shí)驗(yàn).實(shí)驗(yàn)的核心目的在于對(duì)比本文方法與基線方法性能差異,基準(zhǔn)數(shù)據(jù)集能夠?yàn)檎麄€(gè)對(duì)比過程提供無(wú)偏差數(shù)據(jù)和評(píng)價(jià)基礎(chǔ),從而保證實(shí)驗(yàn)的客觀性. 本文選擇Dit等人[6]公布的軟件維護(hù)任務(wù)測(cè)試數(shù)據(jù)集進(jìn)行實(shí)驗(yàn).該數(shù)據(jù)集共由5款開源軟件的源代碼和特征數(shù)據(jù)組成,具體數(shù)據(jù)規(guī)模如表1所示: Table 1 Data Sets表1 本文實(shí)驗(yàn)數(shù)據(jù)集 數(shù)據(jù)集內(nèi)所有特征均為相應(yīng)軟件的官方問題追蹤系統(tǒng)(issue tracking system)內(nèi)真實(shí)存在的數(shù)據(jù).每個(gè)特征以ID作為標(biāo)識(shí),由2部分組成: 1) Description[ID].問題描述,關(guān)于特征的文本描述,本文實(shí)驗(yàn)將該文件作為查詢語(yǔ)句(query)使用. 2) GoldSet[ID].正確答案集,記錄了與特征真正相關(guān)的源代碼,用于驗(yàn)證特征定位的結(jié)果. 數(shù)據(jù)集中的5款軟件均為較成熟的開源軟件,源代碼的維護(hù)及更新均有其獨(dú)立的問題追蹤系統(tǒng),并由專門的團(tuán)隊(duì)進(jìn)行管理,保證了數(shù)據(jù)集內(nèi)軟件源代碼的質(zhì)量.同時(shí),本文統(tǒng)計(jì)了數(shù)據(jù)集內(nèi)所有軟件源代碼中無(wú)意義詞匯的數(shù)量及其占比,如表1所示.這里指的無(wú)意義詞匯是指用單個(gè)字母命名的變量,以及形如“c2”,“m2”等的非常規(guī)詞匯,在統(tǒng)計(jì)時(shí)以前者居多.從表1中可以看出,無(wú)意義詞匯在5個(gè)軟件源代碼中的占比在4.56%~7.43%之間.即對(duì)于該數(shù)據(jù)集而言,源代碼中的關(guān)鍵詞逾90%以上都是有意義的詞匯.從該角度可認(rèn)為數(shù)據(jù)集內(nèi)的軟件源代碼是屬于高質(zhì)量源代碼范疇的. 對(duì)本文方法性能進(jìn)行定量評(píng)估,需使用一定度量標(biāo)準(zhǔn)對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行度量和對(duì)比.軟件特征定位本質(zhì)上是信息檢索問題,因此適用于信息檢索的度量標(biāo)準(zhǔn).度量特征定位方法的性能,應(yīng)衡量第1個(gè)與特征真正相關(guān)的源代碼在結(jié)果列表(ranking list)中出現(xiàn)的位置,越靠前則定位性能越高[16,22,28-29].因此,特征定位研究[16,22,28-29]多使用平均排序倒數(shù)(mean reciprocal rank,MRR)作為度量標(biāo)準(zhǔn),本文實(shí)驗(yàn)也采用該標(biāo)準(zhǔn).MRR的具體計(jì)算公式如下: 其中,Q為實(shí)驗(yàn)中所使用所有查詢語(yǔ)句(query)的集合;|Q|代表Q中查詢個(gè)數(shù);ei為在第i個(gè)查詢中,第1個(gè)與查詢語(yǔ)句正確相關(guān)的源代碼位于結(jié)果列表中的排名.MRR數(shù)值越大,代表特征定位性能越好. 3.3.1 預(yù)處理 提取源代碼中的關(guān)鍵詞,以方法(method)為粒度,建立語(yǔ)料庫(kù),提取出源代碼關(guān)鍵詞數(shù)量見表1.然后,依次進(jìn)行分詞、詞根還原及去停用詞處理.去停用詞步驟,本文選取2個(gè)不同的停用詞表進(jìn)行實(shí)驗(yàn),停用詞表1由自然語(yǔ)言處理領(lǐng)域公開的3個(gè)常用英文停用詞表(含SMART停用詞表)合并而成,共有887個(gè)詞條;停用詞表2來(lái)源于Wikipedia,共有119個(gè)詞條①https:en.wikipedia.orgwikiStop_words.使用Python環(huán)境下自然語(yǔ)言處理包NLTK對(duì)語(yǔ)料進(jìn)行詞性標(biāo)注,標(biāo)注后對(duì)詞性為名詞、動(dòng)詞、形容詞和副詞外的其他單詞及詞組進(jìn)行過濾.分別測(cè)試預(yù)處理步驟僅使用詞性過濾、僅使用停用詞、既使用停用詞又使用詞性過濾情況下的定位性能,具體結(jié)果將在3.4節(jié)進(jìn)行討論. 3.3.2 源代碼語(yǔ)料索引 為單獨(dú)分別討論本文方法提出的2個(gè)步驟對(duì)于特征定位問題的改進(jìn)意義,驗(yàn)證本文提出的相似度集成方法時(shí),索引步驟使用的為未進(jìn)行詞性過濾的語(yǔ)料庫(kù).索引步驟選擇了2種索引方法:基于“詞袋”模型的索引方法TF-IDF(term frequency-inverse document frequency)和基于詞嵌入模型的索引方法Doc2vec.TF-IDF是最為基礎(chǔ)的 “詞袋”模型索引方法,使用長(zhǎng)稀疏向量對(duì)文本進(jìn)行索引,LSI和LDA均是在TF-IDF基礎(chǔ)上建立的.由于TF-IDF生成的向量未做任何降維處理,最大程度地保留了語(yǔ)料庫(kù)中的詞匯信息,故本文實(shí)驗(yàn)中選擇其作為“詞袋”模型代表進(jìn)行集成.Doc2vec是新興的一種文本索引方法,該方法基于詞嵌入模型和深度學(xué)習(xí)技術(shù),以短實(shí)值向量對(duì)文本進(jìn)行索引,該方法是當(dāng)前自然語(yǔ)言處理和信息檢索領(lǐng)域最熱的文本索引方法. 分別使用TF-IDF和Doc2vec,將語(yǔ)料庫(kù)轉(zhuǎn)化為向量表示,生成的向量集分用Dtfidf和Dd2v表示.本文實(shí)驗(yàn)中,使用Python環(huán)境下Gensim②http:radimrehurek.comgensim庫(kù)對(duì)源代碼語(yǔ)料進(jìn)行索引. 3.3.3 查詢語(yǔ)句索引 查詢語(yǔ)句同樣需要分別轉(zhuǎn)化為TF-IDF和Doc2vec索引空間內(nèi)的向量表示.在TF-IDF索引空間內(nèi),查詢語(yǔ)句直接進(jìn)行轉(zhuǎn)化即可.由于Doc2vec基于多層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),可劃分為詞向量層和文本向量層.該模型首先訓(xùn)練生成詞向量,在詞向量的基礎(chǔ)上訓(xùn)練生成文本向量.2種方式將查詢語(yǔ)句轉(zhuǎn)化為向量:1)將查詢語(yǔ)句視為文本,與源代碼文本共同進(jìn)行訓(xùn)練,將生成的文本向量作為查詢向量;2)計(jì)算查詢語(yǔ)句中每個(gè)單詞的詞向量,取平均向量作為查詢向量.文獻(xiàn)[16]對(duì)2種方式生成的查詢語(yǔ)句進(jìn)行了實(shí)驗(yàn)討論,結(jié)論認(rèn)為方式2)定位性能在普遍情況下明顯優(yōu)于方式1).因此,本文實(shí)驗(yàn)中采用方式2)計(jì)算查詢向量. 定義6. Doc2vec索引空間查詢向量.用戶提交查詢語(yǔ)句為Q,Q是由m個(gè)單詞w組成的集合Q={w1,w2,…,wm}.對(duì)于任意wi∈Q,通過模型M對(duì)wi進(jìn)行訓(xùn)練,生成wi所對(duì)應(yīng)的詞向量wvi.則對(duì)于用戶所提交的查詢語(yǔ)句Q,其相應(yīng)的Doc2vec索引方式生成的查詢向量qd2v為 分別在TF-IDF和Doc2vec的索引空間中使用余弦相似度計(jì)算源代碼向量與查詢向量間的相似度,生成2個(gè)索引空間內(nèi)的相似度(距離)集合,分別用Simtfidf和Simd2v表示. 3.3.4 獲取結(jié)果 至此共計(jì)生成2種索引方法的語(yǔ)料庫(kù)向量集和相似度集合:Dtfidf,Dd2v,Simtfidf,Simd2v.劃分每個(gè)軟件系統(tǒng)中的源代碼.位于同一個(gè)類(class)中的所有方法(method)被劃分為同一個(gè)模塊類簇,模塊類簇?cái)?shù)量見表1,以此模塊類簇為依據(jù)計(jì)算代碼間的內(nèi)距與外距. 使用2.2節(jié)介紹的相似度計(jì)算方法,將TFIDF與Doc2vec索引空間內(nèi)的相似度集合進(jìn)行加權(quán)集成,生成最終的相似度集合Simint.最后,將源代碼中所有的方法(method)以Simint中對(duì)應(yīng)的相似度大小為依據(jù)進(jìn)行降序排列.從排列好的源代碼隊(duì)列頂端開始逐個(gè)檢查源代碼,記錄特征對(duì)應(yīng)的GoldSet在隊(duì)列中出現(xiàn)的首個(gè)位置,該位置即為定位結(jié)果性能ei. 分別計(jì)算數(shù)據(jù)集內(nèi)所有特征的定位結(jié)果性能ei.至此,實(shí)驗(yàn)結(jié)束,統(tǒng)計(jì)結(jié)果. 3.4.1 研究問題1討論 詞性過濾步驟是否能夠在現(xiàn)有方法基礎(chǔ)上提升特征定位性能?能夠提升多少性能? Fig. 6 Location performance with POS filtering圖6 詞性過濾前后定位性能對(duì)比 圖6記錄了應(yīng)用深度學(xué)習(xí)模型Doc2vec作為索引方法進(jìn)行詞性過濾實(shí)驗(yàn)的結(jié)果.All source code為未做去停用詞,也未進(jìn)行詞性過濾的結(jié)果,POS tagging為只進(jìn)行詞性標(biāo)注的結(jié)果,Stop word1和Stop word2分別為只使用停用詞表1和停用詞表2的結(jié)果.SW 1 & POS tagging為在停用詞表1的基礎(chǔ)上進(jìn)行詞性過濾的結(jié)果,SW 2 & POS tagging為在停用詞表2的基礎(chǔ)上進(jìn)行詞性過濾的結(jié)果.從圖6可以看出,只進(jìn)行詞性過濾或只進(jìn)行去停用詞,性能均無(wú)法達(dá)到最優(yōu).性能最優(yōu)的定位結(jié)果均出現(xiàn)于既進(jìn)行去停用詞,又進(jìn)行詞性過濾時(shí).對(duì)于實(shí)驗(yàn)中的5個(gè)數(shù)據(jù)集,詞性標(biāo)注在停用詞表1基礎(chǔ)上可獲得平均34.21%的性能提升,在停用詞表2基礎(chǔ)上可以獲得平均27.55%的定位性能提升.綜合詞性過濾在實(shí)驗(yàn)中5個(gè)數(shù)據(jù)集2個(gè)停用詞表上的表現(xiàn),可回答研究問題1:本文提出的詞性過濾步驟可有效提升信息檢索特征定位方法的性能,詞性過濾步驟在實(shí)驗(yàn)中為文本特征定位方法平均帶來(lái)了30.88%的定位性能提升.由于Eclipse具有最大規(guī)模的源代碼語(yǔ)料庫(kù),因此從圖6(e)中可以看出詞性過濾對(duì)于Eclipse軟件系統(tǒng)的定位性能提升是最為明顯的. Table 2 Location Performance and Integration Weight Distribution表2 定位性能與權(quán)值分布 Fig. 7 MRR performance with different similarity calculation method圖7 不同相似度計(jì)算方法定位結(jié)果MRR性能 3.4.2 研究問題2討論 本文提出的語(yǔ)義相似度集成算法是否能夠在現(xiàn)有方法基礎(chǔ)上提升定位性能?能夠提升多少性能? 圖7記錄了使用不同相似度計(jì)算方法定位時(shí)的MRR性能.其中,LSI為文獻(xiàn)[21]方法,LDA為文獻(xiàn)[15]方法,Doc2vec為文獻(xiàn)[16]方法.從圖7可以看出,這3種方法在不同數(shù)據(jù)集上定位性能不盡相同,但本文方法在所有數(shù)據(jù)集上均能保持定位性能最優(yōu).JabRef數(shù)據(jù)集上,本文方法比次優(yōu)的TFIDF方法定位性能提高了12.03%;jEdit數(shù)據(jù)集上,本文方法比次優(yōu)的TFIDF方法提高了7.56%;muCommander數(shù)據(jù)集上,本文方法比次優(yōu)的TFIDF方法提高了5.64%;ArgoUML數(shù)據(jù)集上,本文方法比次優(yōu)的LSI方法提高了8.36%;Eclipse數(shù)據(jù)集上,本文方法比次優(yōu)的Doc2vec方法提高了17.80%.綜上,可以回答研究問題2:本文提出的相似度集成方法可以有效提高信息檢索特征定位方法的性能.在實(shí)驗(yàn)中,相似度集成步驟為信息檢索特征定位方法平均帶來(lái)了10.28%的定位性能提升. 3.4.3 研究問題3討論 索引方法對(duì)源代碼內(nèi)聚耦合性的符合程度是否與索引方法定位性能的分布一致? 實(shí)驗(yàn)中集成的2種索引方法定位性能及其相應(yīng)的加權(quán)權(quán)值分布如表2所示.表2中所示定位性能為圖7中相應(yīng)定位方法的性能,加權(quán)權(quán)值也為圖7中本文方法計(jì)算相似度時(shí)的權(quán)值.從表2中可以看出:在JabRef,jEdit,muCommander,ArgoUML這4個(gè)軟件數(shù)據(jù)集上,TFIDF的定位性能優(yōu)于Doc2vec方法.此時(shí),通過本文方法計(jì)算出的權(quán)值(即外距與內(nèi)距比)TFIDF要高于Doc2vec;然而在Eclipse數(shù)據(jù)集上,Doc2vec方法定位性能要高于TFIDF.此時(shí),本文方法計(jì)算出的加權(quán)權(quán)值Doc2vec高于TFIDF.至此,可回答研究問題3:索引方法對(duì)源代碼內(nèi)聚耦合性的符合程度與索引方法定位性能分布是一致的.從該角度可以證明:對(duì)于本文方法中使用的數(shù)據(jù)集,源代碼的內(nèi)聚耦合程度有助于評(píng)估索引方法對(duì)源代碼刻畫的合理性. 因此,可以得出結(jié)論,本文方法的加權(quán)不是偶然獲得的結(jié)果.本文方法基于2個(gè)前提條件:1)軟件的源代碼是按照“高內(nèi)聚低耦合”進(jìn)行組織;2)源代碼向量的內(nèi)聚耦合性可用于評(píng)估出相應(yīng)索引方法的特征定位性能.表2的數(shù)據(jù)證明了在實(shí)驗(yàn)的5個(gè)數(shù)據(jù)集中,本文方法的前提是成立的,否則不會(huì)保持內(nèi)聚耦合程度與定位性能分布的一致性. 本文研究是詞性過濾與語(yǔ)義相似度集成在特征特征定位領(lǐng)域的初步探索,其實(shí)際應(yīng)用勢(shì)必會(huì)存在一些問題.本文研究還存在以下適用前提: 1) 本文實(shí)驗(yàn)是建立在面向?qū)ο笳Z(yǔ)言Java所編寫的軟件數(shù)據(jù)集上的,故本文方法對(duì)其他語(yǔ)言編寫的軟件特征定位問題適用性還有待驗(yàn)證. 2) 本文未討論參數(shù)問題,所有參數(shù)使用的均是Gensim的默認(rèn)參數(shù).這是由于參數(shù)調(diào)優(yōu)問題涉及大量的領(lǐng)域知識(shí)支撐,且較為復(fù)雜,有專門的相關(guān)研究進(jìn)行討論.限于文章篇幅,本文中只討論與軟件工程相關(guān)的問題. 3) 本文方法是建立在軟件源代碼本身是高質(zhì)量代碼基礎(chǔ)上的,即變量名的命名是規(guī)范且有語(yǔ)義的,同時(shí)源代碼以較為嚴(yán)格的“高內(nèi)聚低耦合”標(biāo)準(zhǔn)進(jìn)行結(jié)構(gòu)組織. 基于信息檢索的軟件特征定位方法,一直是軟件特征定位領(lǐng)域研究的熱點(diǎn).針對(duì)現(xiàn)有方法中的噪聲和索引模型選擇導(dǎo)致的語(yǔ)義相似度計(jì)算失準(zhǔn)問題,本文提出了一種面向軟件特征定位問題的語(yǔ)義相似度集成方法,并開發(fā)出了一整套本文方法所使用的定位工具.通過對(duì)5款開源軟件組成的基準(zhǔn)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),驗(yàn)證了本文方法的有效性. 基于信息檢索的軟件特征定位方法,本質(zhì)是將信息檢索技術(shù)應(yīng)用于源代碼,既有傳統(tǒng)信息檢索技術(shù)的通用特性,又具有因源代碼格式導(dǎo)致的特殊性.本文方法基于源代碼數(shù)據(jù)自身特性,通過語(yǔ)義相似度集成的方式計(jì)算源代碼與特征之間的相似性,提高了基于信息檢索的特征定位方法性能.通過實(shí)驗(yàn)驗(yàn)證了本文方法的有效性,但也存在一些有待探討的問題,這些問題為將來(lái)的研究指出了方向.為進(jìn)一步驗(yàn)證本文方法的有效性,也為提高本文方法的普適性,將對(duì)本文方法在更多的項(xiàng)目上進(jìn)行驗(yàn)證,并繼續(xù)研究本文方法是否能夠應(yīng)用于信息檢索或計(jì)算機(jī)其他研究領(lǐng)域.2.2 語(yǔ)義相似度集成方法
3 實(shí) 驗(yàn)
3.1 實(shí)驗(yàn)數(shù)據(jù)
3.2 評(píng)價(jià)標(biāo)準(zhǔn)
3.3 實(shí)驗(yàn)過程
3.4 實(shí)驗(yàn)結(jié)果
4 本方法適用性
5 總 結(jié)