韓俊明,王 煒,2+,李 彤,2,何 云
1.云南大學(xué) 軟件學(xué)院,昆明 6500912.云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,昆明 650091
演化軟件的特征定位方法*
韓俊明1,王煒1,2+,李彤1,2,何云1
1.云南大學(xué) 軟件學(xué)院,昆明 650091
2.云南省軟件工程重點(diǎn)實(shí)驗(yàn)室,昆明 650091
確定演化活動(dòng)潛在影響的過(guò)程稱為特征定位。特征定位已經(jīng)被公認(rèn)為影響軟件演化項(xiàng)目成敗的一個(gè)關(guān)鍵因素,如何利用程序的領(lǐng)域知識(shí)促進(jìn)特征定位的準(zhǔn)確性已經(jīng)成為當(dāng)前研究的一個(gè)重要問(wèn)題。該方法提取出軟件源代碼中的特征,并對(duì)提取后的特征進(jìn)行主題分析,然后通過(guò)輸入查詢語(yǔ)句定位出被修改的源代碼。利用現(xiàn)有的開(kāi)源軟件進(jìn)行實(shí)驗(yàn),并將實(shí)驗(yàn)結(jié)果與對(duì)應(yīng)開(kāi)源軟件的Benchmark進(jìn)行對(duì)比,結(jié)果表明所提出方法的精確度有所提高,可以進(jìn)行軟件特征的定位。實(shí)驗(yàn)結(jié)果中,平均查全率達(dá)到69.16%和100%,平均查準(zhǔn)率達(dá)到1.28%和2.43%,平均調(diào)和平均數(shù)達(dá)到2.50%和4.72%,性能較對(duì)比方法有較大的提高。
軟件演化;特征定位;主題模型;領(lǐng)域知識(shí)
特征是指軟件系統(tǒng)中被需求所定義和被使用的一個(gè)功能[1]。建立軟件特征與源代碼之間映射關(guān)系的過(guò)程稱為特征定位[2]。特征定位是順利實(shí)現(xiàn)軟件演化意圖的前提之一。對(duì)于文檔缺失的中、大型軟件采用人工的方式實(shí)現(xiàn)特征定位幾乎是不可能的。文獻(xiàn)[1]指出特征定位存在“兩難”,即“高難度”和“高開(kāi)銷”。面向大型軟件的可信演化活動(dòng)常常由于無(wú)法迅速而準(zhǔn)確地進(jìn)行特征定位,導(dǎo)致演化效率低,甚至失敗。文獻(xiàn)[3-4]指出,在長(zhǎng)生命周期軟件系統(tǒng)中,50%~75%的系統(tǒng)成本和花費(fèi)用于軟件維護(hù),其中一半以上的工作量用于特征定位。
1992年Wilde等人[5]提出的軟件勘測(cè)(software reconnaissance)技術(shù)是最早的特征定位方法之一。此后,學(xué)者們基于覆蓋執(zhí)行[6]、基于依賴關(guān)系[7]和基于模型[8]分別提出了各自的動(dòng)態(tài)特征定位方法[9]。動(dòng)態(tài)定位方法能獲得比較高的查全率,但是狀態(tài)空間大,定位精度低,同時(shí)存在大量的噪聲數(shù)據(jù)。
靜態(tài)方法是對(duì)軟件源代碼的依賴關(guān)系和結(jié)構(gòu)的靜態(tài)分析,并建立特征和代碼間的映射關(guān)系[2]。但該方法在使用過(guò)程中需要大量的人工搜索,同時(shí)具有較高的算法開(kāi)銷和人工開(kāi)銷。
動(dòng)態(tài)和靜態(tài)方法都存在一定的缺陷,因此本文提出了利用主題模型來(lái)分析軟件源代碼,并進(jìn)行特征定位的方法。
主題模型,最初研究成果是作為對(duì)自然語(yǔ)言進(jìn)行處理的工具。目前,國(guó)內(nèi)的相關(guān)研究成果主要是把主題模型用于自然語(yǔ)言處理,很少有人將主題模型與軟件源代碼進(jìn)行結(jié)合研究。文獻(xiàn)[10]將主題模型用于處理軟件源代碼,主要是進(jìn)行代碼功能的分析,通過(guò)分析結(jié)果可以幫助開(kāi)發(fā)人員理解軟件功能和代碼的實(shí)現(xiàn)。而文獻(xiàn)[11]使用LDA(latent Dirichlet allocation)模型來(lái)進(jìn)行中文軟件文檔和代碼的相關(guān)性分析,根據(jù)分析結(jié)果將軟件缺陷分配給相關(guān)人員去解決,并研究如何使用主題模型更好地提高軟件及代碼間語(yǔ)義相關(guān)性的提取效果。這些文獻(xiàn)并沒(méi)有將主題模型與軟件演化或特征定位進(jìn)行結(jié)合研究。
本文的創(chuàng)新點(diǎn)和貢獻(xiàn)如下:
(1)對(duì)軟件演化方面的研究不再局限于理論上的論證,而嘗試使用實(shí)驗(yàn)的方式進(jìn)行特征定位的研究。
(2)將處理自然語(yǔ)言的主題模型用于分析軟件源代碼,并將分析結(jié)果用于軟件特征定位的研究工作。
(3)為了驗(yàn)證本文提出的方法,使用了真實(shí)的軟件源代碼進(jìn)行實(shí)驗(yàn),并與原有的特征定位方法進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果表明本文方法具有普適性和較高的精確性。
(4)除主題模型本身的代碼外,文中所有實(shí)驗(yàn),從源代碼的特征提取、處理,到產(chǎn)生的實(shí)驗(yàn)結(jié)果,均是由程序執(zhí)行,并已經(jīng)形成一整套的特征定位工具。
本文結(jié)構(gòu)安排如下:第2章介紹軟件特征定位方法;第3章描述實(shí)驗(yàn)所采用的軟件源代碼;第4章對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析和討論;第5章對(duì)實(shí)驗(yàn)進(jìn)行總結(jié),并探討未來(lái)的研究方向。
本文研究思路大致分為3個(gè)過(guò)程,如圖1所示:主題語(yǔ)料[12]獲?。恢黝}建模;特征定位。3個(gè)過(guò)程具體步驟將在2.1~2.3節(jié)中介紹。
Fig.1 Feature location method圖1 軟件特征定位方法
2.1主題語(yǔ)料獲取
本文方法原始實(shí)驗(yàn)數(shù)據(jù)為軟件的源代碼。源代碼中包含了很多文件信息,例如圖片、XML,甚至在代碼文件內(nèi)都有符號(hào)、關(guān)鍵字等,這些信息對(duì)描述軟件功能的意義并不大,若直接采用源代碼進(jìn)行實(shí)驗(yàn)分析,就會(huì)存在大量無(wú)用的信息,實(shí)驗(yàn)結(jié)果的精確度將會(huì)受到很大的影響??紤]到源代碼中很多都是信息量不大的代碼功能語(yǔ)句、關(guān)鍵字等,就需要對(duì)源代碼進(jìn)行處理。根據(jù)文獻(xiàn)[13]中提到的內(nèi)容“……源代碼中的變量名、函數(shù)名、類(對(duì)象)名、API函數(shù)、注釋等關(guān)鍵詞中蘊(yùn)含了豐富的主題知識(shí),可以通過(guò)其識(shí)別源代碼與特征之間的映射關(guān)系。”因此本文認(rèn)為,能反映一個(gè)代碼模塊或一個(gè)類功能的是該代碼模塊或者該類中變量名、方法名和注釋,這就需要從源代碼中提取出變量名、方法名和注釋。
本文實(shí)驗(yàn)數(shù)據(jù)的處理主要有以下4個(gè)步驟:
(1)通過(guò)相關(guān)的網(wǎng)站下載同一個(gè)軟件兩個(gè)不同版本的源代碼。
(2)提取出兩個(gè)版本軟件源代碼中的特征(本文主要是提取變量名、方法名和注釋),把提取后的特征以類為形成一個(gè)單獨(dú)文件的基本單位,并以該類所在的包的名字加上其類名對(duì)該文件進(jìn)行命名。
(3)考慮到版本間的有些更新刪除了某些功能,為了提高結(jié)果的精確性,需要整合兩個(gè)版本的特征。因此在處理特征上,本文采取了將低版本中有而高版本中沒(méi)有的特征加入到高版本中。具體操作為:若低版本中有而高版本中沒(méi)有的文件,則直接把該文件拷貝到高版本中;若某個(gè)文件在低版本和高版本中均存在,則以行為基礎(chǔ),找出低版本中有而高版本中沒(méi)有的行,加入到高版本的該文件中。
(4)預(yù)處理[14],去除停詞(類似“this”、“the”等)和詞根還原(例如將“broken”還原為“break”)。這樣可以減少文件的內(nèi)容,提高了主題模型生成結(jié)果的精度。
表1為提取特征后部分文件名及其內(nèi)容的示例。
Table 1 Sample of features in source code表1 源代碼特征示例
2.2主題建模
主題模型是在自然語(yǔ)言處理和機(jī)器學(xué)習(xí)領(lǐng)域,用來(lái)從一系列文檔中提取主題的一種概率統(tǒng)計(jì)模型。從更直觀的角度來(lái)理解,就是一篇文章會(huì)有一個(gè)中心思想,從而會(huì)有一些與該中心思想相關(guān)的詞匯頻繁出現(xiàn)。主題模型就試圖使用數(shù)學(xué)領(lǐng)域的框架來(lái)體現(xiàn)這種情況,主題模型會(huì)自動(dòng)分析文檔,統(tǒng)計(jì)文檔內(nèi)的詞匯信息,根據(jù)統(tǒng)計(jì)結(jié)果來(lái)確定文檔、主題和詞三者之間的關(guān)系。本文使用主題模型對(duì)文檔的生成過(guò)程進(jìn)行模擬,再通過(guò)參數(shù)估計(jì)得到各個(gè)主題[15]。主題模型中,有一個(gè)重要的假設(shè)稱為詞袋假設(shè),其具體內(nèi)容是把文檔信息視為詞頻向量,并且不考慮詞與詞之間的順序。
LDA[16]是一種非監(jiān)督機(jī)器學(xué)習(xí)方法。在LDA中,一個(gè)文檔被看作是一系列不同主題的集合,采用忽略詞間順序的詞袋方法把文檔視為詞頻的向量,這樣就把不能建模的文字信息轉(zhuǎn)換成為可以建模的數(shù)字信息。LDA主題模型包含了3層結(jié)構(gòu),分別為文檔、主題和詞匯,并且以概率的形式給出了文檔和主題、主題和詞匯之間的關(guān)系。
主題模型技術(shù)最早是由Blei等人[16]在2003年所提出,主要應(yīng)用于自然語(yǔ)言處理或者信息檢索方面。主題模型是一種生成模型,描述了一種用以生成文檔的概率過(guò)程[17]。LDA認(rèn)為[16],文檔是一系列的主題按照一定的概率生成的,而主題又是一組詞按照一定的概率生成的,因此對(duì)于一個(gè)文檔集D中的文檔d,LDA假設(shè)了如下的生成過(guò)程[16]:
通過(guò)對(duì)從源代碼中提取的特征采用主題模型進(jìn)行建模后,可以得到主題和詞之間的概率模型。表2為生成的概率模型示例。
Table 2 Sample of probabilistic model表2 概率模型示例
如表2所示,主題Topic1包含了兩個(gè)單詞document 和model,每個(gè)單詞屬于Topic1的概率分別為0.025 和0.013。
2.3特征定位
選取一條更新報(bào)告,并對(duì)該條報(bào)告做過(guò)濾處理,利用上一步生成的概率模型,計(jì)算更新報(bào)告和每一個(gè)主題的相似度。對(duì)計(jì)算出來(lái)的相似度排序,根據(jù)排序結(jié)果,選取相似度最高的一個(gè)或多個(gè)主題所包含的主題詞,統(tǒng)計(jì)每一個(gè)特征文件中這些主題詞出現(xiàn)的次數(shù)和該文檔的總詞數(shù),使用“出現(xiàn)率”這一指標(biāo)來(lái)對(duì)所有特征文件進(jìn)行排序,通過(guò)排序結(jié)果,確定哪些文件被修改,進(jìn)而進(jìn)行特征定位。
定義1使用ONT(occurrence numbers of topicwords)表示在一個(gè)文檔內(nèi)主題詞出現(xiàn)的次數(shù),使用TWD(total words in a document)表示該文檔的總詞數(shù),則出現(xiàn)率(occurrence rate,OR)可定義如下:
數(shù)據(jù)是實(shí)驗(yàn)最重要的一個(gè)部分,因此源數(shù)據(jù)的獲取情況直接關(guān)系到最終實(shí)驗(yàn)結(jié)果的好壞。本文方法中,實(shí)驗(yàn)數(shù)據(jù)是軟件的源代碼,為了保證實(shí)驗(yàn)結(jié)果的可靠性和客觀性,同時(shí)也要提高實(shí)驗(yàn)結(jié)果的精確性,就需要獲取到完整、有效的軟件源代碼。
對(duì)于需要獲取的軟件源代碼,本文考慮以下3點(diǎn):首先,得到的軟件源代碼必須是完整、有效且合法的,獲取方法也必須是合法的。其次,該軟件需要有比較長(zhǎng)的演化歷史,并且能夠獲取到兩個(gè)甚至是多個(gè)版本的源代碼。通過(guò)對(duì)比網(wǎng)上現(xiàn)有的開(kāi)源軟件,最后決定使用ArgoUML(http://argouml-downloads.tigris.org/)0.20和0.22版本(使用的ArgoUML由Java編寫),并下載ArgoUML0.20-0.22版本Benchmark(http://www.cs.wm.edu/semeru/data/benchmarks/)用來(lái)驗(yàn)證實(shí)驗(yàn)結(jié)果。
在Benchmark中,有3個(gè)文件夾Queries、Traces和GoldSets。Queries中的內(nèi)容是軟件版本更新說(shuō)明,LongDescription是詳細(xì)描述,ShortDescription是概括性短語(yǔ)描述。Traces中為特征相關(guān)的執(zhí)行跡,文件中記錄了特征對(duì)應(yīng)的測(cè)試用例在執(zhí)行過(guò)程中搜集到的源代碼調(diào)用信息。GoldSets記錄了與特征實(shí)際相關(guān)的源代碼,也就是在演化過(guò)程中哪些類被修改了。
4.1JGibbLDA
本文方法使用的是由Java語(yǔ)言編寫的LDA主題模型建模程序JGibbLDA(http://jgibblad.sourceforge. net/)。按照J(rèn)GibbLDA輸入文件格式的要求(第一行為輸入文檔的個(gè)數(shù),其余每行代表一個(gè)文檔,行內(nèi)容為文檔中的單詞,單詞間以空格分隔)形成一個(gè)文件,如表3所示。經(jīng)過(guò)觀察發(fā)現(xiàn),很多類的特征極少,若以一個(gè)類作為一個(gè)文檔可能會(huì)導(dǎo)致輸入的文檔數(shù)目過(guò)多,因此以一個(gè)包作為一個(gè)文檔進(jìn)行整理。
在JGibbLDA程序運(yùn)行前,需要設(shè)定一些參數(shù)才能讓程序運(yùn)行,參數(shù)具體內(nèi)容如表4所示。
Table 3 File format of input表3 輸入文件格式
Table 4 Parameters in JGibbLDA表4JGibbLDA中的參數(shù)
在這些參數(shù)中,α和β屬于超參數(shù),目前暫時(shí)沒(méi)有很好的方法對(duì)這兩個(gè)參數(shù)的取值進(jìn)行確定。根據(jù)文獻(xiàn)[18]中的研究結(jié)果,α和β對(duì)應(yīng)的值可以設(shè)置為50/k(k為輸入文件內(nèi)文檔的數(shù)量)和0.1。
4.2實(shí)驗(yàn)結(jié)果文件內(nèi)容
JGibbLDA實(shí)驗(yàn)后,會(huì)出現(xiàn)5類后綴名不同的文件,其后綴名和內(nèi)容如表5所示。
Table 5 Filename extension and its content表5 文件后綴名及其內(nèi)容
4.3形成實(shí)驗(yàn)結(jié)果
利用文件model-final.twords中的數(shù)據(jù),形成最終的實(shí)驗(yàn)結(jié)果需要以下5步:
(1)從開(kāi)源軟件的Benchmark中選取一條更新報(bào)告,也做去除停詞和詞根還原的處理。
(2)假設(shè)參數(shù)ntopics和twords分別設(shè)置為N和T,生成N個(gè)T維的向量,并把這N個(gè)向量初始化為0。
(3)對(duì)這N個(gè)向量賦值,若主題m(0 (4)重復(fù)步驟(3)至這N個(gè)T維向量全部賦值完畢,然后針對(duì)第m個(gè)T維向量的值,與文件model-final. twords中第m個(gè)主題詞對(duì)應(yīng)的值,進(jìn)行計(jì)算兩個(gè)向量夾角余弦值操作,其中m=1,2,…,N。 (5)將計(jì)算出的余弦值降序排列,取前 j個(gè)主題的所有主題詞,在源代碼的特征文件中進(jìn)行詞頻統(tǒng)計(jì),并計(jì)算出現(xiàn)率。 4.4定義實(shí)驗(yàn)標(biāo)準(zhǔn) 為了驗(yàn)證本文方法的性能,需要使用某些度量標(biāo)準(zhǔn)來(lái)對(duì)結(jié)果進(jìn)行度量和對(duì)比。本文采用在信息檢索中常用的查全率(Recall)和查準(zhǔn)率(Precision)作為衡量指標(biāo),并通過(guò)這兩個(gè)指標(biāo)來(lái)對(duì)輸出結(jié)果進(jìn)行評(píng)價(jià)[9],具體定義如下。 定義2Recall表示查全率,correct代表所需查找的目標(biāo)文件,retrieved代表使用定位方法查找出來(lái)的文件,則查全率的定義為: 定義3Precision表示查準(zhǔn)率,correct代表所需查找的目標(biāo)文件,retrieved代表使用定位方法查找出來(lái)的文件,則查準(zhǔn)率的定義為: 查全率和查準(zhǔn)率之間具有互逆的關(guān)系。在極端情況下,一個(gè)將文檔集合中所有文檔返回為結(jié)果集合的系統(tǒng)有100%的查全率,但是查準(zhǔn)率卻很低(http: //baike.baidu.com/view/2126615.htm?fr=aladdin)。因此使用查全率和查準(zhǔn)率的調(diào)和平均數(shù)F來(lái)評(píng)價(jià)方法的綜合性能。 定義4使用F代表查全率和查準(zhǔn)率的調(diào)和平均數(shù),Recall代表查全率,Precision代表查準(zhǔn)率,則調(diào)和平均數(shù)定義為[9]: 4.5實(shí)驗(yàn)結(jié)果 實(shí)驗(yàn)使用了ArgoUML的0.20-0.22版本源代碼進(jìn)行特征提取和處理,一共得到1 562個(gè)類和96個(gè)包,在用JGibbLDA處理時(shí),alpha、beta、ntopics、niters、savestep和twords的值分別設(shè)置為0.528、0.1、30、1 000、100和50,選取夾角余弦值最高的5個(gè)主題的所有主題詞進(jìn)行詞頻統(tǒng)計(jì)。 表6列舉了對(duì)ArgoUML做的實(shí)驗(yàn)的查詢內(nèi)容,查詢內(nèi)容來(lái)自Benchmark中的ShortDescription。 Table 6 Query contents ofArgoUML表6ArgoUML查詢內(nèi)容 文獻(xiàn)[9]的推薦方法,取出現(xiàn)率最高的10%~15%的源代碼計(jì)算查全率和查準(zhǔn)率,并使用調(diào)和平均數(shù)來(lái)評(píng)價(jià)性能。而本文只取出現(xiàn)率最高的前5%進(jìn)行計(jì)算。 表7為實(shí)驗(yàn)結(jié)果統(tǒng)計(jì),從統(tǒng)計(jì)數(shù)據(jù)來(lái)看,10組實(shí)驗(yàn)結(jié)果,平均查全率為69.19%,平均查準(zhǔn)率為1.28%,調(diào)和平均數(shù)的平均值為2.50%。 Table7 Query results ofArgoUML表7 ArgoUML查詢結(jié)果 文獻(xiàn)[12]是基于文本的特征定位技術(shù),將其作為基線方法,在使用相同實(shí)驗(yàn)數(shù)據(jù)的前提下,與本文方法對(duì)表6中的特征數(shù)據(jù)進(jìn)行對(duì)比?;€方法的10組實(shí)驗(yàn),平均查全率為50.00%,平均查準(zhǔn)率為1.02%,調(diào)和平均數(shù)的平均值為2.00%。基線方法與本文方法的查全率、查準(zhǔn)率和調(diào)和平均數(shù)的具體數(shù)據(jù)對(duì)比分別如圖2、圖3和圖4所示。 從圖2、圖3和圖4中可以很明顯地看出,本文方法與基線方法進(jìn)行對(duì)比,10組實(shí)驗(yàn)中,3組高于基線方法,1組低于基線方法,其余6組與基線方法相同??梢杂^察到,在高于基線方法的3組實(shí)驗(yàn)(實(shí)驗(yàn)3、5、10),基線方法的查全率和查準(zhǔn)率都是0,而本文方法卻還可以查到,并且有比較理想的查全率和查準(zhǔn)率。 Fig.2 Recall comparison圖2 查全率對(duì)比 Fig.3 Precision comparison圖3 查準(zhǔn)率對(duì)比 在進(jìn)行源代碼特征提取時(shí),有一類詞在定位上起著關(guān)鍵作用,將其稱為組合詞,它是由兩個(gè)或多個(gè)普通的單詞組合起來(lái)形成的新單詞,類似于“getsourcefileinfo”。這類詞在人類的自然語(yǔ)言中是不會(huì)出現(xiàn)的,因此LDA在計(jì)算其屬于某主題概率時(shí),并不會(huì)對(duì)其做特殊的處理,以示與普通單詞進(jìn)行區(qū)分,而本文方法在提取特征時(shí)也沒(méi)有對(duì)這些組合詞進(jìn)行分詞處理。然而,組合詞在軟件的源代碼中出現(xiàn)得很普遍,因?yàn)樵诰帉懗绦驎r(shí),會(huì)用到這些詞匯表示一些重要或者復(fù)雜的信息,同時(shí)同一個(gè)組合詞在整個(gè)源代碼中出現(xiàn)的次數(shù)不會(huì)太多,所以利用組合詞可以再次提高定位的精確度。 將所選主題詞中的組合詞提取出來(lái),在所有文件中統(tǒng)計(jì)這些組合詞的出現(xiàn)次數(shù),并將出現(xiàn)次數(shù)降序排列。假設(shè)組合詞出現(xiàn)次數(shù)最少的目標(biāo)文件排第N位,出現(xiàn)率最低的目標(biāo)文件排第M位,則將前N個(gè)文件和前M個(gè)文件做交集處理,提取出它們的公共部分,這樣就能很大程度上提高定位的精確度。 表8為加入組合詞的結(jié)果統(tǒng)計(jì),從統(tǒng)計(jì)數(shù)據(jù)來(lái)看,組合詞確實(shí)極大程度提高了定位的精確度。最好的情況下,可以過(guò)濾掉222個(gè)無(wú)關(guān)文件,最差能過(guò)濾掉2個(gè)文件。 Table8 Statistical results ofArgoUML within compound words表8 考慮組合詞的ArgoUML統(tǒng)計(jì)結(jié)果 表9為在考慮組合詞后,ArgoUML實(shí)驗(yàn)結(jié)果。10組實(shí)驗(yàn)數(shù)據(jù),平均查全率為100%,平均查準(zhǔn)率為2.43%,調(diào)和平均數(shù)的平均值為4.72%,較沒(méi)有考慮組合詞時(shí)的實(shí)驗(yàn)和基線方法,都有了明顯的提升。基線方法、本文方法和考慮了組合詞的查全率、查準(zhǔn)率和調(diào)和平均數(shù)的具體數(shù)據(jù)對(duì)比分別如圖5、圖6和圖7所示。 Table 9 Experimental results ofArgoUML within compound words表9 考慮組合詞的ArgoUML實(shí)驗(yàn)結(jié)果 從圖5、圖6和圖7中可以很明顯地看出,在考慮了組合詞后,查全率、查準(zhǔn)率和調(diào)和平均數(shù)都有了比較大的提高。在只取出現(xiàn)率最高的前5%源代碼進(jìn)行計(jì)算時(shí),具體平均數(shù)據(jù)如表10所示。 Fig.5 Recall comparison within compound words圖5 考慮組合詞的查全率對(duì)比 Fig.6 Precision comparison within compound words圖6 考慮組合詞的查準(zhǔn)率對(duì)比 Fig.7 F-measure comparison within compound words圖7 考慮組合詞的調(diào)和平均數(shù)對(duì)比 Table 10 Recall,precision and F-measure comparison表10 查全率、查準(zhǔn)率和調(diào)和平均數(shù)對(duì)比 本文只取前5%的源代碼進(jìn)行比較,并利用組合詞進(jìn)一步提高了定位的精確度。通過(guò)表10可以看出,本文方法在平均查全率、平均查準(zhǔn)率和調(diào)和平均數(shù)的平均值上,均明顯高于基線方法。 軟件演化是否與演化目的相符合,或者是否確實(shí)進(jìn)行了演化,一直是軟件演化領(lǐng)域一個(gè)重要的研究方向,過(guò)去對(duì)軟件演化的研究大多都是在理論上的推演。為了能夠在軟件演化領(lǐng)域有所突破和創(chuàng)新,希望能夠利用實(shí)驗(yàn)數(shù)據(jù)來(lái)進(jìn)行軟件演化的特征定位,因此本文提出了一種基于主題模型LDA的軟件演化被修改代碼定位方法,并開(kāi)發(fā)出了一整套本文方法所使用的定位工具。通過(guò)對(duì)ArgoUML源代碼進(jìn)行分析和實(shí)驗(yàn),證明了本文方法的高效性。 由于LDA本身是用于處理人類自然語(yǔ)言的工具,將其應(yīng)用于處理軟件代碼勢(shì)必會(huì)帶來(lái)一些問(wèn)題。通過(guò)研究發(fā)現(xiàn),以下兩點(diǎn)對(duì)本文實(shí)驗(yàn)結(jié)果存在著影響: (1)將一條更新報(bào)告作為查詢語(yǔ)句進(jìn)行定位,要想獲得比較理想的實(shí)驗(yàn)結(jié)果,對(duì)該條更新報(bào)告的內(nèi)容有比較高的要求。首先,這條信息要能很客觀、直接地描述出修復(fù)了什么Bug或Defect;其次,描述所修復(fù)的最好是代碼層面上的改動(dòng),若是軟件的圖標(biāo)或其他非功能上的改動(dòng)則本方法效果不佳;再次,描述修復(fù)的Bug或Defect,需要是實(shí)驗(yàn)使用的兩個(gè)版本中在低版本發(fā)現(xiàn)而在高版本被修復(fù)的,例如某些Bug 或Defect是兩個(gè)版本間的一些測(cè)試版發(fā)現(xiàn)或修復(fù)的,則實(shí)驗(yàn)結(jié)果不會(huì)很理想。 (2)使用JGibbLDA對(duì)語(yǔ)料進(jìn)行處理時(shí),需要輸入一些參數(shù),每一個(gè)參數(shù)的設(shè)置對(duì)實(shí)驗(yàn)結(jié)果都有著極大的影響。 LDA作為一種機(jī)器學(xué)習(xí)方法,研究之初就是為了將其應(yīng)用于處理自然語(yǔ)言方面的問(wèn)題,本文方法將其應(yīng)用于軟件演化領(lǐng)域本身是一次創(chuàng)新。對(duì)本文方法進(jìn)行了實(shí)驗(yàn),結(jié)果證明嘗試是成功的,但是也存在著一些問(wèn)題,這些問(wèn)題將會(huì)成為以后的研究方向:首先,如何設(shè)置JGibbLDA的參數(shù),特別對(duì)于兩個(gè)超參數(shù)α和β,目前國(guó)內(nèi)外還沒(méi)有研究出一種帶理論依據(jù)的方法提供指導(dǎo),其值的設(shè)置都是憑借人工經(jīng)驗(yàn);其次,對(duì)原始語(yǔ)料既源代碼的處理,是否還需要使用其他方法進(jìn)行處理以提高結(jié)果的精確度;再次,需要通過(guò)一定的方法來(lái)確定一個(gè)詞是否為組合詞;同時(shí),還將對(duì)本文開(kāi)發(fā)的定位工具進(jìn)行擴(kuò)展以支持更多語(yǔ)言的源代碼,并繼續(xù)研究LDA是否還能應(yīng)用于計(jì)算機(jī)其他研究領(lǐng)域。 References: [1]Poshyvanyk D,Guéhéneuc Y G,Marcus A,et al.Feature location using probabilistic ranking of methods based on execution scenarios and information retrieval[J].IEEE Transactions on Software Engineering,2007,33(6):420-432. [2]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. [3]Li Tong.An approach to modelling software evolution processes[M].Berlin:Springer,2008. [4]Seacord R C,Plakosh D,Lewis G A.Modernizing legacy systems:software technologies,engineering processes,and business practices[M].Boston,USA:Addison-Wesley Longman Publishing Co,2003. [5]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. [6]Wong W E,Wei Tingting,Qi Yu,et al.A crosstab-based statistical method for effective fault localization[C]//Proceedings of the 2008 1st International Conference on Software Testing,Verification,and Validation,Lillehammer,Apr 9-11,2008.Piscataway,USA:IEEE,2008:42-51. [7]Baah G K,Podgurski A,Harrold M J.The probabilistic program dependence graph and its application to fault diagnosis[J].IEEE Transactions on Software Engineering,2010, 36(4):528-545. [8]Xu Baowen,Nie Changhai,Shi Liang,et al.A software failure debugging method based on combinatorial design approach for testing[J].Chinese Journal of Computers,2006, 29(1):132-138. [9]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. [10]Li Meng,Zhao Junfeng,Xie Bing.Obtaining functional topics from source code based on topic modeling and static analysis[J].Scientia Sinica:Informationis,2014,44(1):54-69. [11]Xu Yebing,Liu Chao.Research on retrieval methods for traceability between Chinese documentation and source code based on LDA[J].Computer Engineering and Applications,2013,49(5):70-76. [12]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.Piscataway,USA: IEEE,2004:214-223. [13]He Yun,Wang Wei,Li Tong,et al.Behaviour and topic oriented software feature location method[J].Journal of Frontiers of Computer Science and Technology,2014,8(12): 1452-1462. [14]Linares-Vásquez M,McMillan C,Poshyvanyk D,et al.On using machine learning to automatically classify software applications into domain categories[J].Empirical Software Engineering,2014,19(3):582-618. [15]Xu Ge,Wang Houfeng.The development of topic models in natural language processing[J].Chinese Journal of Computers,2014,34(8):1423-1436. [16]Blei D M,Ng A Y,Jordan M I.Latent Dirichlet allocation[J]. Journal of Machine Learning Research,2003,3:993-1022. [17]Steyvers M,Griffiths T.Probabilistic topic models[M]//Latent Semantic Analysis.New Jersey:Lawrence Erlbaum Associates,2007:424-440. [18]Griffiths T,Steyvers M.Finding scientific topics[J].Proceedings of the National Academy of Sciences of the United States ofAmerica,2004,101:5228-5235. 附中文參考文獻(xiàn): [8]徐寶文,聶長(zhǎng)海,史亮,等.一種基于組合測(cè)試的軟件故障調(diào)試方法[J].計(jì)算機(jī)學(xué)報(bào),2006,29(1):132-138. [9]鞠小林,姜淑娟,張艷梅,等.軟件故障定位技術(shù)進(jìn)展[J].計(jì)算機(jī)科學(xué)與探索,2012,6(6):481-494. [10]李萌,趙俊峰,謝冰.基于主題建模和靜態(tài)分析技術(shù)的軟件代碼功能性主題獲取方法[J].中國(guó)科學(xué):信息科學(xué), 2014,44(1):54-69. [11]許冶冰,劉超.基于主題的文檔與代碼間關(guān)聯(lián)關(guān)系的提取研究[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(5):70-76. [13]何云,王煒,李彤,等.面向行為主題的軟件特征定位方法[J].計(jì)算機(jī)科學(xué)與探索,2014,8(12):1452-1462. [15]徐戈,王厚峰.自然語(yǔ)言處理中主題模型的發(fā)展[J].計(jì)算機(jī)學(xué)報(bào),2014,34(8):1423-1436. HAN Junming was born in 1988.He is an M.S.candidate at Yunnan University.His research interests include software engineering,software evolution and data mining. 韓俊明(1988—),男,云南文山人,云南大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)檐浖こ?,軟件演化,?shù)據(jù)挖掘。 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會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,軟件演化,?shù)據(jù)挖掘。發(fā)表學(xué)術(shù)論文15篇,出版教材1部,主持省部級(jí)項(xiàng)目5項(xiàng)。 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年于英國(guó)De Montfort大學(xué)軟件工程專業(yè)獲得博士學(xué)位,現(xiàn)為云南大學(xué)軟件學(xué)院院長(zhǎng)、教授、博士生導(dǎo)師,CCF高級(jí)會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,信息安全。發(fā)表學(xué)術(shù)論文100余篇、專著2部、教材5部,主持國(guó)家級(jí)項(xiàng)目5項(xiàng)、省部級(jí)項(xiàng)目14項(xiàng)、其他項(xiàng)目20余項(xiàng)。 HE Yun was born in 1989.He is an M.S.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é)生會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ蹋浖莼?,?shù)據(jù)挖掘。 Feature Location Method of Evolved Software? HAN Junming1,WANG Wei1,2+,LI Tong1,2,HE Yun1 HAN Junming,WANG Wei,LI Tong,et al.Feature location method of evolved software.Journal of Frontiers of Computer Science and Technology,2016,10(9):1201-1210. Feature location is the process that confirms the potential influence in software evolution.Feature location is a recognized critical factor that decides success or failure in evolution,and how to use domain knowledge to promote accuracy in feature location becomes an important problem in current research.This method extracts the features in the software source code,and analyzes the features by topic model,then inputs update report as a query to locate which source code has been changed.This paper makes experiments with open source software,then compares experimental results with the benchmark of the open source software,correlation results indicate that this method has higher accuracy and universality,and can verify software evolution.The average of recall can achieve 69.16%and 100%,the average of precision can achieve 1.28%and 2.43%,the average of harmonic mean can achieve 2.50%and 4.72%.The experimental results show that the performance is better than that of baseline. software evolution;feature location;topic model;domain knowledge 2015-07,Accepted 2015-09. *The National Natural Science Foundation of China under Grant Nos.61462092,61262024,61379032(國(guó)家自然科學(xué)基金);the Key Project of Natural Science Foundation of Yunnan Province under Grant No.2015FA014(云南省自然科學(xué)基金重點(diǎn)項(xiàng)目);the Natural Science Foundation of Yunnan Province under Grant No.2013FB008(云南省自然科學(xué)基金). CNKI網(wǎng)絡(luò)優(yōu)先出版:2015-09-28,http://www.cnki.net/kcms/detail/11.5602.TP.20150928.1033.002.html A TP311.55 實(shí)驗(yàn)總結(jié)及未來(lái)研究方向
1.College of Software,Yunnan University,Kunming 650091,China
2.Key Laboratory for Software Engineering of Yunnan Province,Kunming 650091,China
+Corresponding author:E-mail:wangwei@ynu.edu.cn